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

本文涉及的产品
性能测试 PTS,5000VUM额度
注册配置 MSE Nacos/ZooKeeper,118元/月
函数计算FC,每月15万CU 3个月
简介: 微服务和 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 模式,更多的侧重关注于分布式服务之间的调用对于服务生命周期的管理,如服务的部署,配置,弹性伸缩等,缺少相应的支持。

 

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
2天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
17 4
|
8天前
|
监控 Cloud Native Java
云原生架构下微服务治理策略与实践####
【10月更文挑战第20天】 本文深入探讨了云原生环境下微服务架构的治理策略,通过分析当前技术趋势与挑战,提出了一系列高效、可扩展的微服务治理最佳实践方案。不同于传统摘要概述内容要点,本部分直接聚焦于治理核心——如何在动态多变的分布式系统中实现服务的自动发现、配置管理、流量控制及故障恢复,旨在为开发者提供一套系统性的方法论,助力企业在云端构建更加健壮、灵活的应用程序。 ####
52 10
|
2天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
3天前
|
Kubernetes Cloud Native API
云原生架构下微服务治理的深度探索与实践####
本文旨在深入剖析云原生环境下微服务治理的核心要素与最佳实践,通过实际案例分析,揭示高效、稳定的微服务架构设计原则及实施策略。在快速迭代的云计算领域,微服务架构以其高度解耦、灵活扩展的特性成为众多企业的首选。然而,伴随而来的服务间通信、故障隔离、配置管理等挑战亦不容忽视。本研究聚焦于云原生技术栈如何赋能微服务治理,涵盖容器编排(如Kubernetes)、服务网格(如Istio/Envoy)、API网关、分布式追踪系统等关键技术组件的应用与优化,为读者提供一套系统性的解决方案框架,助力企业在云端构建更加健壮、可维护的服务生态。 ####
|
2天前
|
机器学习/深度学习 监控 Serverless
探索Serverless架构:云计算的新前沿
【10月更文挑战第26天】本文探讨了Serverless架构作为新兴的云计算范式,如何改变应用的构建和部署方式。文章介绍了Serverless的核心概念、优势和挑战,并提供了开发技巧和实用工具,帮助开发者更好地理解和利用这一技术。
|
3天前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
18 1
|
5天前
|
监控 Serverless 数据库
探索 Serverless 架构:云计算的新浪潮
【10月更文挑战第23天】Serverless 架构是一种新兴的云计算范式,允许开发者构建和运行应用程序而无需管理服务器。本文深入探讨了 Serverless 的核心概念、优势、挑战及最佳实践,帮助开发者更好地理解和应用这一技术。
|
8天前
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
|
6天前
|
监控 安全 Serverless
"揭秘D2终端大会热点技术:Serverless架构最佳实践全解析,让你的开发效率翻倍,迈向技术新高峰!"
【10月更文挑战第23天】D2终端大会汇聚了众多前沿技术,其中Serverless架构备受瞩目。它让开发者无需关注服务器管理,专注于业务逻辑,提高开发效率。本文介绍了选择合适平台、设计合理函数架构、优化性能及安全监控的最佳实践,助力开发者充分挖掘Serverless潜力,推动技术发展。
17 1
|
7天前
|
运维 监控 Serverless
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
16 1

相关产品

  • 函数计算