Serverless高可用架构:卓越效能与极简运维

Serverless高可用架构方案,实现弹性伸缩、降低成本、提升稳定性,轻松应对高并发访问。

原文标题:卓越效能,极简运维,Serverless高可用架构

原文作者:阿里云开发者

冷月清谈:

本文介绍了一种基于阿里云 Serverless 的高可用架构方案,旨在帮助企业应对不断增长的用户访问量和复杂的业务需求,实现更高的灵活性、更低的成本和更强的稳定性。

该方案采用单地域双可用区部署策略,将应用负载均衡器(ALB)、Serverless 应用引擎实例和云数据库 PolarDB MySQL Serverless 集群分别部署在两个不同的地理区域。当一个可用区发生故障时,系统可以自动切换到另一个可用区,确保业务的连续性。

用户访问应用时,DNS 会将请求解析到 ALB,ALB 再根据服务器负载情况将请求转发到多个 Serverless 应用引擎实例。这种架构的核心优势在于:

* **弹性伸缩和高可用性:** Serverless 服务自动进行弹性伸缩,根据实时需求动态调整资源。
* **降低运维负担和成本:** Serverless 服务提供开箱即用的日志、监控、负载均衡等功能,无需管理底层服务器和基础设施。
* **高资源利用率和细粒度规格:** 按量计费模型,资源利用率高,最小计费时间为分钟级。

文章还介绍了如何通过阿里云资源编排服务ROS实现一键部署,以及如何配置弹性伸缩和进行负载测试以验证架构的弹性和高可用性。

怜星夜思:

1、相较于传统的服务器架构,Serverless 架构在成本控制方面有哪些具体的优势?除了按需付费之外,还有其他方面吗?
2、文章提到了双可用区部署,如果其中一个可用区出现大规模故障,另一个可用区能否承载全部流量?如何确保在切换过程中服务的稳定性?
3、除了文章中提到的 PolarDB MySQL Serverless 集群,还有哪些数据库方案适合 Serverless 架构?它们各自的优缺点是什么?

原文内容

阿里妹导读


本文介绍了Serverless高可用架构方案,当企业面对日益增长的用户访问量和复杂的业务需求时如何实现更高的灵活性、更低的成本和更强的稳定性。

一、引言

在当今数字化转型加速的时代,企业不仅需要快速响应市场需求,还要确保其在线服务的稳定性和高效性。面对日益增长的用户访问量和复杂的业务需求,传统的IT架构往往显得力不从心,难以灵活应对突发流量和资源管理挑战。为了解决这些问题,越来越多的企业开始转向Serverless架构,以实现更高的灵活性、更低的成本和更强的稳定性。

Serverless架构是一种新兴的云计算模式,它允许开发者专注于编写代码而不必担心底层基础设施的维护。本文介绍的Serverless高可用架构方案,可以减少资源管理和性能优化的工作量:自动化的服务托管和弹性伸缩功能,使得系统可以根据实际需求动态调整资源,有效降低了运维复杂度;按需付费的模式避免了传统架构中常见的资源闲置浪费问题,帮助企业节省大量开支;并由于高可用配置消除了单点故障的风险,确保即使在极端情况下也能持续为用户提供优质服务,提供更稳定的业务支持。

当用户访问您的应用时,DNS(域名系统)会将请求解析到应用负载均衡ALB的服务地址。作为应用的统一入口,ALB负责接收所有外部请求,并根据当前服务器负载情况,智能地将请求转发至多个Serverless应用引擎实例上的服务,从而实现了高效的流量分发。为了进一步保障系统的稳定性,采用双可用区部署策略。这意味着无论是应用负载均衡ALB、Serverless应用引擎实例,还是云数据库PolarDB MySQL Serverless集群,都分别部署在两个不同的地理区域。

这样在单个可用区发生故障时,系统能够自动切换到另一可用区继续提供服务,确保业务的连续性和可靠性不受影响。

Serverless 架构核心优势:

  • 弹性伸缩、高可用:计算资源高可用由 Serverless 服务 SLA 保障,自动进行弹性伸缩,根据实时需求动态调整资源,适应不同的工作负载。

  • 运维负担和成本降低:Serverless 服务维护资源,并且提供开箱即用的日志、监控、负载均衡等能力。开发和运维团队无需管理底层服务器和基础设施,降低了运维负担和成本。

  • 资源利用率高、规格粒度细:根据系统负载自动调整资源,资源利用率高。采用按量计费模型,最小计费时间为分钟级,资源规格粒度细。企业只需为实际使用的计算和存储资源付费。

点击文末“阅读原文”,了解更多详情。

二、总体架构

总体架构图如下,本架构采用单地域双可用区部署,将业务系统、数据库部署在2个不同可用区,实现了可用区级故障灾备能力,从而保证了业务的连续性。服务和数据库都采用了阿里云Serverless产品也支持弹性伸缩。同时支持该架构还利用专有网络VPC、交换机和跨可用区安全组等基础设施,实现了私有网络下的系统通信。

