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

本文涉及的产品
云原生网关 MSE Higress,422元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 微服务和 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月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
2月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
243 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
2月前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
424 36
微服务架构解析:跨越传统架构的技术革命
|
14天前
|
人工智能 安全 Java
微服务引擎 MSE:打造通用的企业级微服务架构
微服务引擎MSE致力于打造通用的企业级微服务架构,涵盖四大核心内容:微服务技术趋势与挑战、MSE应对方案、拥抱开源及最佳实践。MSE通过流量入口、内部流量管理、服务治理等模块,提供高可用、跨语言支持和性能优化。此外,MSE坚持开放,推动云原生与AI融合,助力企业实现无缝迁移和高效运维。
|
29天前
|
负载均衡 Serverless 持续交付
云端问道9期实践教学-省心省钱的云上Serverless高可用架构
详细介绍了云上Serverless高可用架构的一键部署流程
51 10
|
29天前
|
弹性计算 运维 网络协议
卓越效能,极简运维,Serverless高可用架构
本文介绍了Serverless高可用架构方案,当企业面对日益增长的用户访问量和复杂的业务需求时如何实现更高的灵活性、更低的成本和更强的稳定性。
|
17天前
|
监控 Serverless 测试技术
云端问道9期方案教学-省心省钱的云上Serverless高可用架构
本文介绍了省心省钱的云上Serverless高可用架构,主要分为两个部分:1. Serverless的发展历程、特点及高可用架构;2. SAE(Serverless Application Engine)产品介绍。Serverless作为一种云计算模式,让用户无需管理底层基础设施,自动弹性扩展资源,按需付费,极大提高了资源利用率和业务灵活性。SAE作为Serverless计算服务,提供了简便的应用部署、运维自动化、丰富的弹性策略和可观测性等功能,帮助企业降低运营成本、提升研发效率。通过极氪汽车、南瓜电影等客户案例展示了SAE在实际应用中的优势。
|
2月前
|
弹性计算 运维 Serverless
卓越效能,极简运维,体验Serverless高可用架构,完成任务可领取转轮日历!
卓越效能,极简运维,体验Serverless高可用架构,完成任务可领取转轮日历!
|
2月前
|
设计模式 负载均衡 监控
探索微服务架构下的API网关设计
在微服务的大潮中,API网关如同一座桥梁,连接着服务的提供者与消费者。本文将深入探讨API网关的核心功能、设计原则及实现策略,旨在为读者揭示如何构建一个高效、可靠的API网关。通过分析API网关在微服务架构中的作用和挑战,我们将了解到,一个优秀的API网关不仅要处理服务路由、负载均衡、认证授权等基础问题,还需考虑如何提升系统的可扩展性、安全性和可维护性。文章最后将提供实用的代码示例,帮助读者更好地理解和应用API网关的设计概念。
92 8
|
3月前
|
监控 Serverless 云计算
探索Serverless架构:开发实践与优化策略
本文深入探讨了Serverless架构的核心概念、开发实践及优化策略。Serverless让开发者无需管理服务器即可运行代码,具有成本效益、高可扩展性和提升开发效率等优势。文章还详细介绍了函数设计、安全性、监控及性能和成本优化的最佳实践。

相关产品

  • 函数计算