微服务架构由Fred Gerorge在2012年提出,后来由Martin Fowler进行推广和发扬。
1.什么是微服务
微服务(MicroServices)将单个应用拆分成多个小的服务单位,小的服务之前基于HTTP的RestFull API进行资源访问和操作。
微服务的特征:
1.由多个独立的服务构成应用系统;
2.每个服务单独部署,单独进行;
3.每个服务具有独立的业务;
4.可以进行分布式管理。
微服务要解决的问题:
1.防止雪崩
防止因为某些服务访问压力过大时,影响其他服务模块,如访问限流;
2.功能降级
当服务故障时,要通过容错手段让程序运行下去,不影响整体运行,如当DB故障时,可以先返回cache中的数据,但是不保证数据和DB的一致性,等待DB的恢复;
3.幂等性
即访问多次和一次具有相同的业务结果,不会导致不同的业务结果;
4.超时控制
防止因为一个服务访问等待时间过长,导致整个应用性能下降;
5.熔断
在一定时间周期内(如10分钟),发生一定数据量的失败后,熔断器开启,请求快速返回失败,过了某个时期后(如5分钟),查看服务是否正常,然后充值熔断器;
6.服务隔离
当所依赖的服务故障时,服务能够隔离故障,保证业务能够运行下去;
7.可伸缩
可以根据并发量来适当的扩容和缩容;
8.数据隔离
每个服务有单独的数据库,降低数据耦合。
2.微服务的优点:
2.1 服务实现了低耦合性,服务可以独立部署;
2.2 独立的服务可以快速的启动;
2.3 独立的服务更适合快速迭代和演进;
2.4 有利于团队和人员分工和协同开发;
2.5 有利于服务的动态扩容;
2.6 独立的服务更像是抽取的公有方法,可以供多个其他服务调用;
3.微服务的缺点:
3.1 分布式部署,各个独立模块之间的多次通信带来了较高的复杂性,需要解决网络问题,容错问题等;
3.2 各服务拥有独立的DB,带来了分布式事务的难题;
3.3 服务版本版本,当一个服务的接口改变时,所有的调用方法都收到影响,而且维护接口文档和接口的一致性也是不可忽略的问题,极大的增加了测试工作量;
3.4 运维难度提升,随着服务个数的增加,服务的部署,监控都变得复杂。
4.主流微服务架构对比
序号 | 微服务框架 | 描述 | 通信协议 | 负载均衡 | 服务注册和发现 | 高可用和容错 | 跨语言平台 | 备注 |
---|---|---|---|---|---|---|---|---|
1 | dubbo | 阿里开源框架 | rpc | 支持 | 支持 | 支持 | 不支持 | 文档丰富,容易上手 |
2 | Spring Boot/Cloud | 基于Spring的整套微服解决方案 | HTTP | 支持 | 支持 | 支持 | 支持 | 目前特别热门,功能强大,几乎成为了微服务架构的首要选择 |
3 | Thrift | 跨语言的rpc框架 | rpc | 不支持 | 不支持 | 不支持 | 支持 | 目前流行度比较低 |
4 | gRPC | Google的开源RPC框架 | rpc | 不支持 | 不支持 | 不支持 | 支持 | 功能还不够强大 |
网友评论