了解微服务架构中有关服务架构的演进

SOA(面向服务架构)是什么? 现在对SOA理解些了吗?SOA是一种面向服务的架构,基于分布式架构,它将不同业务功能按服务进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。httpshttpshttpshttps。... 阅读详情

单体架构

在早期90年代互联网发展中,产生了软件工程,并催生了以C语言为代表的面向对象的高级语言。同时,单体架构也由此产生,我相信从事it行业的小伙伴对单体架构并不陌生。当时软件概念还没普及,面对需求更多以一个单体项目开发的功能模块,所有的代码逻辑耦合在一起,一两个人就可以负责所有的功能业务开发,对于当时的用户使用量来说,单体架构足够应付。

单体架构的方式,直接干练,到目前为止使用量也不在少数,毕竟这种架构方式也符合人类便捷思维的一种方式。类似的提出面向对象思想之前,使用的面向过程思想,一个功能按照有序的顺序一步步编写有序调用,这也是人们倾向的思考思维。

很明显,我们能够看到单体架构的优势:

易于开发,直接使用开发工具创建一个项目即可入手开发。

易于部署,开发完之后,直接打包部署在适应的服务器,例如:apache,iis,tomcat等。

易于扩展,需要扩展的功能我们也可以直接下手开发,甚至可以将项目打包多份运行在多台服务器实现负载均衡。

然而,以现在用户使用量的角度来看单体架构,它的弊处也随处可见。

庞大的单体代码库,会吓倒自己和同事,也会吓跑新手。一时接手也需要花不少时间去逐个理解,单体架构庞大之后没有清晰的模块划分,可能会随着时间推移,且每个人代码习惯也会面临不一样,导致模块被分解,整体代码变得越来越难理解,代码的质量也逐渐下降,也就是我们俗称的“shit mountain。”谁碰谁倒霉!

IDE过载较大,面临成堆的代码量,你可能早上高兴上班,启动项目的时间就已经喝了两杯咖啡了,或许新同事的不正确操作引来一堆红色警告,上午时间没了,血压也上去了。

持续部署的困难。面临大型单体应用程序,刚开始开发完很顺利,部署也很顺利。然而,产品经理每次经过你的岗位,面带微笑,提了一堆需求给你,今晚改完发布。

改完之后你需要重新部署整个应用程序,有时还得先中断其他后台任务,无论受不受你当前更改的影响,最终导致问题的概率会增加。

或许因为新需求改动了组件,一部署即error警告,此时整个项目便无法运行,或许你在代码里不小心写了一行让cpu飙升的代码,导致服务器宕机整个服务也无法使用了,真让人头大。

扩展应用程序可能变得困难,单体架构扩展只能在本身程序里扩展。我们虽然可以通过复制部署到多台服务器或者云服务来部署实现负载均衡,并根据负载数量来调整实例数量(也就是拷贝部署多少个服务)。

但是在与数据交互时,所有服务始终都是使用一个数据库访问所有数据,这很显然降低了缓存效率并增加了内存消耗和IO流量,也就是数据访问量上来了,本该走缓存了却直接跑去访问数据库,大量访问数据库的同时需要频繁调度内存以及频繁输送数据,这将会是很糟糕的情况。

扩展开发的障碍。单体应用也会阻碍扩展开发,到了一定规模之后,我们很难将UI,商品,库存分开独立开发,都将在一个应用程序里开发,任何一个出问题或者拖延了开发周期都将会影响到整个的服务,团队也将必须协调开发工作和重新部署。

需要对技术堆栈做出长期承诺。开发单体程序被迫使你在开发之初时选择的技术栈要保持一致。如果我们当初选择了C#开发,那么后期想使用Go开发,那么将会是一件困难的事情,因为单体程序很难兼容其他的技术栈使用,要么将选择重构,面对庞大的单体程序重构一堆“shit mountain”将会面临不小的挑战。

说了单体应用的诸多缺点,并不是我在找茬,它本身不是缺点,是在于面对型应用和超大型应用的出现(单纯应用的庞大,用户数并不庞大),以及用户量剧增时体现出来的不适用性,迫切需要新的且适应的架构方式来解决我们的麻烦。

垂直架构

于是,垂直架构出现了,也成为竖井式架构。可能有伙伴没听过垂直架构,这也是架构演进的一种必然趋势。面对单体架构的不足,架构师们很显然会从单体架构里按照业务做垂直划分成多个单体应用,此时由原来的单体应用变成了多单体应用部署。所谓的垂直就是在一个应用里,根据业务来划分独立的模块,每个业务模块做专一的事情并没有直接的关联。

