前不久,备受期待的 Stack Overflow 2022 年度开发者调查报告终于出炉。作为软件开发行业最具专业性和影响力的开发者调研活动,Stack Overflow 收集了全球 180 个国家和地区的开发人员反馈,涵盖流行的操作系统、编程语言、框架和库、云平台、数据库、机器学习技术等多个细分主题。
Stack Overflow 在报告中表示,收回的 5 万 6 千份有效回复体现出了一些对塑造当今软件开发和实践的工具和环境的深刻见解(great insights)。这些结果也有助于我们在技术选型和开发环境选型时进行参考,因此我们摘取了部分亮点进行解读。
Stack Overflow 年度报告的“云平台”调查问题希望了解开发者在过去一年中主要在哪些云平台中进行开发工作。在针对专业开发者群体中,亚马逊云科技以 51.01% 的比例位列第一,其次是 Azure、Google Cloud 以及 Firebase。
在调查结果中,有的平台在 IDE 和云端开发环境上特别有优势,有的平台是基于云原生的平台即服务(PaaS),使软件开发人员可以无需担心底层基础架构就能轻松部署代码,有的是用于创建移动和 Web 应用程序的统一后端即服务 (BaaS) 平台。
处于第一位的是亚马逊云科技。亚马逊多年持续投入建设云开发环境,也有对应的一些产品。亚马逊云科技于 2017 年发布了 Cloud9 IDE,前身是一个著名的 WebIDE 开发平台。2019 年,亚马逊云科技发布了 Cloud Development Kit(CDK)云开发工具包,它是一项基础设施即代码服务,封装了亚马逊云服务的配置细节和粘合逻辑。另外,亚马逊还提供了基于云开发平台的 Serverless 架构、DevOps 一体化等诸多功能,实现生态的闭环。
从 Stack Overflow 的报告可以看出,基于云的开发平台,已经成为了各厂商的必争之地。虽然本地化开发目前还很普遍,但是云开发也有一些显著的好处。比如说在传统的软件开发方法中,开发者一般是在自己的电脑上进行开发和测试,然后在物理机或云上运行,但一些 CPU 和内存密集型的任务,在某些情况下编译或测试可能非常耗时且占用大量资源。然而大多数工程师的电脑有 CPU 和内存的限制,编译会浪费大量时间。开发环境上云之后,云服务就足以解决存储、计算资源上的弹性需求,云上按需计费也能节省边际成本。
另外,云上协同开发还可以让团队之间共享统一的预定义环境,不需要一而再地处理不同的平台、工具、版本和依赖项,一致的编译、测试环境让团队成员无需配置复杂环境即可上手,甚至可以突破时间、地域限制,让处于全球范围内、不同工作时间的开发团队使用统一的、定制的环境。云开发也意味着应用程序从开发、集成到测试、部署和生产都在使用一致的环境,有助于减少可能在生产中暴露出来的错误和其他问题的数量。
自前几年起,Kubernetes 和 Docker 开始流行,容器化技术让应用程序更加具有可移植性,这意味着它可以在任何云环境上运行,并且只需少量集成工作。而随着云原生技术的发展,原始定义现在可以扩展到包括一系列技术,而不是与容器严格相关,例如 Serverless 和流式传输等,能够让开发者更充分利用云计算模型,在云中设计、开发和运行工作负载也更加容易。
Serverless 是云原生技术发展的高级阶段。Serverless 最早的框架产品源于 2014 年亚马逊推出的 Amazon Lambda。Lambda 的推出开启了云计算的新时代,之后所有的大厂都在跟进,比如微软、谷歌、IBM 都先后推出自己的 Serverless 产品。在这之后,Serverless 也从愿景层面逐步走向落地,在企业里应用开来。
从最初认为 Serverless 是 FaaS(函数即服务),到 FaaS(函数即服务)和 BaaS(后端即服务)的集合,人们对 Serverless 的认知不断的变得清晰。对亚马逊云科技这样的云厂商而言,Serverless 不仅局限于计算服务,而是指一种端到端的架构。除了我们比较常提起的 Lambda 外,还覆盖了计算、存储、网络、容器、数据库等,集成多个方面的服务,才能快速地构建现代化应用。
开发人员在使用 Serverless 服务和架构时,只需要关注业务逻辑,不再需要部署、管理或扩展服务器。云服务本身可以快速、无缝地自动扩展,以适应流量峰值。
事件驱动型架构(EDA)是一个典型的 Serverless 架构,常见于使用微服务的现代应用程序,或者有解耦组件的任何应用程序。它以事件为媒介,实现组件或服务之间最大松耦合的方式。现在的企业,普遍采用了微服务架构,而结合微服务和事件驱动架构,能更好地解决关键业务的实时、可扩展等问题。
事件驱动型架构有三个主要组成部分:事件发起者、事件路由器和事件使用者。事件源产生事件,并将事件发布至事件路由器。事件路由器进行事件筛选并推送给相应的事件使用者。事件使用者或者处理事件,或者受事件影响,并为之采取相应的操作。通过此架构,事件源和事件使用者解耦,从而使它们能够独立扩展、更新和部署。
使用事件驱动型架构的优势也是十分明显的,通过解耦,使服务之间相互独立,利于扩展和提高可用性。同时,使用事件路由器 Amazon EventBridge 或 Amazon Simple Notification Service(SNS)将帮助筛选并将事件推送给使用者,无需编写自定义代码,大幅提升开发的敏捷性。
这种架构对于成本的优化也是显著的,事件是按需发生的,这意味着我们无需为空闲资源付费。比如上图中的作为事件使用者的 Lambda 函数,只需要为 Lambda 处理事件时的函数请求数量和执行代码所花费的持续时间付费。
随着 Serverless 各方面的功能和性能的提升,其采用率也在持续增长。据 Datadog 2021 年发布的无服务器状态报告,开发人员正加速采用无服务器架构:2019 年之后 Amazon Lambda 的使用率显著增加,2021 年初,Amazon Lambda 函数的平均每天调用频率是两年前的 3.5 倍,且半数 Amazon Web Services 新用户已采用 Amazon Lambda。而据 Amazon Web Services 公布的数据显示,亚马逊已有数十万家客户在各种场景下用 Amazon Lambda 来构建他们的服务。
Serverless 是一种范式转变,可以减少服务器运维工作,如果再加上减少手动编码的方式,我们就能够更快地进行业务开发和交付。各云厂商近几年都在低代码开发平台上投入了不少力量,亚马逊也于 2017 年发布了 Amazon Amplify。
从云计算开始,技术发展在不断将底层平台进行抽象,低代码平台通过将底层平台云化,屏蔽复杂的使用规则,用 BaaS 层接口提供后端服务,让开发者将重心放到业务流程和界面定制上。也因此,低代码的核心部分之一是前端开发。Amazon Amplify 平台采用的是集成 UI 原型设计平台 Figma 的方式,允许设计师和前端开发人员在设计和开发活动上进行协作。例如,开发人员只需将新的组件设计从 Figma 拖放到 Amplify Studio 的应用程序中,设计好的 UI 会自动转换为 JavaScript 或 TypeScript,让开发人员可以完全控制应用程序的设计和功能。
低代码开发平台的另一优势是加速全栈开发的速度。我们可以看到 Stack Overflow 的报告涉及的技术越来越多,也说明了随着应用程序的复杂性增加,我们开发人员需要在开发过程中处理越来越多的事情,包括框架和平台的选择、安全配置、数据库、CI/CD 部署等等。对于开发人员来说,全栈开发变得非常复杂,需要具备非常全面的技能。但通过低代码提供的堆栈环境,以及全生命周期管理能力,让开发人员可以以简单的方式管理从 UI 设计、代码开发到部署的端到端应用程序开发,进一步降低全栈开发难度。在 Amazon Amplify 中,它是通过 CLI 命令等方法实现快速地创建后端和数据库(在内部使用 Lamda、S3 和 DynamoDB),从而在短时间内完成一套全栈 Web 和移动应用程序。
低代码还能减少对 AI 或机器学习专业人员的依赖,可以降低 AI 应用的失败率。在亚马逊的低代码平台中就提供了如 AI/ML、mapping 等服务。我们可以在构建的全栈应用程序时,轻松调用 Analytics 功能,收集事件数据分析用户操作,然后调用 AI/ML 服务“预测”用户的下一步操作。或者也可以根据自己的需求调用其它比如文字翻译、语音识别、图像处理等云服务。
在低代码平台中,对 AI/ML 服务的调用,也是在释放人工智能的力量。人工智能的应用现在越来越普遍,渗透到了企业的各种业务场景应用当中,发挥着重要且积极的影响。日常开发中,我们也会经常遇到需要应用 AI/ML 技术的地方,而云上的机器学习服务更加齐全,不仅提供了多样性的选择,而且还兼顾了易用性。
机器学习技术的普及也和云计算的发展密不可分。一方面,机器学习有着庞大的计算和数据存储需求,几乎机器学习的每一步训练与推断都需要庞大的云端集群来提供算力或存储资源支持。而云服务提供商凭借海量的集群资源,以及按需按消耗付费的计价模型,再加上这几年云服务持续的降低成本,让机器学习与人工智能已经变成了人人都用的服务。
另一方面,云服务厂商在机器学习的工具库上,提供了非常好的深度和广度,来满足用户的不同需求。机器学习本身是一个“Right tools for the right job”的事情,需要根据具体的业务和场景,选择最合适的工具。亚马逊云科技采取开放包容的工具选择策略,让云端可以和客户的整个环境做到良好的集成。
从机器学习技术栈的 3 个层面分别阐述:
在底层机器学习框架方面,云厂商需要支持各种主流的机器学习基础框架和标准接口,如 TensorFlow、PyTorch、Apache MXNet、Gluon、Keras 等。这些框架也都出现在了今年 Stack Overflow 年度报告“受开发者欢迎的库”调查结果中。
而亚马逊云科技不仅支持上述机器学习基础框架和接口,还针对 TensorFlow、PyTorch 和 MXNet 三个主流框架进行了专门的优化适配,并支持通过 Amazon Glue、Amazon Kinesis 等数据接口集成来最大限度方便框架的使用。这些设计使其可以方便地支持开发者以及数据科学家们运行流行机器学习框架以及运行使用多种框架。
在底层计算层也是如此,无论是 AI 芯片还是计算实例,云厂商也可以让用户根据不同的应用场景,根据自己的实际需求自由选择各种 GPU 实例、ARM 实例、机器学习专用推理芯片。
在上层 AI 服务层面,开发者可以根据自身需求,在云上有选择的使用各种 AI/ML 服务,比如文本分析、代码检查、聊天机器人、需求预测、文档分析、企业搜索、反欺诈、图像视频分析、个性化推荐、实时翻译、文本语言转换、转录,等等。为自己的系统应用补充所需要的智能化组件,通过简单的 API 调用即刻补足智能拼图缺失的一角。
在承上启下的中间层,像 Amazon SageMaker 这样的工具平台,提供了一项全托管端到端机器学习服务,这也是亚马逊云科技机器学习服务层面的核心产品,可帮助数据科学家、开发人员以及机器学习专家快速构建、训练并托管规模化机器学习模型。开发者只需要关心自己输入什么数据,自己想用什么框架和什么算法,其他的各种参数调优什么的脏活儿就让机器自己用机器学习来做,减轻了机器学习流行中数据清洗、建模等步骤的复杂性。
随着机器学习应用变得普遍,各种 MLOps 工具也变得越来越多,而且机器学习项目的开发工作流程仍然非常反复,所以对于开发人员来说,管理工作还具有挑战性。
例如,当尝试一种新算法或调整超参数时,开发人员和数据科学家通常在 Amazon SageMaker 上进行成千上万次实验,需要手动管理所有实验。随着时间的流逝,追踪性能最佳的模型和利用在实验过程得出的经验教训变得越来越困难。
2020 年, SageMaker Studio 正式发布,这是亚马逊云科技创建的一个全集成的 ML 开发环境——也是业界首创。它统一了 ML 开发所需的所有工具,将数百种机器学习功能,包含训练好的模型、设置好的容器镜像,都集成到基于 Web 的开发环境 Amazon SageMaker Studio 中。
开发人员可以通过单个窗格管理整个 ML 工作流,在可视化界面中编写代码、跟踪实验、可视化数据,以及针对 ML 工作流进行调试和监控,不需要切换来切换去,从而极大地提高了开发效率。
这种集成并简化后的开发环境对机器学习初学者也特别友好。以 Stack Overflow 报告最受开发者喜爱的 Hugging Face Transformers 为例,其官方网站默认使用 Amazon SageMaker 来训练和部署模型,提供了相应的入门指导。Hugging Face 提供的深度学习容器(DLC)与 SageMaker 结合,可以让开发者跳过从头开始构建和优化训练环境的复杂过程,立即开始训练模型。在亚马逊云服务上,免费注册账户,然后用 Huggingface Sagemaker,只需简单几行代码就可以开始训练并部署 Hugging Face Transformers 模型。
在 Stack Overflow 的报告中,还有一项特别有意思的调查项目,即“薪资待遇最好的技术”,其中在针对编程语言的统计中,使用 Clojure 语言的开发者收入最高;在针对框架和库的统计中,Apache Spark、Apache Kafka 和 Hadoop 排行最高,说明大数据类的工作收入较高;在针对数据库的统计中,DynamoDB 数据库开发者的薪水是最高的。
在这里就不得不介绍一下薪酬最高的开发数据库 DynamoDB 是何许人也,DynamoDB 是非关系型数据库的开山鼻祖,它起源于亚马逊于 2007 年发表的一篇划时代论文《Dynamo: Amazon’s Highly Available Key-value Store》。这篇论文影响了很多 NoSQL 数据库的设计,也最大程度地将 consistent hashing 这个概念从学术界引入了工业界。
Dynamo 论文推动了行业大规模变迁至非关系型数据库,并最终促成新一代的适用于互联网的云数据库 DynamoDB 的诞生。现在,DynamoDB 可处理每日超过 10 万亿请求和每秒超过 2000 万峰值请求,并且还具有详细的企业级特性,如支持 ACID 事务,使用户能够大规模构建业务关键型应用程序,从而被众多企业应用到核心业务中。今天有许多全球发展最快的企业,如 Lyft、Redfin、Disney、Zoom 等企业,都依靠 DynamoDB 的规模和性能来支持其关键任务负载。
在今年 7 月的 USENIX ATC'22 上,Amazon DynamoDB 团队再次发布了他们的新论文《 A Scalable, Predictably Performant, and Fully Managed NoSQL Database Service》,论文里包含了云数据库跨分区吞吐量的均匀分布是如何设计的,如何用多 Paxos 来保持副本同步的机制,MemDS 分布式缓存的设计方法等硬核内容。
DynamoDB 的架构
更难得的是,这篇论文还涵盖了 DynamoDB 的架构设计,以及它如何不断演进以满足客户的需求,这种涉及演进的论文相对也比较少见。
过去 10 多年,该数据库的研发人员加入了包括二级索引支持、可扩展流式数据捕获、自适应容量等等功能。不断增加的功能,不仅涉及底层可用性、持久性、安全性和规模等,还包括易用性等。这些功能让用户不再需要配置集群,只需创建一个表存储数据,即可轻松实现无缝缩放。
DynamoDB 的发展
从工程角度看,这应该是近年来大规模分布式系统最实用的论文之一,其中包含的那些云数据库设计方法,估计也会给业界带来一些启发。
我们从 Stack Overflow 调查报告出发,介绍了当前的开发工具、开发环境热点技术方向。
出色的开发工具也是软件开发者的生产力放大器。现在软件开发几乎渗透到了经济的各个领域,甚至可以说未来每个公司都会是软件公司。而开发软件必须要有好用的开发工具,如果说软件是技术进步的助推器,那么开发工具是技术进步的二阶助推器: 助推器的助推器。
随着云原生时代的来临,以及组织代码规模的扩张,开发模式不断变得复杂,也促进一些大型企业,特别是云厂商提供更好的开发环境。同时云服务提供商通过将自己的服务,集成到流行的开发工具中,使得开发者能够使用自己熟悉的工具来管理云服务。对于云厂商来说,开发工具对于开发成本的优化,以及软件交付效率的提升,可以通过用户得到千百倍的放大,为用户带来巨大的经济价值,从而也能进一步促进云厂商自身的发展。
“云平台”、云数据库这些排行榜是云计算行业的一个缩影,Stack Overflow 开发者调查报告反馈出亚马逊云科技为开发者提供了称心应手的软件开发“武器库“,而这些开发工具收到了来自不同开发者的多方面的积极评价,这离不开亚马逊云科技对开发者的重视和对开发工具不断打磨与创新。当我们评估用什么云服务时,也不妨同时看看企业是否重视工具的打造,所提供的开发工具是否趁手,毕竟这两个之间是互相促进的,“双驱动”带来的效率提升会更加可观。
作为云计算领域的行业风向标活动,2022 亚马逊云科技中国峰会将于 10 月 13 日 -10 月 14 日于线上举办,与会者有机会与国内外尖端技术讲师、构建者、业界领袖面对面深入交流,全面了解亚马逊云科技在云开发、人工智能、机器学习、数据库、大数据分析、物联网、安全等方面最新的云计算解决方案。点击阅读原文,了解更多详情。
参考链接:
https://aws.amazon.com/cn/solutions/case-studies/redfin/
https://aws.amazon.com/cn/solutions/case-studies/lyft/
https://aws.amazon.com/cn/dynamodb/
https://aws.amazon.com/cn/blogs/china/machine-learning-plugs-wings-for-digital-transformation/
https://aws.amazon.com/cn/amplify/studio/
https://www.youtube.com/watch?v=T4MQrRDo20w
https://www.cirrushq.com/wp-content/uploads/2022/03/AWS-UG-EDI-Amplify-Studio.pdf
https://xie.infoq.cn/article/a1b34421f3183d3bc1d8e59db
https://xie.infoq.cn/article/fb833598f8919e89fd1168264
https://www.infoq.cn/article/aws-dynamodb-dive-in