具体使用到的基础设施及云服务如下:

  • 1个专有网络VPC:为应用型负载均衡ALB、Serverless应用引擎、云数据库PolarDB MySQL版Serverless集群等云资源构建云上私有网络。

  • 5台交换机Vswitch:按照经典架构设计3个子网平面(公网平面、业务平面、数据平面),分别部署在两个可用区,提供基本的网络分段和隔离功能。ALB横跨两个可用区部署在公网平面,两个Serverless应用引擎实例分别部署在两个可用区的业务平面,一对云数据库PolarDB MySQL版Serverless主备集群分别部署在两个可用区的数据平面。

  • 1个公网应用型负载均衡ALB:将公网访问流量分发到不同的Serverless应用引擎实例。公网ALB通过EIP提供公网服务能力。

  • 2个Serverless应用引擎实例:用于部署业务系统,提供应用服务。

  • 1个云数据库PolarDB MySQL版Serverless集群:为业务系统提供数据服务。

点击“阅读原文”,直达技术架构方案。

三、方案展示

首先创建DNS实例。基于阿里云资源编排服务ROS(Resource Orchestration Service)实现,ROS模板已定义好脚本,可自动化地完成云资源的创建和配置,提高资源的创建和部署效率,实现一键部署。

(一)通过访问ALB的DNS名称,验证服务可用性

  1. 从实例列表中获取ALB实例的DNS名称。

  2. 通过浏览器访问该DNS名称,检查是否可以正常访问到示例应用。

(二)配置弹性伸缩并通过Apache Benchmark进行负载测试,验证Serverless架构的弹性和高可用性

配置弹性伸缩
  1. 打开Serverless应用引擎SAE控制台[1],点击左侧导航栏选择应用管理 > 应用列表。点击当前应用名称,进入应用详情页。

  2. 弹性伸缩页签添加弹性策略,请按照图片进行配置。

  1. 添加完毕后,在弹性伸缩页签下的监控指标策略列表中点击启用。更多配置方式可参考配置弹性伸缩策略[2]。

进行负载测试
  1. 安装测试工具Apache Benchmark,Mac OS操作系统默认安装了该测试工具,其他操作系统安装教程请参见官方文档[3]。

  1. 请在本地终端中,使用Apache Benchmark命令进行负载测试,模拟不同的并发请求和持续时间。从应用型负载均衡ALB控制台[4]实例详情中获取DNS名称,将<ALB实例的DNS名称>替换成实际值。

ab -n 20000 -c 200 http://<ALB实例的DNS名称>/

命令

说明

ab

Apache Benchmark提供的压测工具命令。

-c

一次创建的请求个数。

-n

一次测试会话中执行的请求个数。

验证弹性伸缩能力
  1. 命令执行完毕后,单击应用事件,在全部来源类型下拉列表,选择自动弹性(HorizontalPodAutoscaler),可以看到弹性伸缩原因。

  1. 在基本信息页,单击实例部署信息,可以看到实例数量的变化,运行中实例从最初的2个变成6个。

以上操作验证了Serverless架构的弹性伸缩能力。系统能够根据负载自动调整资源,确保业务的高效运行。此外,当前方案采用单地域双可用区部署,业务系统和数据库分别部署在不同的可用区,确保了系统的高可用性。即使一个可用区发生故障,另一个可用区的资源仍然能够继续提供服务,保证业务的连续性和稳定性。

点击“阅读原文”,体验搭建Serverless高可用架构,更有精美礼品等您来拿!

参考链接:

[1]https://saenext.console.aliyun.com/overview

[2]https://help.aliyun.com/zh/sae/serverless-app-engine-classic/user-guide/configure-an-auto-scaling-policy

[3]https://httpd.apache.org/docs/2.4/install.html

[4]https://slb.console.aliyun.com/alb

对,另一个可用区能否承载全部流量取决于预先的容量规划。理想情况下,应该预留足够的冗余资源,以应对可用区故障的情况。另外,还可以结合一些流量控制和降级策略,确保核心服务的可用性。

关于可用区故障切换,文章里提到了双可用区部署,但没细说切换过程。我猜应该会有一些流量损失吧?毕竟另一个可用区需要时间来启动足够的实例。不知道有没有大佬做过这方面的测试?

成本控制方面,Serverless 确实厉害。我之前用传统架构,得自己购买服务器、配置环境、维护等等,各种费用加起来不少。现在迁移到 Serverless,只用关心代码,成本降低了 30% 以上,而且效率还提高了,简直双赢。

从学术角度来看,Serverless 的成本优势体现在资源的动态分配和按需付费上。它消除了传统架构中资源闲置的浪费,实现了资源利用率的最大化,从而降低了总体拥有成本 (TCO)。

Serverless 架构下数据库选择还是挺多的,除了 PolarDB 和 DynamoDB,还有 MongoDB Atlas、FaunaDB 等,关键看你的具体需求。如果需要强一致性和事务支持,那就选关系型数据库;如果需要高扩展性和灵活性,那就选 NoSQL 数据库。

从技术角度来说,选择数据库要考虑几个因素:数据模型、一致性要求、性能需求、成本等等。关系型数据库适合事务性强、数据结构复杂 的应用;NoSQL 数据库适合高并发、大数据量的应用。没有绝对的好坏,只有适合不适合。

我用过 DynamoDB,感觉也挺适合 Serverless 的,它也是 Serverless 的,按需付费,扩展性也不错。缺点就是学习成本有点高,跟关系型数据库不太一样。

切换过程的稳定性应该和 ALB 的配置有关吧,比如健康检查、会话保持之类的。如果配置得当,应该可以实现平滑切换,尽量减少对用户的影响。当然,前提是另一个可用区的容量足够。

我觉得除了按需付费,Serverless 减少了运维成本也是一大优势。不用操心服务器维护、更新、安全等问题,省下的人力和时间成本都很可观。相当于把这些工作外包给了云服务商。