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


发布时间:2021-08-04 02:38:24

点击下载

作者:肖睿 陈昊 王社

出版社:人民邮电出版社

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

Spring Cloud 微服务分布式架构开发实战

Spring Cloud 微服务分布式架构开发实战试读:

前言

在这个万物互联的时代,越来越多的人和物成为互联网上的节点,不断扩充着互联网这张大网的边界。节点即价值,更多的节点意味着更大的价值。如何去承载更多的节点成为IT从业人士必须要解决的问题。本书重点介绍基于Spring Cloud的分布式应用开发。全书以票务网站大觅网项目的应用场景为例,通过解决方案形式的内容安排引领读者学习分布式架构开发。各章具体内容安排如下。

第1章:微服务架构与项目设计。详细分析大觅网的业务场景并讲解微服务架构相关内容。主要内容包括如何依据微服务架构的设计原则设计大觅网项目的业务架构、应用架构、技术架构、部署架构以及数据库架构,在介绍微服务架构时,提出 Spring Cloud解决方案。

第2章:Spring Cloud初体验。详细讲解Spring Cloud微服务架构。首先介绍Spring Cloud框架的概念、和Spring Boot框架的关系以及Spring Cloud的体系架构,接下来介绍Spring Cloud的三个重要组件的使用,分别为使用Eureka实现注册中心及注册服务、使用Feign实现声明式REST调用、使用Hystrix实现微服务的容错处理,最后介绍如何基于微服务原则对大觅网进行架构搭建。

第3章:虚拟化技术 Docker+Jenkins。详细讲解分布式开发中经常应用的虚拟化Docker技术和实现自动发布的Jenkins技术。首先介绍Docker的基础概念、实现原理、操作命令,接下来介绍如何基于Docker技术实现大觅网开发和测试环境的快速搭建,最后基于Docker Compose+Jenkins+Git讲解如何实现大觅网项目在开发、测试、线上环境中的自动发布。

第4章:分布式日志处理。主要讲解如何在分布式项目中跟踪子项目间的请求、如何收集各子项目的日志。首先介绍如何使用Spring Cloud组件Sleuth实现微服务跟踪,接下来介绍如何使用ELK+Kafka实现微服务系统的日志收集。

第5章:分布式业务实现。主要讲解分布式开发下两个常见问题的解决方案,即分布式事务问题和分布式线程安全问题。以企业中常用的消息中间件 RabbitMQ 为例讲解如何使用消息中间件RabbitMQ实现分布式事务,以及如何使用Redis-setnx实现分布式系统下的线程同步。

第6章:分布式部署实现。主要讲解Spring Cloud架构的微服务项目如何部署,包括使用Spring Cloud Ribbon实现服务负载均衡、使用Spring Cloud Zuul实现服务统一网关、使用Spring Cloud Config实现分布式统一配置。

第7章:分布式数据存储。主要讲解如何使用分布式搜索引擎 Elasticsearch 实现商品全文检索。首先介绍 Elasticsearch 的相关概念、运行原理、语法,以及如何在大觅网中进行 Elasticsearch 的集成,接下来介绍 Mycat 的概念、语法,以及使用 Mycat实现大觅网订单库的水平分库。

第8章:集成测试。主要介绍如何对已开发完毕的分布式项目进行系统性的测试,包括如何使用JMeter进行压力测试以及如何使用Sonar进行代码规范测试。

除了以上有关Spring Cloud微服务架构解决方案的内容外,本书还涵盖了敏捷项目管理框架Scrum、分布式版本管理Git、代码检测工具Sonar等相关内容。

本书由课工场大数据开发教研团队组织编写,参与编写的还有陈昊、王社、胡艳蓉、邓小飞、黄兴等院校老师。由于时间仓促、书中不足或疏漏之处在所难免,殷切希望广大读者批评指正。智慧教材使用方法扫一扫查看视频介绍

由课工场“大数据、云计算、全栈开发、互联网 UI 设计、互联网营销”等教研团队编写的系列教材,配合课工场App及在线平台的技术内容更新快、教学内容丰富、教学服务反馈及时等特点,结合二维码、在线社区、教材平台等多种信息化资源获取方式,形成独特的“互联网+”形态——智慧教材。

智慧教材为读者提供专业的学习路径规划和引导,读者还可体验在线视频学习指导,按如下步骤操作可以获取案例代码、作业素材及答案、项目源码、技术文档等教材配套资源。

