微服务与SpringCloud
应用架构的发展
软件架构分为三种架构类型,分别是业务架构、应用架构、技术架构。业务决定应用、技术支撑应用。架构的发展:
单体架构 => 分布式架构 => SOA 架构 => 微服务架构
微服务架构
微服务是一种架构风格,可以将一个大型复杂的业务系统按功能拆分为多个相互独立的微服务,各个微服务之间是松耦合的,通过各种远程协议进行同步/异步通信,各微服务均可以被独立部署、扩/缩容以及升/降级。
基于 SpringCloud 的微服务解决方案
SpringCloud 是什么
它是由 Spring 官方开发维护,基于 SpringBoot 开发,提供的一套完整的微服务解决方案,其中容纳了很多子项目,SpringCloud 组件如下图所示:
组件名称 | 所属项目 | 组件分类 |
---|---|---|
Eureka | spring-cloud-netflix | 注册中心 |
Zuul | spring-cloud-netflix | 第一代网关 |
Sidecar | spring-cloud-netflix | 多语言 |
Ribbon | spring-cloud-netflix | 复杂均衡 |
Hystrix | spring-cloud-netflix | 熔断器 |
Turbine | spring-cloud-netflix | 集群监控 |
Feign | spring-cloud-openfeign | 声明式 HTTP 客户端 |
Consul | spring-cloud-consul | 注册中心 |
Gateway | spring-cloud-gateway | 第二代网关 |
Sleuth | spring-cloud-seluth | 链路追踪 |
Config | spring-cloud-config | 配置中心 |
Bus | spring-cloud-bus | 总线 |
Pipeline | spring-cloud-pipelines | 部署管道 |
Dataflow | spring-cloud-dataflow | 数据处理 |
微服务面临的困难和挑战
微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度,增强可扩展性,便于敏捷开发。与此同时,微服务也面临一些挑战,那些难点如下:
- 单体应用拆分为分布式系统后,进程间的通信机制和故障处理措施变得更加复杂。
- 系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并操作多个数据库实现,服务调用的分布式事务问题变得非常突出。
- 微服务数量众多,其测试、部署、监控等都变得更加困难。