(一)初识微服务
- 什么是微服务
- 优点
- 难点
- 1、服务拆分
- 2、数据一致性
- 3、服务通信
- 4、服务注册和发现
- 5、负载均衡
- 6、服务网关(API Gateway)
- 7、高可观察
- 8、可靠性
什么是微服务
微服务(Microservice)1 ,是一种将Web应用围绕业务功能分解为一系列组件的架构。各个组件可以独立地开发和部署,可采用不同的编程语言与数据库,降低应用的集中化管理。组件之间通过轻量级机制进行通信,它们彼此相互协作,作为一个整体为用户提供功能,却可以独立地进行扩容。
目前主流的微服务框架:Dubbo、 SpringCloud、thrift、Hessian等。
优点
1、易于开发与维护
2、独立部署
3、伸缩性强,每个服务都可以在横向和纵向上独立扩展
4、与组织结构相匹配,每个团队独立负责某些服务,获得更高的生产力
5、技术异构性,使用最适合该服务的技术
难点
1、服务拆分
微服务拆分原则:领域模型、限定上下文、组织架构、康威定律
2、数据一致性
在微服务场景下,通常使用最终一致性来代替强一致性:
(1)可靠性事件模式
(2)补偿模式
(3)sagas模式
3、服务通信
通信技术方案: RPC vs REST vs 异步消息
RPC (Remote Procedure Call)远程过程调用,通常基于TCP协议,也可基于HTTP协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。常用的技术选型是thrift、grpc、dubbo。
RPC的好处是IDE友好,有代码提示,协议维护在代码中,传参和响应结果都通过代码可以知道。缺点是很多RPC方案不知道跨语言,所支持的语言有限,需要定义和维护idl文件,且有一定的学习成本,不方便调试。
REST (Representational State Transfer)表述性状态转移,基于HTTP/HTTPS通信协议,性能低于RPC,是一种架构风格。
REST的好处是方便调试、跨语言、门槛低、广泛接受。缺点是协议文档不好维护,协议较为繁琐,性能较TCP要差。
异步消息 借助一些消息队列框架来实现比如kafka、rabbitMQ。
4、服务注册和发现
将各个微服务信息注册到一个分布式存储中,这些服务信息就叫做服务注册表。服务注册表可以作为信息的权威来源,其中包含有关可用服务的信息以及服务网络位置比如IP、端口号等信息。
一般使用Eureka或zookeeper组件来实现,此外我们还可以借助etcd,consl,redis等。
5、负载均衡
客户端通过服务注册表发现实例清单并决定要连接哪个实例,在客户端做负载均衡。
6、服务网关(API Gateway)
将身份认证,安全防御,流量控制,限流防刷、日志统计这些功能放到服务网关中,向业务服务屏蔽网络边界服务的细节,使得业务服务专注于业务逻辑的开发维护和测试。
7、高可观察
(1)健康检测、集中监控
(2)日志聚合及检索
(3)分布式追踪
8、可靠性
(1)流量控制,超时控制
(2)舱壁隔离,熔断机制
(3)服务降级, 幂等重试