前言
第1章分布式微服务架构设计原理
第2章彻底解决分布式系统一致性的问题
第3章服务化系统容量评估和性能保障
第4章大数据日志系统的构建
第5章基于调用链的服务治理系统的设计…
第6章Java服务的线上应急和技术攻关
第7章服务的容器化过程
第8章敏捷开发2.0的自动化工具
分布式、微服务几乎是现在的技术人员必须要了解的架构方向,从理论上来讲确实解耦了分布式、微服务很多结构,但另一方面,又会带来更多衍生的复杂度及难点。如何保证事物的最终一致性? 如何进行性能及容量预估?如何处理分布式系统的日志?如何进行线上应急?如果你曾有和我一样的困惑,那么相信你一样能从本文中得到非常宝贵的解答。本文由浅至深地讲述了分布式架构带给我们的诸多困扰和难点,循序渐进、思路清晰地阐明了这些问题的答案。
本文以当前流行的分布式服务架构为主线,讲解了分布式服务架构的原理、设计与实践。
首先介绍了分布式服务架构的背景和演化,然后深入阐述了保证分布式服务的一-致性、 高性能、高可用性等的设计思想和可实施的方案;然后介绍了大规模、高并发线上服务的应急流程和技术攻关过程,并给出了发现和定位问题的有效、常用工具集;最后详细介绍了分布式服务架构中容器化过程分析、敏捷开发和上线的工具,为从事高并发服务架构的开发人员提供了保障系统健康运行的方法论和最佳实践。
第1章 分布式微服务架构设计原理
- 从传统单体架构到服务化架构
- 从服务化到微服务
- 微服务架构的核心要点和实现原理
- Java平台微服务架构的项目组织形式
- 服务化管理和治理框架的技术选型
本章主要讲解从传统的单体架构到服务化的发展历程,并讲解从服务化到现在流行的微服务架构的演化,以及微服务架构的特点、实现原理和最佳实践,并且提出了微服务是SOA服务化的拓展和延续。在后续章节里不会刻意地区分SOA服务化和微服务,因为微服务就是SOA服务化在全新场景下的升华和叠加。
第2章 彻底解决分布式系统一致性的问题 54
- 什么是一致性
- 解决一致性问题的模式和思路
- 超时处理模式
- 迁移开关的设计
本章从一致性问题的实践出发,对大规模、高并发服务化系统的实践经验进行总结,列举了导致不一致的具体问题,并围绕这些具体问题,提出一致性原理如ACID、CAP和BASE等:并学习了两阶段、三阶段和TCC - -致性协议,总结了实现最终一致性的查 询模式、补偿模式、异步确保模式、定期校对模式、可靠消息模式和缓存一致性模式等:最后针对服务化系统中同步调用、异步调用、消息队列等应用场景详细分析了超时发生的场景和解决方案,以供大家在开发服务化系统的过程中参考。
第3章 服务化系统容量评估和性能保障 89
- 架构设计与非功能质量
- 全面的非功能质量需求
- 典型的技术评审提纲
- 性能和容量评估经典案例
- 性能评估参考标准
- 性能测试方案的设计和最佳实践
- 有用的压测工具
本章以互联网企业重点关注的非功能质量为主线,总结了非功能质量需求的整体目标,并针对不同的服务和资源列举了不同的非功能质量需求的衡量指标,帮助读者在做技术评审的过程中整理思路。本章又针对不同的系统尽量穷举评审时关注的评审点,并随后提供了一个简单有效的评审提纲,最后根据提纲实现了一个互联网容量和性能评估的经典案例,大家可以在案例中了解高并发互联网系统是如何拆分的,以及依据哪些数据进行拆分,通过对非功能质量需求的评估、设计和实现,对应设计时的容量和性能评估及事后的压测,来保证互联网项目达成既定的非功能质量需求的目标。
第4章 大数据日志系统的构建
- 开源日志框架的原理分析与应用实践
- 日志系统的优化和最佳实践
- 大数据日志系统的原理与设计
- ELK系统的构建与使用
在一个完整的互联网服务化系统的实现中,日志系统是一个非常重要的功能组成部分。它可以记录系统产生的所有行为和信息,并按照某种形式表达出来,我们可以使用日志系统所记录的信息为系统排错,并优化系统的性能,或者根据这些信息调整系统的行为,提高系统的可用性。因此,稳定的日志系统是保证系统可用性的一个重要的基础设施。
本章一开始介绍了开源日志框架的背景、实现结构、使用方式,包括JDK Logger. CommonsLogging、Log4j、 SIlf4j、 Logback 和Log4j2;然后分享了笔者在实践中积累的使用这些日志系统的优化经验和最佳实践,接下来分析了大数据日志系统的原理与设计,最后介绍了当前最流行的开源日志框架ELK,也介绍了Elasticsearch、 Logstash 和Kibana的安装、配置和基本使用方法等,为读者构建大数据日志系统起到抛砖引玉的作用。
第5章 基于调用链的服务治理系统的设计与实现 199
- APM系统简介
- 调用链跟踪的原理
- 调用链跟踪系统的设计与实现 211
本章从介绍开源的APM项目及市场上流行的商业APM产品开始,介绍了APM的功能和特性:然后重点讲述了谷歌的Dapper论文提到的调用链跟踪原理,并讲解了业务链实现的原理:最后,基于调用链跟踪的原理,总结了实现调用链系统的通用架构、方法论及最佳实践。
第6章 Java服务的线上应急和技术攻关 227
- 海恩法则和墨菲定律
- 线上应急的目标、原则和方法
- 技术攻关的方法论
- 环境搭建和示例服务启动
- 高效的服务化治理脚本
- JVM提供的监控命
- 重要的Linux基础命令
- 现实中的应急和攻关案例
本章介绍的应急思想、攻关方法、实践案例及解决方案并提供给大家解决疑难杂症的方法论。
开始介绍了线上应急和技术攻关的必要性、思路和方法论,强调了线上应急的目标是快速恢复系统,减少影响和损失,而不是彻底解决问题;其次介绍了如何搭建示例服务Vesta,在配置和启动Vesta后,以运行Vesta服务为背景重点介绍了笔者积累和总结的高效应用层脚本;结尾介绍、分析、定位和解决了笔者在生产中遇到的线上应急和攻关的两个典型案例,帮助读者理解如何应用线上应急和技术攻关的方法,以及如何使用这些重要的命令和脚本,并提供给大家解决疑难杂症的方法论。
第7章 服务的容器化过程
- 容器vs虚拟机
- Docker实战
- 容器化项目
通过本节的内容,我们了解到虚拟机与容器之间的区别,以及容器给我们带来的好处,并通过实战操作,学习了Docker的常用命令,本章主要介绍了镜像、容器、磁盘卷、网络、服务和集群的实战操作:然后介绍了Docker 目前主要的管理工具: Swarm、 Kubenetes 和ApacheMesos:最后介绍了wordpress 博客系统的容器化的实现过程。
第8章 敏捷开发2.0的自动化工具
- 什么是敏捷开发2.0
- 敏捷开发的自动化流程
- 敏捷开发的常用自动化工具
通过对本章的学习,我们了解了常用的4种开发模式:瀑布式开发、迭代式开发、螺旋式开发和敏捷开发;然后介绍了当下炙手可热的DevOps及其详细流程:最后介绍了敏捷开发2.0和它的优势,以及我们常用的自动化工具。