后台开发杂记

工作近一年,觉得应该记录一些东西来帮助自己提高了。

这一年基本上是业务需求的开发,涉及无非c++服务器、go服务器、python脚本还有mq、mongo和redis的使用。代码方面没有什么特别值得说的地方。所以暂时先拿一些小问题开刀。(补充一句,c++11标准的引入从理论上提高了程序的性能,但是为这门静态语言引入了更多的细节,使得程序员苦不堪言。)



问题1 如何让服务尽可能地分散?


这个问题其实很大,但是为了简单的表达这个问题,我先这么写。

下面是一段很传统的代码:

void GameStart(){
  Init();
  Provoke();
  ReadyAndGo();
  Fight();
  WaitForEnd();
  End();
}

如果所有的服务都在同一台服务器的同一线程中完成,这么写是没有问题的。

可是这将导致线程在每个环节都有等待甚至锁死的风险,而且一旦线程死掉,服务将难以恢复。

所以现在重新来描述这个问题:

  如何让众多前后相关联的操作去状态化,使之能够分散到多台服务器上,并可靠的处理?

这个问题基本的基本解决思路就是利用消息队列异步操作

例如将上面的程序改成下面的形式:

GameStart(){
  Init();
  PushEvent1();
}

onEvent1(){
  Provoke();
  PushEvent2();
}

onEvent2 ...


当然,这只是一个基本的现象,只是简单的这么想还不足以应对企业面临的问题。可以预见的一些问题如下:

  • 随着需求复杂化,功能的更新和维护越来越复杂;
  • 企业的产品需要更加迅捷的开发、维护;
  • 接口应用场景由单一变为多样,且越来越多的接口被公开,开发团队难以维护;
  • 服务云端化;

正巧有同事分享了应对这些问题的一种思路——微服务,我也在网上搜索了一些文章,在这里谈谈我的理解。

什么是微服务:

微服务是将系统上特定的逻辑从复杂系统中独立,形成可独立替换和升级的单元,并在系统中以相对统一的形式注册,可以自动化部署并提供服务的小型应用。


微服务带来的重要变化:

  • 去中心化,服务不再依赖单一的节点、单一平台、单一的存储,所有功能其所需的环境可以按需配置;
  • 系统解耦程度提升,所有的部件可以单独变更,问题可以更加精准的定位;
  • 服务高可用,系统能够监控并对故障进行自动化的处理。与之相对的,有额外的开发成本;
  • 更加扁平化的系统化和更加明确的开发团队职责。
  • (猿老们点猿多多益善,程序猿的流动性越来越高)

在本人看来,http接口是微服务思想最好的实践之一。

参考文章

解析微服务架构(一):什么是微服务


如何赚得7W月薪,安家北京(无意中进入视野的广告,译者竟然和下面那个文章的作者是一个人,看来此人是很社会了)


因为上面文章中提到了RESTful风格,所以下面顺着这个坑往下跳。


在讨论RESTful前,先谈谈我在后台开发认知的转变过程:

在刚刚接触c++的时候,我有这样的感觉:

c++是一种很牛X的语言,因为类化的对象,很多繁琐的事务都可以通过继承和多态来完成。他很好的解决了封装的问题。

但是随着实践,我发现了这样的弊病:

c++是一门静态语言,他的继承和派生对于小型开发团队很好用,但是限于它是直接对机器语言进行汇编的,很难避免闭门造车的问题。除非你的团队技术足以支撑一套完备的异构通信系统,并且有足够量的开发者接受了这个系统。

教材里面经典的解决方案是使用动态链接库,从而完成模块化开发。但是在互联网时代看来,那就是单机年代的遗物,没有后续发展的空间。相比之下,linux把所有io视为文件的做法是一种理想的开发规范。这时我已经朦胧有了类似于REST的想法。

后来我学习了几种脚本语言,他们给我的感觉是为了完成目标存在,从此我不再关心良好的对象设计能节约多少空间,也不再需要处理大量繁琐的细节,开发效率一刀999级。

可是这样糟糕的效率造成了服务必须是基于集群的,服务通信越来越复杂的问题。这时我又通过学习spark,了解到了一个庞大的云计算系统,并用python实现了一个简单的云平台应用。但这些是专用的,对于其他开发者并没可用性。

就在这探索的过程中,我重新发现了http。因为spark中很多的资源可以通过http接口访问。

那么问题来了,为什么我从c++的学习变成了要谈osi中会话\表示层的协议?

这一切的原因只有一个——量大。

系统的变大一开始只是代码量,随之而来的有开发人员的增加和运行环境的扩大。为了完成系统功能的高可用,需要在不同实现之间建立易于使用的通信规范。换句话说,就是开发者需要简单的使用别的开发者的成果。

以上的经历,将我带向了接下来的主角RESTful架构。


理解RESTful架构作者: 阮一峰

下面将结合原文的内容,进行简单介绍。

越来越多的人在考虑如何开发在互联网环境中使用的软件。

RESTful架构,就是目前最流行的一种互联网软件架构。Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer。

博主提到Fielding作为HTTP协议的主要作者、Apache服务器软件的主要作者之一,发表过一片论文,旨在设计一种以网络为基础的,功能强、性能好、社会(社会社会的那个社会)的框架。

这个框架(RESTful架构)具有下面的特点:

  (1)每一个URI代表一种资源;

  (2)客户端和服务器之间,传递这种资源的某种表现层;

  (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

当然,这些都是2000年的观点,在当时自然是具有相当代表性的。在今天看就好比在vpn技术成熟以后再去看ipv4的安全性,根本就没有什么可比性,所以我想也没人会说他想的太简单了。

按百度百科来说,当 REST 架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST 简化了客户端和服务器的实现。

然而这些并没有毛用,因为任何一家有规模的公司都会有类似的规范,我们只要遵守就好了  (╯‵□′)╯︵┻━┻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值