《亿级流量网站架构核心技术》读后笔记

这本是就职于京东的开涛写的架构方面的书籍,全书知识点很多,主要还是偏架构方面的。

本书前面拉了很多人帮忙写序,很遗憾,我直接跳过的,一般这种序都是作者帮忙写好,找名人署名的~哈哈。

1、数据闭环
这个是本书中反复强调一个词,应该也是本书出现频率最高的词了。我的理解就是,由于某一种服务依赖的第三方接口过多,任何一个第三方接口的问题,都会导致这个服务不可用,所以我们就需要对这个服务做好数据闭环。其实同程旅游在做酒店最小价实时计算的时候,也是采用了这种策略,将所有依赖的第三方服务都整合进来,虽然很麻烦,但是做到了数据闭环,至少能保证服务的提供不会出错。

2、数据异构
数据异构也是本书提到很多次,在数据库分片之后,数据异构也是必须做到的。比如我们是根据用户id作为分片,但是如果现在想查询某一个地区的用户时,我们就必须每片数据库都去扫描数据,并且做聚合。当有大量的这类需求时,我们就必须做数据异构了

3、数据同步
数据闭环和数据异构都需要数据同步,不然数据可能就会脏掉,不新鲜。书中并没有提及如何同步mysql数据和redis,以及各种各样数据库同步的细节。数据同步器其实还是很有技术含量的,正常情况下工作代码很容易编写,但是当出现异常情况,比如同步器效率低,数据追不上,或同步器挂了,或者同步器入队列出错等等。这些实现细节,作者只是在书中用了最终一致性一笔带过了。

4、异步队列
书中很多数据同步器,服务调用同步转异步等等,都使用了消息队列作为解耦和异步的介质。作者这里也是一笔带过,没有详细对消息队列的使用场景和选择进行推荐,也没有对使用时注意的细节进行描述。当需要强一致性带事务的消费者时,如何设计系统。

5、并发的原则
缓存,幂等,防重,降级,限流

6、负载均衡
一致性哈希和普通哈希算法,在不同的使用场景下使用。失败重试,但是需要保证后端服务的防重。快速失败和异步健康检查,这块同程旅游的openresty也是这么做的。其实纵观本书,京东的openresty和同程旅游使用场景几乎是相同的,功能也是如出一辙。这里大家都使用Lua做了动态upstream负载的功能。

7、应用隔离
这块没什么好谈的,kvm虚拟机级别的隔离,或者docker容器级别的隔离

8、限流算法
本书介绍了3种限流方式i,令牌桶限流、漏桶限流,并发数限流,第三种最粗暴,第一和第二种区别就是限制流入的速率和流出的速率,同时前两种都有一个桶作为缓冲区,缓冲并发请求。介绍了resty-traffic-limit模块和一些代码示例。

9、服务降级
人工降级和自动降级,当后端压力过大,降级一些不重要的服务,也是没办法的办法了。

10、超时和重试
一般超时代表后端服务无法正常做出响应,书中介绍了各种各样的超时,数据库,应用,前端超时等等,如果盲目的重试可能会导致放大请求量,合理的快速失败和设置超时时间,能够保护后端服务。

11、回滚
没什么好说的,值得一提的就是cdn的回滚,静态资源还是要带上版本号在url里,方便清除缓存和回滚

12、压测和预案
ab,jmeter等压力测试工具,往往无法将case覆盖全面,采用openresty的http请求放大,或者tcpcopy等技术,可以将真实流量放大之后进行压测,更加真实。应急预案需要不停的演练和反复的实践,这样才能在真正事故发生之后快速的处理和解决,应急预案就像是飞机的操作手册那样,出现紧急情况,需要及时的做出正确的响应。

13、缓存
缓存是系统应对高并发的主要手段,书中也多次提及缓存的重要性。多级缓存,缓存间的同步,缓存的有效时间,读写缓存的网络带宽等因素。另外http协议的客户端缓存也值得利用,可以减少不少开销。其实如何快速的对上千万甚至亿级的缓存进行快速清理才是难点。

14、连接池
连接池可以有效的避免数据库或者服务因为响应慢,导致的连接数过多的问题。不仅仅是连接的复用带来的性能提高,其实更多的是保护服务或数据库。

15、扩容和应用拆分
这块依据大家的需求,会将系统拆分成多个模块。

16、案例部分
案例部分主要介绍了从小网站设计如何演变成现在抗住亿级流量的京东架构的。符合情理,主要是描述了对前面介绍的这些技术的综合运用。
得出的经验,提及比较多的是,尽量提升本地本机器的缓存命中率,这样可以有效的减少网络开销。

17、利用openresty的场景
其中有几点还是值得我们学习的
1、不是无脑的将所有请求头,cookie等信息都反向代理到后端服务器,可以减少机房内的流量带宽
2、主动清除不在白名单的主域名下的cookie内容,防止滥用cookie
3、模版和数据单独缓存,很多情况下都是模版样式变更,而数据并没有变化,这样的好处就是不必为了一个字体颜色,将所有缓存全部过期。
4、优化比较了各种kv存储db的优劣和技术选型建议
5、尽量将逻辑下发到服务端,因为前端js存储在cdn,对于刷新可能存在问题

这些就是《亿级流量网站架构核心技术》的读后笔记,总体来说,本书讲的面很大,很全,是一本了解大型网站架构的好书