数字时代应用程序开发的四种架构选择

在办公室工作的软件开发人员

云时代哪种应用程序架构模型最适合您?

如今,越来越多的企业正在开展数字化转型,以满足不断变化的消费者需求。客户也越来越倾向于使用社交网络、移动应用和数字技术。由于这一变化,数字化战略如今已成为整体业务战略的重要组成部分。

许多企业正通过互联网的云服务平台获取计算能力,并在大多数应用程序开发中采用“云优先”战略。这进一步推动了应用程序设计的变革。过去,功能性和有状态性被优先考虑,而现在大多数面向消费者的应用程序正转向软件即服务 (SaaS) 和数字化平台。应用程序设计的重点如今更多地放在用户体验、无状态性和敏捷性上。

根据企业业务需求合理选择应用程序架构。在这篇文章中,我们将根据一般业务需求,研究四种支持数字化转型的架构选择。

 

辅以专家洞察分析的最新科技新闻

通过 Think 时事通讯,了解有关 AI、自动化、数据等方面最重要且最有趣的行业趋势。请参阅 IBM 隐私声明

谢谢!您已订阅。

您的订阅将以英语提供。每份时事通讯都包含取消订阅链接。您可以在此管理您的订阅或取消订阅。更多相关信息,请参阅我们的 IBM 隐私声明

传统的 3 层应用程序架构

我们都熟悉三层应用程序架构,这是一种客户端-服务器架构,典型结构包括表示层、应用程序层和数据库层。

它具有用户界面、业务/数据访问逻辑以及数据访问功能。许多企业应用程序都是使用这种简单的三层应用程序架构创建的。

应用程序开发

开启旅程:云端企业应用程序开发

在本视频中,Peter Haumer 博士通过演示不同的组件和实践(包括 IBM Z Open Editor、IBM Wazi 和 Zowe),探讨了混合云环境中现代企业应用程序的开发现状。

三层应用架构的问题是什么?

简单来说,三层应用模型已经过时。它是在公有云和移动应用普及之前设计的,因此在适应云环境方面存在困难。

随着时间的推移,应用程序可能会变得过于庞大和复杂,难以进行频繁修改。不仅如此,它还需要维护至少三层硬件和软件,这对于企业来说可能效率低下。

三层应用模型也常被称为单体架构。如今,我们有多种新的架构模型,下面将介绍一些在云时代可用的架构选项。

1. 微服务架构

在云模型中,作为一组服务和数据构建的复杂应用程序与应用本身完全解耦。微服务是一种将应用程序结构化为一组服务的架构风格。每个服务可以使用不同的编程语言编写,并且可以单独测试。它们可以独立部署,并围绕业务能力进行组织。

以使用微服务架构开发的电子商务应用为例。每个微服务可以专注于单一的业务能力(例如购物车、搜索、客户评价)。这些微服务可以是用不同编程语言编写的独立服务,部署在不同的基础设施上,并由不同的团队进行管理。

每个服务通过轻量级协议与其他服务进行通信。对于三层架构,我们都熟悉模型-视图-控制器 (MVC) 框架。Sidecar、Ambassador 和 Adapter 是支持微服务架构的一些框架。

微服务架构与单体架构

在单体架构中,所有这些组件作为单一模块共存,主要由一个团队管理,一切都捆绑在一起。如果需要更新,就必须部署整个应用程序,这会使较大复杂应用的变更变慢。对于较小的应用程序,单体架构通常是最佳解决方案。

微服务、容器和 Kubernetes

创建和运行微服务应用程序架构的最佳选择之一是使用容器。容器封装了应用程序的轻量级虚拟化运行环境,并允许您将应用程序从开发者的桌面一直迁移到生产部署环境。您可以在大多数可用操作系统的虚拟机或物理机上运行容器。容器提供了一个一致的软件环境,您可以将应用程序的所有依赖项封装成一个可部署的单元。容器可以在笔记本电脑、裸机服务器或公有云中运行。

许多组织使用 Kubernetes 来管理容器,并确保不会出现停机时间。Kubernetes 提供跨多个主机的容器编排,并用于容器生命周期管理。您可以使用 Kubernetes 实现自动化部署、应用程序自动扩展,并实现快速构建与快速交付。

要更深入地了解 Kubernetes,请观看视频“Kubernetes 讲解”:

Red Hat OpenShift 是最受欢迎的领先混合云企业容器平台之一。许多云供应商提供容器即服务 (CaaS)。其他一些可用的 Kubernetes 引擎包括 IBM Cloud Kubernetes Service、开源 Kubernetes、AWS(EKS、ECS 和 Fargate)、Google GKS 和 Azure AKS。

通常,每个微服务由不同的小团队构建,团队可自行选择编程语言和部署计划。企业使用像 Istio 这样的服务网格来管理微服务之间的通信和整体管理。在服务网格中,请求会通过微服务之间的代理(如 Sidecar)进行路由。

2. 云原生架构

云原生架构专为计划在云中部署的应用程序而设计,微服务是其中的关键部分。

云原生是一种构建和运行应用的方法,它充分利用了云计算交付模型的优势。云原生是一个用于描述基于容器的环境的术语,它指的是如何创建和部署应用程序,而不是在何处创建和部署。

云原生技术使我们能够在公有云、私有云和混合云中运行应用程序。云原生开发对于快速将应用推向市场至关重要;它帮助人员、流程和技术共同构建、部署和管理适合云环境的应用。

云原生架构模型使用 DevOps持续集成 (CI)、持续交付 (CD)、微服务和容器。大多数企业使用十二要素方法来设计可扩展且稳健的云原生应用。

