目录
系统复杂度的来源(高性能、高可用)
高性能
软件系统中高性能带来的复杂度主要体现在两方面,一方面是单台计算机内部为了高性能带来的复杂度;另一方面是多台计算机集群为了高性能带来的复杂度。
单机复杂度
操作系统:
批处理(指令清单并进行处理)--》进程(独立的内存空间,CPU 时间分片,多进程间通信)
--》线程(进程内部的子任务,共享同一份进程数据。为了保证数据正确性,又发明了互斥锁机制)
--》多个 CPU 能够同时执行计算任务。
操作系统发展到现在,如果我们要完成一个高性能的软件系统,需要考虑如多进程、多线程、进程间通信、多线程并发等技术点,而且这些技术并不是最新的就是最好的,也不是非此即彼的选择。在做架构设计的时候,需要花费很大的精力来结合业务进行分析、判断、选择、组合,这个过程同样很复杂。举一个最简单的例子:Nginx 可以用多进程也可以用多线程,JBoss 采用的是多线程;Redis 采用的是单进程,Memcache 采用的是多线程,这些系统都实现了高性能,但内部实现差异却很大。
集群的复杂度
复杂的业务,单机的性能无论如何是无法支撑的,必须采用机器集群的方式来达到高性能。例如,支付宝和微信这种规模的业务系统,后台系统的机器数量都是万台级别的。通过大量机器来提升性能,并不仅仅是增加机器这么简单,让多台机器配合起来达到高性能的目的,是一个复杂的任务。
1. 任务分配
每台机器都可以处理完整的业务任务,不同的任务分配到不同的机器上执行。
当业务服务器增加数量较少时,除了需要增加业务服务器,还需要增加一个任务分配器,这个分配器可能是硬件网络设备&#x