Spring Cloud微服务架构实战(txt+pdf+epub+mobi电子书下载)


发布时间:2021-02-20 20:47:40

点击下载

作者:陈韶健

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Spring Cloud微服务架构实战

Spring Cloud微服务架构实战试读:

前言

越来越多的企业使用Spring Cloud实现微服务架构设计。我们可以看到这样一种现象:不管是全新开发,还是系统重构,大家似乎都在争先恐后地使用微服务。对于一个Java开发人员来说,学习微服务相关知识大有裨益。

两年前,我写了《Spring Cloud与Docker高并发微服务架构设计实施》一书,于2018年6月出版,得到了许多读者的认可。随着Spring Cloud的版本更新和技术升级,我对原书的内容进行了更新和升级。因为原书名太长,所以本次改版将以一个全新的书名面世,于是就诞生了这本新书《Spring Cloud微服务架构实战》,读者不妨把本书当作对原书的一次改版。

本书的内容和结构将在保持原书风格的基础上进行全面的更新和升级,主要体现在以下三个方面。

○ 本书仍以电商平台作为案例,但使用的代码已经根据官方版本进行全面升级,并且对项目结构进行了全面的精简化处理,使其更适合实际的开发习惯。

○ 在数据库使用方面,从原来单一化使用JPA和MySQL,转变为多样化的设计,以适应不同业务场景的需求。同时,增加了MyBatis开发框架的使用和MongoDB的开发案例等章节。

○ 在运维部署部分中,不仅增加了使用公有云的设计,而且对于部署工具,在使用Docker容器引擎的基础上,介绍了一些高级工具,如Docker Swarm部署工具、Kubernetes工具的使用案例。

期望通过本书,我能与读者一起,共同经历一次愉悦的微服务构建之旅。本书的读者对象

本书的读者对象为广大的Java开发者、系统架构师和系统运维人员。本书特别适合使用过Spring开源框架或具有一定Spring框架基础知识的读者阅读。本书结构

本书由三部分组成,结构如下所示:

第一部分 架构设计

第1章 微服务架构与Spring Cloud

第2章 高并发微服务架构设计

第3章 大型电商平台设计实例

第二部分 程序开发

第4章 开发环境准备

第5章 微服务治理

第6章 类目管理微服务开发

第7章 库存管理与分布式文件系统

第8章 海量订单系统微服务开发

第9章 移动商城的设计和开发

第10章 商家管理后台与SSO设计

第11章 平台管理后台与商家菜单资源管理

第三部分 运维部署

第12章 云服务环境与Docker部署工具

第13章 可扩展分布式数据库集群的搭建

第14章 高可用分布式文件系统的组建

第15章 使用Jenkins实现自动化构建实例代码

本书的实例代码存放在开源中国的码云代码仓库中,读者可以通过下列链接打开各个项目工程进行下载或使用Git检出。

检出项目后,请获取本书实例的分支V2.1。以后如有代码更新,将会使用新的分支发布,请读者留意。勘误与反馈

在阅读本书过程中,遇到任何问题都可以通过如下链接发起话题与笔者交流。在本书出版后,如有勘误,也会在这里发布:致谢

感谢一直以来给予我无限支持的朋友们,包括出版社的编辑及其相关工作人员、广大的读者,以及我所有的同事和家人。你们的支持和鼓励,让我感到无比幸福,同时充满奋斗的激情。感谢曾经与我一起进行过微服务设计和开发的伙伴,正是我们共同成长的经历,才让先进的技术在实践中得以呈现。

如果书中有任何不对的地方或者纰漏,敬请读者不吝赐教,我将感激不尽。

读者服务

扫码回复:38286

◎ 获取免费增值资源

◎ 获取精选书单推荐

◎ 加入读者交流群,与更多读者互动第一部分 架构设计

第1章 微服务架构与Spring Cloud

第2章 高并发微服务架构设计

第3章 大型电商平台设计实例

本部分首先阐述了微服务架构设计的观念及发展历程,介绍了Spring Cloud工具套件中一些常用的主要组件的功能。其次以Spring Cloud工具套件为基础,介绍如何在微服务架构设计中进行权衡与提炼,构建微服务架构的最佳设计。最后通过一个电商平台设计实例,实现高并发的微服务架构设计。第1章 微服务架构与Spring Cloud

近几年大家都在谈论云原生和微服务,例如:

◎ 云原生技术能够帮助公司和机构在私有云、公有云和混有云等新型动态环境中,构建和运行可弹性扩展的应用。

◎ 微服务架构是一项在云端部署应用和服务的新技术。

诸如此类,不一而足。

而在实际中,我们也同样可以看到,越来越多的企业和机构都使用了基于Spring Cloud框架的技术开发微服务,组建基于云端服务器的应用平台。

那么对于一个企业、一个系统架师,或者从事IT行业的人员来说,对这些技术应该如何选择,架构设计应该如何定位,才能顺应技术潮流,处于技术的领先水平。

在这些新概念、新技术“满天飞”的环境中,我们需要厘清思维,才能确定方向,从而在我们的企业应用开发中发挥更好的效能。1.1 微服务架构的特点

在介绍微服务架构之前,我们先来看看云原生的概念。

云原生的概念,最早由Pivotal团队的Matt Stine于2013年提出。这个概念提出之后,在各大社区掀起了讨论的热潮,并得到了社区的不断完善。顾名思义,云原生是指专门为云平台部署和运行而设计的应用。云原生包含的内容非常多,包括DevOps(开发运维一体化)、持续交付、微服务、敏捷基础设施和12要素等几大主题。

