Istio 微服务架构的演变

news2024/12/27 4:28:42

微服务架构的演变


单体模式下面一个应用通常会有一个app server,这个app server里面会有不同的子模块,每一个模块都写在同一个应用包里面,模块和模块之间的边界有些时候设计的不是特别清晰,特别早期代码混合在一起那么意味着互相的调用。

这种比较重的单体架构还是通过冗余部署和负载均衡来保证应用的高可用。

单体架构不再适合复杂的业务需求,我们会去做一些业务架构的调整,取而代之的是一个一个的子系统,这些子系统有独立的部署文件,有着独立的生命周期。每个子系统高可用的诉求也是不一样的,子系统和子系统通过网络调用来完成整个业务。

原来一个单体系统,单实例单进程这样一个模式就会变为成百上千个子服务形成统一的部署视图。

这个时候再去人肉一个一个的去管控,那么代价会非常的大,出错的机率会非常的高。这样就需要依赖自动化的方式去完成应用的配置和服务发现的能力。

从单块系统到微服务系统的演进


假设说有一个网店,销售有一个销售模块,提供门户卖东西。网店卖的货要有存储,有个仓库管理系统去管理库存。后面还有计费,折扣这些诉求。针对于单体应用就会提供到单体应用的功能里面去。

既然是同一个进程,那么只要告诉我地址我就可以访问到所有的服务。

微服务架构演进

要将单体应用拆分为微服务架构,这样就将一个应用进程里面不同能力拆分为不同的子系统,每个子系统承担自己的职责。

sales既然支撑了前端的业务,那么它的可用性的要求会高,它所支持的并发请求也就会越多,这里就可以去部署更多的实例,提供更多的负载并发的支撑,然后提供更高的可用性。

网络要为每一个系统打通,包括服务和服务之间的调用。为了解决这种复杂的耦合性就可以使用api gateway。集群里面可以有很多很多的服务,这些服务可能通过同一个域名暴露出去,那么就需要一个api网关的,这个网关接受不同的客户诉求,然后经由网关转发到不同的服务。

服务和服务之间的调用就需要有服务发现的机制,那么就需要服务注册中心,每个服务起来之后要将自己注册上去,并且不同的renew去说我活着。他要去注册自己的健康状态,其他人再去做服务调用的时候知道这个服务有哪些真实的服务器跑在后面。

这里面就有服务注册中心,服务中心注册的地址信息是,如果点对点的方式去注册的,那么每一个节点的健康状态它都要实时的去更新。另外一个就是通过集中式的负载均衡或者分布式的负载均衡,那么会将统一入口的虚拟IP绑定上去。

 

典型的微服务业务场景


warehouse和accounting之间可能会有固定的调用关系,现在的系统架构是要面向失败去做设计的,去设计系统的时候要去假定任何的组件都是不可信的,accounting可能出现故障有两种可能,一种是可以返回错误码,一种是可能不响应了,对于不响应的话,那么很多应用在业务代码里面就写好了返回50x回来。如果是假死,那么warehouse是不知道accounting有问题,它会将请求转发到accounting等待其回复,如果应用写的不够好,不够健壮,那么它就会无限等待,但是它会认为accounting是正常的,因为accounting不返回给其任何的错误消息,那么sales就会继续将请求转发过来。

那么就会导致warehouse接收到很多sales海量的请求之后,这些请求没有有效的办法转发到accounting获取到返回值,那么warehouse这边积压的请求就会越来越多,这样使得warehouse也可能会出现故障。 

warehouse出现之后也可能引发类似的问题,那么每个组件都可能会被影响,这样就会导致每个局部的故障扩展到了全局。

很多时候warehouse需要熔断的能力,一个是你返回错误码,要能够正确的处理这个错误码。

还有就是如果你不返回错误码,那么至少要知道有多少个并发请求出去了,要限制对上面的并发请求,如果并发请求很多的时候要去做熔断和服务降级,告诉sales已经发出很多请求了,但是都没有被响应。那么现在没有办法处理更多请求了。

 既然是微服务架构体系,每个服务都有责任将其注册到服务注册中心,每个服务向下调用都是需要负载均衡的能力。

如果提供一个HTTP的服务出去,然后又不去做任何的校验。那么这个服务会被很多恶意或者非恶意的请求影响,这样就无法控制请求的有效性,频度等等。

如果服务提供了删除能力,如果不去做如何的校验鉴权的话,那么这个保护就无从谈起。

整个企业都会有一套认证鉴权的中心服务,每个应用都会接入到这个服务里面,服务和服务之间调用是要基于受信任权限的,我要知道你是谁,你要有这个权限才能够调用我。这里通常就会有auth server。

