省心省钱的云上 Serverless 高可用架构
摘要:本次分享的主题是省心省钱的云上 Serverless 高可用架构。主要分为二个部分:
1. Serverless
2. SAE 产品介绍
01. Serverless
1.1 Serverless 的发展历程
首先先了解一下 Serverless 的发展历程,以及什么是 Serverless 。
Serverless 是云计算发展的一个阶段。最开始使用服务器都是通过物理机的方式。无论是在公司内部部署,在家中部署,还是去租用电信的机房,它们其实都属于物理层面的范畴。之后,虚拟机出现了,比如阿里云的 ECS、AWS EC2 等,这些都属于云主机虚拟机的一种形式。这种使用方式类似于传统的 IDC ,只不过它是位于云上的一个“机器”。
随后 Docker 和 K8s 的出现,使得容器化交付方式成为了主流。整个云计算领域也由此进入了容器化的时代。 Serverless 作为容器化之后的一个发展阶段,其重要性日益凸显。
1.2两个阶段
在此背景下可以将云计算的发展历程划分为两个阶段: 1.0 阶段和容器及 Serverless 所属的 2.0 阶段。 Serverless 可以看作是容器技术的一个进阶,它与容器的最大区别在于,采用 Serverless 方式后,用户完全无需关注底层的具体实现形式。关于这一点稍后会做详细阐述。
大家只需理解 Serverless 是云计算自然发展的一个历程。而且,Serverless 现在已经逐渐从小众、新颖的概念,发展成为一种主流的运营模式。而我们正身处这一变革之中。接下来来看一下 Serverless 的起源。这些概念最初是由伯克利大学提出的,后来经过各大云厂商及研究院的总结与发展。
1.3一个比喻了解 Serverless
对于 Serverless ,打一个比较形象的比喻:如果把物理机形容为私家车,那么 Serverless 就像是打网约车。如何理解这一点呢?当使用物理机时,相当于一次性付费购买了这辆车,之后这辆车就完全属于我们自己。但在使用这辆车,或者说这台服务器的过程中,还需要负责它的油费、保养以及维修等所有事项。简而言之,这辆车的所有细节都需要自己去管理,这就是物理机的特点。
到了虚拟机这个阶段,它就类似于出租车。这辆车是我租来的,我需要支付租金。比如按月租用,那么在这段时间内就可以使用这辆车,而且不需要关心这辆车的维修和保养,只需要为租用这辆车的费用付费即可。这就是租车的概念。而到了 Serverless 这个时代,可以用一个更形象的比喻来形容它:它就是网约车。比如,我需要在十分钟内从一个地方到另一个地方,打一个网约车,支付十块、二十块等费用。等到达目的地,完成出行目的后就不需要这辆车了。计算资源的使用也是如此。比如我需要运行一个程序,或者是一个网站、一个任务,可能需要十分钟、一个小时,甚至一个小时零两分钟。在这个时间段内,我会启动所需的资源。一旦目的达成,这些资源就会被释放,而我也就无需再为此付费。
1.4 Serverless 的特点
总结起来, Serverless 具有以下几个特点:首先,你无需管理资源,因为这部分是由平台来负责的。其次,它具有自动弹性扩展的能力,这是非常重要的。当你需要资源时,它会自动为你分配;而当你不需要时,它又会自动缩减资源。这样一来,你只需要为你实际使用的那部分资源付费,而无需为闲置的资源买单。
最后就是聚焦业务价值。当结合了前面提到的这些能力后,对于用户而言,就不再需要关心基础设施的问题了。他们只需专注于自己的业务,关心业务代码即可。这正是 Serverless 的价值所在。
1.5 Serverless 高可用架构
然后再来看一个典型的 Serverless 高可用架构,这是一个相对简单且抽象的架构图。前端通过负载均衡 ALB 与公网相连。在负载均衡之后,是 Service 的实例,这些实例的数量可以根据你的业务需求来灵活设定,可以是一个,也可以是两个,甚至可以是上百个。再往下,是 Serverless 版的 PolarDB 数据库。所有的数据库资源和计算资源都会根据你的业务当前的流量和负载自动进行弹性伸缩。同时,为了保障系统的可靠性,还采用了多可用区的部署策略。
这是一个简单的 Serverless 架构示例。在这个架构中,中间的计算层由原来的云主机替换为了 SAE ,数据库层也从原来的买断制或包年包月的数据库转变为了 Serverless 数据库。实际上,从架构层面来看,这种转变带来的差异并不大。弹幕中有同学提到了这一点,稍后会为大家做进一步的解释。
1.6好处
所以在这种 Serverless 的架构下可以获得哪些好处呢?首先是资源的高效利用,这一点很容易理解。如果使用ECS,为了保障高可用,至少需要两台服务器。但在 Serverless 架构下可能只需要一个收敛实例就足够了。而且,由于资源是根据流量和负载自动弹性伸缩的,因此能保证非常高的资源利用率。同时,这也意味着无需再对机器进行运维,无需为机器制定复杂的调度策略或规则,这些全部都由平台自动完成。这就是 Serverless 架构相对于传统架构最大的优势。
02. SAE 产品介绍
在这个架构下会重点介绍一个名为 Serverless 引擎 SAE 的产品。这是一个 Serverless 计算服务的产品。在之前的架构图中,大家可能已经注意到有一个名为 PolarDB 的 Service 版数据库产品,不过今天不会详细讲解它,而重点介绍的是 SAE 这个产品。
2.1 SAE 的产品架构
首先来看一下 SAE 的产品架构。虽然细节不必深究,但请特别关注这一部分。这一层对应的是传统的服务 Service 层。在这之上提供了自主研发的开发框架、微服务能力、应用监控功能,以及完整的应用生命周期管理、自动化部署、日志收集等全套服务。如果将 SAE 与传统架构进行对比,就会发现:如果使用传统的云主机,那么用户只拥有这一层的服务,而在这之上的所有内容,如搭建自己的 Kubernetes 集群、构建日志系统、监控系统、以及 CI/CD 流程等,都需要用户自行完成。然而,当使用 SAE 时,这一层厚厚的服务全部由平台提供。用户只需专注于自己的业务逻辑,将业务代码编写好并部署到 SAE 上即可,操作非常简单。
2.2 SAE 的优势
再来看一下 SAE 的优势,首先是资源利用率。这一点之前已经提及,现在通过几个图表来形象地展示一下。这个图表可以理解为云主机的资源消耗情况。假设我包了一年的云主机服务,那么这一年的费用是一个固定的值,就像这个方形的图表所示,我每天、每小时都需要支付固定的费用。虽然费用是一次性提前支付的,但资源消耗和流量使用肯定是有周期性和波动性的。然而,在我不需要那么多资源的时候,仍然需要支付相同的费用。这就是云主机的一个特点。
然后到了 K8s 之后,虽然它具备了一定的弹性,但这种弹性机制相对复杂,并且其弹性的颗粒度相对较大,不够精细。因此,虽然资源利用率有所提升,但仍然有改进的空间。于是进入了 Serverless 的阶段。在这个阶段资源的消耗曲线与业务的实际需求曲线几乎完全吻合。因此在这个阶段资源利用率达到了最高水平。
甚至在某些情况下,比如在 Web 应用上还可以进一步优化。比如,当只有一个实例在运行且此时没有流量时,可以让你的 CPU 处于不计费状态,并只会保留一个最小的基础资源,但这部分资源是不需要你付费的。此时,你只需为内存付费。这样就能进一步节省用户的费用。更进一步地,如果你将最小实例数设置为零,那么在长期没有请求的情况下,甚至不会对你整个实例计费。相当于在这段时间内,你无需支付任何费用。但是一旦有流量进来,就又会自动启动实例。这就是 Serverless 所提供的极致弹性和极致省钱的能力。
2.3 Serverless 在研发提效方面的表现
如果你使用 ECS 来构建自己的项目或应用,那么首先你需要购买ECS ,然后创建并初始化自己的集群。接着你需要部署环境,将业务代码上传到服务器上,还要搭建监控系统和日志收集机制。之后你还需要负责运维工作。整体来看,从项目启动到业务正式上线,需要花费大量的时间和精力,以及人力成本。然而,如果你使用 SAE ,那么资源准备这个阶段是可以省略的,因为所有的资源都由平台提供。你唯一需要做的就是将你的代码部署到 SAE 上,而运维工作也由平台负责解决。因此,原本可能需要七个步骤的流程,现在直接缩减到了一个步骤。
对于使用过的用户来说,他们在 ICE 上部署一个应用,如果操作熟练的话,是可以做到分钟级的快速部署。接下来是迁移的问题。很多用户可能已经在云上或者在自己的 IDC 上运行着自己的业务。那么如何将这些应用迁移到 SAE 上呢?
以 ACS 为例来说明。如果你原先是在 ECS 上运行的,这是你的传统ECS 架构,你可能使用了 OSS、MQ 以及日志服务等。在迁移到 SAE 时,你其实只需要将你的应用重新部署到 SAE 上。原先挂载在 ECS 上的那些服务,如 OSS、MQ 等,现在可以直接挂载到 SAE 上,无需进行复杂的修改。这个过程是非常平滑的迁移,无需修改代码,直接迁移即可。
2.4实用小功能
接下来给大家介绍一个非常实用的小功能,它操作简便,能直接帮助大家节省成本和费用,这个功能就是一键启停。无论你的业务类型是什么,通常都会有一套或多套测试环境。对于一些规模较大的企业,可能还会有预发布环境等多套测试环境。这些测试环境与生产环境的不同之处在于,在下班时间或节假日期间,它们基本上是不被使用的。如果你将这些机器一直保留在运行状态,那么这部分资源实际上是被浪费的。然而如果你使用 SAE ,就可以一键启动或关闭这些测试环境。通过这样简单的操作,你就可以直接节省测试环境的费用。也就是说在下班时间或不需要测试环境的时候,你可以选择关闭它们,从而避免不必要的费用支出。这个功能不仅简单,而且也非常实用且直接。
很多人也关心,从原先使用的 CID 方案切换到 SAE 上,需要做哪些调整。 SAE 提供了非常完善的持续集成/持续部署解决方案。比如,你可以继续使用 Jenkins、云效、 ACR 或者 GitLab 等工具。无论你原先是如何使用的,切换到 SAE 后,你都可以继续保持原有的工作习惯。
我们对于工具链的集成拥有丰富的经验,因此大家不用担心,切换到平台后,不会影响到大家的工作习惯。在持续提升方面,应用托管功能是基于阿里巴巴在微服务领域的深厚积累和实践经验开发的。阿里巴巴在微服务应用方面,在国内处于领先地位。
因此基于公司自身的生产实践,在 SAE 上实现了应用托管功能,包括灰度发布、金丝雀发布、蓝绿发布等多种发布策略。这些发布策略都可以在 SAE 的控制台上进行操作,你无需关心具体的执行过程,只需配置好相关参数,系统就会自动执行。
2.5弹性策略
接下来讲一下弹性策略,这也是 SAE 的一个核心功能。它支持多种丰富的弹性策略。例如,你可以根据自己的需求,基于 CPU、内存、 QPS 、 RT 等指标来制定自己的弹性策略。这种策略特别适合应对突发流量的情况,因为事先往往无法预知流量脉冲或高峰何时会出现,所以可以通过监控指标来灵活调整。另外,如果业务有规律可循,比如特定时间段内用户活跃,而其他时间段则用户稀少,那么就可以采用定时弹性策略,提前调配资源。对于更复杂的情况,还可以将指标弹性和定时弹性结合起来,其被称之为混合弹性。这样一来基本上可以解决绝大部分用户的使用场景。这就是 SAE 的弹性策略。
在可观测性方面提供了基本的应用监控和一些基础的监控能力,这些在 SAE 上都是支持的,并且都是免费的,无需额外付费。如果你对应用或容器的监控有更深入的需求,可以选择开通 ARMS 的高级版,或者使用 Prometheus 等监控工具,这些主要由 ARMS 负责提供能力,而我们与 ARMS 进行了对接,你可以在 SAE 控制台上进行操作。此外还提供了丰富的企业配套能力。
2.6企业分账
例如,很多企业面临的一个痛点是企业分账问题。在一个公司内,不同的团队可能会使用同一个账号,但需要量化区分每个团队的具体花费和资源使用情况。这时,就可以使用企业分账能力,它能够很好地将不同部门的账单和费用区分开来,为企业管理提供便利。
2.7计费方式
接下来看一个大家普遍关心的问题: SAE 是如何收费的。 SAE 的收费项目主要有四个,其中两个是主要的,另外两个是次要的。主要的收费项目是 CPU 和内存,这与 ECS 的收费模式相对应。在 ECS 中,比如你购买了一个四核 16G 的实例,四核代表 CPU , 16G 代表内存。而在 SAE 上是根据你实际消耗的 CPU 和内存资源来计算费用的。举个例子,如果你在一个四核 16G 的实例上运行了 2 秒钟,那就只计算你这 2 秒钟内所使用的 4 核和 16G 资源的费用。同样地,如果你运行了 4 秒或一分钟,就只计算相应时间的费用。这个计费模式大家可以理解吧。
另外两个收费项目是请求数和流量,这主要是针对 Web 应用的。如果你的 Web 应用使用 SAE 2.0 进行托管,那么会根据你的请求数和流量来收取费用。需要注意的是,这两项费用并不是必须的,如果你的应用是微服务架构,那么就不需要支付这两项费用。请求数的收费是根据你的实际请求数量来计算的,而流量费用则主要是基于你的公网出流量。这两项费用都是在 SAE 上产生的,因为网关是自主研发的,所以这些计费项也属于 SAE 的四个主要计费项之一。
在这四个计费项的基础上还提供了两种计费方式。第一种是后付费模式,这种模式下完全按照实际使用量来计费,即会根据你的使用情况出具账单,然后你根据账单进行支付。这就是后付费模式。
还有一种方式是预付费,即你提前购买资源包。在购买资源包后,当你使用时,系统会优先抵扣资源包内的资源。例如,如果你购买了 5000 个单位的资源包,当你使用了四个核心运行了 1 个小时,系统会先从资源包中抵扣这 4 个核心 1 小时的使用量。抵扣完毕后,若仍有使用需求,再按照后付费的按量计费方式扣除费用。预付费的好处在于可以提供更低的折扣。根据你购买的资源包大小以及时长,折扣力度也会有所不同,通常资源包越大、时长越长,折扣越低。这就是后付费与预付费的区别。
大家在阅读之后,可能会产生一个疑问:在使用 ECS 较多的情况下,如何选择 ECS 和 SAE ,或者如何比较它们的价格?对此做了一个简单的对比供大家参考。由于 SAE 的 Serverless 形态的产品,需要结合弹性策略来使用,因此,如果你的业务是 24 小时满负荷运行的,那么使用 ECS 或者传统的虚拟机可能会更便宜。然而,如果你的业务具有弹性,不需要持续高强度运行,比如一天只运行几个小时,那么 SAE 的费用一定会更低。
如何区分哪种方式更适合中等呢?这实际上需要根据你的具体业务情况来计算。但我可以给出一些粗略的参考。由于按量计费的单价相对较高,如果你每天的运行时间小于或等于 16 个小时,根据经验,使用 SAE 可能会更便宜一些。而如果你选择了资源包,由于资源包的单价更低,其适用范围会更广一些。一般来说,如果你每天的运行时间不超过20个小时,即每天有超过4个小时的空余时间,那么使用 SAE 也可能会更便宜。
在实际操作中,选择哪种方式还需根据你的业务情况来决定。例如,如果你在 ECS 上运行一个大型规格的实例来承载多个业务,而在 SAE 上使用相同规格的实例可能会导致成本较高。在这种情况下,你可以考虑将业务拆分成多个小实例,即使用小规格的实例来运行你的业务。具体的操作方法将在后续讨论。总的来说可以记住两个关键数字: 16 和 20 ,但实际上, 16 和 20 之间的差别并不大,所以主要记住 16 即可。
2.8 SAE 客户案例
接下来将为大家介绍几个典型的 SAE 客户案例。首先是极氪汽车,这是 SAE 上的一个标杆案例。
他们拥有一套大数据商业智能平台,该平台支撑着极氪汽车的全部业务以及重要决策。他们将这套 BI 应用部署在了 SAE 上,后端与数据仓库、实时计算系统等相连接。在此基础上,他们还利用了 SAE 上的应用监控、日志服务以及微服务治理等功能。结合这些产品,他们构建了一套非常完整的原生架构。
在这个案例中我们为他们解决了哪些问题呢?首先帮助他们实现了新业务的分钟级接入。对于像极氪这样的大公司来说,团队内部经常会有新业务和新应用需要上线。如果使用 SAE ,就可以利用简便的 CI/CD 能力以及简单的应用部署流程,在几分钟内完成新业务的接入和上线。同样,如果有服务发布需求,也可以在几分钟内完成,大大节省了人力。而且,在这样的 Serverless 弹性架构中还帮助他们实现了整个系统的 SLA 达到了 99.99% ,这是非常不容易的。这是关于极氪的案例。
接下来,还有南瓜电影,这是一个流媒体视频点播平台。你可以简单理解为,它是一个提供电影内容的会员制网站。这个客户原先使用的是 ECS ,但后来因为一个契机,他们选择了 ICE 。这个契机是一部韩国电影在网络上突然爆火,而在国内拥有正版版权的只有南瓜电影这个平台。因此,南瓜电影突然迎来了几十倍于平常的客户流量,导致他们的服务崩溃了一个多小时。这对他们的影响很大,因为作为一个付费平台,用户付费后却得不到良好的体验,他们需要为此进行赔偿等。这件事情让他们意识到,他们需要一套高弹性、高可用性的平台,因此他们选择了 ICE 。而我们也是帮助这个客户,在七天内就将他们的所有业务全部迁移到了新的平台上。这也是一家互联网公司,业务体量相当可观。用了大约七天的时间帮助他们从第一个业务开始逐步迁移,直到所有业务都迁移完成。这七天里,大部分时间并不是在进行配置或类似的工作,而是花在测试和验证上。因为对于一个复杂的业务来说,迁移总是需要时间的,而真正的操作过程其实并不需要太多时间。这是关于南瓜电影的案例。
接下来是视野数科,这是一家金融服务提供商,他们为券商、银行以及保险公司等提供大数据服务。他们也将自己的大数据 BI 平台部署在了 SAE 上,并通过 SAE 为他们的用户提供服务。由于他们用户的特点,流量并不是 24 小时平均分布的。具体来说,虽然我对银行业务的具体细节不太了解,但据他们所述,晚上、月底或某些特定时间,会有大量用户前来调取数据,而平时流量则相对较小。因此, SAE 很好地帮助他们解决了这个问题。
而且,还有一个重要问题是,作为一家金融公司,他们的技术人员主要是金融背景出身。在 IT 领域,特别是云计算领域,他们并没有足够的人力来支持。同时,他们也不愿意投入大量人力来维持一个庞大的 IT 团队,因为这并非他们的主营业务。因此, SAE 这套平台能够很好地帮助他们解决基础设施的运维和建设问题,而且无需他们投入额外的人力。
这是视野数科的案例。另外还有 SKG ,大家可能使用过他们的产品,比如颈部按摩仪,这是一种知名的健康类产品。他们将自己的渠道中台部署在了 SAE 上。对于 SKG 来说,使用 SAE 并非主要基于弹性需求,而是为了提升开发效率。他们内部有一套自己的开发者系统,与 SAE 对接后,可以显著提升开发效率。据测算,大概能够帮助他们提高 70% 的开发效率。
而且,由于弹性的特性,他们的成本也能降低约 60% ,大致是这个比例。而使用 SAE 的客户主要是基于三个考虑:一是弹性。当他们的业务有突发或周期性的流量变化,即用户的负载在高峰和低谷之间有明显区别时, SAE 可以帮助他们显著降低成本。二是他们经常面临不可预知的极高流量冲击。这时, SAE 的弹性能够确保他们业务的可用性。
最后一点,在应用的全生命周期管理以及 CI/CD 方面的能力,还有在应用监控和微服务治理上的能力,都能显著提升用户的研发效率。你无需再关心基础设施的问题,只需专注于自己的业务即可。主要是基于这三点。
今天简单地用 20 分钟时间给大家介绍了 SAE 这个产品,以及针对各种应用场景的解决方案。