微服务和 Serverless 架构-企业应用架构的演进

简介: 微服务和 Serverless 架构-企业应用架构的演进

开发者学习笔记【阿里云云原生助理工程师认证(ACA)课程:微服务和 Serverless 架构-企业应用架构的演进】

课程地址:https://edu.aliyun.com/course/3112075/lesson/19022


微服务和 Serverless 架构-企业应用架构的演进

 

内容介绍

一、企业应用架构的演进

二、早期企业应用架构——单体应用

三、初步服务化应用架构——SOA

 

一、企业应用架构的演进

企业级应用架构发展历程通过对云计算的基础知识的了解和之前原生课程的学习,已经了解到过去的十年是云计算蓬勃发展,快速推进的十年大量的企业从自驾 idc 机房或租用 idc 机的 it 建设模式转到了通过云服务厂商来租用硬件资源的模式这种将 it 设备服务化的方式对企业的 it 架构的影响是极其深远的。
image.png
首先,这种模式抛弃了传统 it 基础设施搭建中建设,购买,调试,运维等耗时耗力的环节,而是改为了随用随开的租用方式,大大降低了企业的 it 投入成本其次,在设备日常维护中不再消耗精力,自建运维团队,而是转向了借用云服务厂商的强大运维能力,实现设备领域为从而大大提高了运维的效率和安全性。
同时,随着互联网行业发展,大量新的应用形态层出不穷,尤其是在移动互联网生态出现之后,互联网应用摆脱了传统的 PC 机环境。随着手机的普及走进了普通人一天 24 小时中这使得互联网应用的用户数和用户使用时长都呈现了井喷式的发展趋势在 it 硬件架构实施部署方式的变化和互联网应用生态快速发展的环境下,导致了传统的企业应用软件架构受到了巨大的挑战为了能够更加适应外部环境和需求的变化,软件架构也在不断的进行着变化和演进。演进的过程分为三个阶段,从最开始的单体服务架构逐步进化,到初步化服务架构到微服务架构。

 

二、早期企业应用架构——单体应用

软件架构演化的历史首先是早期的单体应用架构,架构下开发人员开发完所有模块之后会把所有的功能集合到一个单一的文件或者应用里面然后再用 Qa 人员进行测试。测试完毕后再交给运维人员进行部署。
image.png

这种模式的特点可以归纳为三点首先所有功能模块集中在一个应用里,这种情况下,模块和模块之间的功能互相调用比较紧密,边界并不是非常的明显正是因为这种情况,单体应用会采用单一的开发语言进行开发,避免跨编程语言调用时出现一些比较复杂的情况第二点是这种模式一般采用瀑布式开发流程。
瀑布式开发流程一般包括需求评审,架构设计功能细化,编码开发,功能测试,集中测试部署实施几个步骤这种流程的特点是它的每一步边界非常明确,但是相对的开发周期会比较长小一点的项目可能是 3~4 个稍大一点的项目时间会更长,甚至一年两年都是很常见的情况第三个特点就是单体应用的开发模式下,开发人员,QA 人员和运维人员都分在不同的小组里面每个小组的内部都有自己的工作流程小组和小组之间的边界也相对比较清晰。
小组之间的配合,用比较详实的文档和审批流程进行连接。单体式架构应用对于一些功能相对简单或者功能虽然复杂,一次性可以把功能全部设计清晰,并不需要反复迭代的场景下,它具有比较简洁,直观,好掌控的特性。

虽然迭代周期相对比较长,但流程很严谨,每一步都有详实扎实的文档进行质量把控但是现在的互联网应用的应用场景和这种传统单体式应用所擅长的场景有很大的不同。
首先,互联网应用场景下,它的功能迭代速度要求非常快,一个新功能的上线可能是按周天甚至精确到小时来计算其次就是互联网应用的功能会非常复杂,而且这些功能很难一次性把它全部设计清楚情况单体应用架构的一些缺点就暴露出来。

其中主要的缺点有如下几点第一个缺点是迭代速度慢,沟通成本高。瀑布流程它的核心在于每一步流程都有详实的文档作为支撑部门和部门之间通过审批进行关联,当一个功能需要快速推进时,浪费在审批流程和文档上的时间就会非常的多。
举例当模块一需要做一个非常紧急的修改,而模块一的修改要依赖一个公共模块添加某些功能,但公共模块正在为模块 2一个大的重构和调整。此时模块的开发人员就需要和模块二和公共模块的开发人员进行文档和流程沟通。希望他们能放下手头的工作,先为他们的模块的某一个小功能做修改,而且还要通知 QA 和运维人员修改他们的工作计划,以配合紧急修改的上限。

第二是单体应用,所有功能都集中在一个运动里面。模块和模块之间的关系是比较紧密的这种情况一般称为模块耦合度比较高,如果在功能一次性设计清晰的情况下,问题可以解决但是在功能反复地添加修改,删除,变更的时候就会产生很大的问题。
举例:程序最开始设计的时候,模块之前的耦合关系虽然紧密,但是区分还是非常清晰而且开发人员对这里面的细节也非常了解但随着项目的推进,修改的次数越来越多,功能区分已经变得模糊起来,再加上旧有模块的开发人员慢慢流动,这种情况下,新来的开发人员对旧模块之间的互相依赖关系往往并不十分的了解因此也不敢轻易对模块进行修改因为经常会出现只做了某一些小的修改就会导致前后关联大量模块功能异常的情况。这种情况就形成了无法轻易修改的祖传代码从软件架构上来看,这也是一个不具有良好的扩展性的软件架构。
第三点这种单一单体应用架构还存在一个重大的风险代码开发产生的 bug 除了模块内部的逻辑 bug,还有一大类 bug为系统性 bug。
比如常见的内存泄漏以及不当使用系统资源,比如说资源死锁或者连接的数据库忘记释放这种系统性的 bug,一旦出现会对整个应用的进程产生一个严重的影响虽然可通过严格的测试和代码准备来避免这种情况,但是在互联网应用场景下,它的迭代速度非常快,留给 QA 人员的时间并不是很多应用模块的数量会非常非常多。如果是十几个几十个模块,还可以通过质量控制的手段把它限制成小概率事件但是当模板达到成千上万时,即使是 1%甚至千分之 1 的概率出现的比率也是非常高的而一旦出现这种系统性 bug,它所导致的后果就会非常的严重,也就是整个应用全部不可用这种风险是任何项目都无法承受的。

 

