分布式服务架构 原理设计与实战

🌙
手机阅读
本文目录结构

分布式服务架构

编辑推荐

《分布式服务架构:原理、设计与实战》以分布式服务架构为主线,重点介绍了保证服务化架构的一致性、高性能、高可用的解决方案和至佳实践,并介绍了微服务架构中倡导的容器化过程,以及敏捷开发和敏捷上线的流程,对分布式服务系统架构设计的核心要点逐一介绍,对重点主题配有代码、设计文档和开源项目,每个主题独立成章,让读者不但可以了解大规模分布式微服务系统是怎么设计的,还可以在了解原理的同时,了解作者在实际项目中积累的至佳实践和模式,大大提高互联网项目的实现效率。要点如下。

√介绍服务化和微服务架构的背景和演化。

√介绍微服务中的常见问题和解决模式。

√提出解决分布式系统一致性问题的有效方案和设计模式。

√介绍酸碱平衡和至终一致性等理论,对分布式服务间出现的服务超时问题给出解决办法。

√提出非功能质量架构设计的方法论,举例说明系统的性能和容量的预估,并介绍压测的方法论和至佳实践。

√提出服务化的日志系统的技术选型依据和大数据日志系统建设的原理、设计与实战,包括 ELK 等流行框架的介绍与使用。

√详细介绍基于调用的 APM 系统的设计与实现,并给出实现的至佳实践。

√介绍线上应急和技术攻关的流程和重点,并总结 Java 服务化系统应急中需要使用的 Java 虚拟机命令、Linux 命令和定制化开发的命令等。

√服务化系统容器化的过程分析和至佳实践。

√服务化系统中敏捷开发的过程和工具。

内容简介

《分布式服务架构:原理、设计与实战》全面介绍了分布式服务架构的原理与设计,并结合作者在实施微服务架构过程中的实践经验,总结了保障线上服务健康、可靠的至佳方案,是一本架构级、实战型的重量级著作。

《分布式服务架构:原理、设计与实战》以分布式服务架构的设计与实现为主线,由浅入深地介绍了分布式服务架构的方方面面,主要包括理论和实践两部分。理论上,首先介绍了服务架构的背景,以及从服务化架构到微服务架构的演化;然后提出了保证分布式服务系统架构一致性的方案和模式,并介绍了互联网架构评审的方法论;最后给出了一个简要的非功能质量的技术评审提纲。实践上,首先提供了一个互联网项目的性能和容量评估的真实案例,介绍了压测的方案设计和至佳实践,这些技术能够全面保证大规模、高并发项目的一致性、可用性和高并发性;然后讲解了大规模服务的日志系统的原理、设计与实践,包括 ELK 等框架的特点和使用方式等,并介绍了当前流行的 APM 系统的设计与实现,主要包括调用链和业务链的跟踪与恢复,涵盖了线上应急和技术攻关的流程及重点,也结合服务化系统线上应急过程进行分析并总结了其中需要用到的 Java 虚拟机、Linux 和定制化脚本等命令,这些命令都是每个开发人员都会用到的解决线上问题的利器;最后,阐述了系统服务的容器化过程,并详细介绍了敏捷开发流程和实现自动化的常用工具等,让读者既能学到架构设计的基础理论,也能结合书中的原理、设计与方法论来解决大规模、高并发互联网项目中的现实问题。

无论是对于软件工程师、测试工程师、运维工程师、软件架构师、技术经理、技术总监,还是对于资深 IT 人士来说,《分布式服务架构:原理、设计与实战》都有很强的借鉴性和参考价值。

作者简介

李艳鹏

现任易宝支付产品中心首席架构师,曾在花旗银行、甲骨文、路透社、新浪微博等大型 IT 互联网公司担任技术负责人和架构师,现专注于大规模、高并发的线上和线下支付平台的应用架构和技术架构的规划与落地,负责交易、支付、渠道、出款、风控、对账等核心支付系统的设计与实现,对移动支付、聚合支付、合规账户、扫码支付、标记化支付等业务场景有产品应用架构规划与落地的实践经验。

杨 彪

现任某创业公司技术总监及合伙人,在互联网和游戏行业有近 10 年工作经验,曾在酷我音乐盒、人人游戏和掌趣科技等上市公司担任核心研发职位,在互联网公司做过日活跃用户量达千万的项目,也在游戏公司做过多款月流水千万以上的游戏。喜欢研究问题,追求前沿技术,学无止境。