​将庞大的系统进行划分多个单体应用,可以很好地实现流量分担,解决一定程度的并发问题。

可以针对不同模块进行优化,将减少因为一个改动影响整个系统的麻烦。

更加方便水平扩展,也就是多个单体里每个单体拷贝副本部署到多个服务器里,更好地实现负载均衡,容错率也显著提高。

单体之间相互独立,互不影响,针对不同模块进行优化,不会因为一个组件或者一个error导致整个系统崩溃,面对新增业务的迭代更加高效。

然而,虽然是将一个单体拆分为多个单体,但是必然需要服务之间互相调用,如果某个服务的端口或者ip发生改变,调用的系统也需要手动更改,偏向硬编码。

搭建集群时,我们拆分的多个单体应用并拷贝副本部署多套服务搭建在一起共同工作,集群之后看似一个完整的个体应用实则内部多个节点互相协同负载工作均衡。但是,垂直架构的集群将会面临内外网负载的问题,迁移机器时影响调用方的路由,导致路径故障无法正常使用。

服务之间的调用方式存在不统一,基于httpclient,webservice等接口的协议不统一。

服务监控不够健全。除了依靠端口、进程监控这些能够提供监控,其余调用的成功率、失败率、耗时等等指标性的是没有的。

所以面对现有的瓶颈,且伴随互联网的急剧发展,应用的使用逐渐普及挨家挨户,用户规模呈指数级增长。垂直架构虽然能够应付应用的庞大,但是很难满足承载海量用户的需求。并且随着分布式理论和分布式技术的日渐成熟,面向服务架构(SOA)开始出现,并广泛应用于大型的系统上。

面向服务架构

面向服务架构(SOA),可以理解为一个组件模型,将应用程序按照不同功能单元(称为服务)进行拆分,使得这些服务之间定义良好的接口和协议联系起来。

​它的宗旨在于将程序或软件组件构建为服务,提供一种发布可用服务机制,包括它们的功能和输入输出(I/O)要求。并且控制这些服务的正常使用以及避免安全和治理问题。

看到这里,你会发现面向服务架构对于应用的拆分相比于垂直机构的拆分,颗粒度粗细上明显细了一个量级。

面向服务架构的模式主要有两种,一种是企业服务总线(ESB)为代表的SOA,另一种是RPC为代表的SOA。

企业服务总线(ESB),是一种模式,当我们通过SOA按照不同功能进行拆分的多个服务,然后我们搭建一个消息总线,来连接这些拆分的各个服务,所有的服务产生的消息都需要经过消息总线,通过消息总线来进行转化、解释以及路由工作,达成了一种以消息总线为中心的服务通讯的协议。

RPC(remote procedure call)远程过程调用,也就是本地调用一个函数或者对象方法,实际上是调用了远程服务器上的函数和方法。这也很好理解,我们划分了多个一定颗粒的服务,此时是游离且独立的,我们需要使得这些服务具备互相通讯的功能,我们会想到http或者webservice来进行通讯,也是rpc思想的一种体现,http虽然具备完整的通讯体系和标准的规范,但是满足不了企业的内网和外网之间日益复杂的信息交互。所以现如今成熟的prc框架也有不少,可以拿来使用,例如:阿里巴巴开源的Dubbo,微博开源的Motan,腾讯开源的Tars,国外Pivotal公司开源的SpringCloud,谷歌开源的gPRc,facebook开源的Thrift等。这里不再展开讲解框架的内容,有兴趣伙伴可各自翻阅相关资料,

相比于ESB和RPC这两种模式,由于ESB的初始搭建需要一定的人力物力,以及面对持续高涨的数据通讯压力而难以追踪,人们更加倾向于使用RPC模式,可以直接引用标准的http来通讯,或者使用开源的框架。

我们可以看到面向服务架构(SOA)的优点:

可重用性高。由于一个个服务具备独立且规范的restful风格,我们不再需要重构或者考虑它的底层技术栈如何。

易于维护。因为所有的服务都是相互独立的,因为我们可以轻松应对后期的修改和更新,不会影响到其他服务。很好地降低了组织的运营成本。

促进互操作性。我们使用标准化的通讯协议使得平台能够轻松地在客户端与服务之间传递数据,无需考虑它们所构建的语言是什么。

高可用性。我们可以很好的提供服务的可用性,服务的独立增加系统的容错率,通过集群可以大大的提高服务的可用性。

高可靠性。SOA架构能够生成可靠的应用程序,因为调试小型服务要比调试大型服务要方便的多。

