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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 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 架构模式
相关文章
|
22天前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器到微服务的架构演变
【8月更文挑战第29天】在数字化时代的浪潮下,云原生技术以其灵活性、可扩展性和弹性管理成为企业数字化转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者了解云原生的基本概念,探索容器化技术的奥秘,并深入微服务架构的世界。我们将一起见证代码如何转化为现实中的服务,实现快速迭代和高效部署。无论你是初学者还是有经验的开发者,这篇文章都会为你打开一扇通往云原生世界的大门。
|
7天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
18 3
|
11天前
|
监控 负载均衡 应用服务中间件
探索微服务架构下的API网关设计与实践
在数字化浪潮中,微服务架构以其灵活性和可扩展性成为企业IT架构的宠儿。本文将深入浅出地介绍微服务架构下API网关的关键作用,探讨其设计原则与实践要点,旨在帮助读者更好地理解和应用API网关,优化微服务间的通信效率和安全性,实现服务的高可用性和伸缩性。
31 3
|
15天前
|
存储 Java Maven
从零到微服务专家:用Micronaut框架轻松构建未来架构
【9月更文挑战第5天】在现代软件开发中,微服务架构因提升应用的可伸缩性和灵活性而广受欢迎。Micronaut 是一个轻量级的 Java 框架,适合构建微服务。本文介绍如何从零开始使用 Micronaut 搭建微服务架构,包括设置开发环境、创建 Maven 项目并添加 Micronaut 依赖,编写主类启动应用,以及添加控制器处理 HTTP 请求。通过示例代码展示如何实现简单的 “Hello, World!” 功能,并介绍如何通过添加更多依赖来扩展应用功能,如数据访问、验证和安全性等。Micronaut 的强大和灵活性使你能够快速构建复杂的微服务系统。
39 5
|
3天前
|
缓存 负载均衡 数据管理
深入探索微服务架构的核心要素与实践策略在当今软件开发领域,微服务架构以其独特的优势和灵活性,已成为众多企业和开发者的首选。本文将深入探讨微服务架构的核心要素,包括服务拆分、通信机制、数据管理等,并结合实际案例分析其在不同场景下的应用策略,旨在为读者提供一套全面、深入的微服务架构实践指南。**
**微服务架构作为软件开发领域的热门话题,正引领着一场技术革新。本文从微服务架构的核心要素出发,详细阐述了服务拆分的原则与方法、通信机制的选择与优化、数据管理的策略与挑战等内容。同时,结合具体案例,分析了微服务架构在不同场景下的应用策略,为读者提供了实用的指导和建议。
|
20天前
|
数据库 Java 数据库连接
Hibernate 实体监听器竟如魔法精灵,在 CRUD 操作中掀起自动化风暴!
【8月更文挑战第31天】在软件开发中,效率与自动化至关重要。Hibernate 通过其强大的持久化框架提供了实体监听器这一利器,自动处理 CRUD 操作中的重复任务,如生成唯一标识符、记录更新时间和执行清理操作,从而大幅提升开发效率并减少错误。下面通过示例代码展示了如何定义监听器类,并在实体类中使用 `@EntityListeners` 注解来指定监听器,实现自动化任务。这不仅简化了开发流程,还能根据具体需求灵活应用,满足各种业务场景。
28 0
|
20天前
|
前端开发 微服务 API
微服务浪潮下的JSF革新:如何在分散式架构中构建统一而强大的Web界面
【8月更文挑战第31天】随着微服务架构的兴起,企业将应用拆分成小型、独立的服务以提高系统可维护性和可扩展性。本文探讨如何在微服务架构下构建和部署JavaServer Faces (JSF) 应用,通过RESTful服务实现前后端分离,提升灵活性和适应性。
37 0
|
20天前
|
负载均衡 监控 JavaScript
探索微服务架构下的API网关模式
【8月更文挑战第31天】在微服务的大潮中,API网关不仅是流量的守门人,更是服务间通信的桥梁。本文将带你深入理解API网关的核心概念、设计要点及其在微服务架构中的重要作用,同时通过代码示例揭示如何利用API网关提升系统的灵活性与扩展性。
|
20天前
|
NoSQL API 数据库
揭秘!Flask如何一键解锁RESTful API高效微服务?打造未来互联网架构的隐形力量!
【8月更文挑战第31天】本文介绍如何使用 Flask 构建高效且易维护的 RESTful 微服务,涵盖环境搭建、基本应用创建及代码详解。通过示例展示用户管理系统的 CRUD 操作,并讨论数据库集成、错误处理、认证授权、性能优化及文档生成等高级主题,助力开发者打造强大的后端支持。
32 0
|
22天前
|
消息中间件 监控 Kafka
Producer 与微服务架构的集成
【8月更文第29天】在现代软件开发中,微服务架构因其灵活性和可扩展性而被广泛采用。这种架构允许将复杂的系统分解为更小、更易于管理的服务。消息传递是连接这些服务的关键部分,而消息生产者(Producer)则是消息传递中的重要角色。本文将探讨如何将消息生产者无缝集成到基于微服务的应用程序中,并提供一个使用 Python 和 Kafka 的示例。
27 0

相关产品

  • 函数计算