发布时间:2017-07-18 09:47:45 文章来源:互联网
微博 微信 QQ空间
  Server框架优化

  看完操作系统层级的优化,我们再来看一下另一个主要性能优化的点——server框架。
 
  信鸽对于关键的接入层server使用C++语言进行开发。好的server框架主要有两个要点,1是对底层RPC通信的良好封装,使得开发只需要关注业务逻辑代码的开发,2是高性能,框架对消息处理CPU消耗尽可能少。
 
  通过Intel® VTune™ Amplifier这个工具我们可以对server框架进行性能评测,这里列了两个框架。左边这个框架可以看到把很多CPU都浪费在消息的内存拷贝,同时对消息的处理进行了过多的封装。对于右边的框架就做得比较好,对于框架的问题就不存在了,主要是操作系统本身的消耗银 行 贷 款,还有协议栈的消耗。这部分对于有更高的要求来说原文www.yinhang123.net,还可以进行深度优化。
 
  这是我们后台选用的框架,主要实现的要点有三个,第一是池化技术、第二是协程模型、第三是无锁框架。这里的Proxy主要用于接入网络的请求,具体的业务逻辑代码是放在Work进程里面处理。整个框架做了一个通用的抽象,将一次数据请求主要分为数据接收、数据路由、最后是具体的数据处理。数据接入进程和具体数据处理进程,通过无锁的共享内存来通信,这样就避免了很多不必要内存拷贝和消息编解码操作。
 
  对于处理业务逻辑的工作进程,比较常见的有三种模型。
 
  第一种是进程同步模型,数据进来以后,由独立的线程进行处理,优点是代码实现比较直观www.yinhang123.net,缺点是处理海量并发用户请求的时候,操作系统对多线程的切换会成为一个主要的瓶颈。
 
  第二种用得比较多的是异步事件驱动模型,由epoll进行事件的侦听,通过一些状态机来驱动业务逻辑代码的执行,优点是性能较高,缺点是当业务逻辑分支多的时候,代码非常难维护。
 
  我们这边是采用协程模型,协程和线程和类似,它跟线程不同的是,线程的切换和调度需要自己来实现,协程模型可以采用同步的思维进行代码开发,又具有异步模型的高性能,协程切换优化的点是,通过汇编的方式,直接把相关寄存器中的值保存在内存,来进行上下文的切换。
 
 

另一视角

换一换