2015年,Linux基金会领头成立了云原生应用基金会(Cloud Native Computing Foundation,CNCF),它致力于云原生技术的普及和可持续发展。CNCF认为云原生系统必须包含的属性有:容器化封装、自动化管理和面向微服务。

现在我们来看看微服务架构的概念。

据说早在2011年5月,在威尼斯附近的一个软件架构师研讨会上,就有人提出了微服务架构设计的概念,用它来描述与会者所看见的一种通用的架构设计风格。时隔一年之后,在同一个研讨会上,大家决定将这种架构设计风格用微服务架构来表示。

刚开始,对于微服务架构是没有一个完整的描述的,其可以看到的主要特征就是小型化、细粒度,以及使用轻量的HTTP通信等。

2014年3月,在James Lewis和Martin Fowler发表的一篇博客文章中,总结了微服务架构设计的一些共同特点。下面摘录的一段描述,被普遍认为可以作为微服务架构的定义:“简而言之,微服务架构是将单个应用程序作为一组小型服务开发的方法,每个服务程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。这些服务是围绕业务功能构建的,可以通过全自动部署机器独立部署。这些服务可能用不同的编程语言编写,使用不同的数据存储技术,并尽量不用集中式方式进行管理。”

上面提到的单个应用程序是指传统设计中的一个应用系统,或者一个大型应用,现在大家流行把它叫作单体应用。

可以看出,微服务架构是将一个大型系统使用小型化分割的方法,按业务功能拆分成各种独立的小应用。在各个小应用之间,可以使用轻量机制,即基于RESTful的HTTP进行通信,并以这种通信方式替换原来在程序之间直接调用的方式。微服务就是通过这种架构设计方法拆分出来的一个个独立的小型应用。

将一个大型系统分割成一些小型应用,而小型应用之间通过HTTP进行整合,这就是微服务架构的精髓所在。我们可以用一句通俗易懂的话来概括,那就是“分而治之,合而用之”。

从上面微服务架构的描述中,我们可以概括出微服务架构的几个显著特点。

1.小型化

微服务架构的突出之处就是小型化应用设计,最显著的特点就是应用程序变小了,以小为美。小型化的方式,使每个程序只负责完成一定范围内的业务功能,可以更加专一地做好一件事情。这是我们日常解决复杂问题的常用手法,即“大事化小,小事化无”。

2.自治化

每个微服务都是一个独立的应用,独立使用数据库,独立部署,独立运行。这种独立性符合高内聚松耦合的设计原则。在微服务开发和维护过程中,每个微服务都是独立自治的,一个服务的更新和迭代不会依赖于其他服务,同时也可以尽可能做到不对其他服务造成影响,或者可以将这种影响降到最小。

3.扁平化

去中心化的扁平化管理,可以更加自由地发挥每一个微服务的优势。但是这种自由并不是随意的混搭和组合,而是使用智能化的服务治理,让更多的微服务在发挥个性优势的同时,处在一种杂而不乱的有序可控的范围之内。虽然从整体上微服务已经没有集中管理的概念,但是微服务可以从全局范围出发,发挥更佳的性能优势。

4.轻量级设计

微服务小型化的特点,就是轻量级设计方法的最好体现。这种轻量级的设计同样体现在微服务的通信设计之中。微服务之间的常用通信方式有两种,一种是使用轻量的REST协议进行API式的同步通信,另一种是使用轻量的异步消息通信。

5.渐进式设计

一个产品从成型到成熟是要经历一个过程的,这个过程是渐进式设计的。由于微服务小型而独立的特点,使得微服务设计可以以业务驱动的方式进行快速迭代,从而不断修正和调整,使产品趋于成熟。所以,微服务非常适合敏捷开发。1.2 微服务架构与整体式架构的区别

如果是一个小型项目,则使用整体式(单体式)架构设计,其好处非常明显,因为它的设计和开发,以及测试和部署,都可以在一个项目上完成。

如果一个业务复杂的大型项目也使用整体式架构设计,就会存在很多问题。可能刚开始的时候,还感觉不到什么,但是随着时间的推移,加入的功能越来越多,一个项目就变成了一块巨大的石头,笨重而丑陋。

面对一个巨大的项目,开发人员想要弄清楚它的代码逻辑,就必须花费很多的时间。而针对某一项功能的更改,极有可能“牵一发而动全身”,这会让实施人员变得举步维艰。所以这种项目将会变得越来越难以维护,越来越不便更新。

整体式架构的稳定性也不能得到有效的保障,如果其中的一个模块出现问题,将会影响整个系统的正常运行,甚至造成整个系统的崩溃。而在对问题进行跟踪时,因为系统庞大,往往难上加难。

另外,一个巨大的项目,也不方便进行持续开发,它不能适应需求的快速变更,无法使用快速迭代的敏捷开发方法,也不便在某些方面进行新技术的更替,所以这样的项目最终就变成了业务发展的绊脚石。

相比之下,大型项目使用微服务架构的优势非常明显。

微服务架构设计,就是把复杂事情进行简单化处理。它将一个复杂的系统,拆分成一些小型的应用来开发,首先就将问题进行了分层和简化。因为小型而变得简单,代码的逻辑会变得更加清晰,这无疑解放了程序员繁重的劳动;因为简单,所以能够专注,能够将每一件事情都做好,做到极致。

微服务架构中独立的小型应用,非常适合使用敏捷开发方法,即快速响应需求的变化,进行快速的更新、迭代。

因为每个微服务都是独立自治的,即一个服务的故障不会影响全局系统的正常运行,或者说可以将这种影响降到最低。并且,微服务架构的容错设计,可以避免这种情况的发生。

