《分布式服务架构:原理、设计与实战》 李艳鹏, 杨彪 7121315785,9787121315787

配送至
$ $ USD 美元

编辑推荐

《分布式服务架构:原理、设计与实战》以分布式服务架构为主线,重点介绍了保证服务化架构的一致性、高性能、高可用的解决方案和...实践,并介绍了微服务架构中倡导的容器化过程,以及敏捷开发和敏捷上线的流程,对分布式服务系统架构设计的核心要点逐一介绍,对重点主题配有代码、设计文档和开源项目,每个主题独立成章,让读者不但可以了解大规模分布式微服务系统是怎么设计的,还可以在了解原理的同时,了解作者在实际项目中积累的...实践和模式,大大提高互联网项目的实现效率。要点如下。
√介绍服务化和微服务架构的背景和演化。
√介绍微服务中的常见问题和解决模式。
√提出解决分布式系统一致性问题的有效方案和设计模式。
√介绍酸碱平衡和最终一致性等理论,对分布式服务间出现的服务超时问题给出解决办法。
√提出非功能质量架构设计的方法论,举例说明系统的性能和容量的预估,并介绍压测的方法论和...实践。
√提出服务化的日志系统的技术选型依据和大数据日志系统建设的原理、设计与实战,包括ELK等流行框架的介绍与使用。
√详细介绍基于调用的APM系统的设计与实现,并给出实现的...实践。
√介绍线上应急和技术攻关的流程和重点,并总结Java服务化系统应急中需要使用的Java虚拟机命令、Linux命令和定制化开发的命令等。
√服务化系统容器化的过程分析和...实践。
√服务化系统中敏捷开发的过程和工具。

作者简介

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

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

目录

第1章分布式微服务架构设计原理1
1.1从传统单体架构到服务化架构2
1.1.1JEE架构2
1.1.2SSH架构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.4Java平台微服务架构的项目组织形式42
1.4.1微服务项目的依赖关系42
1.4.2微服务项目的层级结构43
1.4.3微服务项目的持续发布45
1.5服务化管理和治理框架的技术选型45
1.5.1RPC46
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.1ab123
3.7.2jmeter125
3.7.3mysqlslap125
3.7.4sysbench129
3.7.5dd134
3.7.6LoadRunner135
3.7.7hprof136
3.8本章小结138
第4章大数据日志系统的构建140
4.1开源日志框架的原理分析与应用实践142
4.1.1JDKLogger142
4.1.2ApacheCommonsLogging143
4.1.3ApacheLog4j147
4.1.4Slf4j156
4.1.5Logback160
4.1.6ApacheLog4j2164
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.4ELK系统的构建与使用190
4.4.1Elasticsearch191
4.4.2Logstash193
4.4.3Kibana196
4.5本章小结198
第5章基于调用链的服务治理系统的设计与实现199
5.1APM系统简介200
5.1.1优秀的开源APM系统200
5.1.2国内商业APM产品的介绍202
5.2调用链跟踪的原理203
5.2.1分布式系统的远程调用过程204
5.2.2TraceID207
5.2.3SpanID208
5.2.4业务链210
5.3调用链跟踪系统的设计与实现211
5.3.1整体架构211
5.3.2TraceID和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.1show—busiest—java—threads240
6.5.2find—in—jar243
6.5.3grep—in—jar244
6.5.4jar—conflict—detect245
6.5.5http—spy247
6.5.6show—mysql—qps248
6.5.7小结249
6.6JVM提供的监控命令249
6.6.1jad249
6.6.2btrace250
6.6.3jmap252
6.6.4jstat255
6.6.5jstack256
6.6.6jinfo258
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.7Linux系统的高级工具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一次CPU100%的线上事故排查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.5Docker的优势310
7.2Docker实战311
7.2.1Docker的架构311
7.2.2Docker的安装315
7.2.3Docker初体验319
7.2.4Docker后台服务的管理322
7.2.5Docker的客户端命令328
7.2.6DockerCompose编排工具的使用372
7.3容器化项目379
7.3.1传统的应用部署380
7.3.2将应用程序部署在虚拟机上380
7.3.3容器化部署应用381
7.3.4Docker实现的应用容器化示例382
7.4本章小结384
第8章敏捷开发2.0的自动化工具385
8.1什么是敏捷开发2.0385
8.1.1常用的4种开发模式385
8.1.2什么是DevOps390
8.1.3敏捷开发2.0解决的问题392
8.2敏捷开发的自动化流程393
8.2.1持续集成393
8.2.2持续交付和持续部署397
8.3敏捷开发的常用自动化工具
8.3.1分布式版本控制工具Git
8.3.2持续集成和持续交付工具Jenkins410
8.3.3基础平台管理工具SaltStack418
8.3.4Docker容器化工具421
8.4本章小结422

序言

