09微服务架构常见框架

news2024/10/6 10:50:13

一句话导读

        微服务架构是一种分布式系统架构,可以将大型应用系统拆分为多个小型服务的一种架构方法。在微服务架构中,每个服务都是独立的逻辑单元,他们通过轻量级的通讯机制进行交互。为了更好的实现微服务架构,开发人员可以依赖一些常见的微服务框架,这些框架提供了丰富的基础功能,简化了开发、部署和管理微服务。

目录

一句话导读

一、常见微服务框架

        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 提供实时的监控系统,方便您快速了解目前系统的状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/939667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PMP P-10 Purchase Management

竟然不让上传图片了。。为啥???【上传过于频繁】行吧

搭建Serv-U FTP服务器实现外网远程访问,无需公网IP的文件共享方法

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 科技日益发展的今天,移动电子设备似乎成了我们生活的主角,智能…

2023最新官网下载安装配置JDK8(1.8u381)的详细步骤

目录 前言 一、下载 二、安装 三、配置环境变量 四、查看 前言 JDK11版本:官网下载JAVA的JDK11版本(下载、安装、配置环境变量)_java11下载_云边的快乐猫的博客-CSDN博客JDK17版本: Java官网下载JDK17版本详细教程&#xff…

Compose pager分页器入门使用 HorizontalPager与VerticalPager(2023/8)

Compose pager分页器入门使用 前言依赖概念介绍参数介绍 使用基础使用规范使用跳转指定分页器 pagerState.scrollToPage()添加指示器 pagerState.currentPage 完整代码总结 前言 阅读本文需要一定compose基础,如果没有请移步Jetpack Compose入门详解(实…

说说我最近招人的感受。。

大家好,我是鱼皮。 都说现在行情不好、找工作难,但招人又谈何容易?! 最近我们公司在招开发,实习社招都有。我收到的简历很多,但认真投递的、符合要求的却寥寥无几,而且都是我自己看简历、选人…

【EI检索稳定】第六届电力电子与控制工程国际学术会议(ICPECE 2023)

第六届电力电子与控制工程国际学术会议 2023 6th International Conference on Power Electronics and Control Engineering (ICPECE 2023) 第六届电力电子与控制工程国际学术会议由广西大学主办,重庆大学、华东交通大学、长春理工大学、大连交通大学联合主办。电…

伦敦金走势多变怎么办

投资知识比较丰富的朋友,应该知道一个品种的价格过于波动,对投资者来说并是一件不友好的事情,因为频繁的价格变化,对于收益的稳定性会产生负面的影响,也可能让投资者的持仓陷入进退维谷的尴尬境地。 黄金作为贵金属市场…

【视觉系统】笔芯内径机器视觉测量软硬件方案-康耐德智能

检测内容 笔芯内径机器视觉测量系统 检测要求 精度0.03mm,速度120~180个/分钟 视觉可行性分析 对样品进行了光学实验,并进行图像处理,原则上可以使用机器视觉系统进行测试测量。 结果: 对所有样品进行分析,可以在不…

抽象工厂(Abstract Factory)模式

一、 抽象工厂(Abstract Factory)模式 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。 为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family)。所谓产品族&#xff0c…

16- flask-bootstrap模板的使用

Flask 中支持 flask-bootstrap模板 和 bootstrap-flask模板 # 不使用: bootstrap-flask # pip install bootstrap-flask1.3.1 # 支持bootstrap 4 # pip install flask-bootstrap # 支持bootstrap3# 中文文档:https://flask-bootstrap-zh.readthedocs.io/zh/latest/ # 样式文档…

yolov8 No labels found in /path/train.cache解决

在用yolov8中ultralytics/datasets/coco.yaml训练时出现了no labels found in train2017.cache的错误。 model.train(data"ultralytics/datasets/coco.yaml",epochs100,imgsz640,batch16,save_period10,)下面查找一个这个问题出现的原因。 这里并没有提前下载coco数…

VM安装Windows11

VM下载地址: https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html Windows11镜像下载地址: https://www.microsoft.com/zh-cn/software-download/windows11/ 选择刚下载的Windows11镜像 更改安装目录 设置密码 …

MySQL索引,事务和存储引擎

一、索引 1、索引的概念 ●索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。 ●使用索引后可以不用扫描全表来定位某行的数据,而是先…

ASIC-WORLD Verilog(13)状态机FSM

写在前面 在自己准备写一些简单的verilog教程之前,参考了许多资料----Asic-World网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加点自己的理解)分享给大家。 这是网站原文&…

MySQL 8.1.0 推出 InnoDB Cluster 只读副本

全面了解 8.1.0 版本新功能:InnoDB Cluster 只读副本的相关操作。 作者:Miguel Arajo 高级软件工程师 / Kenny Gryp MySQL 产品总监 本文来源:Oracle MySQL 官网博客 * 爱可生开源社区出品。 前言 MySQL 的第一个 Innovation 版本 8.1.0 已…

Pyqt5开发实战记录

入职以来第一个开发项目: 1、如何给Qlabel加边框:右键label对象,选择“改变样式表”输入一下代码: border: 1px solid black;2、如何让垂直布局中button大小不发生变化:其实很简单,只需要设置button的最大…

(视频教程)单细胞转录组多组差异基因分析及可视化函数

很久以前,我们发布过一个单细胞多组差异基因可视化的方法。跟着Cell学单细胞转录组分析(八):单细胞转录组差异基因分析及多组结果可视化。主要复现参考的是这篇发表在《Cell》上的文章。可以将多个组的差异结果展示出来。 (reference:A Spati…

夜莺项目发布 v6.1.0 版本,增强可观测性数据串联

大家好,夜莺项目发布 v6.1.0 版本,这是一个中版本迭代,不止是 bugfix 了,而是引入了既有功能的增强。具体增强了什么功能,下面一一介绍。 1. 增强可观测性数据串联 从 v6.1.0 开始,对日志索引模式做了增强…

TS-小技巧-持续更新

文章目录 一、类型小技巧1. Partial 的应用2. Pick 的应用3. Parameters 的应用4. ReturnType 的应用 一、类型小技巧 1. Partial 的应用 interface User {name: string;age: number;address: string}获取接口User的所有属性,且不确定属性是否全部需要: type UserP…

ceph peering机制-状态机

本章介绍ceph中比较复杂的模块: Peering机制。该过程保障PG内各个副本之间数据的一致性,并实现PG的各种状态的维护和转换。本章首先介绍boost库的statechart状态机基本知识,Ceph使用它来管理PG的状态转换。其次介绍PG的创建过程以及相应的状…