每个服务都会去和auth server去做连通的,去获取授权凭证的这么一个能力。

 

更加完整的服务架构


 客户端发起请求,服务器端响应这些请求,服务器端有业务逻辑,有平台能力。

那么完整的一个微服务框架里面融合了业务能力和平台能力这样一个整体。

 

系统边界


 平台能力和业务能力如何去梳理一下。

业务逻辑有哪些呢?有sales warehouse accounting discount,这些真正和业务相关的逻辑代码。

这些是业务的。

剩下的和认证相关的,熔断相关的,负载均衡相关的,还有协议相关的,这些和业务无关。这些更多的是平台侧的能力。就是业务和业务之间的调用,基于什么协议和什么样的诉求,这些都是平台侧统一拉通的。

这种架构通常分为两种,一种就是java程序员所熟知的spring cloud,这个项目里面整合了netfix,就是网飞这家公司的一些开源软件。这些开源软件有eurka,比如服务注册中心,或者说是ribbon,也就是做客户端负载均衡的。

这些就将很多开源的库,内嵌到了业务代码里面,业务代码在做平台侧能力的时候,那么业务代码和平台能力是需要做深度整合的。其次你要去任何的变更,其实是要去动部署的包的,比如你的服务发现能力,或者负载均衡能力的版本要升级一下,那么就需要对整个的war包去做升级。

这样业务侧和平台就变成了紧耦合的关系。

那么有没有一种更加优雅的方式,更加合理的方式使得业务归业务,平台归平台。能不能简化业务所面对的这些基础平台侧的需求。

将认证,服务发现。熔断的这些能力丢到平台侧,使得业务侧真真正正的只关心业务。这种模式就是服务网格所推荐的能力,也就是istio后面所追求的结果。

 

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

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

相关文章

PCL学习之滤波算法

前言 点云滤波作为常见的点云处理算法,一般是点云处理的第一步,对后续处理有很重要作用。滤波 有很多方面也有很多种功能,比如去除噪声点、离群点、点云平滑以及空洞、数据压缩等 原始点云数据往往包含大量散列点、孤立点,在获取…

CS 224N总结

CS 224N网址:Stanford CS 224N | Natural Language Processing with Deep Learning Lecture1 PPT网址:PowerPoint Presentation (stanford.edu) 这一讲主要讲了NLP研究的对象,我们如何表示单词的含义,以及Word2Vec方法的基本原…

Ubuntu22 k8s 1.27.1 安装及集群搭建教学(2023.5.16 k8s 最新版本教学,只看这一篇就够了哦!保姆级教程!不行你来找我!)

Ubuntu22 k8s 1.27.1 安装及集群搭建教学(2023.5.16 k8s 最新版,只看这一篇就够了哦!保姆级教程!!不行你来找我!) 温馨提示请仔细阅读:❤️❤️❤️❤️❤️❤️❤️❤️ 1. 由于新版…

Linux系统学习须牢记这几点

工欲善其事须先利其器,想了解Linux技术,先要有一套教学平台,请教同行或者老师来为我们解答,当然也可以下载Cygwin进行学习。但是自主学习的这一过程很困难,因为没有别人的帮助,我们或许会感到迷茫,也会出现…

Spring整合Mybatis、Junit

文章目录 1 Spring整合Mybatis思路分析1.1 环境准备步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7:添加Mybatis核心配置文件步骤8:编写应用程序步骤9:运行程序 1.2 整合…

STM32F1定时器(TIM1~TIM8)

一、stm32f1定时器简介 1.1、定时器分类 STM32共11个定时器,2个高级控制定时器TIM1和TIM8,4个通用定时器TIM2~TIM5,两个基本定时器TIM6和TIM7,两个看门狗定时器和一个系统滴答定时器Systick. 高级定时器TIM1和TIM8的时钟由APB1产…

想改进婴儿fNIRS数据分析?基于这些先进方法的评估值得一看!

导读 在过去的十年中,fNIRS提供了一种非侵入性的方法来研究发展人群的神经激活。尽管fNIRS在发展认知神经科学中的应用越来越多,但在如何预处理和分析婴儿fNIRS数据方面却缺乏一致性或共识。本研究考察了对婴儿fNIRS数据应用更高级统计分析的可行性&…

智聚北京!相约全球人力资源数智化峰会

人力资源是推动经济社会发展的第一资源。作为我国经济压舱石的中央企业在对标世界一流企业和管理提升方面的持续创新,各行业领军企业围绕组织变革、管理升级、全球化发展走深走实。人力资源管理正从传统职能管理与管控,向紧贴业务战略实现、组织边界和人…