1.下载并安装课工场App。(1)方式一:访问网址www.ekgc.cn/app,根据手机系统选择对应课工场App安装,如图1所示。图1 课工场App(2)方式二:在手机应用商店中搜索“课工场”,下载并安装对应App,如图2、图3所示。图2 iPhone版手机应用下载图3 Android版手机应用下载

2.登录课工场 App,注册个人账号,使用课工场 App 扫描书中二维码,获取教材配套资源,依照如图4至图6所示的步骤操作即可。图4 定位教材二维码图5 使用课工场App“扫一扫”扫描二维码图6 使用课工场App免费观看教材配套视频

3.获取专属的定制化扩展资源。(1)普通读者请访问http://www.ekgc.cn/bbs的“教材专区”版块,获取教材所需开发工具、教材中示例素材及代码、上机练习素材及源码、作业素材及参考答案、项目素材及参考答案等资源(注:图7所示网站会根据需求有所改版,下图仅供参考)。图7 从社区获取教材资源(2)高校老师请添加高校服务QQ群:1934786863(如图8所示),获取教材所需开发工具、教材中示例素材及代码、上机练习素材及源码、作业素材及参考答案、项目素材及参考答案、教材配套及扩展PPT、PPT配套素材及代码、教材配套线上视频等资源。图8 高校服务QQ群第1章 微服务架构与项目设计技能目标

了解大觅网业务场景

掌握微服务架构相关概念

掌握微服务架构设计理念

了解大觅网架构设计

了解大觅网项目管理设计本章任务

学习本章内容,需要完成以下4个工作任务。记录学习过程中遇到的问题,可以通过自己的努力或访问ekgc.cn解决。

任务1:了解大觅网业务场景

任务2:了解微服务架构

任务3:了解大觅网架构设计

任务4:了解大觅网项目管理设计任务1 了解大觅网业务场景

大觅网为大型票务类电商网站,为用户提供各类演出的购票、选座服务。本书以大觅网项目贯穿,对微服务架构相关技术进行讲解。大觅网主要包括如下功能。

商品展示:用户通过大觅网官网,可以进行相关演出商品的查看,如图1.1所示。图1.1 大觅网首页

商品搜索:用户可以根据关键词、城市、商品分类、演出开始时间等条件进行搜索,商品搜索界面如图1.2所示。图1.2 商品搜索界面

用户注册登录:用户可以使用邮箱进行注册,并可以通过邮箱和密码进行登录。

除此之外,大觅网还提供第三方登录(微信登录)功能,如图1.3所示。图1.3 用户登录界面

商品详情:用户可以查看演出的详细信息,并决定是否购买,如图1.4所示。图1.4 商品详情页

选座:决定购买商品后,用户可以在指定排期中选择座位,如图1.5所示。图1.5 选座页

选座成功后,用户可以继续下单。下单成功后,用户可以对订单进行支付。系统提供了支付宝和微信两种支付方式,如图1.6所示。图1.6 支付页

依据以上的业务分析,可以总结出大觅网的系统主业务流程如图1.7所示,登录流程如图1.8所示,注册流程如图1.9所示。图1.7 系统主业务流程图图1.8 登录流程图图1.9 注册流程图任务2 了解微服务架构1.2.1 软件架构分类

在如今的软件市场中,基于用户群体的不同,一般将软件行业分为两类,即传统软件行业和互联网软件行业。

传统软件行业:面向企业开发应用软件,软件的最终使用者为企业内部员工。

互联网软件行业:面向广大互联网市场开发软件,软件的最终使用者为互联网的所有用户。

基于传统软件行业和互联网软件行业面向的用户群体的不同,二者在实际的开发、部署、运维等方面也有着很大的区别,具体如表1-1所示。传统软件开发一般会选择单体式架构,而新型互联网软件开发一般会选择时下较为流行的微服务架构。下面分别介绍两种架构。表1-1 传统软件行业VS互联网软件行业

1.单体式架构

在传统的企业内部应用系统开发中,一般采用单体式架构。所谓单体式架构,即将项目的所有源代码都放置于一个总项目中进行开发、管理和部署。虽然项目分为多个模块,但多个模块的源码均属于一个项目,不同模块的开发者共同维护一份项目源码。单体式架构项目的源码结构如图1.10所示。

随着信息技术的迅猛发展,互联网用户已成为软件市场的最大客户。不同于企业级用户,互联网用户拥有更多的选择空间,更加关注软件自身的用户体验度。对于软件提供商而言,一方面要保证软件响应的灵敏度,另一方面要保证软件功能的多样化、定制化。在这样的背景下,传统的单体式架构已不能满足互联网用户的复杂需求。主要原因如下。图1.10 单体式架构项目源码结构(1)项目迭代不灵活

