您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

几种微服务框架调研报告

时间:2023-02-17 16:16:14  来源:51CTO  作者:移动Labs
微服务架构旨在将大型,复杂的系统垂直(按功能或业务要求)划分为较小的子系统,这些子系统属于流程(因此可独立部署),并且这些子系统之间通过与语言无关的轻量级网络通信相互通信(例如REST,gRPC)或异步(通过消息传递)方式。

 

 

一、引言

1.1 微服务的目的

以拆分和服务化为基础,将海量用户产生的大规模的访问流量进行分解,采用分而治之的方法,达成用户需要的功能指标,并同时满足用户对高可用、高性能、可伸缩、可扩展和安全性的非功能质量的要求。

1.2 微服务的核心要点

业务的功能划分:每个单一的业务功能叫做一个服务,每个服务对应一个独立的职能团队。

去中心化治理:微服务倡导去中心化的治理,不推荐每个微服务都使用相同的标准和技术来开发和使用服务。

交互模式:在微服务领域,微服务之间的交互通过定义良好的接口来实现,不允许使用共享数据来实现。通常使用RESTful样式的API或者透明的RPC调用。

组合依赖:根据业务流程处理的需要,以一定的顺序调用依赖的多个微服务,对依赖的微服务返回的数据进行组合、加工和转换,最后以一定的形式返回给使用方。

容错模式:

 熔断

当服务的输入负载迅速增加时,如果没有有效的措施对负载进行熔断,则会使服务迅速被压垮,服务被压垮会导致依赖的服务都被压垮,出现雪崩效应,因此,可通过模拟家庭的电路保险开关,在微服务架构中实现熔断。

限流

针对服务突然上量,我们必须有限流机制,限流机制一般会控制访问的并发量,例如每秒允许处理的并发数及查询量、请求量等,实现方式如计数器,令牌桶等。

拆分粒度:

按照微服务的初衷,服务要按照业务的功能进行拆分,知道每个服务的功能和职责单一,甚至不可再拆分为止,以至于每个服务都能独立部署,扩容和缩荣方便,能够有效地提高利用率。拆的越细,服务的耦合度越小,内聚性越好,越适合敏捷发布和上线。

1.3 微服务的优点与缺点

优点

  • 每个微服务都很小,这样能聚焦一个指定的业务功能或业务需求;
  • 微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成;
  • 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的;
  • 微服务能使用不同的语言开发;
  • 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果,无需通过合作才能体现价值;
  • 微服务允许你利用融合最新技术;
  • 微服务只是业务逻辑的代码,不会和html,css 或其他界面组件混合。

缺点

  • 微服务架构可能带来过多的操作;
  • 需要DevOps技巧;
  • 可能双倍的努力;
  • 分布式系统可能复杂难以管理;
  • 因为分布部署跟踪问题难;
  • 当服务数量增加,管理复杂性增加。

下文将介绍下几种微服务架构的情况。

二、Spring Cloud

2.1 整体架构

图片

图片

模块交互流程图

2.2 核心组件

图片

2.3 特点

1️⃣ Spring Cloud利用SpringBoot的开发便利性巧妙的简化了分布式系统基础设施的开发,组件支持丰富,功能齐全,为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等。它们都可以用SpringBoot的开发风格做到一键启动和部署;

2️⃣ 使用 HTTP 协议的 REST API,服务提供方和服务消费方通过 Json 数据格式交互,只需要定义好相关 Json 字段即可,消费方和提供方无接口依赖。通过注解方式来实现服务配置,对于程序有一定入侵;

3️⃣ 性能上因为是HTTP短连接,系统并发量和响应时间不及RPC长连接方式(如Dubbo,相差三倍左右),在报文比较小,响应时间要求严格的场景不太适合;

4️⃣使用spring boot admin作为服务基本情况监控,原理是Spring Boot Actuator组件;

5️⃣ 部分组件的功能及稳定性并未达到生产级别,使用者不多,需要引入其他功能相似组件。

