一句话导读
微服务架构是一种分布式系统架构,可以将大型应用系统拆分为多个小型服务的一种架构方法。在微服务架构中,每个服务都是独立的逻辑单元,他们通过轻量级的通讯机制进行交互。为了更好的实现微服务架构,开发人员可以依赖一些常见的微服务框架,这些框架提供了丰富的基础功能,简化了开发、部署和管理微服务。
目录
一句话导读
一、常见微服务框架
1.Spring Cloud
2.Apache Dubbo
3.ServiceComb
4.Netflix OSS
5.Istio
6.Apache ServiceMix
7.Kubernetes
二、Spring Cloud简单介绍
1.Spring Cloud整体说明
2.注册配置中心:nacos
3.服务间调用:Openfeign
4.网关gateway
5.sentinel
一、常见微服务框架
1.Spring Cloud
Spring Cloud是专门针对模块化微服务架构设计的,提供了一系列的工具来简化开发、部署和管理微服务。其中包括服务注册发现、配置中心、网关、服务调用、分布式事务管理等。Spring Cloud与Spring Boot配合使用,可以快速构建分布式应用程序。
2.Apache Dubbo
Apache Dubbo是一个高性能、轻量级的分布式服务框架,支持RPC和RESTful风格的通讯协议。Dubbo提供了服务注册、发现、路由、负载均衡等功能,使得微服务之间的通讯更加简单和高效。Dubbo还支持多种序列化和反序列化协议,如Hessian、Kryo等。
3.ServiceComb
ServiceComb是华为开源的微服务框架,支持多种语言和协议,提供服务注册、发现、路由、负载均衡等功能。ServiceComb还提供了快速数据传输和处理的功能,适用于大规模的分布式系统。
4.Netflix OSS
Netflix开源的一系列组件,如Eureka(服务发现)、Ribbon(负载均衡)、Hystrix(断路器)等,这些组件可以与Spring Cloud集成使用,帮助构建稳定和弹性的微服务。
5.Istio
Istio(发音是 /'ɪstɪəʊ/,读作“ 伊斯特亿欧”。Istio希腊语中是“帆船”之意)是一个开源服务网格框架,提供流量管理、策略和安全性等功能,能够解决微服务应用程序中的通讯问题。Istio支持多种服务和协议,可以在Kubernetes等环境中运行。Istio还提供了详细的监控和日志管理功能。
6.Apache ServiceMix
Apache ServiceMix是一个基于Java的开源ESB平台,提供完整的ESB功能,包括路由、协议转换、转换、审核、安全性等。ServiceMix可以与其他微服务框架集成,如Spring Cloud、Dubbo等。
7.Kubernetes
Kubernetes是一个开源容器编排工具,可以自动部署、扩展和管理微服务。Kubernetes通过容器组(Pod)的方式组织和管理微服务,支持多种容器编排策略,如ReplicaSet、Deployment等。Kubernetes还提供了服务发现、负载均衡、容灾等功能。
二、Spring Cloud简单介绍
1.Spring Cloud整体说明
springcloud现在有很多版本,如:springcloud Azure,springcloud Alibaba,Spring Cloud AWS等等。但是他们的整体架构基本类似,基础单元都是构建于springboot之上。是微服务系统的一站式解决方案,微服务框架中常见的组件如:服务发现注册、配置、消息、负载均衡、熔断、限流、监控等在各个框架中都有。国内用的比较多的是springcloud 原生和springcloud Alibaba。我们这边以springcloud Alibaba为例做相应的介绍。首先看下组件图:
2.注册配置中心:nacos
提供了管理页面,能够方便用户通过可视化界面做系统的配置。实现系统的服务注册、服务发现、配置中心的功能,可以代替springcloud原生中的eureka和springcloud config。
3.服务间调用:Openfeign
Feign是Netflix开发的声明式子、模板化的HTTP客户端,Feign可帮助我们更加便捷、优雅地调用HTTP API。
SpringCloud openfeign对Feign进行了增强,使其支持Spring MvC注解,另外还整合了Ribbon和Nacos,从而使得Feign的使用更加方便。
Feign的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。SpringCloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。可以与Nacos和Ribbon组合使用以支持负载均衡。底层是发起http请求,依赖于其它的框架,其底层客户端实现包括:URLConnection默认实现(不支持连接池)、Apache HttpClient (支持连接池)、OKHttp(支持连接池),因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection。
4.网关:gateway
Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul1.0。相比 Zuul 来说,Spring Cloud Gateway 提供更优秀的性能,更强大的有功能。
Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。 它不能在传统的 servlet 容器中工作,也不能构 建成 war 包 。
Spring Cloud Gateway 旨在为微服务架构提供一种简单且有效的 API 路由的管理方式,并基于 Filter 的方式提供网关的基本功能,例如说安全认证、监控、限流等等。
Filter过滤器:
- Filter在pre类型的过滤器可以做参数效验、权限效验、流量监控、日志输出、协议转换等。
- Filter在post类型的过滤器可以做响应内容、响应头的修改、日志输出、流量监控等
5.sentinel
Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
流量控制:流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:
熔断降级:除了流量控制以外,降低调用链路中的不稳定资源也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。这个问题和Hysttix里面描述的问题是一样的
Sentinel 和 Hystrix 的原则是一致的: 当调用链路中某个资源出现不稳定,例如,表现为 timeout,异常比例升高的时候,则对这个资源的调用进行限制,并让请求快速失败,避免影响到其它的资源,最终产生雪崩的效果。在限制的手段上,Sentinel 和 Hystrix 采取了完全不一样的方法。
Hystrix 通过线程池的方式,来对依赖(在我们的概念中对应资源)进行了隔离。这样做的好处是资源和资源之间做到了最彻底的隔离。缺点是除了增加了线程切换的成本,还需要预先给各个资源做线程池大小的分配。
Sentinel 对这个问题采取了两种手段:通过并发线程数进行限制、通过响应时间对资源进行降级
系统负载保护:Sentinel 同时提供系统维度的自适应保护能力。防止雪崩,是系统防护中重要的一环。当系统负载较高的时候,如果还持续让请求进入,可能会导致系统崩溃,无法响应。在集群环境下,网络负载均衡会把本应这台机器承载的流量转发到其它的机器上去。如果这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会导致这台机器也崩溃,最后导致整个集群不可用。
针对这个情况,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。
Sentinel 是如何工作的:对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。
- 根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。
- Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。