复杂度的六个来源之一:高性能
运算性能迅猛发展、软件复杂度发展、硬件存储发展。
用来代替旧技术的新技术才会给软件系统带来复杂度,而用来淘汰旧技术的新技术则不用担心。
1.单台计算机
手工操作->批处理->进程->分时多进程->进程通信->线程(共享进程数据)->互斥锁机制
进程:操作系统分配资源的最小单位
线程:操作系统调度的最小单位
SMP多核处理器方案
很多开源软件也不一定要用到多进程,例如:Redis
2.多台计算机集群
2016年双十一支付宝每秒峰值12万笔支付。
2017年春节微信红包手法红包每秒达到76万个。
以上规模的业务系统,背后的机器数量都是万台级别的。
想提升性能不仅仅是增加机器,需要配合达到高性能是一个复杂的任务。
① 任务分配
a.需要增加任务分配器:硬件设备F5、软件网络设备LVS、负载均衡软件Nginx,根据性能、成本、可维护性等方面选择。
b.连接和交互并进行管理:连接建立、检测、中断后恢复方案等。
c.分配算法:轮询、加权、负载等。
单台任务分配器本身遇到瓶颈也要进行扩展,如图:
d.需要讲用户分配到不同的分配器上:DNS轮询、智能DNS、CDN、GSLB设备等。
e.任务分配器与业务服务器之间变为多对多关系。
上面的业务可以是一个完整的业务,也可以是一个具体的任务,如:Memcache自己的集群算法。
② 任务分解
【实例分析】
往往业务的复杂对单机压力很大,无法通过扩展机器的方式得到成倍的性能提升,此时需要将任务分解,如微信:
a.简单的系统容易性能高
b.分配后的系统方便对单个业务进行扩展
那将微信的7个子系统再进行扩展更多可以么?
c.分的太细会使得层次调用次数成指数上升,反而导致业务性能下降。
机器之间的通讯时间会明显增长,耗时耗力。
热门工具 换一换