微服务总结
单块架构的优缺点
优点:
1、功能划分清楚
2、层次关系良好
3、每一层独立
4、部署简单
5、技术单一
6、用人成本低
缺点:
- 功能仍然太大
- 升级风险高
- 维护成本增加
- 交付周期变长
- 可伸缩性变差
- 监控困难
什么是微服务
微服务架构的设计原则
- 拆分足够微
- 轻量级通信
- 领域驱动原则
- 单一职责原则
- DevOps(开发运维)及两个披萨
- 不限于技术栈
如何设计微服务系统
- 服务拆分 服务颗粒度,领域驱动设计
- 服务注册 :每个微服务之间进行通信,服务***制,服务中心进行注册。获知各个服务的状态,如果有服务down掉,立即广播给其他的服务
- 服务发现:调用另一个服务的功能的时候,就可以去服务注册中心
- 服务消费:调用服务,调用者为消费者,被调用者为供应商。
- 统一的入口:
- 配置管理
- 熔断机制:服务响应不过来,把请求挡住,把一个服务中断。
- 自动扩展
微服务的拆分的意义
- 易于实现:拆分的越小,易于实现
- 易于维护
- 易于部署
- 易于更新
拆分方法的方法:
- 横向拆分
就是按照不同的业务功能拆分不同的微服务
- 纵向拆分
把一个业务功能的模块或者组件进行拆
- 使用DDD:领域驱动设计原则开发
SpringCloud
- 配置管理
- 服务注册
- 服务发现
- 断路器
- 智能路由
- 负载均衡
- 微代理
Springboot 与SpringCloud 的关系
- Springboot 是构建spring cloud的基石
- 版本命名规则:伦敦地铁站的名字
- Finchly版本是基于Spring Boot 2.0.x
Spring Cloud Config
- 配置中心,利用git来集中管理程序的配置
Spring Cloud Netflix
集成众多Netflix的开源软件,包括Eureka、Hydstrix、Zuul、Archaius等。
Spring Cloud bus
消息总线,利用分布式消息将服务和服务实例联系在一起,用于在一个集群中传播状态的变化,比如配置更改的变化,可与Spring Cloud Config联合实现热部署
Spring Cloud Cluster
基于ZooKeeper、redis 、Hazelcast、Consul实现的领导选举和平民状态模式抽象和实现
访问服务:
通过URI来访问服务
通过IP访问服务的弊端
- 绑定主机
- 难记
- 很难做到负载均衡(负载均衡IP不一致)
使用Eureka
- 服务注册和发现机制
- 和Spring Cloud无缝集成
- 高可用性
- 开源(18年前)
微服务的消费模式:
- 服务直连模式
特点:1、简洁明了 2、平台无关性 3、无法保证服务的可用性 4、生产环境中很少用
- 客户端发现模式
1 服务启动后,将自己的位置信息提交到服务注册表
2 客户端,从服务注册表进行查询,来获取可用的实例
3 客户端自己使用负载均衡算法从多个服务实例中选择出一个使用
- 服务端发现模式
负载均衡是由服务端来实现的
微服务消费者
- Apache HttpClient
- Ribbon(Spring Cloud de 组件)
基于客户端实现的负载均衡
- Feign(基于springCloud)
API 网管的意义
集合多个API
统一的API入口
带宽的限制导致Web应用API网管和移动应用API网关不同,移动端对网关有限制
API网关带来的好处
- 避免将内部信息泄露给外部
- 为微服务添加额外的安全层
- 支持混合通信协议
- 降低构建微服务的复杂性
- 微服务模拟虚拟化
API网关的弊端
- 在架构上需要额外考虑更多编排与管理
- 路由逻辑配置进行统一的管理。
- 可能引发单点故障
常见API网关的实现方式
- nginx
- Spring Cloud Zuul
微服务为什么需要集中化配置
微服务数量多,配置多
手工管理配置繁琐
什么是服务熔断
1、对该服务的调用执行熔断,对于后续请求,不在继续调用该目标服务,而是直接返回,从而可以快速释放资源。
2、保护系统
熔断器的意义
好处:
系统稳定
减少性能损耗
即时响应
阈值可确定
熔断器的功能:
异常处理
日志记录
测试失败的操作
手动复位
并发
加速断路
重试失败请求
熔断和降级的区别
相似性:
目的一致 :通过技术手段来保护系统
表现类似:让用户体会到服务暂时不可达
粒度一致的 :都是服务级别的
主要区别:
触发条件不同 :降级是从整体的负荷来考虑的,降级比如说有100个负载请求,但最后有50个请求,如果实例有10台主机,这个时候实例的主机数也要减少
管理的目标层次不同:降级是从最外围开始的
自动扩展
垂直扩展:对应用的升级,更多的是硬件的升级
水平扩展
通过放置更多相同配置的主机来实现水平扩展
自我注册和自我发现
开启实例之后,如果有一个服务down掉了,然后就会通知在开启一个服务
服务注册器
客户端
微服务实例
自动扩展的意义
好处:
提高了高可用性和容错能力。
增加了可伸缩性
具有最佳的使用率,并节约成本
优先考虑某些服务或者服务组