三、Dubbo

Dubbo是一个分布式、高性能、透明化的RPC服务框架,提供服务自动注册、自动发现等高效及多样性服务治理方案,可以和Spring框架无缝集成。

3.1 整体架构

图片

  • Provider:暴露服务的服务提供方;
  • Consumer:调用远程服务的服务消费方,使用软负载均衡算法;
  • Registry:服务注册与发现的注册中心,如Zookeeper、redis等;
  • Monitor:统计服务的调用次数和调用时间的监控中心,服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心;
  • ContAIner:服务运行容器;

图片

Dubbo分层结构设计

  • config配置层

对外配置接口,以ServiceConfig, ReferenceConfig为中心,可以直接初始化配置类,也可以通过spring解析配置生成配置类;

  • proxy服务代理层

封装了所有接口的透明化代理,而在其它层都以Invoker为中心,只有到了暴露给用户使用时,才用Proxy将Invoker转成接口,或将接口实现转成Invoker,也就是去掉Proxy层RPC是可以Run的,只是不那么透明,不那么像调本地服务一样调远程服务;

  • registry注册中心层

封装服务地址的注册与发现,以服务URL为中心,扩展接口为 RegistryFactory, Registry, RegistryService;

  • cluster路由层

封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为 Cluster, Directory, Router, LoadBalance;

  • monitor监控层

RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为 MonitorFactory, Monitor, MonitorService;

  • protocol远程调用层

封装RPC调用,以Invocation, Result 为中心,扩展接口为Protocol, Invoker, Exporter,Protocol是核心层,也就是只要有Protocol + Invoker + Exporter就可以完成非透明的RPC调用,然后在Invoker的流程中实现Filter拦截点;

  • exchange信息交换层

封装请求响应模式,同步转异步,以Request, Response为中心,扩展接口为Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer;

  • transport网络传输层

抽象mina.NETty为统一接口,以Message为中心,扩展接口为Channel, Transporter, Client, Server, Codec;

  • serialize数据序列化层

可复用的一些工具,扩展接口为Serialization, ObjectInput, ObjectOutput, ThreadPool。

3.2 核心组件

图片

图片

Spring Cloud与Dubbo功能对比

3.3 特点

图片

图片

四、Spring Cloud Alibaba

4.1 整体架构

类似Spring cloud的架构,适配集成Alibaba的多种中间件,注册中心换成了Nacos,限流熔断从Hystrix换成了Sentinel,服务间调用可以使用Dubbo,使用RocketMQ作为消息总线及事件驱动组件,用Seata组件(前身是fescar)支持分布式事务功能,目前最新版本是2.1.0.RELEASE。

图片

4.2 核心组件与特点

图片

图片

Nacos基本架构

图片

Sentinel 的主要特性

图片

Sentinel 的开源生态

图片

与spring cloud相关组件对比

图片

几种服务治理组件对比

使用demo:https://www.jianshu.com/p/9a8d94c0c90c。

五、Service mes

5.1 整体架构

如下是简化的Service Mesh架构,服务A和服务B相互调用,不再是以前通过微服务框架直接指向的方式,而是在中间加了两个叫做Sidecar(边车)的东西,各种服务都在这里处理数据上的逻辑。Sidecar的作用是数据面的代理,贴近数据并受控于控制面。

图片

基本架构图

实际业务中,尤其是中台架构下,企业往往需要很多的微服务,即服务A、服务B相互调用情形不断扩展,逐渐形成更多的服务加Sidecar的组合,就变成了一个真正意义的Service Mesh。

图片

服务的网格化(mesh)

5.2 核心组件

图片

Istio架构图

主流云原生Service Mesh框架是Istio,Go语言实现,与容器编排系统Kubernetes一脉相承,下面介绍其主要组件,目前Istio版本为1.3.x release:

图片

5.3 特点

