[toc]
微服务概述及常见解决方案
微服务概述
微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一个个小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合。
优点:
- 微服务是松藕合的,无论是在开发阶段或部署阶段都是独立的。能够快速响应, 局部修改容易, 一个服务出现问题不会影响整个应用。
- 易于和第三方应用系统集成, 支持使用不同的语言开发, 允许你利用融合最新技术。
- 每个微服务都很小,足够内聚,足够小,代码容易理解。团队能够更关注自己的工作成果, 聚焦指定的业务功能或业务需求。
- 开发简单、开发效率提高,一个服务可能就是专一的只干一件事, 能够被小团队单独开发,这个小团队可以是 2 到 5 人的开发人员组成。
缺点:
- 开发人员要处理分布式系统的复杂性
- 多服务运维难度,随着服务的增加,运维的压力也在增大
- 系统部署依赖高、服务间通信成本高、数据一致性要求高、系统集成测试难度大、性能监控要求高
微服务架构方案
为了解决微服务的缺点,所以也就有了一系列的微服务解决方案,本质是工具集。
第一套解决方案:Apache Dubbo Zookeeper
技术架构:
- Zookeeper(服务注册中心)
- Dubbo-monitor(服务监控)
备注:Dubbo相当不完善,需要借助很多第三方组件
第二套解决方案:Spring Cloud Netflix 【已闭源】
技术架构:
- Eureka (服务注册与发现)
- Feign(整合了ribbon和Hystrix,负载均衡和熔断限流等)
- Ribbon(负载均衡)
- Hystrix (熔断限流,合并请求等)
- Hystrix Dashboard (提供了服务监控的功能,提供了数据监控和友好的图形化界面)
- Hystrix Turbine (Hystrix Turbine将每个服务的Hystrix Dashboard数据进行了整合。也是监控系统的功能)
- Zuul (智能路由和过滤)
- config (配置中心)
备注:2018年年底,Netflix宣布停止开发,进入维护模式。
第三套解决方案:Spring Cloud Alibaba
技术架构:
- Nacos:动态服务发现、配置管理和服务管理平台。兼顾注册中心与配置中心。
- Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
- RocketMQ:开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
- Dubbo:一款高性能 Java RPC 框架。
- Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
- Arthas:开源的Java动态追踪工具,基于字节码增强技术,功能非常强大。
技术栈对比
服务注册中心
- Eureka (所属 Netflix ,包括EurekaServer和EurekaClient)
- Consul(所属SpringCloud,GO语言实现)
- Zookeeper (所属Apache,JAVA语言实现 )
- Nacos:(所属Alibaba,JAVA语言实现)
服务配置中心
- Spring Cloud Config:提供统一配置的功能。
- Spring Cloud Bus(消息总线):通过MQ将微服务的所有节点连接到一起通过消息总线实现自动配置刷新。
- Nacos:所属Alibaba,兼顾配置注册中心和配置中心。
服务间通信组件
两种实现方式:
- Dubbo的RPC方式。
- SpringCloud的HTTP Restful方式。
HTTP Restful方式有两种实现方案:
- RestTemplate(路径写死、没有负载均衡)+Ribbon(所属Netflix ,实现负载均衡)
- OpenFeign(所属SpringCloud,封装了Netflix 的Feign,自带负载均衡)
服务熔断组件
采用服务熔断或服务降级的方式解决服务雪崩问题。
- Hystrix (所属Netflix)
- Sentinel(所属Alibaba)
服务网关组件
用来统一服务总入口,实现路由转发和过滤。
- Zuul1.x、Zuul2.x (所属Netflix)
- Gateway(所属SpringCloud)
总结
综上,目前最佳方案是:
- 服务注册中心 Nacos
- 服务配置中心 Nacos
- 服务熔断组件 Sentinel
- 服务间通信组件 OpenFeign
- 服务网关组件 Gateway