常见服务器架构


//
常见服务器架构 - 啊哈的日志 - 网易博客
http://4729469.blog.163.com/blog/static/38971212201311722616119/

这里的服务器指 client/server 编程中的 server。服务器常用架构包括四种:

  • 多线程
  • 多进程
  • 基于 I/O 复用的事件循环架构
  • SEDA 模式

前两种架构适用于类 web 服务器。这样的服务器只需处理来自客户端的请求,且请求间几乎是相互独立的。后两种架构适用于构造复杂的服务器,比如 Cassandra 系统中的一个节点,再比如 Redis 服务器。

多线程服务器对每个客户端来的请求生成一个新的线程来服务它。多进程服务器则生成一个新的进程。一个经常用的优化措施是使用线程池(或进程池)。

基于 I/O 复用的事件循环就是利用操作系统的 I/O 复用函数,比如 select, epoll, 采用一个主线程来监听所有的事件(网络 I/O 事件、timer 事件等),并在这个线程中调用相应的回调函数。

基于 I/O 复用的事件循环的好处之一是所有事件都在一个线程中处理,就不用考虑非常复杂的并发问题,大大简化了程序。

因为要在主线程中处理所有的事件,所以要求每个事件的处理时间必须要短。如果有些操作非常耗时,那么就要启动工作线程来处理耗时的操作,工作完成后通知主线程。一般通过管道来解决这个通信问题。(MooseFS 中的 chunkserver 就是这样做的)

SEDA 这种模式就是把对一个请求的完成过程划分为多个 stage。每一个 stage 对应一个线程池。在前面的一个 stage 完成之后就把请求扔到下一个 stage。可以把它想成一个流水作业。

SEDA 这种架构使得每个 stage 可以单独的控制和调优,这是它的一个优点。 它的缺点在于跨 stage 的控制比较难。 比如如果前一个 stage 的处理时间非常短,后一个 stage 是一个磁盘 I/O stage, 处理时间很长,那么请求就会在后一个 stage 堆积起来;划分成多个 stage 多,全局的过载控制就比较难。 Cassandra 系统中就有这个问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,459评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,319评论 19 139
  • 记忆中的妈妈 从来没有年轻过 永远都是齐耳的短发 永远都是粗糙的脸庞 她从来不进理发店 脸上从没抹过化妆品 记忆中...
    枣园草阅读 609评论 13 12
  • 人性是善的呢?是恶的呢?自古以来难有定论。 苟子主张:人性本恶,生来就自私和执着,带着贪、瞋、痴而来人间为恶,怎么...
    墨阳践行阅读 1,942评论 1 2
  • 我曾遇见你, 在沉默的世界。 我曾爱过你, 用六年的青春。 我曾有个家, 却不得不流浪。 我曾流泪却坚强, 我曾受...
    了了之不阅读 477评论 0 5

友情链接更多精彩内容