在云环境中,应用程序必须能够在多个节点上并行运行、共享配置/会话状态、具备集中式日志机制,并能够通过 DevOps 和 CI/CD 流程进行部署。许多云服务提供商都提供了云原生开发指南,Amazon Web Services (AWS) 有构建良好的框架,Google 提供了关于如何构建云原生应用的多种指南,Microsoft Azure 则有云模式指南。

通常,云原生应用本质上是无状态的。这些服务使用基于 REST 的协议或消息传递相互通信。API 网关、容器注册表、面向消息的中间件(MOM:发布/订阅或请求/响应)、服务网格以及编排机制都可能是云原生架构的一部分。

3. 事件驱动的无服务器架构

事件驱动架构 (EDA) 基于解耦系统,根据事件触发运行。事件驱动架构使用事件来触发和在解耦的服务之间进行通信。EDA 已经存在了很长时间,但在云环境中,其相关性和应用场景变得更加突出。

那么,新颖之处是什么呢?如果得到恰当使用,它可以显著提升敏捷性、节约成本并带来运营优势。分布式无服务器 EDA 可以执行称为函数的代码,这些函数会根据 REST API 或事件触发器自动扩展。

对于无服务器架构,不需要进行服务器管理。无服务器模型还可以快速扩展(因此可以快速更新和部署),而且它是无状态的。

以下是不同云供应商目前提供的一些无服务器云服务:

无服务器架构的类型

  • 功能即服务 (FaaS):将功能上传到云端,让这些功能独立执行。
  • 后端即服务 (BaaS):利用来自第三方的服务,例如应用程序管理、数据库管理和云存储空间
  • 移动后端即服务 (MBaaS):移动应用程序的功能。

4. 基于云的架构

如何让单体应用在云环境中良好运行?基于云的架构最适合构建现代 Web 应用程序(静态/动态网站)、部署 Web 应用程序、连接数据库以及分析用户行为。

传统的云应用架构包括负载均衡器、Web 服务器、应用服务器和数据库。它可以从云功能中获益,例如资源弹性、软件定义网络、自动调配、高可用性和可扩展性。

这种架构非常适合那些无需担心服务器维护的组织。无服务器函数支持多种编程语言,例如 PHP、Java、.NET、Node.js、Python、Ruby、Docker 和 Go。

API Gateway 是一项重要服务,可以让开发人员轻松创建和发布安全的 API。API 将作为应用程序访问数据和业务逻辑的“前门”。它还负责授权和访问控制。开发人员使用 API Gateway 为不同的 API 调用来调用不同的无服务器架构函数。

如何确定哪种架构模型最适合您的应用程序

您在选择架构模型时做出的决策可能会影响项目的成败。您应根据您的应用程序和非功能性需求做出选择。例如,当您只想旅行几英里时,就不会选择飞机交通方式。

为应用程序项目选择架构之前,请考虑以下事项:

  • 是单体优先还是微服务优先?(对于应用程序需求简单的较小项目,单体可能是一个正确的选择。)
  • 您的团队是否已准备好使用微服务?
  • 您的团队是否拥有基于云的 DevOps 和 CI/CD 流程?
  • 您的托管模式是什么?私有、公有、混合?
  • 应用程序架构如何影响您的项目?
  • 多种架构模型的组合是否适合您?
  • 您的应用程序是否需要持久化和会话功能?

摘要

Web 应用程序架构不断发展,以满足数字化业务需求和不断变化的IT基础设施环境。人工智能、分析、自动化、先进机器人技术、边缘计算、区块链、物联网 (IoT) 和 API 等技术正在重新定义许多行业的可能性。基础设施、应用程序和数据规模日益复杂,需要采用新的架构方法。大多数企业通过使用一个或多个云供应商,采用多云策略。企业通过使用私有云、公共云或混合云来使用云服务,采用的模式包括 SaaS、PaaSIaaS

在早期,应用程序的部署是一个困难的过程,通常无法在正常工作时间进行。然而,随着蓝绿部署、金丝雀部署等不同部署方法,以及 DevOps 和 CI/CD(持续集成与持续交付)的发展,现在可以在任何时间进行部署,而不会造成应用程序停机。

单体架构对于许多应用程序仍然有效,但为了实现敏捷性和缩短上市时间,必须根据您的数字化使用场景选择合适的架构。对于简单应用,可以考虑采用传统的单体架构。云原生或微服务模式非常适合具有复杂性的演进型应用。当您拥有多支经验丰富的团队,并且使用多种编程语言和不同的部署计划时,采用微服务架构是合理的。下面给出传统的 3/N 层应用与云端架构模型的对比,供参考。

要开始构建,请注册 IBMid 并创建您的 IBM Cloud 帐户

作者

Ravi Saraswathi

IBM Chief Architect

IBM Blog

相关解决方案
IBM Enterprise Application Service for Java

完全托管的单租户服务,用于开发和交付 Java 应用程序。

深入了解 Java 应用程序
DevOps 解决方案

使用开发运维软件和工具,在多种设备和环境中构建、部署和管理云原生应用程序。

深入了解开发运维解决方案
企业应用程序开发服务

云应用程序开发意味着一次构建、快速迭代和随处部署。

应用程序开发服务
采取后续步骤

借助 IBM 云应用程序开发咨询服务,您可以获得提供专家指导和创新解决方案,使您的云策略更为精简高效。与 IBM 的云专家合作,实现应用程序的现代化改造、扩展和加速,为企业带来变革性的成果。

深入了解应用程序开发服务 开始免费使用 IBM Cloud 进行构建