1、Service Mesh所带来的核心价值可以总结为:

  • 基础设施下沉 —— 微服务架构支撑、网络通信、治理等相关能力下沉到基础设施层,业务部门无需投入专人开发与维护,可以有效降低微服务架构下研发与维护成本;
  • 降低升级成本 —— Sidecar支持热升级,降低中间件和技术框架客户端、SDK升级成本;
  • 语言无关 —— 提供多语言服务治理能力;
  • 降低复杂测试、演练成本 —— 降低全链路压测、故障演练成本和业务侵入性。

2、数据面以Envoy Proxy作为代理组件。通过Outbound流量拦截或显示指向Envoy Proxy地址的方式代理发起请求流量,经过Envoy Proxy的服务发现、负载均衡、路由等数据面逻辑后,选择目标服务实例地址进行流量转发;在Inbound流量接收端进行流量拦截(可配置是否拦截),对Inbound流量进行处理后转发至目标服务实例。

3、控制面以Pilot为核心组件。通过建立与Envoy Proxy双向GRPC连接,实现服务注册信息、服务治理策略的实时下发与同步。其他控制面组件Mixer(策略检查、监控、日志审计等)、Citadel(认证与授权)、Galley(配置检查)可在实际场景中配置关闭。

4、平台开放与扩展主要通过Kubernetes CRD与Mesh Configuration Protocol(简称为MCP,一套标准GRPC协议)。平台默认支持Kubernetes基于ETCD的注册中心机制,可通过MCP机制对接更多诸如Consul、Eureka、ZooKeeper等多注册中心;对服务治理策略的配置可通过定义Kubernetes CRD或实现MCP GRPC服务对接实现。

5、高可用设计主要基于Kubernetes及Istio机制实现。数据面Envoy Proxy以Init-Container方式与业务Container同时启动,Istio提供了Pilot-agent组件实现对Envoy Proxy生命周期、升级的支持,保证Envoy Proxy的高可用。控制面所有Istio组件均由Kubernetes多副本探针机制保证高可用性。Istio目前支持服务部署于Kubernetes、使用Consul注册服务、服务运行于单个虚拟机上集成,自定义 Istio的策略执行组件可以扩展和定制,以及与acl、日志记录、监视、配额、审核等现有解决方案集成。

6、Alibaba的对Istio架构的改造落地实践:https://zhuanlan.zhihu.com/p/96720618。

实践方案中放弃Istio 通过 iptables 的 NAT 表去做流量透明拦截的方式(NAT 表所使用到的 nf_contrack 内核模块效率很低),自研全新的透明拦截组件mangle;也没有采用 Istio 中的 Mixer 组件,用内部广泛使用的 Sentinel 组件替代,每个请求都会经过 Sentinel Filter 做处理。限流所需的配置信息则是通过 Pilot 从 Nacos 中获取,并通过 xDS 协议下发到 Envoy 中,实践中Service Mesh 的引入对于 RT 的影响和带来的 CPU 开销是基本一样的,而内存开销则因为依赖服务和集群规模的不同而有相当大的差异,Envoy 在内存的使用上仍存在很大的优化空间。

7、Service Mesh 离普及还面临一定挑战:

(1)性能尚存问题,服务间调用因为两层Sidecar,请求链路多两跳;Istio Mixer集中式后端成为性能瓶颈;

(2)Istio架构复杂,一定的技术门槛,掌握和实施成本较高,稳定性及产品化应用有待验证;

(3)真实落地的产品和企业还是比较少,提供的经验比较欠缺。

六、Service Comb

2018年10月24日, Apache软件基金会宣布Apache ServiceComb 毕业成为Apache顶级项目。Apache ServiceComb已在数十家企业中使用,包括奇蛙智能科技华为云、软通动力,传智播客、梅斯医学、文思海辉、中国人保和同济大学等。

6.1 整体架构

图片

6.2 核心组件

图片

6.3 特点

1、异步内核:基于VertX的同步和异步模型编程有效确保了无论是在传统企业或电商领域,还是在新兴的互联网或物联网等新兴企业中,都能够保持高性能和低延迟,以避免在达到峰值负载时应用出现雪崩效应;

