微服务概念与入门

本文探讨微服务的设计原则,如拆分、轻量级通信、领域驱动、单一职责及DevOps理念,同时分析微服务面临的挑战,如数据一致性、可靠性事件模式及补偿模式。文章还介绍了API网关的作用和实现方式,以及Spring Cloud子项目的功能。

 

 

 

d6a79b38b7dabadba1a4956efb02b163637.jpg

c3333fa9f2469cbb8fde369a716bf027469.jpg

0a9cdd7b989efed0ad7d764636c561fac76.jpg

fd87eda564c86e44fc9451cfdc39bce3f19.jpg

628e9fcc45c61e3d6282921b0db344243c7.jpg

 

 

 

设计原则

1, 拆分足够微

比如:当项目比较复杂的时候,就可以拆分了

2.  轻量级通信

比如使用RPC 和HTTP 协议,通信

3, 领域驱动原则

即与业务相关

4. 单一职责原则

微服务之间不能有强耦合,服务的边界要清晰

5. DevOps 

每个微服务 人员都是小而精, 人员尽量都是全栈,全面

运维维护 方便

6. 不限于技术栈 

 

 

 

总体

 

0bd3bc4f562aab0f56cd2fb5a99b0f6091c.jpg

 

 

微服务拆分

ad5ca3412dd378f753fc8f36cf61dc59d0d.jpg

 

康威定律详细介绍

Mike从他的角度归纳这篇论文中的其他一些核心观点,如下:

第一定律:Communication dictates design(组织沟通方式会通过系统设计表达出来)

第二定律:There is never enough time to do something right, but there is always enough time to do it over(时间再多一件事情也不可能做的完美,但总有时间做完一件事情)

第三定律:There is a homomorphism from the linear graph of a system to the linear graph of its design organization(线型系统和线型组织架构间有潜在的异质同态特性)        

第四定律: The structures of large systems tend to disintegrate during development, qualitatively more so than with small systems(大的系统组织总是比小系统更倾向于分解

 

参考  https://www.cnblogs.com/gudi/p/6685474.html

 

微服务挑战

1. 数据一致性(分布式事务)

11, 可靠性事件模式(消息队列)

12.  补偿模式 - sagas 模式 

7c5a376d614600fc770ca6d8372446ee218.jpg

服务网关

 和终端用户进行通信,  比如   身份认证,处理权限,安全防御, 流量控制等。

避免微服务 直接与 终端用户进行 连接 。

服务网关尽量不要 夹杂 业务逻辑

332e98d5d5e05232e6a51867f9a60a1a51e.jpg

9c806319e1cc2767e7fb1736ac9744d8c8f.jpg

 

d976e07d7293037a0851b7311b51a7cb7c1.jpg

 

舱壁 隔离: 比如 调用的每个 微服务 来 一个线程池,这样 出故障之后就 减少了 故障的传播

服务降级: 微服务调用之间 出错:返回给最终用户空页面或者空数据

 

API 网关补充

好处:

1, 避免将内部信息泄露给外部

2. 为微服务添加额外的安全层

3, 支持混合通信协议

4。 降低构建微服务的复杂性

5. 微服务模拟与虚拟化

虚拟化: 比如 API网关再转发调其他API网关

 

弊端:

1,在架构上需要额外考虑更多编排与管理,

2. 路由逻辑配置要进行统一的管理

3. 可能引发单点故障(因为独立的入口,所以高并发或者其他情况可能出现服务不可用)

 

API网关的实现方式

  1. nginx  作为API网关
  2.  spring cloud Zuul : 提供了 认证,鉴权,限流,动态路由,监控,弹性,安全,负载均衡,协助单点压测,静态响应等边缘服务
  3.  Kong : api 网关的管理平台 ,底层是 nginx 

 

 

 

 

f657105380cd1f7bab26a8d89dc77d0f212.jpg

 

 

实践

8675f2f57cb494de031b89fa1be0d8d758c.jpg

SOA vs 微服务

ec0f506ef960718e11cfd46a67a5b38bf92.jpg

b166445ecda7f7ba9b800794c228cc53dc8.jpg

 

 

拆分原则和方法

b648c659fc12dc38ebc30f8ec2c98b18a56.jpg

 

开始微服务,服务粒度可以粗一点

3737749ac9c5461b64500da5377f41536d2.jpg

 

环型依赖,容易死循环, 双向依赖就是高耦合了

d9613598b61d63d14882855d8986d407cd0.jpg

 

 

微服务的数据一致性

232dc581305888387352d4f0b80ec5fb8af.jpg

2pc 即 两阶段提交

8872a658b8e89cf491c17461f7b492d15c0.jpg

并没有回滚,只是有了 幂等 。 

使用MQ 异步发消息,提高吞吐量 

 

f79c9119fd3c9398e50711c7146a934b1fd.jpg

需要按照顺序 进行, 操作比较复杂。

 

 

spring cloud 子项目介绍

1, spring cloud config 

配置中心,利用 git 来集中管理程序的配置

2, spring clound netflix

集成众多Netflix 的开源软件,包括 Eureke, Hystrix, Zuul ,  Archaius 等

3。 spring clound Bus

 

ef523f568914c1e0cba6614274611a8acb0.jpg

4. spring cloud cluster

基于 Zookeeper, Redis ,Hazelcast,  Consul 实现的领导选举和平民状态模式的抽象和实现

5. spring cloud consul 

基于 Hashicorp Consul 实现的服务发现和配置管理

6. spring cloud security

在 Zuul 代理中为 OAuth2 REST 客户端和认证头转发提供负载均衡

7. spring cloud sleuth 

适用于 spring cloud 应用程序的分布式跟踪,与 Zipkin , Htrace 和 基于日志(比如 ELK)的跟踪相 兼容。

可以日志的收集

8. spring cloud data flow 

46d7fc96414ca6dacf520ab57dcaa185a6f.jpg

 

spring cloud stream 

0b1cc304dcce102823fc2036de91f3051c1.jpg

spring cloud stream app starters

基于spring boot 为外部系统提供 spring 的集成

33abae9beac15a55f07edeb708504dcd626.jpg

 

 

等等其他项目

 

 

 

 

 

 

 

以上来自慕课网

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/ouminzy/blog/3076863

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值