微服务架构高可用的特点,是系统稳定性的最好保障。微服务能够支持高并发的调用、高流量的访问,能够持续满足平台规模化发展的要求,可以很容易地使用弹性化设计,所有这些是整体式架构无法做到的。

如果我们用一个六边形结构来表示整体式架构,则可以绘制出如图1-1所示的结构图。

这个六边形的核心是整体式架构的领域业务模型,它通过系统接口使用各种适配器,如数据库适配器、文件适配器等,与外部管理系统进行连接;然后又通过接口,使用诸如REST API适配器、Web UI适配器等给外部App和终端用户提供接口调用和Web访问等服务。

从图1-1中可以看出,整体式架构是一个大而全的系统。在微服务架构设计中,我们可以使用一个小正方体来表示每个微服务,它相当于对整体式架构进行拆分之后得到的结果,如图1-2所示。图1-1图1-2

小正方体的微服务同样使用接口,同样通过各种适配器连接外部管理系统,而微服务之间也可以通过接口,使用REST API适配器进行通信。对于App用户和终端用户,将分别由不同的微服务提供相应的适配器及服务。

通过对上面这两种结构图形的比较可以非常明显地看出整体式架构与微服务架构的区别。1.3 微服务架构与SOA的比较

SOA(Service-Oriented Architecture)即面向服务架构,是一种粗粒度、松耦合的面向服务架构设计方法。SOA可以看作B/S模型、XML/Web Service技术之后的自然延伸。

SOA是一种企业级的架构设计方法,使用企业服务总线(ESB)的方式,构建一个能够更高效、更可靠、更具重用性的企业信息系统。相比于C/S和B/S等模式的设计,使用SOA架构的系统已经取得了很大的进步,系统可以更加从容地面对业务的急剧变化,所以SOA曾经风靡一时,例如Dubbo、Dubbox、Mule、WSO2、CXF等都是较为优秀的SOA开源工具。

微服务架构与SOA从表面上看是有一点相似的,以至于早期有人认为微服务就是一个细粒度的SOA。实际上,它们的区别还是很大的。

区别之一:微服务通信的轻量级设计与SOA重量级设计。这也是两种架构的最大区别。微服务的通信设计使用简单的HTTP,一般基于REST协议实现。而SOA一般使用复杂的协议,如WebService或BPEL(Business Process Execution Language,业务流程执行语言)等,还需要使用服务描述性语言来定义标准接口。

区别之二:微服务的自治性与SOA的集中式管理。微服务架构使用去中心化的扁平化管理方式,每个服务都是一个独立的应用程序:独立管理、使用独立的数据库、独立部署和独立运行。SOA是一种整体式架构,使用集中式的管理方式和统一的数据中心。所以微服务的开发和部署更加灵活和快速,可以更快地响应需求的变化和业务的更新。

区别之三:SOA与微服务架构的应用的规模不同,SOA是在企业计算领域中产生的一种架构设计方法,在应用规模上的范围有限。而微服务架构是产生于互联网环境中的一种设计方法,它更能适应无限广阔的环境,以及互联网高流量、高并发的规模扩展。

微服务架构的高可用设计、自由伸缩、负载均衡、故障转移等特性是SOA设计不够重视的地方。微服务的高可用设计通过微服务治理,为每个微服务的管理和部署提供了一个可以扩展的无限广阔的空间,它可以表现为一个三维结构,如图1-3所示。

在这个三维结构中,如果我们用y轴表示微服务应用,用x轴表示微服务应用副本,用z轴表示微服务治理,那么它将提供服务路由和负载均衡管理等功能。如果有需要,它还可以提供分区管理的功能。这种三维结构让微服务天生就具备了自由伸缩的条件,以及可以进行无限扩展的能力。图1-31.4 微服务架构的优势

从前面的比较可以看出,整体式架构已经不适合于一个大型项目或者一个互联网应用平台的开发了,而SOA架构虽然曾经风靡一时,但是其重量级的设计成为快速开发的障碍,所以这两种架构都将被微服务架构取代。微服务架构轻量级的设计风格,不管是从理论上,还是从技术实现上,已经越来越多地得到人们的肯定和认可,大家对它的未来发展趋势都抱有一种乐观的态度。微服务的优势如下:

第一,开发简单。

微服务架构把复杂系统进行拆分之后,让每个微服务应用的开发都变得非常简单。对于开发者来说,因为不用针对很多代码进行分析,所以效率会成倍地提高。

第二,快速响应需求变化。

一般的需求变化都来自局部功能的变更,这种变更将落实到每个微服务上,而每个微服务的功能相对来说都非常简单,更改起来非常容易,所以微服务非常适合使用敏捷开发方法,能快速响应业务需求的变化。

第三,随时随地更新。

一方面,一个微服务的部署和更新并不会影响全局系统的正常运行,另一方面,使用多实例的部署方式可以做到一个服务的重启和更新在不被察觉的情况下进行。所以,每个微服务在任何时候都可以进行部署和更新。

第四,系统更加稳定可靠。

微服务运行在一个高可用的分布式环境之中,有配套的监控和调度管理机制,并且还可以提供自由伸缩的管理,充分保障了系统的稳定性和可靠性。

第五,规模可持续扩展。

每个互联网应用都具有巨大的市场潜力,一旦这种潜力被激发,就需要系统能支持大规模的高并发访问。使用微服务架构设计的系统,可以适应业务的快速增长,并且可持续支持规模化的扩展。1.5 为实施微服务架构做好准备

微服务架构并不是一种新技术,它只是一种全新的设计理念,所以,为了能够更好地实施微服务架构设计,我们必须做好前期准备,从思想观念、团队管理和自动化基础设施上进行相应的变革。