可扩展性。SOA架构使得服务可以在不同的服务环境运行,从而提高了可扩展性。此外,使用标准通讯协议允许组织降低客户端和服务器之间的交互级别。降低交互级别允许在不增加额外的压力情况下进行扩展应用程序。

但是SOA的架构的ESB模式由于本身存在复杂性,和internet的restful api模型也不兼容,且面对高涨的数据通讯一时也难以捕捉和追踪。

SOA架构的初期实施也需要大量的人力和物力的投资。

服务管理很复杂,因为服务交换了数百万条数据难以跟踪消息。

每次服务通讯时都会验证服务的输入参数,从而降低性能并增加负载和相应时间。

总结

发展到SOA时,更多的使用这些架构的驱动力是业务推动的。由于restful(统一接口服务原则)的出现,人们更为广泛接受这个模式,将广泛的“服务”概念转换为“软件流程”而不是“业务流程”,并且以软件架构为中心的趋势,也就是说我们常说的微服务。微服务对于服务的分解更为多样,比如我们可以根据业务能力拆分、子域拆分、独立服务,按照团队等。

​当然这些思想将会在后续逐一探讨,本篇主要以服务架构的演进为主。纵观以上服务架构演进的历程,我们很容易发现软件架构演进的规则,那就是一个字:拆!从一个单体应用拆分为多个单体,再进行拆分,拆分为众多的小型服务,最终拆分成一个个细微且独立的服务,每个独立的服务拥有高度自治的能力,这也是去中心化的体现。好了,软件架构的发展部分就到这了,如果有兴趣对文中提到的技术栈感兴趣也可去多了解。