第 1 章 分布式微服务架构设计原理 1

  • 1.1 从传统单体架构到服务化架构 2
  • 1.1.1 JEE 架构 2
  • 1.1.2 SSH 架构 5
  • 1.1.3 服务化架构 8
  • 1.2 从服务化到微服务 11
  • 1.2.1 微服务架构的产生 12
  • 1.2.2 微服务架构与传统单体架构的对比 13
  • 1.2.3 微服务架构与 SOA 服务化的对比 15
  • 1.3 微服务架构的核心要点和实现原理 16
  • 1.3.1 微服务架构中职能团队的划分 16
  • 1.3.2 微服务的去中心化治理 18
  • 1.3.3 微服务的交互模式 18
  • 1.3.4 微服务的分解和组合模式 22
  • 1.3.5 微服务的容错模式 35
  • 1.3.6 微服务的粒度 41
  • 1.4 Java 平台微服务架构的项目组织形式 42
  • 1.4.1 微服务项目的依赖关系 42
  • 1.4.2 微服务项目的层级结构 43
  • 1.4.3 微服务项目的持续发布 45
  • 1.5 服务化管理和治理框架的技术选型 45
  • 1.5.1 RPC 46
  • 1.5.2 服务化 47
  • 1.5.3 微服务 49
  • 1.6 本章小结 52

第 2 章 彻底解决分布式系统一致性的问题 54

  • 2.1 什么是一致性 55
  • 2.2 一致性问题 56
  • 2.3 解决一致性问题的模式和思路 57
  • 2.3.1 酸碱平衡理论 58
  • 2.3.2 分布式一致性协议 61
  • 2.3.3 保证最终一致性的模式 67
  • 2.4 超时处理模式 75
  • 2.4.1 微服务的交互模式 76
  • 2.4.2 同步与异步的抉择 77
  • 2.4.3 交互模式下超时问题的解决方案 78
  • 2.4.4 超时补偿的原则 85
  • 2.5 迁移开关的设计 87
  • 2.6 本章小结 88

第 3 章 服务化系统容量评估和性能保障 89

  • 3.1 架构设计与非功能质量 90
  • 3.2 全面的非功能质量需求 91
  • 3.2.1 非功能质量需求的概述 91
  • 3.2.2 非功能质量需求的具体指标 92
  • 3.3 典型的技术评审提纲 97
  • 3.3.1 现状 97
  • 3.3.2 需求 98
  • 3.3.3 方案描述 98
  • 3.3.4 方案对比 99
  • 3.3.5 风险评估 100
  • 3.3.6 工作量评估 100
  • 3.4 性能和容量评估经典案例 100
  • 3.4.1 背景 100
  • 3.4.2 目标数据量级 101
  • 3.4.3 量级评估标准 101
  • 3.4.4 方案 102
  • 3.4.5 小结 107
  • 3.5 性能评估参考标准 108
  • 3.5.1 常用的应用层性能指标参考标准 108
  • 3.5.2 常用的系统层性能指标参考标准 109
  • 3.6 性能测试方案的设计和最佳实践 112
  • 3.6.1 明确压测目标 112
  • 3.6.2 压测场景设计和压测方案制定 114
  • 3.6.3 准备压测环境 121
  • 3.6.4 压测的执行 122
  • 3.6.5 问题修复和系统优化 123
  • 3.7 有用的压测工具 123
  • 3.7.1 ab 123
  • 3.7.2 jmeter 125
  • 3.7.3 mysqlslap 125
  • 3.7.4 sysbench 129
  • 3.7.5 dd 134
  • 3.7.6 LoadRunner 135
  • 3.7.7 hprof 136
  • 3.8 本章小结 138

第 4 章 大数据日志系统的构建 140

  • 4.1 开源日志框架的原理分析与应用实践 142
  • 4.1.1 JDK Logger 142
  • 4.1.2 Apache Commons Logging 143
  • 4.1.3 Apache Log4j 147
  • 4.1.4 Slf4j 156
  • 4.1.5 Logback 160
  • 4.1.6 Apache Log4j 2 164
  • 4.2 日志系统的优化和最佳实践 168
  • 4.2.1 开发人员的日志意识 168
  • 4.2.2 日志级别的设置 168
  • 4.2.3 日志的数量和大小 169
  • 4.2.4 切割方式 170
  • 4.2.5 日志格式的配置 170
  • 4.2.6 一行日志导致的线上事故 177
  • 4.3 大数据日志系统的原理与设计 178
  • 4.3.1 通用架构和设计 179
  • 4.3.2 日志采集器 180
  • 4.3.3 日志缓冲队列 186
  • 4.3.4 日志解析器 187
  • 4.3.5 日志存储和搜索 187
  • 4.3.6 日志展示系统 188
  • 4.3.7 监控和报警 188
  • 4.3.8 日志系统的容量和性能评估 188
  • 4.4 ELK 系统的构建与使用 190
  • 4.4.1 Elasticsearch 191
  • 4.4.2 Logstash 193
  • 4.4.3 Kibana 196
  • 4.5 本章小结 198

