服务架构的演进之路:从单体应用到Serverless

ops/2024/10/20 6:23:33/

随着时间的推移和技术的进步,软件架构经历了从单体应用、面向服务架构(SOA)、微服务架构到Serverless架构的演变。每一步的演进都是为了更好地应对日益增长的业务需求和用户基数。接下来,我们将一起回顾这段旅程,看看每个阶段是如何推动技术的发展的。

单体应用:一体化的紧凑之美

单体架构的定义

单体架构是最传统的软件架构模式之一,它将所有的业务逻辑、功能模块和交互组件紧密地打包在一起。在单体架构中,所有的功能通常被打包成一个单一的可部署单元,例如一个WAR文件。这种方式简单直观,易于理解和维护。

代码示例

假设我们有一个简单的在线商店,所有的业务逻辑都在一个应用中处理:

java">public class ShoppingCartApp {public static void main(String[] args) {// 用户登录User user = login("example@example.com", "password");// 添加商品到购物车ShoppingCart cart = new ShoppingCart();cart.addItem(new Product("123", "T-shirt", 20));// 结算double total = cart.checkout(user);System.out.println("Total amount to pay: $" + total);}private static User login(String email, String password) {// 登录逻辑return new User(email, "John Doe");}
}

单体架构的优点与缺点

优点包括:

  • 清晰而直接:一站式的服务和体验。
  • 迅速部署:结构简单,部署流程流畅。
  • 减少分布式复杂性:在没有大规模并发和高分布式要求的情况下,避免了分布式带来的复杂性。

缺点则是:

  • 难以应对复杂性:随着业务的拓展,代码、依赖和交互逻辑变得复杂。
  • 扩展的局限:整体扩展成本较高。
  • 技术迭代困难:引入新技术通常意味着大规模的改动。

SOA:面向服务的架构

随着业务的增长和复杂度的提升,单体架构的弊端逐渐显现。为了解决这些问题,SOA(Service-Oriented Architecture)应运而生。SOA是一种软件设计和架构模式,它将应用程序的不同功能单元(服务)通过定义良好的接口和协议进行组合。

SOA架构图示例

+---------------+      +-----------------+|               |      |                 || Service A     |<-----| Service B       ||               |      |                 |+---------------+      +-----------------+|                       ||                       |+-------v----------+------------v--------+|                  |                      ||      ESB         |                      ||                  |                      |+-------^----------+------------^--------+|                       ||                       |+---------------+      +-----------------+|               |      |                 || Service C     |<-----| Service D       ||               |      |                 |+---------------+      +-----------------+

在SOA架构中,系统被分解为多个服务,每个服务都有独立的功能,并按照一定标准进行设计和实现。

SOA的优势

  • 灵活性:服务之间的松耦合设计使得应用程序易于扩展和维护。
  • 可重用性:服务可以在多个应用中重复使用。
  • 易于集成:通过标准化接口,SOA可以更容易地与其他系统集成。

微服务架构:更小、更灵活的服务

随着云计算的兴起,微服务架构成为了新一代的宠儿。微服务架构是SOA架构的一种拓展,这种架构模式下它拆分粒度更小,服务更独立。

微服务架构的示例

如果我们把上述的单体应用拆分成微服务,可能会有如下服务:

  • 用户服务
  • 购物车服务
  • 支付服务

每个服务都是独立的,并且可以独立部署。

微服务架构的优点

  • 灵活而独立的扩展:每个微服务都能独立扩展。
  • 多样的技术栈选择:每个服务可以根据需求选择最适合的技术栈。
  • 敏捷的迭代与部署:支持快速迭代和持续部署。

Serverless架构:无服务器的未来

Serverless架构进一步简化了开发者的负担,将基础设施管理和运维完全交给第三方云服务商。在这种模式下,开发者只需要关心业务逻辑的编写,而不需要关心底层的服务器配置、容量规划、负载均衡等。