2、ServiceComb支持多种通信协议, Rest、Highway(RPC)等,相比SpringCloud的Rest协议,Highway(RPC)协议性能更高,Highway是基于二进制的序列化方式传输数据,采用二进制编码的系统的性能远高于采用文本的HTTP协议;

3、开箱即用体验,开发简单,开发人员通过脚手架网站start.servicecomb.io启动的微服务项目,可以集服务注册、发现、通信和微服务治理能力和默认的集中化配置为一体;

4、ServiceComb的商业版本CSE相比SpringCloud不仅提供了微服务开发框架,还提供了微服务云部署,管理、治理等一站式解决方案;

5、OpenAPI自动代码生成,业务逻辑代码和治理能力隔离,可以使能DevOps Pipeline, 使用契约文件和OpenAPI的双向生成能力可以使不同的团队高效且独立的开发和管理代码、测试和进行文档化工作;

6、官网上的文档资料比较简略,网上可借鉴的实现案例不多,demo:https://blog.csdn.net/zengdongwen/article/details/93486257。



Tags:框架   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  Search: 框架  点击:(8)  评论:(0)  加入收藏
Htmx,它到底是框架还是库?
在最近的前端开发技术的探讨中,htmx经常成为热议的话题。一些人批评它,认为尽管htmx批评现代前端框架过于复杂,但它自己却似乎也是一个复杂的框架。这种看法值得我们深入思考。...【详细内容】
2024-03-28  Search: 框架  点击:(16)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  Search: 框架  点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  Search: 框架  点击:(39)  评论:(0)  加入收藏
Go Gin框架实现优雅地重启和停止
在Web应用程序中,有时候我们需要重启或停止服务器,无论是因为更新代码还是进行例行维护。在这种情景下,我们需要保证应用程序的可用性和数据的一致性。这就需要优雅地关闭和重...【详细内容】
2024-01-30  Search: 框架  点击:(67)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  Search: 框架  点击:(68)  评论:(0)  加入收藏
OpenHarmony - 基于ArkUI框架实现日历应用
前言对于刚刚接触OpenHarmony应用开发的开发者,最快的入门方式就是开发一个简单的应用,下面记录了一个日历应用的开发过程,通过日历应用的开发,来熟悉基本图形的绘制,ArkUI的组件...【详细内容】
2024-01-16  Search: 框架  点击:(54)  评论:(0)  加入收藏
阿里“AI替换万物”框架火爆社区,网友:偶像不需要真人了?
白交 发自 凹非寺量子位 | 公众号 QbitAIReplace Anything as you want。现在只需框住你需要保留的区域,AI就可以替换万物了!比如让霉霉穿上中国旗袍,结果发饰、服装、背景等各...【详细内容】
2024-01-15  Search: 框架  点击:(66)  评论:(0)  加入收藏
分布式事务框架选择与实践
分布式事务是处理跨多个服务的原子操作的关键概念,而选择适合应用场景的框架对于确保事务一致性至关重要。以下是几个常见的分布式事务框架,并讨论它们的使用和实践。1. XA协...【详细内容】
2024-01-05  Search: 框架  点击:(96)  评论:(0)  加入收藏
JavaScript前端框架2024年展望
Angular、Next.js、React和Solid的维护者和创作者们展望2024年,分享了他们计划中的改进。译自2024 Predictions by JavaScript Frontend Framework Maintainers,作者 Loraine...【详细内容】
2024-01-05  Search: 框架  点击:(91)  评论:(0)  加入收藏
▌简易百科推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(8)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(12)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(54)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(39)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(50)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(68)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(86)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(86)  评论:(0)  加入收藏
花 15 分钟把 Express.js 搞明白,全栈没有那么难
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16  程序员成功  微信公众号  Tags:Express.js   点击:(88)  评论:(0)  加入收藏
站内最新
站内热门
站内头条