第 5 章 基于调用链的服务治理系统的设计与实现 199

  • 5.1 APM 系统简介 200
  • 5.1.1 优秀的开源 APM 系统 200
  • 5.1.2 国内商业 APM 产品的介绍 202
  • 5.2 调用链跟踪的原理 203
  • 5.2.1 分布式系统的远程调用过程 204
  • 5.2.2 TraceID 207
  • 5.2.3 SpanID 208
  • 5.2.4 业务链 210
  • 5.3 调用链跟踪系统的设计与实现 211
  • 5.3.1 整体架构 211
  • 5.3.2 TraceID 和 SpanID 在服务间的传递 213
  • 5.3.3 采集器的设计与实现 217
  • 5.3.4 处理器的设计与实现 222
  • 5.3.5 调用链系统的展示 225
  • 5.4 本章小结 226

第 6 章 Java 服务的线上应急和技术攻关 227

  • 6.1 海恩法则和墨菲定律 227
  • 6.2 线上应急的目标、原则和方法 229
  • 6.2.1 应急目标 229
  • 6.2.2 应急原则 229
  • 6.2.3 线上应急的方法和流程 230
  • 6.3 技术攻关的方法论 233
  • 6.4 环境搭建和示例服务启动 236
  • 6.5 高效的服务化治理脚本 240
  • 6.5.1 show-busiest-java-threads 240
  • 6.5.2 find-in-jar 243
  • 6.5.3 grep-in-jar 244
  • 6.5.4 jar-conflict-detect 245
  • 6.5.5 http-spy 247
  • 6.5.6 show-mysql-qps 248
  • 6.5.7 小结 249
  • 6.6 JVM 提供的监控命令 249
  • 6.6.1 jad 249
  • 6.6.2 btrace 250
  • 6.6.3 jmap 252
  • 6.6.4 jstat 255
  • 6.6.5 jstack 256
  • 6.6.6 jinfo 258
  • 6.6.7 其他命令 258
  • 6.6.8 小结 259
  • 6.7 重要的 Linux 基础命令 260
  • 6.7.1 必不可少的基础命令和工具 260
  • 6.7.2 查看活动进程的命令 268
  • 6.7.3 窥探内存的命令 270
  • 6.7.4 针对 CPU 使用情况的监控命令 272
  • 6.7.5 监控磁盘 I/O 的命令 273
  • 6.7.6 查看网络信息和网络监控命令 275
  • 6.7.7 Linux 系统的高级工具 287
  • 6.7.8 /proc 文件系统 288
  • 6.7.9 摘要命令 288
  • 6.7.10 小结 290
  • 6.8 现实中的应急和攻关案例 291
  • 6.8.1 一次 OOM 事故的分析和定位 291
  • 6.8.2 一次 CPU 100% 的线上事故排查 301
  • 6.9 本章小结 304

第 7 章 服务的容器化过程 306

  • 7.1 容器 vs 虚拟机 306
  • 7.1.1 什么是虚拟机 306
  • 7.1.2 什么是容器 306
  • 7.1.3 容器和虚拟机的区别 307
  • 7.1.4 容器主要解决的问题 307
  • 7.1.5 Docker 的优势 310
  • 7.2 Docker 实战 311
  • 7.2.1 Docker 的架构 311
  • 7.2.2 Docker 的安装 315
  • 7.2.3 Docker 初体验 319
  • 7.2.4 Docker 后台服务的管理 322
  • 7.2.5 Docker 的客户端命令 328
  • 7.2.6 Docker Compose 编排工具的使用 372
  • 7.3 容器化项目 379
  • 7.3.1 传统的应用部署 380
  • 7.3.2 将应用程序部署在虚拟机上 380
  • 7.3.3 容器化部署应用 381
  • 7.3.4 Docker 实现的应用容器化示例 382
  • 7.4 本章小结 384

第 8 章 敏捷开发 2.0 的自动化工具 385

  • 8.1 什么是敏捷开发 2.0 385
  • 8.1.1 常用的 4 种开发模式 385
  • 8.1.2 什么是 DevOps 390
  • 8.1.3 敏捷开发 2.0 解决的问题 392
  • 8.2 敏捷开发的自动化流程 393
  • 8.2.1 持续集成 393
  • 8.2.2 持续交付和持续部署 397
  • 8.3 敏捷开发的常用自动化工具 400
  • 8.3.1 分布式版本控制工具 Git 400
  • 8.3.2 持续集成和持续交付工具 Jenkins 410
  • 8.3.3 基础平台管理工具 SaltStack 418
  • 8.3.4 Docker 容器化工具 421
  • 8.4 本章小结 422

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了