对于互联网项目而言,互联网软件提供商经常会根据用户的不同体验需求,调整项目功能,即更新迭代软件版本。而单体式架构把项目代码合归一处,迭代的版本越多,项目代码就越多、越乱。在一个庞然大物中去寻找和修改指定模块的代码将非常困难,而且容易引发未知风险(如影响已上线功能)。(2)项目组职责、权限不清

对于互联网项目而言,由于项目比较庞大,大多需要分不同的项目组进行开发。不同项目组之间需要进行严格的代码保密和权限划分,以避免核心代码泄露或错改其他项目组代码。而传统的单体式架构项目将所有的项目源码暴露给项目开发的所有成员,更容易引发风险。(3)项目并发配置不灵活

对于互联网项目而言,由于面对的是互联网上的所有用户,所以在开发过程中,需要考虑项目在高并发下的处理能力。传统的单体式架构在解决高并发问题时,多采用集群方式横向扩展,即增加机器做负载均衡,如图1.11所示。每一个立方体代表一个项目的发布包(如war包),立方体中的每个小方格代表项目的一个模块。由于不同模块流量不一(如一次登录可以多次查询商品信息,因此用户模块的流量一般低于商品模块的流量),而单体式架构无法针对对应模块进行扩展,一些流量低的模块也不得不随着流量高的模块一起被扩展,这样就造成了资源的浪费。

由于单体式架构存在上述问题,于是就出现了针对庞大项目进行拆分的微服务架构。图1.11 单体式架构项目扩展

2.微服务架构

微服务架构是将原来庞大的项目进行拆分,拆分后的每一个模块独立形成一个新的项目(后称服务),服务之间可按照一定方式进行通信的架构,如图1.12所示。图1.12 单体式架构项目VS微服务架构项目

微服务架构的优势主要有如下几点。(1)项目复杂度降低

微服务架构通过将巨大单体式应用分解为多个服务的方法解决了复杂性问题。在功能不变的情况下,应用可被分解为多个可管理的服务。每个服务都有一个用RPC或者消息驱动API定义清楚的边界,这就使得每一个项目的代码量大大减少,且关注的业务更为专一。(2)团队界限明确

微服务架构使每个服务都由专门的开发团队来负责开发,不同的开发团队可以自由地选择开发技术,团队之间只需要定义好服务调用规则即可。由于服务都相对简单,使用最新技术重写原来项目的代码也变得更加容易。(3)部署灵活

微服务架构使得每个服务都能够更方便地进行独立扩展,可以根据不同服务的特点采用不同的部署策略。两种架构的部署扩展方式如图1.13所示。在微服务应用开发中,分布式集群是最常见的架构部署方式。图1.13 单体式架构项目VS微服务架构部署扩展知识扩展

分布式架构就是按照业务功能,将一个完整的系统拆分成一个个独立的子系统,每个子系统称为“服务”。这些服务可以部署在不同的机器上,互相通过接口来进行通信。

集群架构是一组相互独立的、通过高速网络互联的计算机,它们构成一个组,并以单一系统的模式加以管理。通俗地讲,就是由多个服务/机器一起做相同的事情,提供相同的服务,以此来提高系统的性能和扩展性。

了解微服务架构更多内容请扫描二维码。1.2.2 微服务架构概念微服务架构

1.服务类型

在微服务架构的项目中,至少要包含两类服务:Provider(提供者)和Consumer(消费者)。Provider即提供服务的一方,Consumer即调用服务的一方。在项目开发中,由于同一个项目既有可能是提供者也有可能是消费者,因此在项目拆分的过程中,为了防止项目的互相依赖(如用户模块需要调用商品模块的服务,商品模块也需要调用用户模块的服务),一般会将提供者和消费者单独拆分成独立的项目。大觅网项目的微服务拆分架构图如图1.14所示。图1.14 微服务架构拆分图

2.常见微服务架构(1)Dubbo/Dubbox

Dubbo是阿里巴巴公司开源的一个优秀的高性能服务框架。基于Dubbo可实现服务间高性能的RPC调用。在集成方式上,Dubbo可以和Spring框架进行无缝集成。Dubbox为其升级版,由当当网进行升级改良。(2)Spring Cloud

Spring Cloud是基于Spring Boot的一整套实现微服务的框架,它提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。本书将基于Spring Cloud技术进行微服务架构开发实战。

3.调用方式

微服务架构项目之间一般有两种调用方式,即RPC和RESTful。(1)RPC

