如今,越来越多的企业正在开展数字化转型,以满足不断变化的消费者需求。客户也越来越倾向于使用社交网络、移动应用和数字技术。由于这一变化,数字化战略如今已成为整体业务战略的重要组成部分。
许多企业正通过互联网的云服务平台获取计算能力,并在大多数应用程序开发中采用“云优先”战略。这进一步推动了应用程序设计的变革。过去,功能性和有状态性被优先考虑,而现在大多数面向消费者的应用程序正转向软件即服务 (SaaS) 和数字化平台。应用程序设计的重点如今更多地放在用户体验、无状态性和敏捷性上。
根据企业业务需求合理选择应用程序架构。在这篇文章中,我们将根据一般业务需求,研究四种支持数字化转型的架构选择。
我们都熟悉三层应用程序架构,这是一种客户端-服务器架构,典型结构包括表示层、应用程序层和数据库层。
它具有用户界面、业务/数据访问逻辑以及数据访问功能。许多企业应用程序都是使用这种简单的三层应用程序架构创建的。
简单来说,三层应用模型已经过时。它是在公有云和移动应用普及之前设计的,因此在适应云环境方面存在困难。
随着时间的推移,应用程序可能会变得过于庞大和复杂,难以进行频繁修改。不仅如此,它还需要维护至少三层硬件和软件,这对于企业来说可能效率低下。
三层应用模型也常被称为单体架构。如今,我们有多种新的架构模型,下面将介绍一些在云时代可用的架构选项。
在云模型中,作为一组服务和数据构建的复杂应用程序与应用本身完全解耦。微服务是一种将应用程序结构化为一组服务的架构风格。每个服务可以使用不同的编程语言编写,并且可以单独测试。它们可以独立部署,并围绕业务能力进行组织。
以使用微服务架构开发的电子商务应用为例。每个微服务可以专注于单一的业务能力(例如购物车、搜索、客户评价)。这些微服务可以是用不同编程语言编写的独立服务,部署在不同的基础设施上,并由不同的团队进行管理。
每个服务通过轻量级协议与其他服务进行通信。对于三层架构,我们都熟悉模型-视图-控制器 (MVC) 框架。Sidecar、Ambassador 和 Adapter 是支持微服务架构的一些框架。
在单体架构中,所有这些组件作为单一模块共存,主要由一个团队管理,一切都捆绑在一起。如果需要更新,就必须部署整个应用程序,这会使较大复杂应用的变更变慢。对于较小的应用程序,单体架构通常是最佳解决方案。
创建和运行微服务应用程序架构的最佳选择之一是使用容器。容器封装了应用程序的轻量级虚拟化运行环境,并允许您将应用程序从开发者的桌面一直迁移到生产部署环境。您可以在大多数可用操作系统的虚拟机或物理机上运行容器。容器提供了一个一致的软件环境,您可以将应用程序的所有依赖项封装成一个可部署的单元。容器可以在笔记本电脑、裸机服务器或公有云中运行。
许多组织使用 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)进行路由。
在云环境中,应用程序必须能够在多个节点上并行运行、共享配置/会话状态、具备集中式日志机制,并能够通过 DevOps 和 CI/CD 流程进行部署。许多云服务提供商都提供了云原生开发指南,Amazon Web Services (AWS) 有构建良好的框架,Google 提供了关于如何构建云原生应用的多种指南,Microsoft Azure 则有云模式指南。
通常,云原生应用本质上是无状态的。这些服务使用基于 REST 的协议或消息传递相互通信。API 网关、容器注册表、面向消息的中间件(MOM:发布/订阅或请求/响应)、服务网格以及编排机制都可能是云原生架构的一部分。
如何让单体应用在云环境中良好运行?基于云的架构最适合构建现代 Web 应用程序(静态/动态网站)、部署 Web 应用程序、连接数据库以及分析用户行为。
传统的云应用架构包括负载均衡器、Web 服务器、应用服务器和数据库。它可以从云功能中获益,例如资源弹性、软件定义网络、自动调配、高可用性和可扩展性。
这种架构非常适合那些无需担心服务器维护的组织。无服务器函数支持多种编程语言,例如 PHP、Java、.NET、Node.js、Python、Ruby、Docker 和 Go。
API Gateway 是一项重要服务,可以让开发人员轻松创建和发布安全的 API。API 将作为应用程序访问数据和业务逻辑的“前门”。它还负责授权和访问控制。开发人员使用 API Gateway 为不同的 API 调用来调用不同的无服务器架构函数。
您在选择架构模型时做出的决策可能会影响项目的成败。您应根据您的应用程序和非功能性需求做出选择。例如,当您只想旅行几英里时,就不会选择飞机交通方式。
为应用程序项目选择架构之前,请考虑以下事项:
Web 应用程序架构不断发展,以满足数字化业务需求和不断变化的IT基础设施环境。人工智能、分析、自动化、先进机器人技术、边缘计算、区块链、物联网 (IoT) 和 API 等技术正在重新定义许多行业的可能性。基础设施、应用程序和数据规模日益复杂,需要采用新的架构方法。大多数企业通过使用一个或多个云供应商,采用多云策略。企业通过使用私有云、公共云或混合云来使用云服务,采用的模式包括 SaaS、PaaS 或 IaaS。
在早期,应用程序的部署是一个困难的过程,通常无法在正常工作时间进行。然而,随着蓝绿部署、金丝雀部署等不同部署方法,以及 DevOps 和 CI/CD(持续集成与持续交付)的发展,现在可以在任何时间进行部署,而不会造成应用程序停机。
单体架构对于许多应用程序仍然有效,但为了实现敏捷性和缩短上市时间,必须根据您的数字化使用场景选择合适的架构。对于简单应用,可以考虑采用传统的单体架构。云原生或微服务模式非常适合具有复杂性的演进型应用。当您拥有多支经验丰富的团队,并且使用多种编程语言和不同的部署计划时,采用微服务架构是合理的。下面给出传统的 3/N 层应用与云端架构模型的对比,供参考。
要开始构建,请注册 IBMid 并创建您的 IBM Cloud 帐户。
完全托管的单租户服务,用于开发和交付 Java 应用程序。
使用开发运维软件和工具,在多种设备和环境中构建、部署和管理云原生应用程序。
云应用程序开发意味着一次构建、快速迭代和随处部署。