微服务
微服务并没有一个严格的定义
以下是 Martin Fowler 描述的微服务:
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、相互配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常基于 HTTP 的 RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境。
微服务通常具有以下特性:
- 单一职责:业务独立,团队自主。职责单一的服务应该具有核心的领域,高内聚、低耦合,与其他系统和领域确定明确的边界
- 轻量级通信:通信应该简单,轻量。与语言无关,与平台无关
- 独立性:独立开发,独立测试和独立部署
一切选择都是权衡的过程,微服务解决了单体应用的许多问题,自然也会带来相应的问题:分布式和集群的环境是复杂的,基于此的微服务架构也将具有相应的复杂度
随着微服务的流行,微服务的很多问题也被越来越多的框架和服务解决掉了
以 Spring Cloud 技术栈为例:
- SpringBoot:单体服务,快速创建项目,快速集成各种框架,易于测试,易于部署
- Feign:微服务独立部署,通过相关协议通信,Feign 就是一个简单的申明式通信框架,基于 HTTP restful
- Eureka:独立服务越来越多,服务实例也越来越多,服务治理便是必须的,Eureka 提供高可用的服务注册和服务发现功能
- Ribbon:Feign 只负责通信,Ribbon 提供客户端负载均衡,是系统优化的部分
- Hystrix:微服务将带来服务间复杂的依赖关系,分布式和集群的复杂度也将带来许多难以预料的问题;为防止复杂网络和复杂系统某一点的问题导致整个系统的雪崩状态,便有了 Hystrix,Hystrix 是 Spring Cloud 体系中优秀的断路器,可以在系统发生问题时进行服务降级,防止整体系统崩溃
- Zuul:统一网关,统一网关是以 Facade 模式,对外提供友好的接口,微服务化之后,服务将越来越多,越来越复杂,为了降低外部系统调用的复杂度,统一网关就是常用解决方案
- Config:服务划分越多,配置将越多,Spring cloud config 提供统一的配置管理
- Sleuth:服务监控和治理。监控是复杂系统必需的基础设施。系统感知、问题发现、性能定位都需要监控的加持
