目录
2.1 服务注册发现——Nacos/Eureka/Consul/Zookeeper
2.4 服务熔断——Hystrix/Resilience4j/Sentinel
2.5 统一配置管理——SpringCloudConfig/Nacos
2.6 统一网关路由——SpringCloudGateWay/Zuul
2.8 消息队列——Kafka/RabbitMQ/ActiveMQ/RocketMQ
1. 简介
微服务其实就是分布式架构中的一种,主要的作用就是将功能分散到离散的各个服务当中去,从而降低服务之间的耦合性,从而提供更加灵活的服务支持。从现实的角度来讲,就是把一个大型的单体项目和服务根据功能性的不同拆分成颗粒度更小的模块,而这些被拆分的模块,它可以独立的开发、管理和迭代。
2. 微服务相关技术栈及常见的组件
2.1 服务注册发现——Nacos/Eureka/Consul/Zookeeper
服务发现是微服务架构中的关键组件,它使得服务消费者能够动态地找到服务提供者,实现服务的自动调用。
2.2 负载均衡——Ribbon/OpenFeign
负载均衡是微服务架构中一个重要的概念,用于解决服务之间的流量分配问题,确保系统的稳定性和性能。
2.3 服务调用——OpenFeign/Dubbo
服务调用是微服务架构中最常用的组件之一,用于解决服务之间信息交互的响应问题。
2.4 服务熔断——Hystrix/Resilience4j/Sentinel
微服务中的服务熔断组件是确保系统稳定性和高可用性的关键机制之一。在微服务架构中,服务之间通过轻量级的通信机制进行交互,这种交互模式使得单个服务的故障容易传播到其他服务,进而可能导致整个系统的崩溃。而熔断组件的出现就是为了避免这种情况的出现,当它检测到某个服务出现异常时,能够快速地进行熔断,防止故障扩散,从而确保系统的稳定运行。
2.5 统一配置管理——SpringCloudConfig/Nacos
配置管理在微服务架构中扮演着至关重要的角色,它允许开发人员以集中、动态的方式管理服务的配置信息。
2.6 统一网关路由——SpringCloudGateWay/Zuul
网关作为微服务架构中的关键组件,扮演着服务路由、安全控制、流量监控等核心角色。
2.7 服务链路监控——Zipkin/Sleuth
服务链路监控是在微服务架构的不断发展之下诞生的,由于服务的颗粒度越来越小,不同的服务可能是不同的团队进行开发和维护,那么想要快速定位问题,就需要用到服务链路监控组件。它能帮助我们了解不同服务之间的关联动作。
2.8 消息队列——Kafka/RabbitMQ/ActiveMQ/RocketMQ
由于微服务架构中,各个服务的颗粒度越来越小,服务之间的交互动作会变得越来越频繁,就有可能出现系统性能下降,响应时间过长的场景。为了减缓这种情况的发生,就可以用消息队列来实现。
除了上述的知识点外,我们要真的了解微服务架构,还需要了解分布式日志服务,分布式缓存,分布式搜索以及自动化部署工具等,整个微服务架构如下图所示:
3. 微服务框架演变
3.1 单体项目
将业务的所有功能集中在一个项目中开发,打成一个包部署。
优点:
- 架构简单
- 部署成本低
缺点:
- 耦合度高(维护困难、升级困难)
3.2 分布式架构
根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。
优点:
- 降低服务耦合
- 有利于服务升级和拓展
缺点:
- 服务调用关系错综复杂
3.3 SOA面向服务框架
面向服务的框架(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,通过这些服务之间定义良好的接口和契约联系起来,分为三层结构:表现层、服务层、数据访问层。
优点:
- 模块拆分,使用API通信,降低模块之间的耦合度
- 项目拆分多个子应用,每个子应用业务简单,代码简单,方便维护开发
- 提高服务之间的重用性,业务逻辑可组合
缺点:
- 服务之间的API接口开发增加了工作量
- SOA服务之间的网络通信调用对性能有一定的影响
- 相对于单体应用来说,技术人类等成本较高
- 部署和运维相对麻烦
3.4 微服务架构
微服务架构可以看作是SOA架构上的一种发展。
架构特征:
- 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
- 自治:团队独立、技术独立、数据独立、独立部署和交付
- 面向服务:服务提供统一标准的接口,与语言和技术无关
- 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题
3.5 SpringCloud
SpringCloud是目前国内使用最广泛的微服务框架。
官网地址:Spring Cloud
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。
其中常见的组件包括:
另外,SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系,如下:
微服务技术对比:
企业需求:
3.6 总结
- 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。比如:学生管理系统
- 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,比如:京东、淘宝
- SOA架构:耦合度低,扩展性好,但在高并发情况下通讯过程中协议存在大量冗余性
- 微服务:SOA架构的升级,一种良好的分布式架构方案,拆分粒度更小,服务更独立,耦合度更低,但是架构非常复杂,运维、监控、部署难度提高
- SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件