SRS dev guide series No.1

来源:高性能、高并发、高扩展性和可读性的网络服务器架构

SRS 作为一个网络服务器,基于StateTreads开发是它能有高性能表现的原因之一。

定义

IA/性能/可扩展性

文章先定义了IA,即 Internet Application,一个网络客户端或者服务器程序。典型的失误步骤是:接收连接、读取请求、做一些处理工作、将结果写入 peer。其性能一般由吞吐量来评估,即每秒事务数或者每秒字节数,两者在事务的平均大小已知情况下可以互相转换。可扩展性也是很重要的一个点,一般指例如并发增加时,系统能否承担负载,系统能力指 CPU 等资源增多时能否高效的利用多 CPU 达到更强的负载能力。

并发

并发分为虚拟并发和物理并发。
IA一般提供虚拟并发来支持并发访问,但是 IA的内核调度实体应该基本上与物理并发保持一个数量级,一般指进程数同 CPU 数一致。

架构

IA目前有一些常见的架构,包括基于进程,基于线程,基于事件驱动的架构。

基于进程 Multi-Process

这种架构中是指,一个独立进程来服务一个连接。由于进程地址空间独立,连接不会相互干扰无同步的必要。但是进程在操作系统中较重,创建和维持高数量的进程将大幅度降低系统总体性能,一般连接并发达 1k 时就很困难了。这种架构负载能力较弱,无法支持高负载。

基于线程 Multi-Threaded

这种架构一个线程服务一个连接,相交 MP 架构,性能有一定的提升,由于 IA 一般为网络 io 驱动,很多并发都会阻塞,架构退化为 MP 架构,降低了负载能力。由于线程共享了地址空间,需要使用各种同步锁,这也会影响系统性能。在这个架构下也演进了一些不同的 MT 架构,例如线程池等,但是线程编程,锁,条件竞争等问题导致 MT 架构的性能提升困难重重。

continue…