RPC即Remote Procedure Call(远程过程调用),通俗地讲,就是可以在一个项目中像调用本地服务一样去调用其他项目的服务。具体调用方式如示例所示,其中使用@DubboConsumer 注解注入的 Service 即为其他项目中的服务。常见的微服务框架,如Dubbo及其升级版Dubbox均支持RPC的调用方式。示例

@Component

public class QgGoodsServiceImpl implements QgGoodsService {@DubboConsumerprivate RpcQgUserService rpcQgUserService;@DubboConsumerprivate RpcQgGoodsService rpcQgGoodsService;@DubboConsumerprivate RpcQgGoodsMessageService

rpcQgGoodsMessageService;//省略部分代码

}(2)RESTful

REST全称是Representational State Transfer,是一组架构约束条件和原则。狭义上,RESTful可理解为在Web请求中,将参数封装于URL内部(如使用URL:www.dm.com/getUserInfo/12,获取用户ID为12的详细用户信息)。在微服务中,项目之间可以采用RESTful风格的HTTP方式互相进行调用。常见的微服务框架,如Spring Cloud及Dubbox均支持RESTful的调用方式。

4.微服务架构设计原则(1)围绕业务切分

在决定将项目分成多少个子项目时,需要按照对应的业务进行拆分,避免业务过多交叉,接口实现复杂。比如打车应用可以拆分为三个子项目:乘客服务、车主服务、支付服务。三个服务的业务特点各不相同,支持独立维护,都可以再次按需扩展。(2)单一职责

在服务设计上,每一个服务的职责尽可能单一。这样可以保证服务的模块化协作,即多个服务互相搭配完成一个整体功能。(3)谁创建,谁负责

采用微服务架构对项目进行拆分后,出现了很多小的项目,这些项目需要单独部署。为了减少沟通成本,采用微服务架构的项目一般由其开发团队直接对项目的开发、维护、部署进行负责。任务3 了解大觅网架构设计

本任务采用微服务架构的设计原则,基于Spring Cloud微服务技术对大觅网项目进行架构设计。下面主要从四个维度对系统架构进行描述,分别为业务架构、应用架构、技术架构和数据库架构。

1.业务架构

业务架构是用来描述系统主要业务功能的架构。一般来说,确定系统的业务架构只需要回答一个问题:用户使用系统可以干什么。大觅网的业务架构如图1.15所示,分为四类业务,分别为用户业务、商品业务、订单业务以及支付业务。用户通过大觅网可以完成对这四类业务的操作。图1.15 业务架构图

2.应用架构

应用架构是用来描述系统应用结构的架构,通俗地讲,就是描述系统包含多少种类型的应用,以及应用之间关系的架构。大觅网的应用架构如图1.16所示。大觅网采用微服务架构对项目进行划分,划分后系统包含前端应用、网关应用、环境应用以及后端应用。其中,后端应用又可分为三类,分别为基础服务类应用、提供服务类应用、消费服务类应用。基础服务类应用包括本微服务架构的注册中心Eureka以及一些微服务管理类组件。提供服务类应用是微服务架构中的提供者,即提供接口供其他程序调用的程序。消费服务类应用就是调用提供者接口进而实现业务的程序,在微服务程序中称为消费者。一般,提供者应用包含数据库操作和简单业务逻辑操作,消费者应用包含复杂业务逻辑的处理和用于数据展示的数据封装。另外,大觅网项目依赖众多的第三方应用环境,如Redis、Jenkins、Elasticsearch、ELK等,通称为环境应用。图1.16 应用架构图

3.技术架构

应用架构设计完成后,需要进一步考虑系统设计的细节。技术架构就是用来描述系统业务所采用的技术的架构。大觅网的技术架构如图1.17所示,说明如下。

采用Docker环境进行项目环境搭建和配置。

采用MySQL作为系统数据库并采用集群方式进行配置和部署。

采用Mycat数据库中间件管理数据库集群。

采用Elasticsearch集群实现商品信息的存储和搜索。

采用Redis作为缓存来缓存用户数据。

采用Spring Cloud微服务架构实现微服务管理,将系统应用拆分为提供者、消费者、网关及注册中心。

采用Spring Cloud整套解决方案,包括使用Fegin进行接口管理、使用Hystrix进行容错、使用Ribbon实现负载均衡。

采用前后端分离技术,将数据的业务逻辑处理和展示分开,将数据展示独立为前端项目。前后端之间采用Nginx反向代理实现接口访问。

采用Jenkins实现程序的自动发版和CI(持续集成)。图1.17 技术架构图

4.数据库架构

数据库架构即描述系统数据结构的架构。基于微服务设计思想对

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载