高可用可伸缩微服务架构:基于Dubbo、Spring Cloud和Service Mesh
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

微服务这个概念最早是在2011年5月在意大利威尼斯的一个软件架构会议上讨论并提出的,用于描述一些作为通用架构风格的设计原则。2012年3月在波兰克拉科夫举行的“第33届学位会议”上,ThoughtWorks公司的首席咨询师James Lewis做了题为“Microservices - Java, the Unix Way”的演讲(http://2012.33degree.org/talk/show/67),这次演讲里James讨论了微服务的一些原则和特征,例如单一服务职责、康威定律、自动扩展、DDD等。

微服务架构则是由Fred George在2012年的一次技术大会上所提出的(http://oredev.org/oredev2012/2012/sessions/micro-service-architecture.html),在大会的演讲中,他讲解了如何分拆服务,以及如何利用MQ来进行服务间的解耦,这就是最早的微服务架构的雏形。而后由Martin Fowler发扬光大,并且在2014年发表了一篇著名的文章(https://martinfowler.com/articles/microservices.html),这篇文章深入全面地讲解了什么是微服务架构。随后,微服务架构逐渐成为一种非常流行的架构模式,一大批的技术框架和文章涌现出来,越来越多的公司借鉴和使用微服务架构。

然而微服务并不能“包治百病”,我们在实施的过程中不能简单地使用某些个微服务框架或组件一蹴而就,而是需要将业务、技术和运维有机地结合起来,配合同步实施,并且在此过程中还需要踩过很多的“坑”才能取得成功。

本书的每一个章节都是相关领域的专家经过多年的技术积累提炼而成的。秉承以理论为基础,以大量企业实战案例为核心的宗旨。本书深入全面地介绍微服务架构的实施方法,以及在实施过程中所遇到的问题和解决方案,是一本内容翔实、“可落地”的理论与实践相结合的技术书籍。

不忘初心,方得始终

在2017年8月份的一次技术大会上,我与电子工业出版社博文视点公司的编辑陈晓猛相识。我们沟通了很久,并且在很多想法上是高度一致的,由此我萌生了想写一本技术书籍的念头。关于书的主题,我考虑了很久,特别是对于自己近几年的工作经验的思考和总结,最终决定以“微服务”作为主题。

最初我邀请了秦金卫和方志斌作为写作团队的成员。我们三人在创作思路上一拍即合,计划以微服务架构的概念和内容,Dubbo和Spring Cloud的原理和实践,以及我们在工作中的各种思考和最佳实践为主体内容,三人分工协作,创作一本业内前沿的微服务架构书籍。然而写作却是一个漫长的过程,需要的不仅是一腔热血,还需要持之以恒的精神。这个过程中我们三人都因为各自的事情很忙导致写作时停时续,甚至想过放弃,但我们始终没有忘却初心,互相鼓励坚持下去。志斌工作较忙经常出差,以至于我看到他经常在凌晨二三点的时候还在更新文章;金卫一直有很多好的想法,给我们写作提供了很多有用的建议,我们也是经常沟通到半夜。在这个不断有思想火花碰撞的过程中,我们决定增加了一些章节使本书的整体内容更丰富全面、实用性更强。于是我又邀请了梁桂钊、杜琪、张逸、殷琦和肖冠宇五位朋友加入,为本书注入新的能量。桂钊虽然加入较晚,但却非常投入,参与写作了很多章节;杜琪在加入写作之时宝宝还没有降生,现在应该也有半岁了;张逸、殷琦和冠宇在本书快完成之时紧急驰援,高效地完成了各自负责的章节。我们写作团队的成员都不在一个城市,来自祖国各地,但我们为了初心而凝聚在一起,这就是大家的团队精神。

历时近一年半的书即将出版了,我内心的激动难以言表。除了感谢写作团队,我还要感谢编辑陈晓猛对我的不断鼓励和大力支持,感谢好友王文斌提供了好多有用的建议。我也要感谢家人对我的支持,在这本书出版之际,我的儿子多多刚满三岁,我要感谢儿子,让我“借用”了很多原本陪伴他成长的宝贵时间。

最后我想说的是,我们团队不全是微服务架构方面的技术专家,但是大家基于共同的对微服务架构技术的热爱和乐于分享知识经验的精神,我们把微服务架构领域的各类知识,以及自己平常的经验和积累做了完整的梳理和总结,凝结为这样一本技术书,作为2019年的一份礼物呈现给大家,欢迎大家共同探讨和交流。

本书适合的读者

本书讲解如何通过Dubbo、Spring Cloud、Service Mesh等技术来构建微服务体系,并深入浅出地介绍了微服务架构发展历程、领域驱动设计、稳定性保证的常用手段、分布式事务的一致性方案;本书还通过大量的案例探讨微服务落地方案,例如双活体系建设、分布式监控、微服务编排、百亿流量微服务网关的设计与实现、基于支付场景下的微服务改造等;书籍后半部展示了实现微服务架构的完整蓝图,并让读者了解如何借助微服务来增强和重构现有的遗留系统。无论刚接触微服务的新手,还是正在尝试借助微服务解放生产力的开发人员或运维人员,或者是立志于构建高可用可伸缩的微服务体系的架构师,阅读本书,对读者必有裨益。

本书内容

本书共14章,每章的具体内容如下。

第1章:微服务架构概述(作者秦金卫)。

本章从软件架构的发展历程讲起,分别对单体架构、SOA架构和微服务架构的演进过程做了深入浅出的讲解,同时深入介绍了微服务架构的特点,希望以宏观的视角为读者打开微服务的大门。

第2章:微服务领域驱动设计(作者张逸)。

本章介绍了领域驱动设计是什么,常见的领域架构有哪些,如何将领域驱动应用到微服务中,以及如何使用领域驱动进行合理的服务划分等,帮助读者在正式学习微服务前修炼“内功”。

第3章:Apache Dubbo框架的原理与实现(作者程超)。

目前Dubbo已经被阿里巴巴技术团队重新维护并且得到了大力的发展和推广,使用Dubbo可以很好地进行微服务建设,本章较为深入地讲解了Dubbo的使用和技巧,以及通过时源码的深入分析能够让读者对Dubbo的原理实现有一个全面的认识。

第4章:Spring Boot/Spring Cloud实践(作者方志斌)。

Spring Boot/Cloud是目前较为流行的微服务框架,本章以大量的实战案例为线索,为读者讲解如何才能使用好Spring Cloud框架,讲解如何避免在使用过程中“踩坑”。

第5章:微服务稳定性保证的常用手段(作者杜琪)。

在业务发展越来越快,规模也越来越大的情况下,我们所面临的就是如何在服务越来越多的情况下保证微服务架构的稳定性,本章讲解保障稳定性的常用技巧和手段。

第6章:微服务下如何保证事务的一致性(作者梁桂钊)。

本章介绍了从本地事务到分布式事务的演变,深入分析了微服务在强一致性场景和最终一致性场景下的解决方案,探讨了二阶段提交协议、三阶段提交协议、TCC模式、补偿模式、可靠事件模式等。同时,对开源项目的分布式事务进行解读,包括RocketMQ和ServiceComb。

第7章:百亿流量微服务亿级网关的设计与实现(作者秦金卫)。

本章从百亿流量交易系统微服务网关(API Gateway)的现状和面临问题出发,阐述微服务架构与API网关的关系,理顺流量网关与业务网关的脉络,分享全面的API网关知识与经验。

第8章:微服务编排(作者程超)。

本章以Netflix Conductor框架为核心,从框架的使用和原理的角度深入介绍了什么是微服务编排,为微服务执行复杂的业务逻辑提供了一种新的思路。

第9章:微服务数据抽取与统计(作者肖冠宇)。

在微服务架构下,服务必将越来越多,在这种情况下进行数据统计和分析将变得非常困难,本章将深入讲解如何从不同服务的数据库中抽取数据到统一的大数据平台中,帮忙使用者更方便地进行数据的统计。

第10章:微服务双活体系建设(作者程超)。

在企业发展规模越来越大的情况下,用户对系统的稳定性要求也越来越高,那么单机房部署势必成为发展的瓶颈,本章将以实际案例出发讲解同城双活的建设。

第11章:基于支付场景下的微服务改造与性能优化(作者程超)。

本章从实际的案例出发,在具体的支付业务场景下,从一个新项目开始逐步讲解如何利用领域驱动划分服务,如何利用微服务框架进行服务治理,以及项目完成后怎样提升微服务架构的性能。

第12章:遗留系统的微服务架构改造(作者梁桂钊)。

本章介绍了遗留系统的微服务架构改造,梳理了代码分层结构的转变,提出一个新的代码分层思路来应对微服务的流行与普及,并深入思考了遗留系统的债券,深入探讨单体系统拆分服务的方法论。同时,对遗留系统的微服务架构改造的解决方案给出9个切实可行的核心实践思路。

第13章:Service Mesh详解(作者殷琦)。

随着微服务的持续发展,下一代微服务架构已然出现,本章将深入介绍Service Mesh的发展历程,以及结合具体案例带领读者使用Istio进行具体实践。

第14章:微服务监控实战(作者程超)。

本章重点介绍APM的原理,从零开始开发APM监控系统,还深入介绍Prometheus的安装和原理,以及如何使用Prometheus进行监控和预警。

作者简介

程超,网名小程故事多,现任某公司高级架构师,超过12年的Java研发经验,8年技术管理和架构经验,熟悉支付和电商领域,擅长微服务生态建设和运维监控,对Dubbo、Spring Cloud和gRPC等微服务框架有深入研究,帮助多家公司进行过微服务建设和改造。合著作品《深入分布式缓存》,阿里云MVP、云栖社区外部专家、Codingfly社区特聘技术专家、CSDN博主专家。

梁桂钊,现任某互联网公司高级开发工程师,参与过内容分发、K12教育、淘系电商等项目。目前,专注于新零售电商服务的业务摸索和电商服务创新实践。具有Java核心技术、微服务、分布式、高并发等领域一线实战经验,并对新兴技术方向和各种开源框架有浓厚兴趣。公众号“服务端思维”的作者。

秦金卫(KimmKing),现任某公司高级技术总监/Apache Dubbo PPMC,阿里前架构师/某商业银行北京研发中心负责人。关注互联网、电商、金融、支付、区块链等领域,10多年研发管理和架构经验,对于中间件、SOA、微服务,以及各种开源技术非常热衷,活跃于Dubbo、Fastjson、Mule、ActiveMQ等多个开源社区。个人博客http://kimmking.github.io

方志斌,现任某物联网公司高级研发工程师。目前专注于大型物联网平台架构的设计与开发工作。对于微服务、分布式、集群有一定的研究和实战经验。对Java领域的开源框架有浓厚的兴趣,喜欢深入分析、总结框架源码。SpringForAll社区核心成员,组织多次社区技术专题、问答等活动。

张逸,架构编码实践者,微服务架构设计者,领域驱动设计布道师,大数据平台架构师。著译作包括《软件设计精要与模式》《恰如其分的软件架构》《人件》等。个人微信公众号为“逸言”,个人博客:http://zhangyi.xyz

杜琪,网名阿杜,现任蚂蚁金服高级研发工程师,2015年6月毕业于南开大学,计算机系统结构硕士。毕业后开始接触分布式业务系统开发,曾在有赞负责用户中心基础服务,对分布式业务系统的稳定性、可靠性有丰富的经验。喜欢研究底层技术,喜欢研究疑难技术问题,例如JVM内存问题排查、GC调优,等等。有对外输出分享的习惯,是公众号javaadu的维护者。

殷琦,网名涤生,现任“美团点评”技术专家,2015年3月毕业于东华大学,软件工程硕士。2015年3月加入“美团点评”基础架构部,开始接触微服务架构,之后一直从事服务框架的研发工作,对微服务架构发展与演进有非常深刻的认识。个人比较喜欢研究并分享新技术,时刻关注并实践微服务架构最前沿的技术,如Service Mesh、Serverless等。

肖冠宇,曾就职于小米、人民网等互联网公司,具有丰富的大数据一线实战经验,专注大数据处理技术及机器学习算法研究。著有《企业大数据处理:Spark、Druid、Flume与Kafka应用实践》《Python3快速入门与实战》等书籍。

由于本书写作匆忙,难免有错漏之处,后续可以通过勘误的方式不断优化,欢迎读者多提宝贵意见。


程超

2019年3月于北京