11 December 2018

1.秒杀系统优化思路

(1)尽量将请求拦截在系统上游(越上游越好) (2)读多写少的常用多使用缓存(缓存抗读压力)

1.浏览器和APP:做限速(js点击置灰,单位时间内限制频率)

2.站点层:按照uid做限速,做页面缓存

3.服务层:按照业务做写请求队列控制流量,做数据缓存

4.数据层:闲庭信步(500QPS很轻松)

2.分布式ID生成方法

案例: 假设某公司ID生成器服务的需求如下:

(1)单机高峰并发量小于1W,预计未来5年单机高峰并发量小于10W
(2)有2个机房,预计未来5年机房数量小于4个
(3)每个机房机器数小于100台
(4)目前有5个业务线有ID生成需求,预计未来业务线数量小于10个
(5)…

方案:

(1)高位取从2016年1月1日到现在的毫秒数(假设系统ID生成器服务在这个时间之后上线),假设系统至少运行10年,那至少需要10年*365天*24小时*3600秒*1000毫秒=320*10^9,差不多预留39bit给毫秒数

(2)每秒的单机高峰并发量小于10W,即平均每毫秒的单机高峰并发量小于100,差不多预留7bit给每毫秒内序列号

(3)5年内机房数小于4个,预留2bit给机房标识

(4)每个机房小于100台机器,预留7bit给每个机房内的服务器标识

(5)业务线小于10个,预留4bit给业务线标识

3.容量预估

互联网架构设计如何进行容量评估:

1.咨询业务,产品,运营,评估总访问量。
2.计算平均访问量,总访问量除以4w(一天算4w秒)
3.根据业务曲线,评估高峰访问量。(峰值QPS是均值的2.5倍)
4.压测单机的性能,单机极限QPS。(单机1200QPS左右)
4.计算冗余度与线上冗余度差值。

4.高并发

互联网分层架构中,各层次水平扩展的实践又有所不同:

(1)反向代理层可以通过“DNS轮询”的方式来进行水平扩展;
(2)站点层可以通过nginx来进行水平扩展;
(3)服务层可以通过服务连接池来进行水平扩展;
(4)数据库可以按照数据范围,或者数据哈希的方式来进行水平扩展;

各层实施水平扩展后,能够通过增加服务器数量的方式来提升系统的性能,做到理论上的性能无限。