推荐序一
经过艳鹏多年的实践经验积累及长时间的精心准备,本书终于与大家见面了,笔者很荣幸能够成为本书的首批读者。
随着时代的不断发展,分布式服务架构日益流行,已经从SOA服务化发展到了微服务架构。有过惊喜,有过质疑,但这未能阻挡分布式服务架构在互联网行业里的普遍应用。然而,事物总是有两面性的,丰富的新框架及新技术层出不穷,给项目的技术决策者带来了技术选型上的困难。此外,在互联网交易越来越复杂、规模越来越庞大的背景下,解决分布式服务间的事务问题、业务一致性问题、可用性问题、稳定性问题等的困难以指数级增加。
本书以一位在IT行业从事多年分布式服务架构工作的资深老兵的视角,剖析了针对分布式系统架构的解决方案和设计模式。书中的每一章、每一节都是作者对多年线上系统架构设计实践的总结。
此外,有别于市面上的其他架构书籍,本书在讲解基础理论和方法论的基础上,提供了大量的实际操作和详尽的开发命令解析,读者可以直接把书中的方法和案例应用到实际工作中。
如果你想成为一名优秀的高并发服务架构师,那么本书将为你提供实践指引;如果你在大规模、高并发交易系统中遇到问题,那么本书将为你提供解决这些问题的理论与实践,令你脑洞大开,轻松解决问题!
姚建东
易宝支付产品VP

推荐序二
本书作者艳鹏和杨彪秉着“开放、分享”的态度,将在互联网高并发服务建设过程中总结的经验、设计模式和...实践整理成书。本书内容涉及分布式服务架构的原理、设计与实战,不但介绍了微服务的背景,还介绍了服务化的演进历史,并详细介绍了保证一致性、高性能、高可用性的解决方案,重点讲解了建设大数据日志系统和调用链跟踪系统等内容。大数据日志系统和调用链跟踪系统是每一个微服务体系都应该包含的核心基础设施,为服务的稳定性、可用性提供了有效保证,为在应急和技术攻关过程中发现问题、定位问题和恢复问题提供了有效帮助。
本书逐一介绍分布式微服务系统架构设计的核心要点,对重点主题提供了代码、设计文档和开源项目,每个主题独立成章,且相关代码可应用于实际项目中。通过阅读本书,读者不但可以了解大规模分布式微服务系统是怎么设计的,也可以学到实际服务化项目中的设计模式及...实践,可大大提高互联网项目的实施效率。
分布式服务架构涉及的面很广且难以列举,涉及架构方法论、设计模式、如何快速入门纷繁庞杂的技术栈、如何对方案进行选型、如何定位和解决问题,等等。笔者也曾面试过许多候选者,其中,能利用所了解的知识较好地解决问题的人不多,能利用当前流行的技术对复杂问题进行技术选型并给出合理架构方案的人更是凤毛麟角。
笔者曾在Google、乐视等互联网企业工作,作为一名持续创业者,曾想将自己从业以来的项目开发经验、问题追踪、技术选型等积累成文字,为给更多的开发者提供参考,使其少走弯路,但一直碍于各种琐事未能成行。当艳鹏将书稿呈现在笔者面前并让笔者为本书作序时,笔者惊喜万分。本书作者有着多年的一线互联网开发经验,根据自己的实际生产经验,将微服务、分布式系统、一致性、性能与容量评估、大数据日志分析系统、调用链系统、容器等结合一些生动、实用的案例进行了全面介绍,对一些项目敏捷开发和技术选型也给出了自己的经验,同时对日常运维手段也进行了分享。本书虽然篇幅不大但实用性很强,能够指导实际互联网架构的设计与实现。本书主题明确、浅显易懂,适合初学者和有一定经验的开发者和架构师阅读和使用。
于立柱
福佑卡车CTO