1.5.1 思想观念

在进入微服务领域之前,必须从做项目的观念转变成做产品的观念。如果是一个软件项目,在完成了业务需求的设计之后,最终交付使用,其项目开发的生命周期就宣告结束。而做产品则完全不一样,只要产品成型上线,产品有存在的价值,开发就永远没有终结。随着产品的更新换代,其中的应用程序和组件也要跟着不断地进行更新和迭代。

微服务架构的渐进式设计的特点,就是一种做产品的观念的真实体现。一方面,一个产品的最初成型设计,由于种种原因并不可能把所有功能都考虑得很周到,这需要一定的时间进行慢慢的磨合与创新。另一方面,市场总是处于变化之中,所以产品的业务功能也会随着时间的推移而发生一定的变化。

做产品的观念将贯穿于一个系统平台的整个生命周期之中,并随着平台的发展和演化,最终将产品打造成一个充满活力的生态体系。

1.5.2 团队管理

传统的团队管理,是按技术进行分组的。在一个开发团队中,可能有UI设计组、前端开发组、后端开发组、测试组和运维组等。

在微服务架构实施中,开发时是按业务功能进行划分的,所以对团队的管理,最好也以业务进行分组,将产品设计、前端开发、后端开发、测试和运维等人员围绕业务功能分配在同一组中,这样不但可以增强团队的凝聚力,还可以避免将大量的时间浪费在不同组别的沟通和工作协调上。

在实际操作中,因为前端开发和运维管理的消耗不是很大,所以对这两部分人员可以进行机动的调整。但这种调整最好是在业务相近的领域中进行的,并保持一定的连贯性,即原来由谁负责的工作,在更新和维护时还是由他来负责。

为了减少资源的浪费和增加每个人员的工作饱和度,一个业务小组往往并不只负责一个微服务,有可能负责两三个微服务的开发,这主要由微服务划分的粗细粒度来定。

1.5.3 自动化基础设施

从整体式架构向微服务架构转变之后,项目数量会增加,迭代的周期会变短,对测试和运维人员也会提出更高的要求,并且其工作量会越来越大,所以单纯依靠人力来完成这两部分的工作是远远不够的,这就要求必须有自动化基础设施的支持,来完成自动集成、自动测试,以及持续交付、持续部署的工作。

一个原来由几个项目支撑起来的应用平台,在使用微服务架构进行拆分之后,可能会变成几十个项目,甚至上百个项目。如果还像原来那样分配测试和运维工作,则势必要增加更多的人员。

在服务器资源的使用上,也会相应的有所增加。因为每个微服务应用所占用的资源并不是很大,所以可以在原来的服务器中使用虚拟机技术扩展服务器群组。对于微服务的部署,我们将主要以Docker容器为主导,使用虚拟化技术实施自动化建设,这样可以非常自由地将微服务分散部署在分布式环境之中。而对于中小型企业来说,更好的实施方案是使用云计算服务商提供的资源,这样能更有效地利用服务器的资源。1.6 Spring Cloud的优势

谈到微服务的设计和开发,大家可能会想到Netflix OSS、Spring Cloud、Service Comb和Service Mesh等技术。

Netflix OSS可以说是最早使用微服务架构的一个开源技术,它的注册中心(Eureka)、负载均衡(Ribbon),以及智能路由(Zuul)等组件至今仍是Spring Cloud框架中的一些重要组成部分。

Spring Cloud是开发人员比较熟悉的一个微服务开发框架,Spring Cloud社区也是一个粉丝众多,并且至今仍然非常活跃的微服务社区。

Service Comb是华为开发的一个可以支持多语言的开发框架,目前可以支持Go和Java等开发语言。

Service Mesh是一种基于基础设施层、实现服务之间快速通信的新的微服务开发技术。

Spring Cloud是在应用层实现微服务,其功能齐全的工具组件为进行微服务设计和开发提供了非常便利的条件,所以绝大多数开发人员都选择使用Spring Cloud实施微服务架构设计。正因为如此,Spring Cloud的生态体系非常庞大,各种大大小小的社区都非常活跃。

Spring Cloud是由Pivotal团队提供的一个用来开发微服务的开源工具集。在使用这一工具集开发微服务时,我们可以非常方便地处理诸如服务注册与治理、服务间通信与集群管理、高可用和横向扩展等问题。

从Spring Cloud官网中可以看到下面这段描述,它概括地介绍了这一工具集所包含的一些组件和功能。“Spring Cloud为开发人员提供了快速构建分布式系统时的一些常见模式的工具(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、(集群)领导选举、分布式会话、群集状态等)。分布式系统的协调产生了样板式的模式,使用Spring Cloud的开发人员可以方便地使用这些模式的服务和应用程序,它们将在任何分布式环境中都能很好地工作,包括开发人员自己的笔记本电脑、裸机数据中心和Cloud Foundry等托管平台。”

实际上,在使用Spring Cloud这套工具集开发一个特定的微服务应用时,我们并不需要特别关注所有这些组件的工作方式和原理,只需专注于某一项特定功能的开发就可以了。1.7 Spring Cloud工具套件介绍

Spring Cloud工具套件是一个庞大的家族,并且它对第三方的工具有很好的兼容性。限于篇幅,我们无法对所有组件进行一一介绍,所以这里只对一些核心的和常用的组件进行一个简要说明,帮助读者从整体上认识和了解这个工具套件。Spring Cloud工具套件的思维导图如图1-4所示。图1-4

(1)Spring Cloud Netflix

这是Spring Cloud工具套件的核心,包含Netflix OSS的一些基础组件,如Eureka、Hystrix、Zuul、Archaius、Ribbon和Turbine等,其中:

