从最初的新鲜词,到如今形成巨大的行业和生态,云计算已蓬勃发展十余年。在这十余年间,不断有新理念、新技术涌现,致使 IT 行业发生了天翻地覆的变化。作为一名新时代的开发者,把握技术的发展方向,在这个不断变化的世界显得至关重要。
12 月 18 日亚马逊云科技深圳 User Group Community Day 举办。活动带领大家盘点了亚马逊云科技 re:Invent2021 全球大会的技术创新精华,解读云计算的最新动向。同时,来自亚马逊云科技的四位开发者围绕云原生应用开发的探索与实践进行分享,涉及无服务器、容器、云原生等多个前沿技术话题讨论。
re:Invent2021 全球大会虽已圆满落下帷幕,但开发者对于这场盛会讨论的热情却丝毫没有退却。物联网、容器、无服务器、机器学习、5G、机器人……数十项前沿领域的新产品、新功能发布,其中部分可能代表云上世界未来的发展方向。亚马逊云科技首席开发者布道师王宇博,在本次 Community Day 上从开发者关注的角度,为大家解读了 re:Invent 2021 的技术创新精华。
在亚马逊云科技所提供的二百多项全功能服务的背后,拥有一个核心的驱动力即 API。自 2002 年,贝索斯向全公司发布指令“从今天起,所有的团队都要以服务接口的方式,提供数据和各种功能”后,亚马逊电商系统都以 API 的方式进行连接、交互,这促使亚马逊平台的快速演进。这条准则后来同样也成为亚马逊云科技构建云服务的基石。在始终奉行这条准则的 15 年间,亚马逊云科技总结出 6 条使用 API 的相关经验。
API 是永远的
永远不要破坏向后兼容性
从客户场景出发逆向工作
让 API 的故障模式有据可查
创建具有明确、特定目的,自描述的 API
不惜一切代价避免泄露实现细节
在介绍完亚马逊云科技众多服务背后的核心驱动力后,王宇博分别从开发工具、云原生架构、机器学习、社区这四个开发者最关心的维度分享了今年 re:Invent 上的创新和突破。
01 开发工具
一直以来,亚马逊云科技提供众多开发工具帮助开发者在云端快速的构建和开发。本次 re:Invent,又全新发布了三大 SDK,分别支持 Swift、Kotlin 和 Rust 语言,进一步满足开发者使用熟悉的语言在云端快速构建的需要。
此外,王宇博还就基础架构即代码 (IaC) 进行介绍。基础架构即代码是在开发领域中非常热门的话题,通过可编程的方式帮助开发者快速的获取和配置资源,通过代码打通软件和硬件。亚马逊云科技主要有两款服务是针对基础架构即代码领域。第一个是 Amazon CloudFormation,以模板的方式帮开发者创建、配置、管理资源,第二是 Amazon CDK,能够帮助开发者以熟悉的语言定义云基础设施,并通过 Amazon CloudFormation 进一步实现。第三,亚马逊云科技在全栈应用的开发方面发布了一款名为 Amazon Amplify Studio 的产品,能够以低代码的方式构建 Web 应用和 UI,并可以结合 Amazon Amplify 快速构建全栈应用,打通云端全栈应用开发的全流程。
02 云原生架构
自 2018 年以来,随着 CNCF 对云原生的定义,云原生技术已经越来越得到各大厂商、开发者的认可。在这个领域亚马逊有很多的理念和实践分享给大家。容器是构建云原生现代化应用的核心基础设施,亚马逊云科技在容器领域提供了非常丰富的服务和部署方式。在今年的 re:Invent 中,亚马逊云科技主要针对 Kubernetes 集群的弹性伸缩推出了生产就绪的 Karpenter,它是一个开源项目,目前版本已经更迭到了 0.5 版,通过 Karpenter 进行灵活高性能的 Kubernetes 集群的弹性伸缩,有助于提高应用的可用性和资源的利用率。在无服务器领域,亚马逊云科技的 Lambda 一直是先行者,今年 re:Invent 对 Lambda 的临时存储进行了容量提升,有助于数据分析、机器学习推理在无服务器上的部署。
03 机器学习
向纵深发展,向行业发展是机器学习的发展趋势。亚马逊云科技在今年的 re:Invent 上宣布了与 Meta 在 PyTorch 领域的深入合作,一起推动 PyTorch 开源框架的研发和创新。亚马逊云科技上有大量 PyTorch 的开发者,亚马逊云科技和 Meta 一起,推动 PyTorch 中国用户社区的建设,帮助开发者进行更好的开发、探讨、交流。另外,针对机器学习开发者,亚马逊云科技发布了 SageMaker Studio Lab,可帮助开发者使用免费的算力和丰富的技术资源学习机器学习并试验新技术。
04 社区
开发者社区今年第一次在 re:Invent 的主题演讲中覆盖,可以看出亚马逊云科技对于开发者社区越来越重视。在今年的 re:Invent 中上发布了 Amazon re:Post,这是一个社区驱动的问答网站,帮助消除在使用亚马逊云科技产品中相关的技术障碍,进行相关的知识获取和学习并帮助大家进行知识交流和互动。同时,亚马逊云科技更加突出了 Hero 的重要性,Hero 们在开发者社区中扮演了越来越重要的角色,成为社区成长的重要驱动力。
在王宇博基于 re:Invent 对 2021 云计算发展趋势进行解读后,三位来自亚马逊的开发者分别就不同技术领域对云原生的应用开发经验展开分享。说到云计算发展的新趋势,不得不提的就是容器技术了。Amazon EKS 作为开源的容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理,而 Amazon EKS 消除了运行具有高可用性的 Kubernetes 集群的复杂性,并交付了可供生产环境使用的更具有弹性的架构,可让开发者在 AWS 上轻松运行 Kubernetes。亚马逊云科技资深解决方案架构师林俊在本次 Community Day 上重点阐述 EKS 背后的设计机制与开源社区的紧密合作并探讨了后续的技术发展路线。
单纯部署、运行一个容器很简单,但要自己搭建 Kubernetes 的平台,就是一个比较痛苦的过程了,像高可用、etcd 备份、数据平面上节点的弹性伸缩、资源调度等等,Amazon EKS 是在这样的背景下诞生的。其背后的设计有以下几个特点:
每个集群是单租户的模式,控制平面运行在 AWS 管理的 VPC,数据平面运行在用户自己管理的 VPC 上。EKS 会实现控制平面跨可用区的高可用,。
数据平面也可以选择使用 Fargate 服务,EKS 可以自动实现 Pod 弹性伸缩,按 Pod 运行的时间进行计费。
可以以参数配置控制平面和数据平面的交互方式,无论通过内外网均在亚马逊的管控之下,从而保证安全性。
以命令行或界面发起集群维护事件,以服务完成响应处理。
以部署、验证、扩展部署的方式自动完成整个区域所有集群的版本更新。
据林俊介绍,亚马逊云科技在 Amaozn EKS 上的计划主要将围绕 Kubernetes 集群运维展开,比如在目前公开的路线图可以看到
目前已推出的 Amazon EKS Anywhere 服务,即无论 Kubernetes 部署在何处,Amazon EKS 都可以帮助您部署,操作和保护 Kubernetes 环境。目前支持部署在 Vmware 环境,2022 年 Amazon EKS Anywhere 会计划支持裸金属环境的部署
2022 年计划推出一个 karpenter1.0 版本,支持大规模节点下 Kubernetes 集群的高效扩缩容。
亚马逊云科技为我们带来了非常强大、全面的工具栈,如何用它来更好的创造价值是摆在我们面前的一个课题。如今我们越来越多地选择了网购这一购物方式,这就对电商平台的可用性和高性能提出了挑战,亚马逊云科技资深无服务器产品专家孙华为介绍了如何使用 Amazon Lambda、EFS 和 Amazon Aurora Serverless 构造高可用低成本的无服务器电商独立站。
Serverless 计算具有以下四个特点:
无需管理服务器
自动缩放
为价值付费
内置高可用和容错能力
因为 Amazon Lambda 是事件驱动,所以典型的基于 Amazon Lambda 的应用无外乎这样的架构——以事件源触发 AmazonLambda 函数,在函数里可以访问后端的数据库,也可以访问任何其他的服务。Amazon Lambda Adapter 开源项目可以帮助开发者做 Amazon Lambda 的事件和 HTTP 请求之间的转换。这一版的架构设计旨在节约开支,为提升性能可以考虑分别在 WordPress、EFS、PHP 层面做有针对性的优化。
WordPress 优化
选择轻量的主题。
选择性能好的 Page Builder,推荐直接使用 Gutenberg。
使用 Memcached 作为 Object Cache 的后端。
EFS 使用优化
WordPress 代码包括大量小文件,EFS 访问大量小文件的延迟高
把 WordPress 代码,主题和插件打包到 Amazon Lambda 容器镜像中
仅保留 wp-content/uploads 目录在 EFS 文件系统上
WordPress 代码、主题和插件均保存在 git 仓库中
PHP 性能优化
代码更新后,通过 CI/CD 流水线部署新的 Amazon Lambda 版本
使用 Opcache 缓存 PHP 文件编译结果
使用 Opcache File Cache
将预编译生成的 Opcache File Cache 文件打包到 Amazon Lambda 函数中
通过这些性能优化和架构迭代,我们成功的在 Serverless WooCommerce 上支撑了每分钟 2 万笔订单的峰值流量。而且处理 1 百万订单的 API Gateway 和 Amazon Lambda 的成本仅为 $303。通过这个测试,我们证明 Serverless 电商独立站不仅可以支撑每小时百万订单的峰值,而且成本超低,非常适合构建电商独立站和电商独立站 SaaS 服务。
不管是容器还是无服务器,产品的可用性和性能都是生产阶段非常重要的指标,是能够留住、承载更多用户的关键之一。而随着云原生时代的到来,大量企业从 On Cloud 走向 In Cloud,作为开发者更关心市场的需要,从而积极且迅速响应,快速将想法变为产品和服务。不从头造轮子,而是站在云的肩膀上,以搭积木的方式,在迭代中逐步添加新功能以完善用户体验。亚马逊云科技资深开发布道师黄帅以开发者的视角,探讨了快速原型设计在加速业务成果方面的作用,深入了解如何释放原型开发的力量。
黄帅表示,其实云原生是一种构建或者运行应用程序的方法,它背后借助的是云计算本身特有的弹性及分布式的优势,让我们可以快速的把它构建出来,推到市场去看市场反馈,然后继续做下一步。云原生开发融合了 DevOps、持续交付、微服务和容器的概念。
加尔定义里面讲过,一个运转正常的复杂系统总是从一个运转正常的简单系统演化而来。云原生应用的交付形态恰恰如此,从客户提出需求,初步演示(Demo),概念验证(POC),再到原型设计开发(Prototyping),然后试点应用(Pilot)到交付生产(Production),正是一个由简单到复杂演化的过程。其中,原型设计和开发的部分,是整个过程中承上启下的关键节点。我们对该阶段的核心期望有三点:
快速创新:使用新型软件技术加速创新
全面治理:自动可扩展地管理软件以及基础设施
持续优化:缩减开发周期、降低风险和减少成本
原型设计和开发的特征都是以时间来衡量的:从需求形成故事板(1 天)、架构设计(1 天)、UI 原型(1 天)、代码实现(5 天)、测试(2 天)和验证(2 天)。在整个过程中会借助大量的工具完成原型的设计和开发,借此快速推向市场。代码即云,万物皆 API。那么多云计算的服务,让我们可以从前端到后端、到数据库都能快速实现和部署。在亚马逊云科技的平台中,可以帮助我们实现原型的服务,都是建立在 Serverless 的基础上,以积木块的方式进行快速原型开发,其中有三款可以值得关注:
Amazon App Runner,快速地大规模部署容器化 Web 应用程序和 API,开发人员无需具备基础设施经验。
Amazon Amplify,前端 Web 和移动开发人员在云上快速轻松地构建全栈应用程序,无需有构建 API、编写服务器端代码或设置数据库的经验。
Amazon Amplify Studio,低代码和可视化的方式,更快地从 UI 设计转换为安全、可扩展和可用于生产的应用程序,向最终用户提供新的创新,同时仍然可以完全控制应用程序代码。
云原生到底是什么?黄帅在分享的最后对这个问题进行了总结,云原生是一个方向和一种文化,引领着企业更加深入地认识和使用云计算,使应用不仅长在云上,更是以一种适应云计算的方式,原生构建和持续迭代。他提到,快速原型设计在整个云原生中是承前启后,站在云计算的肩膀上,利用亚马逊云科技的大量 Serverless 服务,使应用和开发变得更快、更稳。