本书主要讲解互联网架构的设计初衷、原理和模式。全书介绍了互联网架构的演变过程与分层、分割、分片、缓存、并行、异步、隔离、容错、安全、治理等设计模式的应用场景和作用,还介绍了前端应用层、接入层、服务层、服务治理、分布式锁、分布式ID、分布式事务、分布式消息队列、分布式缓存、数据持久化以及DevOps等技术的组成结构、运行原理和应用方案。 
本书使用的是Java语言相关的技术生态,适合希望掌握互联网架构的IT开发工程师和架构师阅读。通过本书,读者可以对互联网分布式架构有较全面的了解。
当前越来越多的业务使用了公有云。公有云将大型公司应对海量互联网流量的经验和措施封装成产品,降低了复杂度,使IT系统的开发专注于业务层面,但很多人也因此没有了试错的机会,知其然不知其所以然。另一方面,互联网分布式架构更加复杂,组织结构分工更细,很多开发人员或者架构师在工作中只能关注一点或者一个层次。许多技术人员都非常希望能看到更多介绍架构设计出发点、原理和机制,讲述分布式架构宏观场景的书籍。 
笔者将这几年遇到的几个互联网业务的解决思路和方案整理成PPT,一直有总结成书的想法,却被琐事所困,无法静下心来进一步归纳整理,如今终于有了机会。笔者希望能够尽可能从较高的角度,在每一个系统分层结构中讲解原理、实现方案和技术路线。 
事情看着容易,做着难,下笔成文时,着实痛苦。作为一本想要描述互联网分层架构的书,涉及面广,还有诸如系统安全、大数据、架构实例方面的内容因为时间和精力原因暂未涵盖。本书内容也难免有见识不到、疏漏之处,敬请指正。 
内容组织 
本书主要讲解互联网架构设计的初衷、原理和架构的模式。前两章简单介绍了互联网架构的目标、架构演变过程与主要设计模式,后续几章则按照系统的分层模式,从前端到后端,从开发到运维,对每一层的主要解决问题、原理、技术路线进行说明。 
第1章“概述”,主要介绍互联网架构的业务特点、目标、衡量办法、方法论和核心架构的演变过程。 
第2章“互联网架构设计模式”,归纳了互联网架构的分层、分割、分片、缓存、并行、异步、隔离、容错、安全、治理等主要设计模式,并阐述了每种模式的应用场景和作用。 
第3章“前端架构”,主要介绍前端的架构模式,包括前端开发模式的演变过程、响应式网站的设计办法、单页面架构、微前端架构、App、公众号、小程序与快应用的开发模式、BFF架构以及前端优化办法。 
第4章“接入架构”,主要介绍接入层的组成,包括DNS、CDN、反向代理、服务网关以及企业内部系统集成的架构和实现。 
第5章“服务架构”,主要描述微服务架构Spring Cloud和Dubbo以及服务网格架构Istio的组成结构和运行机制。 
第6章“服务治理”,介绍常见的服务治理组件,包括配置中心、流量控制、服务追踪等组件的构成和原理,涉及Apollo、Disconf、Spring Cloud Config、Hystrix、sentinel、Resilience4j、Zipkin等中间件。 
第7章“分布式处理”,补充介绍分布式处理中的必备组件,包括分布式锁、分布式ID、高性能有界队列Disruptor的设计目标和技术架构。 
第8章“分布式事务”,主要描述分阶段提交、补偿等分布式事务模式,介绍了分布式事务的最终一致性解决方案以及Seata和Servicecomb-Saga两种开源分布式事务中间件。 
第9章“分布式消息队列”,介绍消息队列解决的问题和应用场景,消息传递技术的应用模式,消息总线的用途和架构,同时还介绍了RocketMQ的组成和原理,以及Spring Cloud消息传递领域的三个组成部件Spring Integration、Spring Cloud Stream和Spring Cloud Bus。 
第10章“分布式缓存”,介绍缓存的分类、应用架构和应用缓存时常见的问题和解决方案,也介绍了Redis缓存中间件的原理和集群结构。 
第11章“数据持久化”,介绍互联网分布式系统的整体数据架构,Raid磁盘阵列和DAS、NAS、SAN、OSS等存储技术,Swift OSS的运行机制,关系数据库的读写分离、冷热分离、分库分表和高可用方案。 
第12章“DevOps”,主要介绍DevOps的含义、工具和生态,并讲解了包括环境、协作、开发、发布、测试、运维等DevOps基础环节涉及的工具、技术和集成方法。 
致谢 
感谢我的家人、朋友和同事们,谢谢你们的支持和建议。本书的出版尤其要感谢机械工业出版社的车忱编辑,车老师在书籍选题、章节编排以及内容校阅等方面给了我非常多的建议和帮助。
富亚军,HPE资深架构师。从事企业级软件设计和项目管理20多年,组织和设计开发了多个大型金融系统,具有处理高并发、大流量互联网业务的一线经验。
序 
前言 
第1章 概述1 
11 互联网业务特点1 
12 互联网架构思维2 
13 互联网架构目标与度量2 
14 互联网架构方法论4 
141 CAP模型4 
142 AKF Scale Cube扩展立方体8 
15 互联网核心架构的演变9 
151 Monolith单体架构10 
152 Microservice微服务架构11 
153 Microservice与SOA14 
154 Servicemesh服务网格架构16 
155 Cloud Native云原生架构19 
第2章 互联网架构设计模式23 
21 架构设计的切入点23 
22 互联网架构的典型模式23 
221 分层23 
222 分割25 
223 分片26 
224 缓存27 
225 并行27 
226 异步28 
227 隔离29 
228 容错32 
229 安全33 
2210 治理33 
第3章 前端架构35 
31 前端应用35 
32 前端开发模式35 
321 抽象DOM模式35 
322 MVC模式36 
323 MVP模式36 
324 MVVM模式37 
325 Virtual DOM38 
326 组件化编程39 
33 响应式网站设计40 
331 服务端响应与客户端响应41 
332 响应式JS41 
333 响应式CSS41 
334 响应式图片41 
335 响应式布局41 
34 单页面架构43 
341 单页面应用的定义43 
342 SPA的优缺点43 
343 服务端渲染44 
344 初始页面优化44 
345 地址堆栈管理45 
35 微前端架构45 
351 微前端的定义45 
352 微前端的作用45 
353 技术发展路线45 
354 微前端的特点46 
355 微前端的技术架构46 
36 移动App开发47 
361 Native App47 
362 Hybrid App47 
37 公众号、小程序与快应用的开发49 
371 公众号开发49 
372 小程序开发49 
373 快应用开发50 
374 多端开发框架50 
38 服务于前端的后端架构BFF51 
381 BFF的用途51 
382 前后端同构51 
383 BFF与Gateway52 
39 前端优化52 
391 前端性能优化52 
392 搜索引擎优化55 
393 网站运营优化55 
第4章 接入架构57 
41 整体接入架构57 
42 DNS解析与负载均衡57 
421 DNS域名解析57 
422 DNS负载均衡58 
43 CDN内容分发网络59 
431 CDN的作用59 
432 CDN的组成结构60 
433 内容加速原理60 
434 CDN的功能架构61 
44 反向代理62 
441 正向代理与反向代理62 
442 负载均衡63 
443 Nginx应用架构70 
45 服务网关75 
451 服务网关与微服务75 
452 服务网关的功能架构76 
453 服务网关的技术架构80 
454 开源服务网关80 
46 内部系统集成89 
第5章 服务架构91 
51 服务端架构生态91 
52 Spring Cloud91 
521 Spring Cloud总体架构91 
522 Spring Cloud核心构成与原理92 
53 阿里的微服务中间件Dubbo96 
531 Dubbo整体架构96 
532 Dubbo关联的中间件和技术98 
533 Dubbo RPC调用过程104 
534 Dubbo面临的挑战110 
54 服务网格中间件Istio111 
541 Istio总体架构111 
542 Istio Envoy114 
543 Istio Pilot115 
544 Istio Mixer117 
545 Istio Citadel118 
546 跨集群服务治理119 
547 Istio面临的挑战120 
第6章 服务治理121 
61 配置中心121 
611 配置中心的功能架构121 
612 配置中心的技术架构121 
613 百度的配置中心Disconf123 
614 携程的配置中心Apollo124 
615 Spring Cloud Config126 
62 流量控制127 
621 限流算法127 
622 Spring Cloud流量控制中间件Hystrix129 
623 阿里的流量控制中间件sentinel135 
624 新一代流量控制中间件Resilience4j141 
63 服务追踪146 
631 服务调用过程与追踪要素147 
632 服务追踪的系统组成149 
633 服务追踪中间件Zipkin150 
第7章 分布式处理152 
71 分布式锁152 
711 分布式锁的设计目标152 
712 分布式锁的技术架构152 
72 分布式ID155 
721 分布式ID的设计目标155 
722 分布式ID的技术架构156 
73 高性能有界队列Disruptor161 
731 Disruptor的设计目标161 
732 Disruptor的主体结构163 
第8章 分布式事务165 
81 分布式事务的技术背景165 
82 基于分阶段提交的事务165 
821 两阶段提交166 
822 三阶段提交167 
83 基于补偿的事务168 
831 Saga模式169 
832 最大努力通知模式173 
833 TCC模式173 
84 基于可靠消息队列的事务176 
85 最终一致性对账处理177 
86 阿里的分布式事务中间件Seata179 
861 Seata AT模式的组成架构179 
862 Seata AT模式的运行原理180 
863 Seata AT模式的隔离机制183 
864 Seata AT模式的特点186 
87 华为的分布式事务中间件Servicecomb-Saga186 
871 组成架构186 
872 运行原理187 
第9章 分布式消息队列190 
91 消息队列的应用场景190 
92 消息传递技术192 
921 管道和过滤器模式192 
922 消息通道193 
923 消息193 
924 消息路由196 
925 消息转换199 
926 消息端点199 
927 消息管理201 
93 消息总线202 
931 请求应答模式203 
932 消息总线架构207 
94 阿里的消息中间件RocketMQ209 
941 整体结