◎ Eureka是云端服务发现,用于云端服务注册与定位,以实现云端服务发现和故障转移等服务治理。

◎ Hystrix是一个可提供断路器、容错机制、降级机制等功能的管理工具,通过这一工具可以实现对第三方库的延迟,以及对故障转移提供全面的监测和调控。

◎ Zuul是在云平台上提供动态路由、监控和安全等边缘服务的管理框架。Zuul相当于设备和微服务应用的Web网站后端所有请求的前门。

◎ Archaius是一个配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。

◎ Ribbon提供云端负载均衡管理,有多种负载均衡策略可供选择,能自动配合服务发现和断路器使用。

◎ Turbine是聚合服务发送事件流数据的一个工具,使用可配置方式监控集群中服务的运行情况。

(2)Spring Cloud Bus

一个事件、消息总线,用于在集群中传播状态变化,可与Spring Cloud Config联合使用,实现动态配置管理。

(3)Spring Cloud Cluster

提供Leadership选举,如ZooKeeper、Redis、Hazelcast和Consul常见状态模式的抽象和实现。

(4)Spring Cloud Consul

封装了Consul操作,Consul是一个服务发现与配置工具,可以与Docker容器无缝集成。

(5)Spring Cloud Security

基于Spring Security的安全工具包,可以为应用添加安全控制。

(6)Spring Cloud Sleuth

日志收集工具包,封装了Dapper和log-based追踪,以及Zipkin和HTrace操作,为微服务应用实现了一种分布式追踪解决方案。

(7)Spring Cloud Data Flow

大数据操作工具,是Spring XD的替代产品。它是一个混合计算模型,结合了流数据与批量数据的处理方式。

(8)Spring Cloud Stream

数据流操作开发包,封装了与Redis、Rabbit、Kafka等发送和接收消息的方法。

(9)Spring Cloud Starters

使用Spring Boot方式启动项目工具包,为Spring Cloud提供开箱即用的依赖管理。

(10)Spring Cloud Pipeline

提供了一个有步骤的固定部署管道,以确保应用程序可以以零停机的方式部署,并且很容易在出错后进行回滚。

Spring Cloud工具套件除自身包含丰富的组件库外,对于第三方库,也具有很好的兼容性。借助于Spring Cloud Consul,我们可以很方便地使用Consul搭建注册中心,在提供服务注册与发现的基础上,实现远程配置管理功能。

下面两个组件是由第三方提供的。

(1)Spring Boot Admin

Spring Boot Admin通过Spring Boot提供的监控接口,如/health、/info等,加上对当前处于活跃状态的会话数量、当前应用的并发数、延迟及其他度量信息等,可以对分布式环境中的Spring Cloud应用实现实时的全程监控。

(2)zipkin-dependencies

zipkin-dependencies是由第三方封装的可运行应用程序包,可以对Spring Cloud应用的运行和调用关系进行全程跟踪,从而为故障诊断和检查提供帮助。它可以使用Web方式或与Kafka结合使用的方式传递日志数据,然后自动分析数据,生成应用之间的调用路线图。

在应用及其接口的调用中,Spring Cloud工具套件提供了Gateway和OpenFeign等组件,以支持在不同环境下对应用之间的快速调用。

Spring Boot是Spring Cloud的基础组成部分,也是Spring开发框架的根本所在。其中:

◎ Netty是一个以事件驱动的非阻塞的高并发服务。

◎ WebFlux是一个全新的反应式Web框架。

◎ Spring Data是一个通用的基于Spring编程模型并且能够保留数据底层特殊性的数据存取组件。

◎ Spring Security是一个功能强大、高度可定制的身份验证和访问控制框架。

◎ Spring AMQP是基于Spring框架的AMQP消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的POJO消息监听等,极大地方便我们基于RabbitMQ等消息中间件进行相关开发。1.8 Spring Cloud的版本说明

Spring Cloud的版本号为了与各个小项目,或其他组件的版本号区分开来,使用了大版本号的方式,并以伦敦地铁站的名字命名,同时按字母顺序进行排列,截止到目前,累计的版本号有:Angel、Brixton、Camden、Dalston、Edeware、Finchley和Greenwich等,本书将使用第七个大版本,即Greenwich,其对应的Spring Boot版本为2.1.6发行版。

有关Spring Cloud的版本更新可留意官方发布的信息。

版本更新不会对我们正在使用的程序产生任何影响,但是随着版本更新,可能会有一些新功能和新技术的产生。例如,在从版本Edgware到Finchley的更新中,Spring Boot从1.x升级到了2.x,这其中的变化是比较大的。最大的变化是Spring Boot 2.x之后,提供了一些反应式编程的方法,让我们可以开发一些非阻塞的高并发服务。1.9 小结

本章介绍了微服务架构的来龙去脉,说明了基于微服务的设计和开发,已经得到越来越多的企业和个人的认可,而以微服务架构为主流的技术也已迅速发展起来。

Spring Cloud,因为其丰富的工具套件、全面的设计,以及很好的兼容性,使它成为众多开发人员喜欢和热爱的一种开发工具,所以也将在更大的范围中流行起来。

所以,作为一个Java开发者,学习和掌握Spring Cloud的开发方法,不仅仅是一种“时尚”,更有可能成为一项优秀的看家本领。

朋友们,让我们一起努力吧,一起来学习Spring Cloud!第2章 高并发微服务架构设计

作为一个IT从业人员,我们经常会碰到类似于下面的一些问题:

◎ 单个项目巨大而沉重,难以维护。

◎ 系统稳定性得不到更有效的保证。

◎ 怎样才能持续地提升系统的性能。

