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

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

三、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。如银行业务,请求都要落在同一台机器上。


标签: 架构

已有 3 条评论

  1. lane

    好文章

  2. 广州增城职业技术学校

    网站内容还是挺不错的,谢谢博主。还有博客应该是WORDPRESS做的吧,感觉美观度还可以提高,谢谢。我自已是搞前端设计的,你的代码可以做精简一点。

    1. lane

      不是WORDPRESS的,自己写的。

添加新评论