后端基础——通用组件

1、Nginx如何实现高性能和可扩展性

NGINX的整体架构的特点是由一组进程协同工作:

  • 主进程:负责执行特权操作,如阅读配置文件、绑定套接字、创建/通知协调(Signalling)子进程。
  • 工作进程:负责接收和处理连接请求,读取和写入磁盘,并与上游服务器通信。当NGINX处于活跃状态时,只有工作进程是忙碌的。
  • 缓存加载器进程:负责将磁盘高速缓存加载到内存中。这个进程在启动时运行后随即退出。
  • 缓存管理器进程:负责整理磁盘缓存的数据保证其不越界。这个进程会间歇性运行。

NGINX能够实现高性能和可扩展性的关键取决于两个基本的设计选型:

  • 尽可能限制工作进程的数量,从而减少上下文切换带来的开销。默认和推荐配置是让每个CPU内核对应一个工作进程,从而高效利用硬件资源。
  • 工作进程采用单线程,并以非阻塞的方式处理多个并发连接。
  • NGINX的每个工作进程通过状态机处理多个连接请求,这个状态机被实现为非阻塞的工作方式:

每个工作进程需要处理若干套接字,包括监听套接字或者连接套接字。

  • 监听套接字收到新的请求时,会打开一个新的连接套接字来处理与客户端的通信。
  • 当一个事件到达连接套接字时,工作进程迅速完成响应,并转而处理其他任何套接字新收到的事件。
  • Garrett说,NGINX选择这样的设计,使它从根本上区别于其他Web服务器。通常的Web服务器会选用将每个连接分配给独立线程的模式,这使得多个连接的处理非常容易,因为每个连接可以被认为是包含多个步骤的一个线性序列,但这样会产生上下文切换的开销。事实上,工作线程大部分的时间处于阻塞的状态,在等待客户端或其它上游服务器。当试图执行I/O等操作的并发连接数/线程数的规模超过一定阈值,或是内存消耗殆尽的时候,上下文切换的成本就显现出来了。

从另一方面讲,NGINX的设计是不让工作进程阻止网络流量,除非没有任何工作要做。此外,每一个新的连接只消耗很少的资源,仅包括一个文件描述符和少量的工作进程内存。

总的来说,NGINX的这种工作模式在系统调优后,它的每个工作进程都能够处理成百上千的HTTP并发连接。

参考文献
1 - 监听套接字与已连接套接字

2、MySQL

MySQL索引背后的数据结构及算法原理

mysql binlog日志的三种模式

3、Redis

memcached-vs-redis

4、elasticsearch

ES权威指南

5、RPC

RPC框架的目标就是让远程过程(服务)调用更加简单、透明,RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/JSON/二进制)和通信细节。

  • 服务接口定义、数据结构或者中间态的服务定义文件
  • 远程代理对象:JDK动态代理的拦截机制,将本地调用封装成远程服务调用
  • 通信:
  • 序列化:

实现:

  • 服务提供者:运行在服务端,负责提供服务接口定义和服务实现类
  • 服务发布者:运行在RPC服务端,负责将本地服务发布成远程服务,供其他消费者调用
  • 本地服务代理:运行在RPC客户端,通过代理调用远程服务提供者,然后将结果进行封装返回给本地消费者

组件:Thrift

服务化之后,随之而来的就是服务治理问题。目前业界开源纯粹的RPC框架服务治理能力都不健全。需要服务框架+服务治理,解决方案有Zookeeper。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,286评论 19 139
  • 什么是Nginx? Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器N...
    jiangmo阅读 2,600评论 1 9
  • 为什么要学语文?对你的职场,有什么好处?对通识教育的理解。 1、语文实际上是培养的一个人理解能力和表达能力的。 比...
    潭客富林的家阅读 543评论 0 1
  • 最美的四月天 牡丹花 娇艳地盛开了 蜂蝶舞 芳香怡人 清风来 仪姿万千 静夜深 端庄秀雅 暖阳晒 国色天香 女王的...
    陈言著诗随云飞阅读 753评论 0 2
  • 从刚步入网赚这条路的时候,就发现这是一条暴利的路。网赚怎么说呢,是一条高难度低门槛的路,至少我是这样理解。一会给大...
    灰之大阅读 491评论 0 0