三、初步服务化应用架构——SOA

随着软件功能的进一步丰富和用户规模的逐步扩大,在 2000 年左右,各大企业级应用软件在软件架构上也开始做了一些初步化的服务尝试出现了 SOA 为代表的一批分布式服务化软件架构。SOA 架构最大的特点是在整个的应用里面引入了一个叫 ESB,也就是企业服务总线的中间件。各模块之间的功能并不是直接的耦合在一起,所有的跨模块调用都通过 ESB 进行转发各个模块在开发完毕后也并不是部署在一个单一的应用里面,而是可以部署在不同的应用甚至不同的服务器上。
image.png

 

1、特点

这样做可以避免单体应用架构下的很多问题首先最大的特点模块和模块之间的结构,不同的模块部署在不同的应用里面。

所有模块之间的关联关系都会通过 esb 显示的表现出来。这使得模块和模块之间的边界变得非常的清晰,也不存在单体用下公共变量公共资源系统环境等隐形的关联关系。另外,每个模块都可以根据自己的功能特点选择更合适的开发语言,也可以使也可以根据自己的进度进行单独的迭代对一些公共模块甚至可以在 esb 上同时部署多个版本, 支持不同模块之间不同的迭代需求对一些历史遗留的旧系统也不用过多关注他的开发语言和内部技术,实现只需要把它的接口固定下来其他的模块就可以通过标准的接口和他进行通信。这种架构在当时是一个非常先进的技术路线。

2、缺点

经过将近 10 年的发展,SOA 架构也慢慢显露出它内部的一些问题。首先就是这种架构存在一个明显的单点 ESBESB 在分布式调用的时候,它的重要性和吞吐量都是非常高的。
ESB 整个系统都无法进行一个有效的运转,这对于系统的健壮性来讲是一个巨大的风险同时,这种流量转发的模式每次调用都要经过至少 4 次的网络通讯从调用者发给 ESB,ESB 发给体重 ESB 发送给提供者在提供者将结果返回给 ESB ,ESB再返回给调用者这对于并发量非常大的互联网应用来讲,性能损失是非常巨大的。
最后 SOA 模式,更多的侧重关注于分布式服务之间的调用对于服务生命周期的管理,如服务的部署,配置,弹性伸缩等,缺少相应的支持。

 

相关实践学习
函数计算部署PuLID for FLUX人像写真实现智能换颜效果
只需一张图片,生成程序员专属写真!本次实验在函数计算中内置PuLID for FLUX,您可以通过函数计算+Serverless应用中心一键部署Flux模型,快速体验超写实图像生成的魅力。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
6月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
12月前
|
数据采集 运维 Serverless
云函数采集架构:Serverless模式下的动态IP与冷启动优化
本文探讨了在Serverless架构中使用云函数进行网页数据采集的挑战与解决方案。针对动态IP、冷启动及目标网站反爬策略等问题,提出了动态代理IP、请求头优化、云函数预热及容错设计等方法。通过网易云音乐歌曲信息采集案例,展示了如何结合Python代码实现高效的数据抓取,包括搜索、歌词与评论的获取。此方案不仅解决了传统采集方式在Serverless环境下的局限,还提升了系统的稳定性和性能。
346 0
|
12月前
|
存储 运维 Serverless
千万级数据秒级响应!碧桂园基于 EMR Serverless StarRocks 升级存算分离架构实践
碧桂园服务通过引入 EMR Serverless StarRocks 存算分离架构,解决了海量数据处理中的资源利用率低、并发能力不足等问题,显著降低了硬件和运维成本。实时查询性能提升8倍,查询出错率减少30倍,集群数据 SLA 达99.99%。此次技术升级不仅优化了用户体验,还结合AI打造了“一看”和“—问”智能场景助力精准决策与风险预测。
1081 69
|
9月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
947 0
|
11月前
|
数据采集 运维 监控
Serverless爬虫架构揭秘:动态IP、冷启动与成本优化
随着互联网数据采集需求的增长,传统爬虫架构因固定IP易封禁、资源浪费及扩展性差等问题逐渐显现。本文提出基于Serverless与代理IP技术的新一代爬虫方案,通过动态轮换IP、弹性调度任务等特性,显著提升启动效率、降低成本并增强并发能力。架构图与代码示例详细展示了其工作原理,性能对比数据显示采集成功率从71%提升至92%。行业案例表明,该方案在电商情报与价格对比平台中效果显著,未来有望成为主流趋势。
448 0
Serverless爬虫架构揭秘:动态IP、冷启动与成本优化
|
12月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
611 12
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
706 1
|
存储 消息中间件 人工智能
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
332 0

相关产品

  • 函数计算