阿里巴巴-1688-退款退货明细下载(导出)

DUMUZ是什么? Dumuz是一款软件产品,可模拟人在电脑上的不同系统之间操作行为, 替代人在电脑前执行具有规律与重复性高的办公流程。 目前基于实际业务场景在软件搭建了模拟实现天猫/淘宝批量订单发货、备注插旗、页面商品数据采集、已买宝贝订…

小米AI实验室多模态图片翻译论文入选自然语言处理领域顶级会议ACL 2023

近日,ACL 2023的论文录用结果公布,小米AI实验室机器翻译团队联合厦门大学苏劲松教授团队在多模态图片翻译方向的最新研究成果已被ACL 2023主会录用,标志着小米在多模态机器翻译方向取得了重要进展。 ACL(Annual Meeting of the As…

单片机--实战练习

目录 【1】GPIO 1.定义 2.应用 I - Input - 输入采集 O - Output - 输出控制 ​编辑​编辑 3.GPIO结构框图 4.功能描述 输入功能 输出功能 5.相关寄存器 【2】点亮一盏LED灯 1.实验步骤 2.编程实现 3.编译下载 4.复位上电 练习:实现LED灯闪烁…

Cocos Shader 转场特效合集!卡牌必备,免费开源!

接前两期,孙二喵的 AIGC 卡牌接近尾声了!链接: AIGC 制作卡牌1AIGC 制作卡牌2 最近,二喵遇到一个很头疼的问题!就是如何实现既流畅、又生动的转场特效。 经过一番大战之后,我实验了多个效果,一共…

记录--vue3优雅的使用element-plus的dialog

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 如何优雅的基于 element-plus,封装一个梦中情 dialog 优点 摆脱繁琐的 visible 的命名,以及反复的重复 dom。 想法 将 dialog 封装成一个函数就能唤起的组件。如下: addDialog(…

Python每日一练(20230518) 螺旋矩阵 I\II\III\IV Spiral Matrix

目录 1. 螺旋矩阵 I Spiral Matrix i 🌟🌟 2. 螺旋矩阵 II Spiral Matrix ii 🌟🌟 3. 螺旋矩阵 III Spiral Matrix iii 🌟🌟 4. 螺旋矩阵 IV Spiral Matrix iv 🌟🌟 &#…

探索Vue的组件世界-组件通信

目录 组件跨层级访问 访问外层组件 定向消息 ref(父组件访问子组件) 依赖注入 依赖注入,vue2.0实现源码 组件封装 组件二次封装 小结 组件跨层级访问 访问外层组件 // 获取 根组件 的数据 this.$root.pri;// 写入 根组件 的数据 t…

人机融合智能的测量、计算与评价

老子在《道德经》第二十一章写道:"道之为物,惟恍惟惚。惚兮恍兮,其中有象;恍兮惚兮,其中有物。窈兮冥兮,其中有精;其精甚真,其中有信。"(“道”这个东西,没有清楚的固定实体。它是那样的恍恍惚惚啊,其中却有形象。它是那样的恍恍惚…

怎样才能做好企业内部wiki知识库呢?

企业内部wiki知识库是一种常用的知识管理方式。通过建立企业内部wiki知识库,企业可以更好的管理和共享知识,提高员工的工作效率和生产力。 详解如何做好企业内部wiki知识库的方法: 一、设计知识库架构 企业内部wiki知识库的架构设计是非常…

抖音seo源码优化/企业号搜索排名/开源搭建

什么是抖音seo? 抖音SEO是指通过提高在抖音平台的关键词排名,来获取流量、获取客户的目的。抖音的流量主要分为付费流量、推荐流量和搜索流量,其中搜索流量因为付费太贵、上热门太累而成为另一种进入方式1。抖音拥有庞大的用户基数&#xff…

shell命令以及运行原理,命令行解释器/bash,Linux Kernel与Shell简单理解等

引入 输入指令的过程本质上就是在输入一个字符串,然后指令的本质就是编译好的程序.exe与脚本。它们都是在系统的特定路径之下放着呢。然后我们所有指令最终都是要到操作系统内部去运行的,也就是说各种各样的指令都需要操作系统的参与。我们有各种各样的…

WordPress 如何开启多站点 含Apache和Nginx伪静态规则

WordPress 3.0以上的版本支持直接开启多站点模式,这样一来,你可以在一个后台切换多个站点进行管理。 最近打算折腾一个主题演示站,给每个主题使用独立的子站点来搭建演示,如果是Apache环境,配置就比较容易,但是倡萌使用的是 Nginx,花了大量的时间测试了N多网络上的伪静…