◎ 怎样才能快速地响应需求的变更,并且系统更新不会引起任何抖动。

◎ 怎样才能更好地适应系统规模化的扩张。

针对上面这些问题,我们无时无刻不在努力地进行各种各样的尝试和探索,寻求更好的解决方案,或者使用更先进的技术。

目前来看,在互联网环境之中产生的微服务架构设计是一个比较理想的解决方案。2.1 微服务总体架构设计

一个使用了微服务的电商平台的总体架构设计如图2-1所示。

这是一个典型的微服务总体架构设计图,自上往下看,可以分为前台应用层、API接入层、业务应用层、服务中心和基础资源5层结构,每层结构都有其自身的功能和特别的设计。

前台应用层可支持任何应用的客户端,如物联网、微信小程序、移动App及API开放平台等。

API接入层可以使用Spring Cloud Zuul或Gateway设计网关,起到一个承上启下的作用,并且具备鉴权、路由和流控等功能。

业务应用层是微服务的基本应用,它本身也是一个微服务。这里主要是电商平台的一些后台管理功能。

服务中心就是使用微服务设计的各种API接口服务,这些服务一般使用基于RESTful风格的设计,对外提供轻量API接口服务。另外,在基础服务中间件中,提供服务治理、消息队列、监控告警、配置管理等服务。

基础资源是我们自己组建的私有云或者租用的公有云,为微服务搭建容器平台,提供数据存储、DevOps和镜像仓库等服务。

在这个架构设计图中,除了上面这些,在水平方向上,还可以看到负载均衡、日志记录、链路跟踪,以及基于大型电商平台的运营平台等服务。图2-1

下面介绍微服务架构设计的优势,以及它所表现出来的高并发、高性能的特点。

◎ 自然的压力分解。

◎ 可弹性伸缩的集群环境。

◎ 高度的独立性设计。

◎ API的分层调用关系。

◎ 高可用的基础资源支持。

◎ 快速响应的自动化基础设施。

◎ 完善的监控体系。

◎ 微服务的安全保障。2.2 自然的压力分解

对于一个大型系统来说,在使用微服务架构设计之后,原来针对单独一个应用所承受的压力,就自然而然地分散到众多微服务中。各个微服务可以使用不同的数据库,并且可以分开部署在不同的服务器上,所有这些,都是一种压力分流的方法。2.3 可弹性伸缩的集群环境

微服务的部署和发布,最终都将纳入微服务的治理环境之中。这种治理环境是一个分布式的集群管理体系,对于每一个微服务来说,都能对其实行动态路由、负载均衡、服务降级等一系列的管控措施。同时,允许每个微服务根据其所承受的压力情况,进行自由的扩展和收缩,即具备可弹性伸缩的特性。

图2-2是微服务的一个运行环境示意图,不管是作为提供接口服务的REST API微服务,还是提供操作界面的Web UI微服务,都可以根据需要在云端服务器上很方便地增加其运行副本,从而扩展它的负载能力。而且,这种扩展并不局限于在一个虚拟环境中,它可以跨机房、跨地区,甚至跨国界。当然,微服务所使用的基础资源,同样具备自由扩展的能力。这样才能保证在整个系统平台中可以应对任何高并发的调用,而不存在性能瓶颈。图2-22.4 高度的独立性设计

微服务架构的去中心化的设计特点,为每个微服务的设计提供了高度的独立性。这样,我们就可以根据每个微服务的特点,选择数据库或者通信方式,以发挥其独特的效能。

比如,对于数据量不是很大,关联性不是很复杂的数据,可以使用传统的关系数据库,如MySQL或者Oracle。对于数据量较大,更新不是很频繁的数据,可以使用MongoDB等NoSQL数据库。对于一些关系复杂,关联比较多的数据,则可以使用图数据库,如Neo4j等。这样针对不同的业务特性,使用合适的数据库,就可以充分发挥应用程序的性能。

对于通信方式来说,有些程序对实时数据很敏感,只能使用接口的方式进行实时调用;而有的程序对实时数据并没有太多要求,但是通信量很大,这时就可以使用异步消息进行调用。这样,通过有针对性的独立设计,可以最大限度地发挥应用程序的效能。2.5 API的分层调用关系

微服务使用GateWay网关接口方式对外部环境提供服务。这种方式使用分层结构设计,在GateWay层既可以直接调用REST API微服务接口服务,也可以再经过一层设计,即使用Backend for Frontend层对复杂的调用进行一次包装设计。例如,当需要对多个微服务进行调用时,可以将多个调用组装成一个单一接口服务,从而避免微服务内部环境与外部环境的多重通信。另外,有的通信可以使用MQ(Message Queue)方式以异步方式进行。

图2-3是一个GateWay多层次调用关系示意图,在这个图中,每个层次都可以进行负载均衡设计,从而能够非常有效地提高这种调用关系的并发性。其中,微服务内部环境的负载均衡设计可以由服务治理进行处理,而处在外部环境中的GateWay的负载均衡设计则可以使用Nginx等工具进行实施。图2-32.6 高可用的基础资源支持

在微服务架构设计中,通常是使用云服务来组建基础资源的。其中,云服务既可以租用云服务提供商的服务器,也可以自己组建私有云,或者两者兼而有之。

基于云端组建的基础资源,包括数据库、缓存和文件系统等,这些资源既可以使用云服务提供商提供的优质RDBS、分布式数据库和对象存储等服务,也可以自己搭建各种集群体系。这样,就可以保证每一种基础资源的使用都不会成为另外一个系统的瓶颈,这是对高并发微服务架构设计的有力补充和支持。2.7 快速响应的自动化基础设施

