【云原生】10分钟带你了解微服务架构--Dubbo与Spring Cloud

前言

云原生(CloudNative)是一个组合词,Cloud+Native。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。Cloud Native是一种应用程序开发风格,可鼓励在持续交付和价值驱动型开发领域轻松采用最佳实践。一个相关的学科是构建12要素应用程序,其中开发实践与交付和运营目标保持一致,例如,通过使用声明性编程,管理和监视。

云元素的四要素:

1.微服务:几乎每个云原生的定义都包含微服务,跟微服务相对的是单体应用,微服务有理论基础,那就是康威定律,指导服务怎么切分,很玄乎,凡是能称为理论定律的都简单明白不了,不然就忒没b格,大概意思是组织架构决定产品形态,不知道跟马克思的生产关系影响生产力有无关系。微服务架构的好处就是按function切了之后,服务解耦,内聚更强,变更更易;另一个划分服务的技巧据说是依据DDD来搞。

2.容器化:Docker是应用最为广泛的容器引擎,在思科谷歌等公司的基础设施中大量使用,是基于LXC技术搞的,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容器管理,容器间的负载均衡,谷歌搞的,Docker和K8S都采用Go编写,都是好东西。

3.DevOps:这是个组合词,Dev+Ops,就是开发和运维合体,不像开发和产品,经常刀刃相见,实际上DevOps应该还包括测试,DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。

4.持续交付:持续交付是不误时开发,不停机更新,小步快跑,反传统瀑布式开发模型,这要求开发版本和稳定版本并存,其实需要很多流程和工具支撑。


一、什么是微服务?

        作为云元素之首的微服务,它的架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。其中,Dubbo和Spring Cloud是两种比较主流的微服务架构。下面就来简单介绍下Dubbo和Spring Cloud。


二、Dubbo是什么?

-        Dubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。Dubbo是一种分布式服务框架(RPC框架)。


1.Ddubbo使用RPC实现服务输入输出

        在去选择技术框架时,技术框架最基本要解决上面现存问题,同时我们也要确认出我们的期望,要达到的目标是什么:

1.支持当前业务需求,这是最最基本的条件;
2.服务避免单点问题,去中心化;
3.服务高可用、高并发,解耦服务依赖;
4.服务通用化,支持异构系统调用服务;
5.服务依赖关系自维护,可视化;
6.服务性能监控自统计,可视化;
7.服务需自带注册、发现、健康检查、负载均衡等特性;
8.开发人员关注度高,上手快,简单轻量,低侵入;

        还有最重要一点,这也是往往很多技术人员进入的误区,“对于技术,不要为了使用而使用,用最简单合适的技术实现解决问题才是正道”。架构是服务于业务的,能快速方便的满足业务需求的架构才是好的架构。所以Dubbo选择了RPC。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9L3kxGoy-1653832357034)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220316134451923.png)]


2.RPC是什么 ?

        分布式服务架构当垂直应用(Web框架 MVC)越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
可以实现RemoteProcedureCall 远程过程调用 。


3.Dubbo工作原理(RPC框架)

Dubbo的工作原理可分为5个组件及6个步骤:

5个组件:Container 服务容器(有时会忽视)、Provider 提供者 、Registry 注册中心 、Consumer 消费者和Monitor 监控中心。

6个步骤:Start 开始(发布)、Register 注册、Subscribe 订阅、Notify 推送、Invoke 调用缓存、统计 Count。

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yARVckuu-1653832357035)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220316132742678.png)]

(1)Container 服务容器

(2)Provider 提供者

(3)Registry 注册中心 zookeeper

(4)Consumer 消费者

(5)Monitor 监控中心

0.服务容器Container 负责启动加载运行服务提供者Provider。(第一步start,就是将服务装载容器中,然后准备注册服务。和Spring中启动过程类似,spring启动时,将bean装载进容器中的时候,首先要解析bean。所以dubbo也是先读配置文件解析服务。)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gQBg3QL5-1653832357035)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220316134052054.png)]

0.服务容器Container 负责启动加载运行服务提供者Provider。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rkmMvgsr-1653832357036)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220316133000957.png)]

根据Provider配置的文件根据协议发布服务 , 完成服务的初始化.