微服务架构实践感悟 从去年初开始接触微服务架构的一些理念,然后到今年开始实施系统第四个大版本的架构升级决定采用这套架构理念。 最近关于微服务架构的讨论还是多起来,因为国外一些著名互联网公司(如:Amazon、Netflix 等)从实践中摸索出了一套新的大型系统架构方法论,并取得了成功,树立了很好的示范,然后这套方法论渐渐就被一些技术理论派 人士命名为微服务架构(Microservices)。在微服务架构(Micro 阅读详情

相关推荐

Java领域Spring Cloud的微服务架构演进

随着互联网业务的不断发展,传统的单体架构逐渐难以满足日益增长的业务需求,如高并发、可扩展性和灵活性等。微服务架构应运而生,它将一个大型应用拆分成多个小型、自治的服务,每个服务可以独立开发、部署和维护。Spring Cloud作为Java领域中广泛使用的微服务框架,为开发和管理微服务提供了丰富的工具和组件。本文的目的是详细介绍Spring Cloud的微服务架构演进过程,包括其发展的各个阶段、核心技术和应用场景,帮助读者深入理解Spring Cloud的架构设计和实现原理。

Java大师兄的博客 1182

Spring Cloud Alibaba 系列之微服务架构的演变

微服务架构的发展蜕变

weixin_72133062的博客 556

三角洲行动交易行自动化脚本

DFMarketBot - 三角洲行动自动交易助手 DFMarketBot是一款专为三角洲行动游戏设计的交易行自动化工具,通过OCR识别和鼠标模拟实现自动补卡、补子弹功能。项目采用Python开发,支持Windows平台,主要功能包括: 自动检测并购买指定物品(房卡/子弹) 价格监控与智能购买(低于设定价格自动下单) 自定义购买数量与次数限制 支持窗口/无窗口两种游戏模式 使用前需安装Tesseract OCR引擎并配置游戏为1920*1080分辨率。通过JSON文件可灵活配置监控物品清单、理想价格和购买策

愤怒的阿木木的博客 3万+

微服务架构的演变

微服务是一种架构风格。Z轴扩展是基于数据的分区,比如我们之前学的MySQL数据拆分,ES的shard分片等都是基于数据的拆分,这些不同的数据分区独立部署不同的机器中,以提升这部分数据访问的能力;微服务架构模式是从SOA架构模式演变过来, 比SOA架构模式粒度更加精细,让专业的人去做专业的事情(专注),目的是提高效率,每个服务与服务之间互不影响,微服务架构中每个服务独立,互不影响;如果服务是无状态的,我们就可以将请求发送到任意一台服务器,然后通过负载均衡,将请求平均分布在不同的服务器中,非常方便的实现。

緑水長流*z 1684

Robocopy 参数进阶:/MIR 镜像同步与 /PURGE 删除操作的风险规避指南

本文深入解析Robocopy的/MIR镜像同步与/PURGE删除操作的高级用法及风险规避策略。通过实际案例和四重防护机制,指导用户安全实现目录同步,避免数据丢失风险,特别适用于远程主机间的数据复制与备份场景。

weixin_33462927的博客 357

弘玑RPA进阶攻略

01.弘玑RPA产品概要。02.设计器的安装与卸载。03.设计器特性与使用。

长安诗社社长@-梁瀚文- https://github.com/HevnChin https://gitee.com/HevnChin 3647

微服务架构演进

本文主要介绍微服务架构是如何演进而来。微服务架构从单体架构演进而来。在单体应用相对较小时,应用的开发、测试和部署相对简单,但随着时间的推移,更多的功能被添加到应用中,代码的规模也进一步增长。作为功能扩展的结果,单体应用很快陷入单体地狱。开发变得缓慢和困难,因为系统本身过于庞大和复杂,以至于任何一个开发者都很难理解它的全部。这种复杂性逐渐形成一个恶性循环:由于代码库太难于理解,因此开发人员在更改时更容易戳错,且每一次更改都会让代码库变得更复杂、更难懂。针对大型复杂单体应用的开发,越来越的共识趋向于使用微服务架

云原生Java Web领域技术博客 1926

深入理解C语言内存管理:堆与栈的区别

栈是一种遵循后进先出(LIFO)原则的数据结构。在程序中,栈用于存储局部变量、函数的参数以及函数调用时的返回地址等信息。栈的内存管理由操作系统自动进行,每次函数调用时都会在栈上分配一块内存区域,函数执行完毕后,该内存区域会自动释放。在C语言中,堆与栈是两种不同的内存分配方式,各自有着不同的特点和适用场景。栈内存自动管理,访问速度快,但大小有限,适用于存储局部变量和函数调用信息。堆内存由程序员手动管理,适用于存储动态数据结构,大小不受限制,但访问速度较慢,容易导致内存泄漏等问题。

set_one的博客 1582

SpringCloud 简介

微服务架构 互联网应用架构演进 ​ 随着互联网的发展,用户群体逐渐扩大,网站的流量成倍增长,常规的单体架构已无法满足请求压力和业务的快速迭代,架构的变化势在必行。下面我们就以系统网的架构演进为例,从最开始的单体架构分析,一步步的到现在的微服务架构。 单体应用架构 ​ 在诞生之初,系统的用户量、数据量规模都比较小,项目所有的功能模块都放在一个工程中编码、编译、打包并且部署在一个Tomcat容器中的架构模式就是单体应用架构,这样的架构既简单实用、便于维护,成本又低,成为了那个时代的主流架构方式。 优点:

恒哥的博客 1231

Jetson Orin NX 单目标跟踪算法实战

本文对比了NanoTrack和MixFormerV2两种目标跟踪算法在Jetson Orin NX边缘设备上的实际表现。通过天空小目标跟踪场景测试发现,NanoTrack虽然表征能力较弱,但具有目标身份一致性强、失败模式可控、计算负担小等优势,更适合作为边缘端默认算法。MixFormerV2则适用于高速运动等特定场景。实验数据显示NanoTrack在Orin NX上可达200FPS,远高于MixFormerV2的38-120FPS。建议先采用NanoTrack构建稳定系统,后续再评估复杂算法的适用性。

karmueo46的博客 625

【漏洞复现】爱数云盘 Usrm_GetAllUsers 未授权访问漏洞

爱数 AnyShare存在未授权漏洞,未授权的攻击者可以通过该漏洞获取用户名信息。

qq_67810151的博客 3122

【微服务专题】微服务架构演进

事实上,我个人对单体到微服务架构的演进尽管能够理解,但总是觉得差点意思,所以这边在学习之余,顺便写个笔记总结一下,加深一下印象吧。Spring Cloud提供了一些可以让开发者快速构建微服务应用的工具,比如配置管理、服务发现、熔断、智能路由等,这些服务可以在任何分布式环境下很好地工作。Distributed configuration,分布式配置Service registration and discovery,服务注册与发现Routing,服务路由。

qq_32681589的博客 2091

吊打原版YOLOv8!ASF-YOLO多尺度融合+注意力机制实战解析(遥感/医疗/质检均适用)

ASF-YOLO融合YOLOv8的创新目标检测框架摘要 ASF-YOLO是针对小目标检测优化的先进框架,采用三重特征编码器和尺度序列融合技术增强多尺度特征提取能力。核心创新包括: 三重特征编码器(TPE)融合跨层级信息 尺度序列特征融合(SSFF)模块通过3D卷积处理多尺度信息 通道-位置注意力机制(CPAM)聚焦关键特征区域 Zoom_cat模块实现自适应多尺度特征融合 该框架特别适用于医学影像、遥感检测等小目标密集场景,通过动态特征权重调整显著提升检测精度。关键技术实现包含多尺度特征统一、3D卷积序列处

FJN110的博客 529

微服务架构 | 服务架构的演进

hi,这里桑小榆。本篇,我们开始探讨微服务架构这块内容,并打算专门写一个微服务的专栏。写微服务的知识体系其实早有动机,把微服务架构知识梳理完整,由于很多因素没能开展开来,所以一直搁置了。这次,我继续持大道至简的思想,来探讨微服务架构的全面内容。尽管我们在实际工作中并没有用到这块内容,本职本分或许是螺丝钉角色,但微服务的热门程度以及发展趋势,迫切使你很有必要了解这块内容,并当作知识储备起来,也许有朝...

dotNET跨平台 523

二、FM1288调试方案-工具软件使用

分析音频数据的软件需要满足以下几点:1、能打开原始pcm音频文件;2、基本的音频播放软件的操作;3、能查看分析音频数据的频率成分;4、能查看分析音频音量幅度;5、能完成基本音频处理:降噪、音量增幅限幅、滤波和均衡;

优快云mianfeixiazai001的博客 1296

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

架构是演进的——凤凰架构

作者的凤凰指的是(不死鸟)本书介绍了架构演进的历史:架构并不是被发明出来的,而是持续演进的结果。软件架构风格从大型机(Mainframe),到(Distributed),到(Monolithic),到(Service-Oriented),到(Microservices),到(Service Mesh),到(Serverless)……技术架构上确实呈现出“从大到小”的发展趋势。,比系统的任何其他属性,包括准确性、一致性和完整性,都来得更加重要。——,1991可能与绝大多数人心中的认知会有差异,“

zyl042的博客 948

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

1、架构-服务架构演进史

所谓的“后微服务时代”指的是在微服务架构广泛应用并成熟之后,行业开始探索更进一步的架构模式和技术,以解决微服务在实际应用中遇到的一些挑战,如服务管理的复杂性、数据一致性问题、服务间通信的开销等。在后微服务时代,人们探讨和采纳了一些新的概念和技术,以优化和超越传统微服务架构的限制。

qq_29434541的博客 1573

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SOA(面向服务架构)全面解析

SOA(Service-Oriented Architecture,面向服务架构)是一种将应用程序功能以“服务”的形式进行模块化设计的架构风格。这些服务是独立的功能模块,它们通过定义明确的接口进行通信,并可以跨不同的平台和技术栈相互协作。在SOA中,每个服务通常代表一个独立的业务功能(如客户管理、订单处理等),能够被其他服务独立地调用和复用。SOA的目标是通过服务复用和松耦合,实现灵活性、扩展性和可维护性,便于构建复杂的企业级应用。

hello.reader 2万+

互联网架构升级改造演进过程,一文带你了解互联网架构的变迁

SOA是一种粗颗粒、松耦合的以服务为中心的架构,接口之间通过定义明确的协议和接口进行通信。SOA帮助企业架构师以更快速、可靠和可重用的形式规划整个业务系统,相比传统非服务化架构,SOA更加从容地应对复杂企业系统集成和需求的快速变化。接口采用中立的方式进行定义,独立于硬件平台、操作系统和编程语言(SOAP、WSDL、XML等通用语言)。

秃了也弱了 1730

三分钟了解服务架构演进及优缺点

单一应用架构 一般用于定制系统,需求明确,不会迭代,开发快 优点:项目易于管理,部署简单 缺点:测试成本高、可伸缩性差、可靠性差、迭代困难、跨语言程度差、团队协作难 解释:ABC代表三个模块,A->B->C代表调用关系 测试成本高:每个模块都需要测试,所有关联模块有需要测试 我们要测试除了A、B、C三个模块外,还需要测试A->B、B->C、A->B->C 可伸缩性差:我们在AB直接插一个D,那么我们需要改动A和B代码,才能变成A->B-&gt

qq_53344479的博客 3070

什么是微服务架构?

以前一直是自己在网上东平西凑的找,找到的东西也是零零散散,很多时候都是看着看着就没了,时间浪费了,问题却还没得到解决,很让人抓狂。后面我就自己整理了一套资料,还别说,真香!资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!存中…(img-RHLD32Iz-1712909430524)]《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》

2401_84132176的博客 426
上一篇: 使用这45个小技巧,帮助你写出更优雅的代码
下一篇: 当数据变得庞大需要进行重构时,微服务该如何拆分
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值