推荐序三
本书作者杨彪和艳鹏都是笔者认识多年的老朋友,笔者见证了他们从勤奋青年到老成持重、独当一面,从一线的核心开发人员到架构师再到技术经理和技术总监,从传统IT行业到互联网行业的心路历程。
笔者在近几年面试过很多人,发现了一些有意思的现象:很多自称架构师的人在同你讲架构时可谓滔滔不绝,各种技术名词像说相声一样从其嘴中说出来,但是你稍微追问一下,就会发现其存在很多基本概念的缺失,例如自称精通高并发的人说不出其所谓的高并发瓶颈在哪里,自称能够开发高可用和高性能系统的人说不出高可用和高性能的衡量标准是什么,并且其所谓的大数据处理系统实际上只有百万条数据,等等。
架构师虽然听起来和工程师没有太大区别,技术经理和技术总监也都会对核心技术有所把控,但本质上架构师要引领技术的发展,用技术服务于业务,为业务产生价值,更通俗地说,架构师需要让技术变现,为客户赚取更多的利润,或者为客户节省更多的成本,因此,架构师任重而道远。在互联网高速发展的今天,如何成为一名优秀的架构师是一个值得研究的课题,本书正是为那些已经成为架构师或者即将成为架构师的人准备的一本好书。作为第1批阅读本书的读者,笔者惊叹于本书中的内容如此丰富,囊括了保证互联网线上高并发服务的方方面面,不仅包括分布式服务的背景和演化,还包括保证分布式服务化系统一致性、高性能、高可用的方法论和...实践,而这些正是每一个互联网公司都需要探索和应用的理论和方法。笔者推荐每一名互联网架构师都阅读本书,相信你一定能从中学到自己急需的技术、方案和方法。
本书作者有从花旗银行、甲骨文等知名外企到新浪微博、易宝支付等大型互联网平台,从传统的核心行业到火热的游戏行业,从社交产品到金融支付产品等方方面面的工作经验,既深刻了解传统行业的系统规范、流程和功能的复杂性,又深谙互联网行业的高性能、可用性、高并发、可伸缩等高级特性。本书涉及的分布式服务架构原理、设计和实战,皆来自于作者在实际工作中提炼的精华,从理论到落地,皆言之有物。无论是对于软件工程师、测试工程师、运维工程师、软件架构师、技术经理、技术总监,还是对于资深IT人士来说,本书都极具参考价值。
杨延峰
开心网副总裁
前言
自互联网诞生以来,其简单、敏捷的微服务架构开发理念和实践逐渐成为主流,在逐渐发展的环境下和技术演化的过程中,迅速突破互联网行业并波及软件行业的各个领域。然而,这种突飞猛进的表面下却是龙鱼混杂、泥沙俱下。一方面,很多人在这个信息爆炸的时代应对海量信息的处理能力比较有限;另一方面,也有人致力于将优秀的理论和实践相结合,希望运用所学的高效解决方案应对越来越复杂的问题。不论对与错,人类对技术进步的追求从未停歇。
毋庸置疑,IT行业的发展进入了一个加速分化的时代,将优秀的解决方案推向大众的成本和速度将成为决定企业生存与否的关键因素之一。优秀的互联网企业已装备精良并持续优化,而那些还需不断进步的企业也在互相竞争。尽管在这个信息量巨大的媒体时代,部分优秀的企业在应对分布式服务架构时已经有了更多的认识且技术越来越完善,但也有很多快速发展的企业在变得更优秀这条道路上任重而道远。
很多非常优秀的开发人员和架构师能成为给公司带来长远利益的人,在变革的节点上推波助澜。本书将带你走进分布式服务架构的世界,在这个世界里不停探索和汲取经验。领先于别人是一种要求,这也是很多公司赢得先机的关键所在,无论服务于IT的哪个领域,每个IT人都有理由重视架构这门艺术。希望本书对于软件工程师、测试工程师、软件架构师及深耕于IT行业的老兵来说,都能带给其所期望的内容,并帮助其解决和发现问题,也能帮助其不断探索。
本书以当前流行的分布式服务架构为主线,讲解了分布式服务架构的原理、设计与实践。本书首先介绍了分布式服务架构的背景和演化,然后深入阐述了保证分布式服务的一致性、高性能、高可用性等的设计思想和可实施的方案;然后介绍了大规模、高并发线上服务的应急流程和技术攻关过程,并给出了发现和定位问题的有效、常用工具集;最后详细介绍了分布式服务架构中容器化过程分析、敏捷开发和上线的工具,为从事高并发服务架构的开发人员提供了保障系统健康运行的方法论和...实践。
感谢电子工业出版社张国霞编辑的认真态度和辛勤工作,使得本书能够最终顺利完成。
感谢笔者的技术小伙伴贾博岩提供了日志相关的资料和示例,让笔者能够快速完成第4章大数据日志系统方面的内容。
感谢张晓辉、周伟、霍勇同学在编辑阶段参与阅稿,并提出专业的意见。
感谢英语专业的高材生曹燕琴小同学在文字上提供的帮助。
最后,感谢笔者的家人和朋友在本书写作过程中提供的支持和帮助。
李艳鹏

读者服务
轻松注册成为博文视点社区用户,扫码直达本书页面。
? 提交勘误:您对书中内容的修改意见可在提交勘误处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。
? 交流互动:在页面下方读者评论处留下您的疑问或观点,与我们和其他读者一同学习交流。

文摘

版权页:

插图:

读者容错模式(Tolerant Reader)指微服务化中服务提供者和消费者之间如何对接口的改变进行容错。从字面上来讲,消费者需要对提供者提供的功能进行兼容性设计,尤其对服务提供者返回的内容进行兼容,或者解决在服务提供者改变接口或者数据的格式的情况下,如何让服务消费者正常运行。
任何一个产品在设计时都无法预见将来可能增加的所有需求,服务的开发者通常通过迭代及时地增加新功能,或者让服务提供的API自然地演进。不过,服务提供者对外提供的接口的数据格式的改变、增加和删除,都会导致服务的消费者不能正常工作。
因此,在服务消费者处理服务提供者返回的消息的过程中,需要对服务返回的消息进行过滤,只提取自己需要的内容,对多余或者未知的内容采取抛弃的策略,而不是硬生生地抛错处理。在实现过程中不推荐使用严格的校验策略,而是推荐使用宽松的校验策略,即使服务消费者拿到的消息报文发生了改变,程序也只需尽最大努力提取需要的数据,同时忽略不可识别的数据。只有在服务消费者完全不能识别接收到的消息,或者无法通过识别的信息继续处理流程时,才能抛出异常。
ISBN7121315785,9787121315787
出版社电子工业出版社
作者李艳鹏
尺寸16