示例代码片段

在Serverless架构中,我们可能使用AWS Lambda编写一个处理订单的函数:

javascript">exports.handler = async (event, context) => {const userId = event.requestContext.identity.userArn;const orderId = event.pathParameters.id;const order = await getOrder(orderId); // 从数据库获取订单await updateOrderStatus(orderId, 'Processing'); // 更新订单状态return {statusCode: 200,body: JSON.stringify({ message: `Order ${orderId} is now processing.` })};
};

Serverless的优势

  • 按需付费:只在代码运行时计费。
  • 自动扩展:自动处理流量峰值。
  • 简化运维:无需管理服务器。

结论

从单体应用到Serverless架构,我们见证了软件架构随业务需求和技术进步而不断演进的过程。每种架构都有其适用场景和局限性,选择适合自身业务特点的架构至关重要。未来,随着技术的不断发展,我们或许还将看到更多创新的架构模式涌现。


http://www.ppmy.cn/ops/122026.html

相关文章

SpringBoot3响应式编程全套-Reactor核心

目录 传送门前言一、前置知识1、Lambda2、Function3、StreamAPI4、Reactive-Stream 二、Reactor1、快速上手1.1、介绍1.2、依赖 2、响应式编程2.1、阻塞是对资源的浪费2.2、异步可以解决问题吗&#xff1f;2.3、从命令式编程到响应式编程 三、核心特性1、Mono和Flux2、subscrib…

CSS实现服务卡片

CSS实现服务卡片 效果展示 CSS 知识点 回顾整体CSS知识点灵活运用CSS知识点 页面整体布局 <div class"container"><div class"card"><div class"box"><div class"icon"><ion-icon name"color-pal…

【STM32开发之寄存器版】(四)-独立看门狗IWDG

一 、前言 独立看门狗简介&#xff1a; STM32F103ZET6内置两个看门狗&#xff0c;提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障。 独立看门狗主要性能&#xff1a; 自由运行的递减计数器时钟…

【树形DP】AT_dp_p Independent Set 题解

step 1 题意理解 有一棵有 N N N 个顶点的树&#xff0c;编号为 1 , 2 , … , N 1,2,…,N 1,2,…,N。 Taro 决定将每个顶点涂成白色或黑色。 在这里&#xff0c;不允许将相邻的两个顶点都涂成黑色。 找出可以涂色的方式数量&#xff0c;对 1 0 9 7 10^9 7 1097 取模。 …

OpenCV视频I/O(8)视频采集类VideoCapture之从视频源中读取一帧图像函数read()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 抓取、解码并返回下一个视频帧。 cv::VideoCapture::read() 是 VideoCapture 类的一个成员函数&#xff0c;用于从视频源中读取一帧图像. 该方法…

Qwen大模型简介

Qwen是由阿里巴巴集团达摩院开发的一个开源大语言模型系列。该系列模型专注于多任务场景下的自然语言处理&#xff08;NLP&#xff09;&#xff0c;并提供了优秀的多模态扩展能力。Qwen模型家族包括多个版本&#xff0c;如Qwen-7B、Qwen-14B 等&#xff0c;分别适用于不同的计算…

【代码随想录Day30】贪心算法Part04

452. 用最少数量的箭引爆气球 题目链接/文章讲解&#xff1a;代码随想录 视频讲解:贪心算法&#xff0c;判断重叠区间问题 | LeetCode&#xff1a;452.用最少数量的箭引爆气球_哔哩哔哩_bilibili class Solution {public int findMinArrowShots(int[][] points) {Arrays.sort…

一个真实可用的登录界面!

需要工具&#xff1a; MySQL数据库、vscode上的php插件PHP Server等 项目结构&#xff1a; login | --backend | --database.sql |--login.php |--welcome.php |--index.html |--script.js |--style.css 项目开展 index.html&#xff1a; 首先需要一个静态网页&#x…