易燃物汇聚 YouTube 有声书与书评
微服务实战(Dubbox +Spring Boot+Docker) 封面

微服务实战(Dubbox +Spring Boot+Docker)

肖睿 吴刚山 黄兴

492人在读
7.6万字总字数
¥18.5定价

内容简介

在这个凡事皆互联的时代,越来越多的人和物成为互联网上的节点,不断扩充着互联网这张大网的边界。节点即价值,更多的节点意味着更大的价值。那么如何去承载更多的节点就成为IT从业人士首要解决的问题。本书围绕秒杀抢购应用场景,对当下流行的Dubbox+SpringBoot+Docker微服务架构解决方案进行讲解。主要内容包括微服务架构介绍、Dubbox原理及运用、使用SpringBoot实现微服务、使用ActiveMQ+Redis承载高并发流量、使用ActiveMQ实现分布式事务、分布式下的第三方接入等。本书以项目为驱动,引领读者对相关技术进行实践性学习。同时为了提升读者对相关技术的实际运用能力,本书将实际开发经验注入到整个项目开发周期中,使用目前较为流行的Dubbox+SpringBoot+Docker微服务架构实现“双11”抢购项目。为保证最优学习效果,本书配以完善的学习资料和支持服务,包括视频教程、案例素材下载、学习交流社区、讨论组等终身学习内容,为开发者带来全方位的学习体验。

读者书评

★★★☆☆