自动化基础设施建设是微服务架构设计中的一项基本要求,涉及代码管理、代码检查、集成测试、自动化测试、持续交付、自动化部署等一系列问题。

不管是持续集成、持续交付,还是敏捷开发等,这些都是DevOps的一种管理机制。这种管理机制可以提高微服务架构设计中各个微服务应用的应变能力,可以快速响应整个系统的变更和更新,从而充分提升整个微服务架构的总体效能。2.8 完善的监控体系

通过使用Spring Cloud工具套件并结合第三方工具,我们可以为微服务的运行环境构建一个完善的监控体系,从而有效保证微服务的稳定性和健壮性。

这一监控体系包括健康检查、告警系统、链路跟踪、日志记录和查询等内容。通过健康检查和告警系统,可以及时发现系统中可能存在的问题和隐患,从而减少事故的发生。链路跟踪和日志记录可以提供非常详细的服务调用轨迹,非常适合用来检验和查找复杂的系统内部问题,或者某些可能存在的隐藏错误。2.9 微服务的安全保障

越大型的系统,系统的并发性越高,危险性越大,其安全保障也越重要。系统的安全设计包括防火墙设计、防攻击设计、访问控制设计、数据保密设计、数据备份及灾备等各个方面的内容。而安全防护是系统安全的第一道屏障,我们将使用防火墙及动态感知等设备,为微服务的服务器组建,提供一个安全可靠的分布式环境。

如图2-4所示,是根据阿里云设计的一个安全管理架构,通过安全防护和安全预警,对不安全的访问或可能存在的攻击进行有效隔离,从而保证系统的安全和稳定。

如果需要进行跨机房或跨地区的微服务互联,则必须在保证安全的前提下,通过VPC专网使用专用通道进行通信。图2-42.10 小结

微服务架构设计风格本身就是一种高并发的机制。依靠云服务环境,我们可以把微服务使用的基础资源,通过自动化基础设施建设,提供成一种可伸缩、高并发、高可用的环境。同时,通过使用Spring Cloud工具套件和第三方库,充分保证微服务的高度可扩展性。不管是哪一种架构设计,系统的稳定性、健壮性和可靠性都缺一不可。第3章 大型电商平台设计实例

本章我们将使用微服务架构风格设计一个大型电商平台,这个平台将以SaaS方式提供一个类似于S2B2C的服务。

电商平台是一个大众化的应用平台,读者对它的功能都比较熟悉,本章通过电商平台的微服务架构设计,帮助读者深入理解微服务设计和开发在实际中的具体使用。3.1 电商平台总体设计

S2B2C是一种新零售的解决方案,简要来说,体现了供应商(或平台提供方)、分销商和顾客的一种交易关系。

电商平台是电子商务交易平台的简称,是指通过互联网为企业和个人提供网上交易的管理平台。电商平台是一个网上自由交易场所,为普通用户(顾客)和虚拟商铺(商家)建立一种可信的买卖关系,通过互联网实现不受地域和时间等条件限制的贸易行为。

本书将以一个通用的电商平台为基础进行设计,但不做太多复杂的功能,也不关注太多的细节实现,我们只是从大体上完成一个网上购物的流程,以此体会微服务架构在实际中的使用方法。

3.1.1 总体业务流程设计

图3-1是电商平台的一个总体业务流程设计。

这个流程表示,顾客在进行网上购物时将从浏览商品、挑选商品开始,然后经过结算、支付,生成一个交易订单。商家通过后台的订单管理,可以确认顾客的交易行为,并联系物流公司进行发货处理。顾客在收到商品后,即完成了一个正常的交易流程。顾客还可以对这次交易进行评价。图3-1

其中,在结算的过程中,如果顾客感到不满意,则可以在一定的期限内,对生成的订单执行撤销交易的操作。

另外,如果顾客收到商品后,对商品质量不满意,则可以申请售后服务,或者直接申请退货,开启退货的申请流程。商家审核退货后,可以给顾客退回货款,从而结束交易。

一个完整的交易过程,还包括其他业务流程的设计,这些流程包括以下几个方面的设计。

顾客在购买商品之前,必须先到平台进行注册,然后编辑个人基本资料,新增和维护收货地址等。平台顾客也可以注册成为商家的会员,享受商家提供的会员级别的服务。

商家可通过后台进行商品发布、订单管理、物流处理、退货审核、会员注册审核及其管理等基本操作。

对于平台运营方来说,可以对入驻的商家进行管理,包括商家的注册与审核、商家的权限管理等。

3.1.2 总体业务功能设计

电商平台总体业务功能设计包括以下几个方面。

在商品展示方面,包括商品的类目配置及管理、商品的库存、商品的定价、商品信息编辑、商品上下架管理等。

在交易操作方面,包括顾客管理、会员管理、购物车管理、支付管理、订单管理、物流管理等。

在商家管理方面,包括商家的入驻与注册的审核、商家的操作权限配置、商家的账户管理、结账和对账等。

上述这些功能,根据其所面向的用户对象不同,可以将电商平台的总体业务功能分为面向顾客的门户商城、面向商家的商家管理后台和面向平台运营方的平台管理后台三大部分,如图3-2所示。图3-2

其中,门户商城就相当于商家的店铺,是商家展示商品、顾客浏览商品并进行实际交易的地方。商家管理后台,是商家进行商城事务日常管理的操作平台。平台管理后台是平台运营方的一个管理后台,是用来管理商家及其操作权限的一个运营管理系统。3.2 电商平台业务模型设计

