微服务开发
  eP72s9Xafzwi 2023年11月15日 24 0

1.微服务相关介绍
未命名图片.png, 需 要 学 习 那 些 微 服 务 知 识 ? 
二 二 过 
系 統 僅 沪 
缓 存 技 术 
二 
多 级 嗟 存 
过 
搜 索 技 术 
0 
过  

未命名图片.png, 01 nn%*A 
••025i6z 
SpringoataRedis 
sprinqAMQP 
4"*08 
04fi6ZIR 
09 Redis•g 
05 *üDocker 
Dockercompose 
10  
未命名图片.png, 需 要 学 习 那 些 微 服 务 知 识 ? 
微 服 务 技 术 
注 到 友 
缓 存 技 术 
SpringDataRedis 
缓 存 身 透 . 雪 崩 
OpenResty 
Red 主 从 复 制 
搜 索 技 术 
0 就 语 旬 
Re 、 叫 
凸 苤 状 态 
远 程 谰 用 
负 衡 
配 置 簀 理 
网 关 路 由 。 
流 0 控 制 
系 保 护 
熔 斷 降 趿 
服 务 授 权 
分 布 式 事 务 亻 〔 C 模 型 
T 模 型 
缓 存 数 同 步 
多 级 缓 存 
隻 群 筮 製 
深 度 分 页 
地 理 坐 标 
异 步 通 信 技 术 
MO 消 息 模 型 
SpringAMQP 
消 息 堆 职 问 以 
消 息 可 蘼 性 
消 息 幂 等 性 
延 迟 从 列 
\ 篌 像 集 群 
数 持 久 化 
N n 区 本 地 缓 存 
数 据 持 久 化 
Redis*ä 
据 步 i 
自 动 补 全 
拼 分 试 
Lua"& 
Red 數 据 结 , , 
DevOps 
Dockerfile 
DO ( 迮 0 两 00 
DockerSwarm 
」 enkins 
Rancher 
Do “ 使 
Kubernetes


未命名图片.png, 需 要 学 习 那 些 微 服 务 知 识 ? 
微 服 务 技 术 
注 到 友 
缓 存 技 术 
SpringDataRedis 
缓 存 身 透 . 雪 崩 
OpenResty 
Red 主 从 复 制 
搜 索 技 术 
0 就 语 旬 
Re 、 叫 
凸 苤 状 态 
远 程 谰 用 
负 衡 
配 置 簀 理 
网 关 路 由 。 
流 0 控 制 
系 保 护 
熔 斷 降 趿 
服 务 授 权 
分 布 式 事 务 亻 〔 C 模 型 
T 模 型 
缓 存 数 同 步 
多 级 缓 存 
隻 群 筮 製 
深 度 分 页 
地 理 坐 标 
异 步 通 信 技 术 
MO 消 息 模 型 
SpringAMQP 
消 息 堆 职 问 以 
消 息 可 蘼 性 
消 息 幂 等 性 
延 迟 从 列 
\ 篌 像 集 群 
数 持 久 化 
N n 区 本 地 缓 存 
数 据 持 久 化 
Redis*ä 
据 步 i 
自 动 补 全 
拼 分 试 
Lua"& 
Red 數 据 结 , , 
DevOps 
Dockerfile 
DO ( 迮 0 两 00 
DockerSwarm 
」 enkins 
Rancher 
Do “ 使 
Kubernetes  

2.认识微服务、
未命名图片.png, 单 体 架 构 
单 体 架 构 . 将 业 务 的 所 有 功 能 集 中 在 一 个 项 目 中 开 发 , 打 成 一 个 包 部 署 。 
优 点 . 
· 架 构 简 单 
· 部 署 成 本 低 
缺 点 
. 耦 合 度 高 
数 据 库 
服 务 器  
未命名图片.png, 分 布 式 架 构 
分 布 式 架 构 . 根 据 业 务 功 能 对 系 统 进 行 拆 分 / 每 个 业 务 模 块 作 为 独 立 项 目 开 发 , 称 为 一 个 服 务 。 
降 低 服 务 耦 合 
支 功 
有 利 于 服 务 升 级 拓 展 
商 功 
品 能 
数 据 库 
用 功  

未命名图片.png, 微 服 务 
微 服 务 是 一 种 经 过 良 好 架 构 设 计 的 分 布 式 架 构 方 案 , 微 服 务 架 构 特 征 : 
单 一 职 责 : 微 服 务 拆 分 粒 度 更 小 , 每 一 个 服 务 都 对 应 唯 一 的 业 务 能 力 , 做 到 单 一 职 责 , 避 免 重 复 业 务 开 发 
面 向 服 务 : 微 服 务 对 外 暴 露 业 务 接 口 
自 治 : 团 队 独 立 、 技 术 独 立 、 数 据 独 立 、 部 署 独 立 
隔 离 性 强 : 服 务 调 用 做 好 隔 离 、 容 错 、 降 级 , 避 免 出 现 级 联 问 题 
服 务 网 关 
会 员 服 务 
用 户 服 务 
积 分 服 务 
数 据 库 
数 据 廊 
数 据 库  
要做到高内聚低耦合


未命名图片.png, 微 服 务 
微 服 务 是 一 种 经 过 良 好 架 构 设 计 的 分 布 式 架 构 方 案 , 微 服 务 架 构 特 征 : 
单 一 职 责 : 微 服 务 拆 分 粒 度 更 小 , 每 一 个 服 务 都 对 应 唯 一 的 业 务 能 力 , 做 到 单 一 职 责 , 避 免 重 复 业 务 开 发 
面 向 服 务 : 微 服 务 对 外 暴 露 业 务 接 口 
自 治 : 团 队 独 立 、 技 术 独 立 、 数 据 独 立 、 部 署 独 立 
隔 离 性 强 : 服 务 调 用 做 好 隔 离 、 容 错 、 降 级 , 避 免 出 现 级 联 问 题 
服 务 网 关 
会 员 服 务 
用 户 服 务 
积 分 服 务 
数 据 库 
数 据 廊 
数 据 库  

未命名图片.png, 单 体 架 构 特 点 ? 
简 单 方 便 , 高 度 耦 合 , 扩 展 性 差 , 适 合 小 型 项 目 。 例 如 : 学 
生 管 理 系 统 
分 布 式 架 构 特 点 ? 
松 耦 合 , 扩展性好@ 但 架 构 复 杂 , 难 度 大 。 适 合 大 型 互 联 网 
顶 目 , 例 如 : 京 东 、 淘 宝 
微 服 务 : 一 种 良 好 的 分 布 式 架 构 方 案 
优 点 : 拆 分 粒 度 更 小 、 服 务 更 独 立 、 耦 合 度 更 低 
缺 点 : 架 构 非 常 复 杂 , 运 维 、 监 控 、 部 署 难 度 提 高  

未命名图片.png, SpringCloud + Feign 
SpringCIoudAIibaba 
+ Dubbo 
SpringCIoudAIibaba 
+ Feign 
DubboJ%üit 
• ßK%WEREDubbofiit  

2.微服务架构Spring Cloud
未命名图片.png, SpringCloud 
• EÄitYifr: https:/lspring.io/projects/spring-cloudø 
Nacos. Consul 
OpenFeign. Dubbo 
Zipkin. Sleuth 
SpringCloudConfigs Nacos 
SpringCloudGateway. Zuul 
Hystix. Sentinel


未命名图片.png, SpringCloud 
• EÄitYifr: https:/lspring.io/projects/spring-cloudø 
Nacos. Consul 
OpenFeign. Dubbo 
Zipkin. Sleuth 
SpringCloudConfigs Nacos 
SpringCloudGateway. Zuul 
Hystix. Sentinel  
(1)SpringCloud与SpringBoot兼容问题
未命名图片.png, Release Train 
2020.0.x aka "ford 
Hoxton 
Greenwich 
Finchley 
Edgware 
Dalston 
Boot Version 
2.4.x 
2.2.x, 2.3.x (Starting with SR5) 
2.1.x 
2.0.x 
1.5.x 
1.5.x 
Hoxton.SRlO, EIEt*fiä5SpringB00thfi$Æ2.3.xkfi$.  

(2)服务拆分远程调用

未命名图片.png, 服 务 拆 分 注 意 事 项 
. 不 同 微 服 务 不 要 重 复 开 发 相 同 业 务 
2 . 微 服 务 数 据 独 立 不 要 访 问 其 它 微 服 务 的 数 据 库 
3 . 
微 服 雾 可 以 将 自 己 的 业 务 暴 露 为 接 口 , 供 其 它 微 服 务 调 用 
商 功 
支 功 
品 能 
数 据 库 
数 据 库 
数 据 库 
订 单 
用 功  
墨迹绘图
墨迹绘图
墨迹绘图


未命名图片.png, 服 务 拆 分 注 意 事 项 
. 不 同 微 服 务 不 要 重 复 开 发 相 同 业 务 
2 . 微 服 务 数 据 独 立 不 要 访 问 其 它 微 服 务 的 数 据 库 
3 . 
微 服 雾 可 以 将 自 己 的 业 务 暴 露 为 接 口 , 供 其 它 微 服 务 调 用 
商 功 
支 功 
品 能 
数 据 库 
数 据 库 
数 据 库 
订 单 
用 功  

(3)远程调用
未命名图片.png, •address " 
"userna•e": 
-address . 
http•.1110 calhost%BOB11 user/ % 
-name": "iPhone 
-price-: 6799 
•user" : null 
-id-: 101, 
"nne-: "iPhone 12 
-price-: 
-user - : { 
-userna—- : 
"address" :  

未命名图片.png, 1 . 微 服 务 调 用 方 式 
基 于 RestTempIate 发 起 的 http谲 求 实 现 远 程 调 用 
http请求做远程调 用 是 与 语 言 无 关 的 调 用 》 只 要 知 道 对 方 
的 ip 、 端 口 、 接 口 路 径 、 请 求 参 数 即 可 。  

未命名图片.png, 1) i±ffffRestTemplate 
@SpringBootAppIication 
public class prderAppIication { 
public static void main (String[] args) { 
SpringApp1ication. run (OrderAppIication. class, 
@Bean 
public RestTemp1ate 
return new RestTempIate() ; 
args) ;


未命名图片.png, 1) i±ffffRestTemplate 
@SpringBootAppIication 
public class prderAppIication { 
public static void main (String[] args) { 
SpringApp1ication. run (OrderAppIication. class, 
@Bean 
public RestTemp1ate 
return new RestTempIate() ; 
args) ;  

未命名图片.png, 2) BEEEifiÆRestTemplate 
fmorder-service*fiOrderServicefiqueryOrderByldfii-: 
@Service 
public class OrderService { 
@Autowired 
private RestTemp1ate restTemptpte; 
public Order queryOrderById(Long orderld) { 
- orderMapper. findById(orderId) ; 
Order order - 
// TODO 2. OiØM,é 
String url = "http://10cathost:8081/user/" + order.getUserId(); 
User user restTemptate.getForObject(ur1, User. class) ; 
order. setUser(user) ; 
// 4.fi@ 
return order;  

3.Eureka相关介绍
(1)消费者与提供者
一个服务既可以是消费者又可以是提供者
(2)Eureka注册中心
未命名图片.png, EurekaE*Ö 
user-servicefifä,a 
order-service 
8080 
user-service: 
localhost: 8081 
localhost: 8082 
eureka-server 
localhost. 
• 8081 
eureka-client 
user-service: 
localhost: 8081 
localhost: 8082 
order-service: 
localhost:8080 
1) 
user-service 
8081 
user-service 
8082



未命名图片.png, eureka 的 作 用 
. 消 费 者 该 如 何 获 取 服 务 提 供 者 具 体 信 息 ? 
令 服 务 提 供 者 启 动 时 向 eureka 注 册 自 己 的 信 息 
eureka 保 存 这 些 信 息 
令 消 费 者 根 据 服 务 名 称 向 eureka 拉 取 提 供 者 信 息 
. 如 果 有 多 个 服 务 提 供 者 , 消 费 者 该 如 何 选 择 ? 
令 服 务 消 费 者 利 用 负 载 均 衡 算 法 , 从 服 务 列 表 中 挑 选 一 个 
. 消 费 者 如 何 感 知 服 务 提 供 者 健 康 状 态 ? 
令 服 务 提 供 者 会 每 隔 30 秒 向 EurekaServer 发 送 心 跳 请 求 报 告 健 康 状 态 
eureka 会 更 新 记 录 服 务 列 表 信 息 心 跳 不 正 常 会 被 剔 除 
令 消 费 者 就 可 以 拉 取 到 最 新 的 信 息  
(3)搭建Eureka服务
未命名图片.png, 2. 
3. 
31Äspring-cloud-starter-netflix-eureka-server$JffE 
<groupld.org . springframework. 
<artifactld>spring -cloud- 
nappiication.ymli#, 
server : 
port: 10086 
spring : 
application : 
name: eurekaserver 
eureka : 
client : 
service-urt: 
defaultZone: http://127.0.O.1:16086/eureka/  

未命名图片.png, 2. 
G user-serviceh SlÄspring-cloud-starter- netflix-eu reka-clientfifiü 
<dependency> 
<groupld.org . springframework. 
- Cloud - starter - netflix - eureka - 
Gappiication.ymli#, 
spring : 
application : 
name: userservice 
eureka : 
client : 
service-urt: 
default-zone: http://127.O.O.1:16086/eureka/  
服务注册


未命名图片.png, 2. 
G user-serviceh SlÄspring-cloud-starter- netflix-eu reka-clientfifiü 
<dependency> 
<groupld.org . springframework. 
- Cloud - starter - netflix - eureka - 
Gappiication.ymli#, 
spring : 
application : 
name: userservice 
eureka : 
client : 
service-urt: 
default-zone: http://127.O.O.1:16086/eureka/  
对一个服务启动多次实例
未命名图片.png, 另 外 , 我 们 可 以 将 user-service 多 次 启 动@ 
模 拟 多 实 例 部 署 , 但 为 了 避 免 端 口 冲 突 , 需 要 修 改 端 口 设 置 : 
处 E ( 0 gun № n 
Ctrl · Sh 而 · Fl 
Spnng 800t 
*NotStarted 
, 了 0 e pp 雇 0000 
、 user •cation 
》 to 》 101 
孬 Debug 
Edit 《 onfi u on 一 
《 OP 《 onf19 」 “ 00n 
〔 on u 《 on 
R 《 0 “ ( 0 丽 gur ” only 俑 m 
Open Running Configuration New Tab 
、 ] Group ( on 不 g “ 訕 处 ns 一 
Open 貊 New Tab 
00 Each 妇 New Tab  

未命名图片.png, 2. 
"http://userservice/user/" + order. getUserId(),• 
String urt = 
Gorder-servicefi fiRestTem : 
@Bean 
@LoadBa1anced 
public RestTemp1ate restTemptate() { 
return new RestTemp1ate();  

(4)Eureka实现负载均衡原理
Ribbon负载均衡
实现负载均衡原理
未命名图片.png, userservice 
order-service 
http://userservice/user/l 
eureka-server 
Ribbon 
localhost:8081 
loclahost:8082 
user-servlce 
8081 
user-service 
8082  
基于Ribbon实现,先由消费者发送请求,再由Ribbon在eureka中拉取请求地址,返回服务器列表,进而进行负载均衡


未命名图片.png, userservice 
order-service 
http://userservice/user/l 
eureka-server 
Ribbon 
localhost:8081 
loclahost:8082 
user-servlce 
8081 
user-service 
8082  
Ribbon的工作流程
未命名图片.png, userservice 
eureka-server 
localhost:BOB1 
loclahost:B082 
DynamicServerListLoadBalancer 
userserwce 
Ota 
loc lah05t: 
'Rule 
Ocal OSt:eog 
order-service 
RibbonLoadBanlancerClient 
7.uurl, 
user/ I 
user-service 
8081 
8.M±J8081 
user-service 
8082 
http://userservice/user/l 
LoadBalancerlnterceptorAUEEUN  

未命名图片.png, 负 载 均 衡 策 略 
内 置 负 载 均 衡 规 则 类 
RoundRobinRule 
规 则 描 述 
简 单 轮 洵 服 务 列 表 来 选 择 服 务 器 。 它 是 Ribbon 默 认 的 负 载 均 衡 规 则 。 
对 以 下 两 种 服 务 器 进 行 忽 : 
( 1 ) 在 默 认 情 况 下 , 这 台 服 务 器 如 果 3 次 连 接 失 败 , 这 台 服 务 器 就 会 被 设 置 为 “ 短 路 “ 状 态 。 短 路 状 态 将 
持 续 30 秒 , 如 果 再 次 连 接 失 败 , 短 路 的 持 续 时 间 就 会 几 何 级 地 增 加 。 
Availab 山 tyFilteringRule 
( 2 ) 并 发 数 过 高 的 服 务 器 。 如 果 一 个 服 务 器 的 并 发 连 接 数 过 高 , 配 置 了 Availab 山 tyFilteringRulen 则 的 
客 户 端 也 会 将 其 忽 酪 。 并 发 连 接 数 的 上 限 , 可 以 由 客 户 端 的 
•<clientNa rne>.<clientconfig NameSpa ce>.ActiveConnectionsLimit 属 性 进 行 配 置 。 
为 每 一 个 服 务 器 吊 一 个 权 重 值 。 服 务 器 应 时 间 越 长 , 这 个 服 务 器 的 权 重 就 越 小 。 这 个 规 则 会 随 机 选 择 
WeightedResponseTimeRule 
ZoneAvoidanceRule 
BestAvailableRule 
RandomRule 
RetryRule 
服 务 器 , 这 个 权 值 会 影 响 服 务 器 的 选 择 。 
以 区 域 可 用 的 服 务 器 为 基 础 进 行 服 务 器 的 选 择 。 使 用 zone 对 服 务 器 进 行 分 类 这 个 zone 可 以 理 解 为 一 个 
机 房 、 一 个 机 架 等 。 而 后 再 对 zone 内 的 多 个 服 务 做 轮 询 。 
忽 略 些 短 路 的 服 务 器 。 并 选 择 并 发 数 较 低 的 服 务 器 。 
随 机 选 择 一 个 可 用 的 服 务 器 。 
重 试 机 制 的 选 择 逻 辑  

通过IRule修改负载均衡规则
未命名图片.png, @Bean 
public IRI-Ile 
return new RandomRute() ; 
2. GW2ft-fit: Eorder-service$application.ymlifr*, 
users*vice: 
ribbon: 
NFLoadBatancerRu1 eC1assName : 
com . netftix . toadbalancer . RandomRu1e  
墨迹绘图


未命名图片.png, @Bean 
public IRI-Ile 
return new RandomRute() ; 
2. GW2ft-fit: Eorder-service$application.ymlifr*, 
users*vice: 
ribbon: 
NFLoadBatancerRu1 eC1assName : 
com . netftix . toadbalancer . RandomRu1e  

Ribbon饥饿加载
未命名图片.png, ribbon : 
eager-toad: 
enabled: true 
clients : 
userservice #  










墨迹绘图
墨迹绘图
这里可以自定义负载规则
这种配置方案是针对某个微服务而言的


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
eP72s9Xafzwi