《微服务实战(Dubbox + Spring Boot + Docker)》 第一章:架构设计 (一)业务场景与需求分析 1. 业务场景介绍 “双11”抢购项目是基于真实抢购需求的解决方案,用户操作流程包括登录项目首页、点击抢购商品,库存充足时抢购成功生成订单并锁定库存,用户需在规定时间内支付订单,否则释放库存。 2. 业务需求分析 高并发:抢购时可能有大量用户同时在线,如小米手机抢购某时刻可能超十万用户同时抢购,用户访问量庞大。 单用户多次操作:用户为增加抢到商品概率常多次点击抢购按钮,系统需判断用户是否已抢购成功。 保证抢购顺序:必须按照用户点击操作顺序保证先来后到,实现先到先得。 (二)架构设计内容 1. 业务架构设计 项目主业务是大量用户抢购少量商品,业务架构图涵盖微信登录、支付宝支付、抢购等功能,主要业务功能包括用户业务(登录、注销、权限验证、密码修改等)、商品业务(查询、库存判断、抢购等)、订单业务(生成、查询、取消、支付订单等)、支付业务(支付宝、微信支付及支付结果处理等)。 2. 应用架构设计 将“双11”抢购项目业务划分为用户、商品、订单、支付四个子业务模块。 3. 技术架构设计 高并发解决方案:采用消息队列缓存消息降低服务器请求压力。 消息幂等性解决方案:用Redis分布式锁及保存机制记录用户操作状态,保证一个用户多次重复操作只成功执行一次。 抢购顺序解决方案:利用消息队列的消息排队机制保证抢购公平性。 4. 部署架构设计 考虑系统高并发需求,使用Docker技术实现分布式集群部署项目,如“双11”抢购项目部署架构图中涉及PC、H5、APP、Nginx集群、API、Dubbo协议、ZooKeeper注册中心、Spring Boot、MyBatis、MySQL、MQ、Redis、Docker等组件,包括用户和商品等消费者与提供者的相关部署。 第二章:微服务架构 (一)软件行业与架构分类 1. 软件行业分类 分为传统软件行业(面向企业开发应用软件,最终使用者为企业内部员工,用户量小、并发考虑少、项目代码量少、数据量小、采用单体式架构、单个开发团队、单个服务器部署、运维复杂度低)和互联网软件行业(面向广大互联网用户,用户量大、必须考虑并发、项目代码量大、海量数据、采用分布式微服务架构、多个开发团队、集群服务器部署、运维复杂度高)。 2. 软件架构分类 单体式架构:项目所有源码置于一个总项目中开发、部署和管理,虽可分模块但源码同属一个项目。其存在项目迭代不灵活(代码多且乱,修改困难易引发风险)、项目组职责权限不清(源码暴露给所有成员易引发风险)、项目并发配置不灵活(无法针对模块扩展易造成资源浪费)等问题。 微服务架构:将庞大项目切分,每个模块独立成新服务,服务间可分布式通信。优势包括项目复杂度降低(分解为多个可管理服务,易开发、理解和维护)、团队界限明确(每个服务可由专门团队完成,开发者可自由选择技术)、扩展灵活(每个服务可独立扩展,可按需部署规模和选择硬件资源)。 (二)微服务架构相关概念 1. Provider和Consumer Provider是提供服务的一方,Consumer是调用服务的一方。为防止项目互相依赖,一般将提供者和消费者拆分成独立项目,如“双11”抢购项目的微服务拆分架构。 2. RPC和RESTful 微服务架构项目间通信方式有RPC(Remote Procedure Call,远程过程调用,如Dubbo及其升级版Dubbox支持,可像调用本地服务一样调用其他项目服务)和RESTful(Representational State Transfer,表述性状态传递,参数封装于URL内部,项目间可采用RESTful风格HTTP方式调用,Spring Cloud及Dubbox均支持)。 3. 分布式和集群 分布式架构按业务功能将系统拆分成独立子系统(服务),服务可部署在不同机器上,通过RPC或RESTful通信。集群是一组相互独立、通过高速网络互联的计算机,以单一系统模式管理,多个服务/机器一起提供相同服务,可提高系统性能和扩展性。 (三)微服务架构设计原则与解决方案 1. 设计原则 围绕业务切分:按业务拆分项目,避免业务交叉和接口实现复杂,如打车应用可拆成乘客、车主、支付服务,各服务业务不同,可独立维护和扩展。 单一职责:每个服务职责尽可能单一,保证模块化协作,多个服务搭配完成整体功能。 谁创建,谁负责:对应项目组负责项目创建及维护,开发团队直接负责项目开发、维护、部署,减少沟通成本。 2. 解决方案 选择微服务框架:可选择Dubbo系列(如Dubbo是阿里巴巴开发的高性能开源服务框架,能通过RPC实现服务输入输出,可与Spring框架无缝集成,Dubbox为其升级版)或Spring Cloud系列(基于Spring Boot的一整套微服务框架,提供多种组件)。 根据业务拆分项目:按照设计原则围绕业务、单一职责进行拆分。 选择部署策略:如采用Docker虚拟化部署等。 第三章:Docker环境搭建 1. 任务1:了解Docker相关概念 Docker是基于LXC技术、用Go语言开发、遵循Apache 2.0协议开源的容器引擎,可将服务器隔离成容器,容器创建和停止快速,资源需求少。与虚拟机不同,其运行架构少了虚拟机系统层和虚拟机操作系统层,通过Docker Daemon基于LXC技术共享宿主机操作系统内核并隔离空间形成容器。 Docker Container(容器)是宿主机隔开的独立空间,像普通系统一样操作,使用沙箱机制,相互隔离无性能开销,不依赖语言和框架,可使服务器像集群运行。 Docker Image(镜像)是对某一时刻容器状态备份,内容构建后不变,可复用和生成更多容器。 Docker Registry(记录中心)有官方和第三方的,提供常用容器打包的镜像,方便开发者下载后启动为本地容器。 Docker运行原理:Client可从Registry下载镜像、运行本地镜像成容器、通过Dockerfile构建新镜像,这些操作都通过Docker Daemon完成,它是核心。Docker有host、container、none、bridge四种网络模式,bridge为默认模式,会分配IP但容器停止重启可能IP变化,实际工作中常需设置固定IP,且要规划好网段,同时Docker端口映射可将容器内部端口映射到宿主机实现访问。Docker集群可运行相同程序提供相同服务提高负载能力。 2. 任务2:掌握Docker安装步骤 以Ubuntu 16.04.3为例,安装步骤:获取安装包并安装(如使用apt get install y docker.io);启动Docker后台服务(sudo service docker start);查看Docker版本(docker version),若显示版本号则安装成功,Docker官方还提供CentOS、Windows、MacOS等系统的安装包及相应支持版本。 3. 任务3:掌握Docker常用命令 镜像操作命令 查看:docker images查看本地镜像列表,IMAGE ID是镜像唯一标识,后续操作常基于此或镜像名称。 搜索:docker search镜像关键词可从Registry搜索镜像,默认从Docker官方Hub下载,可修改Registry地址。 拉取:docker pull [OPTIONS] NAME[:TAG|@DIGEST]可拉取线上镜像为本地镜像,拉取后可用docker images | grep镜像关键词查看是否成功。 删除:docker rmi镜像ID或镜像名称可删除本地镜像。 制作:编写Dockerfile(包含基础镜像、创建者信息、文件拷贝、端口监听等内容)后,执行docker build t镜像名称.Dockerfile路径可生成新镜像, t指定镜像名称,.表示Dockerfile所在路径。 容器操作命令 生成:docker run d p宿主机端口:容器端口 name容器名称镜像名称可启动镜像成容器并设置端口映射和名称,启动后可通过宿主机端口访问容器服务。 查看:docker ps | grep容器关键词查正在运行容器,docker ps a | grep容器关键词查全部容器。 进入:docker exec it容器ID或容器名称/bin/bash可进入容器内部操作。 退出:在容器内输入exit可退出。 停止:docker stop容器ID或容器名称停止运行容器。 启动:docker start容器ID或容器名称重新运行已停止容器。 删除:docker rm容器ID或容器名称删除已停止容器(注意与删除镜像命令区分)。 复制文件:docker cp宿主机目录及文件容器名称:容器目录可复制宿主机文件到容器内。 设置固定IP:先创建自定义网络(docker network create subnet = 172.18.0.0/16自定义名称),启动容器时指定IP(docker run it d net自定义名称ip 172.18.0.8 name mytomcat tomcat)。 4. 任务4:了解Docker可视化 常见可视化管理工具:DockerUI和Shipyard,可单独安装,方便管理镜像和容器,但具体安装步骤需查阅相关资料。 5. 任务5:使用Docker搭建项目环境 环境要求:搭建分布式微服务架构项目的服务器(运行Docker环境),内存最少16GB(DDR3或以上),CPU标准电压版i5 3470(或以上)4核单线程(双线程更好),硬盘500GB以上;其他机器内存8GB以上,CPU标准电压版i5 +双核 +,硬盘500GB以上。 搭建步骤 安装Ubuntu系统,设置固定IP,若远程连接需安装ssh服务并解决root远程连接拒绝问题。 安装Docker和Shipyard。 下载基础镜像(如docker pull centos,下载慢可用阿里云镜像加速)。 执行初始化脚本创建镜像(上传dockerfiles master.zip并解压,对env 10.1下.sh文件授权,执行./im 1.sh all n,注意脚本基于SSH,远程连接时不能关闭,若镜像创建失败需单独重新创建,命令为./im 1.sh镜像名称n Dockerfile路径)。 执行初始化脚本创建容器(./InitContainers 2.sh init,若有问题先删除容器,修改镜像后重新执行脚本)。 相关配置和检查 MySQL:通过Shipyard选择MySQL容器进入控制台,执行配置命令(登录、修改密码、授权等),若找不到grant命令,需进入容器执行ln s /usr/local/mysql/bin/mysql /usr/bin,配置完成后可通过客户端远程访问,注意需开放3306端口。 Redis:开放6379端口(执行./run.sh redis,即删除旧容器并启动新容器开放端口映射),修改Redis.conf文件(bind 127.0.0.1改为bind 0.0.0.0,protected mode yes改为protected mode no,去掉requirepass注释并设置密码),修改完后通过stop、start命令重启容器,注意不能用/run.sh redis创建容器以免覆盖修改内容,若连接提示失败信息可能是本地代理问题,需关闭IE浏览器代理后重新测试。 测试服务:容器创建成功后,在宿主机hosts里配置域名(如192.168.9.151对应相关域名),在宿主机浏览器访问域名测试Nginx稳定性,访问http://mq.local.com验证ActiveMQ是否正常启动,若不能访问,进入ActiveMQ容器目录执行/activemq start,启动成功后再访问,还可查看注册的提供者和消费者(访问http://da.local.com/governance/providers)。 生成镜像:若容器有数据增加或配置更改,可用commit命令生成新镜像(如使用Shipyard提交),新建镜像名称可加日期信息方便定位版本(尤其是数据库镜像)。 发布服务 上传脚本和Jar包(provider和consumer服务的Jar包及相关脚本)到服务器。 执行脚本,先切换到脚本所在目录执行./createContainer.sh创建容器,然后修改deploy provider.sh里的路径为上传地址后执行,最后执行/deploy.consumer.sh,注意脚本要按顺序执行,先启动提供者,在Dubbo管理界面查看服务注册成功后再创建消费者,服务启动后可通过配置的域名访问前端页面(如http://192.168.9.151:8888)。 第四章:Spring Boot初体验 1. 任务1:掌握Spring Boot的定义和作用 定义:Spring Boot遵循“约定优于配置”原则,以精简配置降低开发成本为目的,能自动完成很多项目框架搭建中的约定配置,可快速创建SSM框架,简化了传统SSH或SSM框架中的配置工作。 作用 使编码变简单:内部集成众多自动配置,涵盖主流框架及近百项技术,还可自定义自动配置。开发时配置集中于application.properties或application.yml文件,且有丰富元数据可代码提示配置,如集成MyBatis只需添加注解和少量配置信息。 使部署变简单:内置Web容器,提供启动类,写完代码运行启动类即可自动部署运行,对微服务架构意义重大。 使监控变简单:提供运行时应用监控和管理功能,可通过HTTP、JMX、SSH协议操作。能监控程序运行时的配置、环境变量、自动化配置信息,获取内存、线程池、HTTP请求统计等度量指标,还可对应用进行关闭等操作,减少中小团队监控系统开发量。 2. 任务2:掌握Spring Boot项目环境搭建的步骤 环境要求:JDK1.7及以上版本、Maven3.2及以上版本、IDEA14及以上版本。 环境搭建步骤 打开IDEA,新建Project或Module,JDK版本默认1.8(1.7及以上均可)。 点击Next,设置Maven坐标(如Group、Artifact等)、项目名称和版本号等信息。 继续点击Next,选择Maven依赖(如Web相关依赖)和Spring Boot版本号(系统默认稳定版本即可)。 再次点击Next,设置项目名称和存放位置,点击Finish完成项目创建。 3. 任务3:整合MyBatis和Redis 整合MyBatis 整合步骤 创建Spring Boot项目后,在pom.xml添加mybatis spring boot starter(MyBatis相关依赖)和mysql connector java(MySQL持久化依赖)。 在application.properties或application.yml中配置数据源,如指定驱动类名、数据库URL、用户名和密码。 继续配置文件,指定mapper映射文件位置(如classpath:mapper/*.xml)。 配置mapper接口位置,可使用@MapperScan注解标注mapper接口类所在package,或在mapper接口上使用@Mapper注解。 编写mapper中的SQL映射语句,启动项目测试,在浏览器输入相应URL访问,若能展示从数据库查询的数据则整合成功。 添加事务:在启动类添加@EnableTransactionManagement注解,在需要添加事务的方法上添加@Transactional注解。 整合Redis 整合步骤 创建Spring Boot项目后,在pom.xml添加spring boot starter redis依赖。 在application.properties中配置Redis连接参数,如数据库索引、服务器地址、端口、密码等。 创建RedisTemplate的Bean组件,通过创建RedisConfig类管理,RedisTemplate提供快速使用Redis的API,无需自行维护连接和事务。 创建RedisUtil工具类,调用RedisTemplate操作Redis服务端进行数据存取。 编写控制器类进行测试,启动项目,请求测试方法,若能获取预期的Redis数据则证明整合成 功。 4. 任务4:自定义Spring Boot的自动配置 实现效果:在项目中引入自定义自动配置后,在application.yml配置helloMsg参数,可实现输出“hello某某”功能。 步骤 创建Maven项目autoconfigdemo,打包方式为jar,作为自动配置项目。 添加自动配置相关依赖,如spring boot autoconfigure。 编写三个关键类 属性读取类:使用@ConfigurationProperties(prefix = "hello")注解,属性helloMsg默认值为“spring boot”,用于读取配置文件中hello.helloMsg的值。 核心事件类:包含核心方法sayHello(),方法中使用属性读取类中的属性值。 整合类:添加@Configuration、@EnableConfigurationProperties、@ConditionalOnClass、@ConditionalOnProperty、@ConditionalOnMissingBean等注解,整合属性读取类和核心事件类,实现条件判断和属性赋值等功能。 在项目资源目录创建spring.factories文件,添加org.springframework.boot.autoconfigure.EnableAutoConfiguration = com.example.demo.SayHelloAutoConfiguration,使依赖项目能识别自动配置类并自动配置。 创建Spring Boot项目testAutoConfig,引入autoconfigdemo项目作为依赖,创建Controller类,注入核心事件类实例,在类中编写请求处理方法,在application.properties中配置hello.helloMsg参数,启动项目,在浏览器访问相应URL,若显示预期结果则自动配置生效。

★★★★★

这本书的不是着眼一个点,而是以宏观架构的角度分析现在互联网公司使用的架构。对深陷细节,而无法从了解公司整体技术架构布局的人有益

★☆☆☆☆

太差了,内容是csdn劣质博客的复制,给的配套代码的项目都是错的!

书籍信息

作者肖睿 吴刚山 黄兴
出版社人民邮电出版社
出版时间2018-07-01
ISBN9787115486691
分类计算机-计算机综合
格式EPUB
完结状态连载中
章节数115