1.Provider在启动时,根据配置中的Registry地址连接Registry,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1erNy5k2-1653832357038)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220316133058064.png)]

将Provider的服务信息发布到Registry,在Registry注册自己提供的服务。

2.Consumer在启动时,根据消费者XML配置文件中的服务引用信

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8R253oJ5-1653832357039)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220316133155746.png)]

息,连接到Registry,向Registry订阅自己所需的服务。

3.Registry根据服务订阅关系,返回Provider地址列表Consumer,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WuWvqwHi-1653832357040)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220316133242869.png)]

如果有变更,Registry会推送最新的服务地址信息给Consumer。

4.Consumer调用远程服务时,会根据路由策略,先从缓存Provider

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wG9ZXH2P-1653832357040)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220316133323401.png)]

地址列表中选择一台进行,跨进程调用服务,假如调用失败,再重新选另一台调用。

5.服务Provider和Consumer,会在内存中记录调用次数和调用时

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-osFASTVk-1653832357041)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220316133444256.png)]

间,每分钟发送一次统计数据到Monitor(异步请求)。


三、Spring Cloud是什么?

Spring Cloud通过多种特定方式促进了云原生发展方式。起点是一组功能,分布式系统中的所有组件都需要轻松访问这些功能。Spring Cloud建立在Spring Boot上,涵盖了许多这些功能。Spring Cloud作为两个库提供了更多功能:Spring Cloud上下文和Spring Cloud Commons。Spring Cloud上下文为Spring Cloud应用程序的ApplicationContext提供了实用程序和特殊服务(引导上下文,加密,刷新作用域和环境端点)。Spring Cloud Commons是在不同的Spring Cloud实现中使用的一组抽象和通用类(例如Spring Cloud Netflix和Spring Cloud Consul)。


1.Spring Cloud包含什么?

Spring Cloud包含配置管理工具、核心组件、消息总线、集群、消息驱动等…其中核心组件是Spring Cloud的关键。


2.Spring Cloud的五大核心组件

2.1 Eureka

Eureka是微服务架构中的注册中心,专门负责服务的注册与发现。每个服务中都有一个Eureka Client组件,这个组件专门负责将这个服务的信息注册到Eureka Server中。就是告诉Eureka Server,自己在哪台机器上,监听着哪个端口。而Eureka Server是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号。

在这里插入图片描述

2.2Ribbon

简单说,Ribbon主要提供客户侧的软件负载均衡算法。和其他构成NIWS 内部进程通信栈的组件一起,该算法在 Netflix 经历了严峻考验。一般与 Eureka 一起使用,Eureka 主要用来平衡到中间层服务的请求。

在这里插入图片描述

服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台。


2.3Feign

Feign是声明性的web服务客户端。它使编写web服务客户端更加容易。要使用Feign,请创建一个接口并对其进行注释。它具有可插入的注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud添加了对Spring MVC注释的支持,并支持使用Spring Web中默认使用的同一HttpMessageConverters。Spring Cloud集成了Ribbon和Eureka以在使用Feign时提供负载平衡的http客户端。

在这里插入图片描述

基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求。


2.4Hystrix

Hystrix有三个作用:
1.隔离:其他服务不会受到影响。
2.熔断:不会调用宕机的服务。
3.降级:在“脏”数据库修改数据。

        对于隔离来说,Netflix创建了一个名为Hystrix的库,该库实现了断路器模式。在微服务架构中,通常有多个服务调用层,较低级别的服务中的服务故障可能会导致级联故障,则电路断开并且无法进行呼叫。在错误和断路的情况下,开发人员可以提供备用功能。所以 Hystrix后备可防止级联故障,保障其他服务不受影响。

在这里插入图片描述


        对于熔断和降级来说,如果一个服务宕机,当扇出链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
        因此,Hystrix三个作用基本上是同时发生的,这极大的解决了服务器宕机问题。


2.5Zuul

Zuul,也就是微服务网关。这个组件是负责网络路由的,如果前端、移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服务。


总结

微服务两大主流架构Spring Cloud 和Dubbo到此就讲完了,在云原生火热的今天,我们不得不去学习、巩固、加强自己的支持储备,让自己变得强大,微笑迎接充实的每一天。


注:本文章仅用于参考学习,如有错误,请大家指正。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340