微服务架构设计的首要任务就是合理划分微服务,即围绕业务功能创建微服务项目。在划分微服务时,有关微服务粗细粒度的考量,建议在平台创建的初始阶段使用粗粒度的方法,按业务功能进行划分。随着业务的发展及其运营的情况,再依据发展规模考虑是否继续细分。下面,我们将使用水平划分法和垂直划分法两种方法相结合的方式创建微服务
一方面在水平方向上:
根据业务功能划分微服务,并把这次划分所创建的微服务称为REST API微服务。REST API微服务负责业务功能的行为设计,主要完成数据管理方面的工作,并通过使用REST协议,对外提供接口服务。
另一方面在垂直方向上:
再以REST API微服务为基础,实现前后端分离设计,创建Web UI微服务。Web UI微服务不直接访问数据,它只专注于人机交互界面的设计,它的数据存取将通过调用REST API微服务来完成。这样,经过两次微服务划分,我们就可以创建出REST API和Web UI两种类型的微服务。也就是说,我们只要使用两种类型的微服务,就可以构建一个复杂的业务系统。
使用REST API和Web UI微服务,结合高性能和高并发的设计,再通过微服务的多副本发布,就可以构建一个能适应任何规模访问的、多维的、稳定牢固的网格结构,并且这个网格结构还具有自由伸缩的特性,可以根据业务的发展规模进行扩充或者缩编,这样就可以快速地搭建一个可持续扩展的系统平台
- 微服务容器化开发实战
- 微服务治理:体系,架构, 实践---2020
- 微服务架构基础(Spring Boot + Spring Cloud + Docker)---将编程开发,持续集成,部署运维等环节都讲到,照着本书可搭建一套运行环境,构建一个demo
- 微服务分布式架构基础与实战: 基于Spring Boot + Spring Cloud
- Spring Cloud微服务架构进阶---讲得非常详细
- Spring Cloud微服务架构实战---2020
- Spring Cloud Alibaba微服务原理与实战---2020
- 大型企业微服务架构实践与运营---2019
- 名师讲坛: JAVA微服务架构实战(SpringBoot + SpringCloud + Docker + RabbitMQ)---2020 李兴华
- 微服务实战:Dubbox+Spring Boot+Docker
- Spring微服务架构设计---2020
- Kubernetes微服务实战---2020
- 分布式微服务架构: 原理与实战---2019
- 微服务分布式架构开发实战
- Spring Cloud Alibaba微服务原理与实战
- 微服务架构设计模式
- 深度实践微服务测试 2022
Service Mesh微服务 | 微服务之间的几种调用方式哪种最佳? | 如何将微服务部署在kubernetes集群之上 |
---|
1 微服务架构设计---微服务的关注点在能力分治,将同类型的能力聚集在一个应用中,做到功能解耦,分别演化。这里涉及到两个点:微服务内部组件间如何调用 & 微服务整体如何对外提供服务。成熟方案是通过微服务框架(如SpringCloud)的功能组件完成,如前者属于服务治理和发现(Eureka),后者通过网关(gateway)
- 微服务时代----采用软件层面独力应对微服务架构问题
- 微服务领域驱动设计
- 分布式微服务架构中需要解决的问题
- 服务的注册发现
- 跟踪治理
- 注册中心的设计与实现
- 微服务分布式配置中心组件
- 服务调用
- 服务容错
- 服务网关
- 链路追踪
- 负载均衡
- 故障隔离
- 服务间远程调用
- 传输通信
- 伸缩扩展
- 微服务应用安全——Security
- 微服务认证授权
- 微服务之分布式事务解决方案
- Seata 分布式事务
- 亿级流量架构之分布式事务思路及方法
- 亿级流量架构之分布式事务解决方案对比
- 微服务分布式事务之LCN、TCC特点、事务补偿机制缘由以及设计重点
- 微服务下如何保证事务的一致性
- Apache RocketMQ--RocketMQ事务消息中间件主要解决了生产者端的消息发送与本地事务执行的原子性问题
- Rest API微服务设计 ------Spring Cloud与Docker高并发微服务架构设计实施
- WebUI API微服务设计
- 微服务之间调用规则设计
- 数据最终一致性设计
- 分布式集群架构设计
- 微服务运行环境安全设计
- 微服务如何聚合Swagger实现接口文档管理
- 微服务设计和高并发实践
- 高并发微服务架构设计
- 自然的压力分解
- 可弹性伸缩的集群环境
- 高度的独立性设计
- API的分层调用关系
- 高可用的基础资源支持
- 快速响应的自动化基础设施
- 完善的监控体系
- 微服务的安全保障
- 大型电商平台微服务设计入门案例
* [1 基于Spring Cloud的微服务架构方案 ](https://icyfenix.cn/exploration/projects/microservice_arch_springcloud.html)
* [2 基于Kubernetes的微服务架构方案 ](https://icyfenix.cn/exploration/projects/microservice_arch_kubernetes.html)
* [3 基于服务网格:Istio的微服务架构方案 ](https://icyfenix.cn/exploration/projects/servicemesh_arch_istio.html)
* [4 基于无服务:AWS Lambda的微服务架构方案 ](https://icyfenix.cn/exploration/projects/serverless_arch.html)
- 后微服务时代---从软件层面独力应对微服务架构问题,发展到软、硬一体,合力应对架构问题的时代,此即为“后微服务时代”
- 伸缩扩展对应的硬件解决方案
- 1 微服务架构的通信机制---微服务架构包括微服务外部通信和微服务内部通信, 对于通信方式来说,有些程序对实时数据很敏感,只能使用接口的方式进行实时调用;而有的程序对实时数据并没有太多要求,但是通信量很大,这时就可以使用异步消息进行调用。在微服务架构模式中,你将使用两种不同类型的通信,同步通信以及异步通信。同步通信是指服务之间通过 HTTP 或 GRPC 相互调用。异步通信意味着服务通过消息总线或事件总线相互交互,这意味着服务之间没有直接连接
- 2 分布式数据管理
- 处理读请求
- 处理更新请求
- 3 微服务稳定性保证的常用手段
- 4 微服务下如何保证事务的一致性
- 5 微服务编排
客户端可以向micro service发起RESTful HTTP请求,但是会有这种情况发生:客户端为了完成一个业务逻辑,需要发起多个HTTP请求,从而造成系统的吞吐率下降,再加上无线网络的延迟高,会严重影响客户端的用户体验,为了解决这个问题,一般会在服务器集群前面再加一个角色:API gateway,由它负责与客户度对接,并将客户端的请求转化成对内部服务的一系列调用。这样做还有个好处是,服务升级不会影响到客户端,只需要修改API gateway即可
适合网站提供小规模的,自包含的服务。很多互联网网站都提供这样的服务,比如OAuth2服务
不同于上面的架构,客户端看到的是web界面或者富客户端程序,而不是调用API。UI层独立发布,可以访问服务组件
它类似前面的模式,但是使用一个轻量级的消息broker取代RESTful的服务调用。这个轻量级的broker不会执行服务的编排,传输和路由,这和SOA不同,不要把它看作SOA的简化版
内部服务之间的通信方式有两种:基于HTTP协议的同步机制(REST、RPC);基于消息队列的异步消息处理机制(AMQP-based message broker)
SpringCloud,是一套生态,就是解决以上分布架构的4个问题, 想使用SpringCloud,必须掌握SpringBoot,因为SpringCloud是基于SpringBoot;
1. Spring Cloud Netflix,出来了一套解决方案:
Api网关,zuul组件
Feign--->HttpClient--->HTTP的通信方式,同步并阻塞
服务注册与发现,Eureka
熔断机制,Hystrix
2018年年底,Netflix宣布无限期停止维护。生态不再维护,就会脱节。
2. Apache Dubbo zookeeper,第二套解决系统
Api:没有!要么找第三方插件,要么自己实现
Dubbo是一个高性能的基于Java实现的,RPC通信框架!
服务注册与发现,zookeeper:动物园管理者(Hadoop,Hive)
没有:借助了Hystrix
不完善,Dubbo
3. SpringCloud Alibaba 一站式解决方案
阿里:dubbo+HFS
京东:JFS
新浪:Motan
当当网:DubboX
最大区别:Spring Cloud 抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式
item | Dubbo | Spring Cloud |
---|---|---|
服务注册中心 | Zookeeper | Spring Cloud Netfilx Eureka |
服务调用方式 | RPC | REST API |
服务监控 | Dubbo-monitor | Spring Boot Admin |
断路器 | 不完善 | Spring Cloud Netfilx Hystrix |
服务网关 | 无 | Spring Cloud Netfilx Zuul |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总栈 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
Java架构:一文读懂微服务架构的重构策略 | 微服务架构经验和教训 |
---|
阿里架构师教你:如何快速搭建一个微服务架构 | 耦合到底意味着什么呢 |
---|
云原生应用之路——从Kubernetes到Cloud Native | 如何基于 Spring Cloud Alibaba 构建微服务体系 |
---|
ChaosBlade x SkyWalking 微服务高可用实践 | 微服务框架:如果不用Spring Boot,还可以选择谁 |
---|
【项目实战】微服务多租户系统后台管理系统---基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户系统架构 |
---|
手摸手教你从开发到部署(CI/CD)GO微服务系列 |
---|
- 微服务架构深度解析与最佳实践 - 第一部分
- 微服务架构深度解析与最佳实践 - 第二部分
- 微服务架构深度解析与最佳实践 - 第三部分
- 微服务架构深度解析与最佳实践 - 第四部分
- 微服务架构深度解析与最佳实践 - 第五部分
- 微服务架构深度解析与最佳实践 - 第六部分
- 微服务架构深度解析与最佳实践 - 第七部分
- 微服务架构深度解析与最佳实践(全篇汇总)
-
最全面微服务教程: SpringBoot + DDD + Apache Kafka实现最终一致性(2):在Kubernetes与Istio运维微服务
-
[最全面微服务教程: SpringBoot + DDD + Apache Kafka实现最终一致性(2):在Kubernetes与Istio运维微服务 英文版
-
Microservice Architecture with Spring Boot, Spring Cloud and Docker 例子程序
-
AWS 上的项目:将整体式应用程序拆分为微服务(使用 Amazon Elastic Container Service、Docker 和 Amazon EC2)
- 单体应⽤和微服务各是什麽?
- 单体应⽤拆分成微服务的正确姿势
- 正常的微服务调⽤的流程
- 微服务架构的组成部份
微服务技术条目 | 落地技术 |
---|---|
服务开发 | SpringBoot、Spring、SpringMVC等 |
服务配置与管理 | Netfix公司的Archaius、阿里的Diamond等 |
服务注册与发现 | Eureka、Consul、Zookeeper等 |
服务调用 | Rest、PRC、gRPC |
服务熔断器 | Hystrix、Envoy等 |
负载均衡 | Ribbon、Nginx等 |
服务接口调用(客户端调用服务的简化工具) | Fegin等 |
消息队列 | Kafka、RabbitMQ、ActiveMQ等 |
服务配置中心管理 | SpringCloudConfig、Chef等 |
服务路由(API网关) | Zuul等 |
服务监控 | Zabbix、Nagios、Metrics、Specatator等 |
全链路追踪 | Zipkin、Brave、Dapper等 |
数据流操作开发包 | SpringCloud Stream(封装与Redis,Rabbit,Kafka等发送接收消息) |
时间消息总栈 | SpringCloud Bus |
服务部署 | Docker、OpenStack、Kubernetes等 |
--- | --- |
- 微服务网关
- 微服务监控
- Nagios
- 微服务通信
- RPC
- REST
- HAL
- 消息队列
- 后台任务处理系统
- 微服务配置
- 微服务日志
- Splunk
- 微服务测试
- 微服务的测试策略
- 微服务的单元测试
- 微服务的的集成测试
- 基于消费者驱动的契约测试
- 微服务的组件测试
- 微服务的端到端测试
单体应⽤:
早些年,各⼤互联⽹公司的应⽤技术栈⼤致可分为LAMP(Linux + Apache + MySQL + PHP)和MVC(Spring +iBatis/Hibernate + Tomcat)两⼤流派。
⽆论是LAMP还是MVC,都是为单体应⽤架构设计的,其优点是学习成本低,开发上⼿快,测试、部署、运维也⽐较⽅便,甚⾄⼀个⼈就可以完成⼀个⽹站的开发
与部署。以MVC架构为例,业务通常是通过部署⼀个WAR包到Tomcat中,然后启动Tomcat,监听某个端⼝即可对外提供服务
微服务:
微服务就是将庞杂臃肿的单体应⽤拆分成细粒度的服务,独⽴部署,并交给各个中⼩团队来负责开发、测试、上线和运维整个⽣命周期
服务化就是把传统的单机应⽤中通过JAR包依赖产⽣的本地⽅法调⽤,改造成通过RPC接⼝产⽣的远程⽅法调⽤
项⽬第⼀阶段的主要⽬标是快速开发和验证想法,证明产品思路是否可⾏。这个阶段功能设计⼀般不会太复杂,开发采取快速迭代的⽅式,架构也不适合过度设计。
所以将所有功能打包部署在⼀起,集中地进⾏开发、测试和运维,对于项⽬起步阶段,是最⾼效也是最节省成本的⽅式。当可⾏性验证通过,功能进⼀步迭代,就
可以加⼊越来越多的新特性。
产品上线后,经过⼀段时间的运营,⽤户开始逐步增多,可⾏性验证通过,下⼀阶段就需要进⼀步增加更多的新特性来吸引更多的⽬标⽤户.⼀般情况下,这个时候
就需要⼤规模地扩张开发⼈员,以⽀撑多个功能的开发。如果这个时候继续采⽤单体应⽤架构,多个功能模块混杂在⼀起开发、测试和部署的话,就会导致不同功
能之间相互影响,⼀次打包部署需要所有的功能都测试OK才能上线,不仅如此,多个功能模块混部在⼀起,对线上服务的稳定性也是个巨⼤的挑战,⼀旦单体应⽤同
时进⾏开发的⼈员超过10⼈,就会遇到上⾯的问题,这个时候就该考虑进⾏服务化拆分了。
从单体应⽤迁移到微服务架构时必将⾯临也必须解决的问题
服务如何定义:
对于单体应⽤来说,不同功能模块之前相互交互时,通常是以类库的⽅式来提供各个模块的功能。对于微服务来说,每个服务都运⾏在各⾃的进程之中,
应该以何种形式向外界传达⾃⼰的信息呢?答案就是接⼝,⽆论采⽤哪种通讯协议,是HTTP还是RPC,服务之间的调⽤都通过接⼝描述来约定,约定内容包括接
⼝名、接⼝参数以及接⼝返回值。
服务如何发布和订阅:
单体应⽤由于部署在同⼀个WAR包⾥,接⼝之间的调⽤属于进程内的调⽤。⽽拆分为微服务独⽴部署后,服务提供者该如何对外暴露⾃⼰的地址,服务调⽤者该如
何查询所需要调⽤的服务的地址呢?这个时候你就需要⼀个类似登记处的地⽅,能够记录每个服务提供者的地址以供服务调⽤者查询,在微服务架构⾥,这个地⽅
就是注册中⼼
服务如何监控:
通常对于⼀个服务,我们最关⼼的是QPS(调⽤量)、AvgTime(平均耗时)以及P999(99.9%的请求性能在多少毫秒以内)这些指标。这时候你就需要⼀种通⽤的
监控⽅案,能够覆盖业务埋点、数据收集、数据处理,最后到数据展示的全链路功能
服务如何治理:
可以想象,拆分为微服务架构后,服务的数量变多了,依赖关系也变复杂了。⽐如⼀个服务的性能有问题时,依赖的服务都势必会受到影响。可以设定⼀个调⽤性
能阈值,如果⼀段时间内⼀直超过这个值,那么依赖服务的调⽤可以直接返回,这就是熔断,也是服务治理最常⽤的⼿段之⼀。
故障如何定位:
在单体应⽤拆分为微服务之后,⼀次⽤户调⽤可能依赖多个服务,每个服务⼜部署在不同的节点上,如果⽤户调⽤出现问题,你需要有⼀种解决⽅案能够将⼀次
⽤户请求进⾏标记,并在多个依赖的服务系统中继续传递,以便串联所有路径,从⽽进⾏故障定位。
那么服务化拆分具体该如何实施呢?⼀个最有效的⼿段就是将不同的功能模块服务化,独⽴部署和运维
纵向拆分:
是从业务维度进⾏拆分。标准是按照业务的关联程度来决定,关联⽐较密切的业务适合拆分为⼀个微服务,⽽功能相对⽐较独⽴的业务适合单独拆分为⼀个微服务
横向拆分:
是从公共且独⽴功能维度拆分。标准是按照是否有公共的被多个其他服务调⽤,且依赖的资源独⽴不与其他业务耦合。
前期,可以稍微粗粒度⼀些。先进⾏纵向拆分,把基础功能(⽤户系统)独⽴部署以维护。其它业务功能关联不紧密的可以独⽴部署,可以看这些业务在公司发展
⽅向的重要性后⾯,可以看清哪些功能是其他业务系统⼀定要调⽤的,同时,⾃身系统内也有其他繁杂的功能,那么可以进⾏横向切分,把被频繁调⽤的服务抽象
并独⽴部署
⽆论是纵向拆分还是横向拆分,都是将单体应⽤庞杂的功能进⾏拆分,抽离成单独的服务部署。实际业务中这两种拆分⽅式⼀般是相互结合使⽤的,如果业务⽐较
多分散,适合做纵向拆分。如果多个业务之间有公共模块耦合,适合把公共模块拆分出来,适合做横向拆分
服务化拆分后会带来的分布式服务事务的⼀致性问题,分布式数据⼀致性问题,,拆微服务势必会提⾼运维、问题追踪、分布式事务等复杂度
所以微服务整个技术栈都要考虑进去, 微服务只能解决单体膨胀后的痛,但也会带来架构复杂性
⾸先服务提供者(就是提供服务的⼀⽅)按照⼀定格式的服务描述,向注册中⼼注册服务,声明⾃⼰能够提供哪些服务以及服务的地址是什么,完成服务发布。
接下来服务消费者(就是调⽤服务的⼀⽅)请求注册中⼼,查询所需要调⽤服务的地址,然后以约定的通信协议向服务提供者发起请求,得到请求结果后再按照约
定的协议解析结果。
⽽且在服务的调⽤过程中,服务的请求耗时、调⽤量以及成功率等指标都会被记录下来⽤作监控,调⽤经过的链路信息会被记录下来,⽤于故障定位和问题追踪。
在这期间,如果调⽤失败,可以通过重试等服务治理⼿段来保证成功率。
-
- 一个成功的程序员,自然要懂微服务,汇总微服务架构的15钟框架!
- ZeroC IceGrid微服务架构
- Spring Cloud微服务架构
- Docker Swarm微服务架构
- 基于消息队列的微服务架构
-
微框架
- 与微服务之间的关系
-
微服务架构
-
Docker虚拟化
-
Spring Cloud
- 百万并发微服务架构最新实战301集
- Dubbo+zookeeper+SpringBoot+Redis+MQ微服务架构实战开发
- 微服务实施的最佳实践、一致性、压测、容量评估、调用链一网打尽
- 2020年最全微服务架构教程全集
- Dubbo+zookeeper+SpringBoot+Redis+MQ微服务架构实战开发
- 基于SpringCloud构建微服务电商项目
- 基于微服务的秒杀项目实战
- 千锋Java【2019Java微服务架构(SpringBoot+Dubbo+Zookeeper
- (千锋教育)Java 微服务实战合集】iToken
- 【千锋】Java微服务架构实战教程)
- (千锋教育)Java 微服务架构
- 微服务架构需要解决的问题
- Java高级架构师课程全套学习视频(2000分钟干货讲解
- 尚学堂丨微服务架构阶段全套教程
- Java微服务架构视频教程(Docker、Spring Boot、MyBatis)(上)
- Java微服务架构视频教程(Docker、Spring Boot、MyBatis)(下)
- 千锋达摩院】微服务架构 2.0(上)Linux + Docker + Kubernetes +SpringBoot+SpringCloud
- 千锋达摩院】微服务架构 2.0(下)Linux + Docker + Kubernetes +SpringBoot+SpringCloud
- 微服务架构的分布式事务控制解决方案
-
架构解密.从分布式到微服务.pdf