架构系列-高性能架构

一、数据库集群:读写分离

二、数据库集群:分库分表


三、NoSQL = not only sql


四、缓存

1、用户请求发现缓存不存在则自行查库并生成缓存。并发下可能会同时很多请求同时生成,造成雪崩。

2、用户请求发现缓存不存在,通过队列后台生产缓存,并发下,消费者应判断缓存是否已存在,不存在时在生成。

3、热点数据后台脚本生成,在内存紧张时新生成一个就会淘汰一个,脚本应不断检测若缓存不存在则重新生成。

4、全网热点数据,如明星官宣,这时应生成多份缓存,以集群来分散单机压力。

五、单机高性能:PPC和TPC

1、PPC:每来一个链接就创建一个进程。优化版是启动时预创建多进程。

2、TPC:同PPC,进程换线程。

六、单机高性能:Reactor和Proactor

1、Reactor:就是IO多路复用,也叫Dispatcher,同步非阻塞模型。如epoll、kqueue等。单reactor单进程有redis,多reactor单进程没任何优势,多reactor多进程有nginx和memcache。通俗讲:来了事件操作系统通知应用程序,应用程序来处理。

2、Proactor:异步非阻塞。Reactor需要用户进程同步做read write等IO操作,如果改为异步可以提高性能,这就是Proactor。通俗讲:来了事件操作系统来处理,处理完通知应用程序。虽然性能更好,但是Linux下的AIO并不完善,真正实现了异步非阻塞的操作系统是windows的IOCP。

3、IO操作分两个阶段

1、等待数据准备好(读到内核缓存)

2、将数据从内核读到用户空间(进程空间)

一般来说1花费的时间远远大于2。

1上阻塞2上也阻塞的是同步阻塞IO

1上非阻塞2阻塞的是同步非阻塞IO,这就是Reactor就是这种模型

1上非阻塞2上非阻塞是异步非阻塞IO,这讲说的Proactor模型就是这种模型

七、复杂均衡的分类和架构

1、最上层DNS:针对地域。就近访问。缺点更新缓存慢,不可定制化。

2、硬件层F5:性能最好,价格昂贵,便宜的也要一台马六。qps两百万到八百万。

3、软件层LVS:性能始终,qps八十万。在三层网络

4、软件层nginx:性能最差,qps五万左右。

八、负载均衡的算法

1、轮询:简单,但由于简单,也是缺点。宕机也无法知道。

2、加权轮训:根据机器性能等权重不同,其他缺点同轮询。

3、最小负载:LVS四层可以根据最小连接数,Nginx七层可以根据最少HTTP请求数(默认不支持)。 自研的话可以根据CPU IO等来判断,但是复杂度太高,是1、5、15分钟的负载?太短波动太频繁,太长峰值来临时感知太晚。

4、性能最优:同最小负载,都是要感知服务器状态,复杂都高。如果收集量太大影响性能,如果采样,又需要合理的采样率,否则不准确。

5、Hash:根据id hash、根据ip hash。如银行业务,请求都要落在同一台机器上。

未经允许不得转载:任鹏个人博客 » 架构系列-高性能架构

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