根据电商平台的总体业务功能,我们可以创建相应的业务模型。其中,对于门户商城,我们只提供移动商城的业务模型设计。我们可以使用手机、iPad等移动设备访问移动商城。在移动设备上,我们可以通过普通浏览器、App、微信公众号或小程序等方式访问移动商城。

电商平台最终的业务模型设计包括:移动商城业务模型、商家管理后台业务模型和平台管理后台业务模型。

3.2.1 移动商城业务模型

移动商城的业务功能包括:商品展示、分类查询、订单查询、购物车,以及个人信息等。它的业务模型如图3-3所示。图3-3

其中,各个模块的功能简要介绍如下。

商品展示提供了商品搜索和查询等功能,包括商品列表分页展示和单个商品详情查看等,并在商品详情查看中提供购买下单的功能。

分类查询提供按分类列表查询商品的功能。

订单查询可以实时显示订单状态,查询订单的物流进度,可以进行收货确认和对完成交易的订单进行评价等。

购物车提供增删改查的功能,顾客可以添加商品、移除商品、更改商品的购买数量等。

个人信息包括对顾客基本信息的管理,比如手机号、联系人、收货地址等。同时,顾客也可以注册为某一商家的会员。在注册成会员后,顾客可以享受商家提供的优惠、折扣和积分等会员特权服务。

3.2.2 商家管理后台业务模型

商家管理后台的业务功能包括:用户管理、商品管理、账户管理、订单管理、评价管理、物流管理、会员管理,以及点击率统计等。商家管理后台的业务模型如图3-4所示。图3-4

其中,各个模块的功能简要介绍如下。

用户管理为商家提供了管理后台操作用户的功能,可以增加和删除用户,并为每个用户配置操作权限。

商品管理可以对商品进行添加、编辑,以及商品上下架等操作。

账户管理包括商家的收款账户设置、收款记录查询和统计等功能。

订单管理可以为商家提供订单处理、订单查询和订单统计等功能。

评价管理为商家提供查看顾客对商品的评价的功能。

物流管理可以为商家提供订单发货和物流管理等功能。

会员管理为商家提供会员等级和相关特权设置,可对所属的会员进行集中查询和管理。

点击率统计可对顾客浏览商品的行为进行查询和统计。

3.2.3 平台管理后台业务模型

平台管理后台的业务功能包括:商家管理、商家权限管理、商品类目管理、顾客管理和平台操作员管理等。平台管理后台的业务模型如图3-5所示。图3-5

其中,各个模块的功能简要介绍如下。

商家管理包括商家的创建、注册和审核等功能。

商家权限管理是对使用角色、资源和模块等对象进行管理。首先由角色决定一个商家可以访问的资源,从而确定商家的访问权限。然后使用模块对资源进行层级管理,形成一种层级菜单。这样,当一个商家登录时,就可以根据其拥有的权限分配合理的菜单结构。

商品类目管理由平台方进行统一管理,不提供给商家操作这一方面的功能。平台将按合理的标准提供全面的分类体系。

顾客管理包括顾客的注册和个人信息编辑等,由平台方统一管理。同时,顾客也可以注册为某一个商家的会员。

平台操作员管理提供了平台操作员创建和权限管理等功能。通过平台操作员管理,可以实现平台访问控制的安全设计。3.3 合理划分微服务

微服务架构设计的首要任务就是合理划分微服务,即围绕业务功能创建微服务项目。在划分微服务时,有关微服务粗细粒度的考量,建议在平台创建的初始阶段使用粗粒度的方法,按业务功能进行划分。随着业务的发展及其运营的情况,再依据发展规模考虑是否继续细分。下面,我们将使用水平划分法和垂直划分法两种方法相结合的方式创建微服务。

一方面,在水平方向上,根据业务功能划分微服务,并把这次划分所创建的微服务称为REST API微服务。REST API微服务负责业务功能的行为设计,主要完成数据管理方面的工作,并通过使用REST协议,对外提供接口服务。

另一方面,在垂直方向上,再以REST API微服务为基础,实现前后端分离设计,创建Web UI微服务。Web UI微服务不直接访问数据,它只专注于人机交互界面的设计,它的数据存取将通过调用REST API微服务来完成。

这样,经过两次微服务划分,我们就可以创建出REST API和Web UI两种类型的微服务。也就是说,我们只要使用两种类型的微服务,就可以构建一个复杂的业务系统。

使用REST API和Web UI微服务,结合高性能和高并发的设计,再通过微服务的多副本发布,就可以构建一个能适应任何规模访问的、多维的、稳定牢固的网格结构,并且这个网格结构还具有自由伸缩的特性,可以根据业务的发展规模进行扩充或者缩编,这样就可以快速地搭建一个可持续扩展的系统平台。3.4 创建REST API微服务

根据电商平台的总体设计及其各个业务模型的功能,就可以创建和划分微服务了。

下面使用3.3节中微服务架构的设计方法划分微服务,即使用水平划分法和垂直划分法创建微服务项目。

首先使用水平划分法,按电商平台的业务功能,进行REST API微服务划分。下面是初步划分出来的一些微服务。

◎ 类目服务

◎ 商品服务

◎ 购物车服务

◎ 订单服务

◎ 支付服务

◎ 物流服务

◎ 评价服务

◎ 顾客服务

◎ 会员服务

◎ 点击率服务

◎ 商家服务

通过这些微服务,就可以创建出相关的REST API微服务。REST API微服务是一个独立的小应用,并且有独立的数据库,可以独立部署和独立运行。REST API微服务使用实体对象进行数据的存取操作,然后对外提供基于HTTP的RESTful接口服务。

这些微服务的大体功能说明如下。

◎ 类目服务,使用二级分类体系,对外提供分类信息的录入、查

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载