如果发现书中错误,麻烦在公众号留言,感谢支持。对造成的阅读不便深感抱歉~
如果您买到的是第四次印刷版本,勘误已经修订。
新书购买地址
补充内容
spring-retry重试与熔断详解—《亿级流量》内容补充
勘误列表
序4
无论是第一年人事软件开发的工程师,还是工作多年的资深人士,均可从本书中受益。
改为
无论是第一年从事软件开发的工程师,还是工作多年的资深人士,均可从本书中受益。
序8 XIII
多极缓存
改为
多级缓存
前言 XV
阅读本书需要对Java 、OpenResty(Nginx+Lua)、Redis、MysQl 等技术有一定了解,
改为
阅读本书需要对Java 、OpenResty(Nginx+Lua)、Redis、MySQL等技术有一定了解,
P9页 P344页
假设一个读服务需要如下数据。
目标数据 | 数据A | 数据B | 数据C | 数据D | 数据E |
获取时间 | 10ms | 15ms | 10ms | 20ms | 5ms |
如果串行获取,那么需要60ms。
而如果数据C 依赖数据A 和数据B 、数据D 谁也不依赖、数据E 依赖数据C ,那么我们可以这样来获取数据。
如果并发化获取,则需要30ms,能提升一倍的性能。
假设数据C 还依赖数据F(5ms ),而数据F 是在数据C 服务中获取的,此时,就可以考虑在取A/B/D服务数据时,并发预取数据 F,那么整体性能就变为25ms。
P15页
压测方案(线上、线上等)
改为
压测方案(线上、线下等)
P32页
首先,upstream 服务启动,我们通过管理后台向Consule注册服务。
改为
首先,upstream 服务启动,我们通过管理后台向Consul注册服务。
P44页 P58页
改为
P76页
Stringlimit = "3"; //限流大小
改为
String limit = "3"; //限流大小
P195页
则会构建一个包含ByteArrayEntity 的BasicHttpResonse对象
改为
则会构建一个包含ByteArrayEntity 的BasicHttpResponse对象
P40页
proxy_timeout 配置与客户端或上游服务器连接的两次成功读/写操作的超时时间
改为
proxy_timeout 配置与客户端或上游服务器连接两次读/写操作的超时时间
P119页
client_body_timeout time :设置读取客户端内容体超时时间,默认为60s,此超
时时间指的是两次成功读操作间隔时间,
改为
client_body_timeout time :设置读取客户端内容体超时时间,默认为60s,此超
时时间指的是连续两次读操作间隔时间,
P120页
send_timeout time :设置发送响应到客户端的超时时间,默认为60s,此超时时
间指的也是两次成功写操作间隔时间,而不是发送整个响应的超时时间。
改为
send_timeout time :设置发送响应到客户端的超时时间,默认为60s,此超时时
间指的也是连续两次写操作间隔时间,而不是发送整个响应的超时时间。
P124页
proxy_read_timeout time :设置从后端/上游服务器读取响应的超时时间,默认
为60s,此超时时间指的是两次成功读操作间隔时间,而不是读取整个响应体
改为
proxy_read_timeout time :设置从后端/上游服务器读取响应的超时时间,默认
为60s,此超时时间指的是连续两次读操作间隔时间,而不是读取整个响应体
P125页
proxy_send_timeout time :设置往后端/上游服务器发送请求的超时时间,默认
为60s,此超时时间指的是两次成功写操作间隔时间,而不是发送整个请求的
改为
proxy_send_timeout time :设置往后端/上游服务器发送请求的超时时间,默认
为60s,此超时时间指的是连续两次写操作间隔时间,而不是发送整个请求的
P361页
因此,在生成环境中会通过把CPU绑定给Nginx
改为
因此,在生产环境中会通过把CPU绑定给Nginx
P84页
桶计算时间窗口(1.5 秒)= 速率(2r/s)/ 桶容量(3)
改为
桶计算时间窗口(1.5 秒)= 桶容量(3)/ 速率(2r/s)
P87页
桶计算时间窗口(1.5 秒)= 速率(2r/s)/ 桶容量(3)
改为
桶计算时间窗口(1.5 秒)= 桶容量(3)/ 速率(2r/s)
P11页
开关前置化:如架构是Nginx→Tomcat,可以将开关前置到Nginx 接入层,在
Nginx 层做开关,请求流量回源后端应用或者只是一小部分流量回源。
改为
开关前置化:如架构是Nginx→Tomcat,可以将开关前置到Nginx 接入层,在
Nginx 层做开关,请求流量不回源后端Tomcat应用或者只是一小部分流量回源。
P137页
在实际开发中,不要轻视超时时间,很多重大事故都是因为超时时间不合理导致的,
设置超时时间一定是只有好处没有坏处的,请立即Review你的代码吧。
改为
在实际开发中,不要轻视超时时间,很多重大事故都是因为超时时间不合理导致的,
设置超时时间一定是只有好处没有坏处的,请立即Review你的代码吧。
spring-retry项目实现了重试和熔断功能,目前已用于SpringBatch、Spring Integration等项目。请扫描如下二维码前往学习。
spring-retry实现重试和熔断
P91页
throttleFirst/throttleLast 是基于决定时间做的处理,
改为
throttleFirst/throttleLast 是基于绝对时间做的处理,
P235页
也就是,说假设我们有500个连接池,每个连接执行1个Statement,最坏的情况
下会创建:
1+500×1=501个线程。
假设一个应用中有三个MySQL库,那么最坏情况下有:
改为
也就是,说假设我们有500个连接池,每个连接执行1个Statement,最坏的情况
下会创建:
1+500×1=501个线程。
假设一个应用中有三个Oracle库,那么最坏情况下有:
P26页
不过,proxy_passhttp://c0.3.cn是支持动态域名解析的。
改为
不过,set $backend "http://c0.3.cn";proxy_pass $backend; 是支持动态域名解析的。并要配置nginx resolver指令。注意:nginx proxy_pass对变量是动态解析的,nginx 1.1.9版本之前对resolver DNS解析结果总是缓存5分钟。
P123页
一种简单的办法是使用如下方式,每次都会动态解析域名,这种情况在多域名情况下比较麻烦,实现不优雅。
location /test {
proxy_pass http://c0.3.cn;
}
改为
一种简单的办法是使用proxy_pass+变量方式实现动态解析域名,这种情况在多域名情况下比较麻烦,实现不优雅。
location /test {
set $backend "http://c0.3.cn";
proxy_pass $backend;
}
P123页
可以考虑proxy_pass(http://p.3.local/prices/mgets$is_args$args),然后配合resolver来实现。
改为
可以考虑proxy_pass变量配合resolver实现域名动态解析:set$backend "http://c0.3.cn"; proxy_pass $backend;。
P18页
因此,外网DNS 应该用来实现用GSLB(全局负载均衡)进行流量调度
改为
外网DNS 应实现GSLB(全局负载均衡)进行流量调度
友情链接