近年来,无服务器计算和人工智能深刻改变着应用程序的开发方式。
无服务器计算实现无需管理底层基础架构就能构建和运行应用程序,而人工智能则让应用程序依据数据和算例做出智能决策。借助云计算,开发者打开了一个应用程序开发、构建的全新世界的大门,开发人员可以比以往任何时候都更快、更高效地构建智能的和可扩展的应用程序。
应用开发要从计算机编程开始说起。计算机编程通常被视为一门需要逻辑和解决问题技能的技术领域,但同时编程的创作过程也是一门艺术,程序员可以如艺术家一般,用富有创造性的精神和产生美好事物的愿望来处理编码。
当艺术和计算机科学结合在一起时,就创造出了独特和美好的东西。
例如,数字艺术是一门利用计算机程序创建令人惊叹的视觉效果和动画的新兴领域。游戏开发也是一种艺术和编程融合的领域,程序员致力于为玩家创建引人入胜的世界和体验。艺术和计算机科学从来都不是毫不相干的两个领域,事实上,这两个领域以独特和令人兴奋的方式相互补充。
亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库! |
抽象是计算机科学的基本概念,是通过主动隐藏不必要的细节而关注于基本特征来简化复杂的系统。使用抽象,让我们可以构建更高效、可扩展且更可靠的系统。计算机科学的核心是解决问题。抽象为我们提供了一种将问题分解为更小、更易于管理的方法,这使我们能够专注于解决问题的特定方面,而不会被不必要的细节绊住脚步。
在计算机编程中,接口就是一个抽象的例子。
接口定义了模型或模块的边界,定义了功能和责任,隐藏了模块的内部实现细节,程序员只需要关心接口不变,而无需理会模块内部如何变化,开发者通过接口将各种部署实施的细节抽离出来,而专注于它提供的行为。这个抽象帮助代码更加灵活和适应不断变化的需求。除了接口,如今云计算为开发者提供更高层次的抽象。
无服务器计算就是一种更高级别的计算抽象。
那为什么会出现这种计算抽象方式,它的出现为开发者解决了什么问题呢?
我们通过亚马逊云科技的计算抽象的演变过程尝试做个解释:
自 2006 年发布 Amazon EC2(EC2 是基于虚拟机的计算实例)以来,亚马逊云科技一直在加速云计算抽象去适应不多拆分的应用和越来越复杂的微服务。
2011 年,亚马逊云科技发布了 Elastic Beanstalk,初步实现了应用部署的自动化,包括容量规划、负载均衡和应用程序健康监控。这种自动化方法减少了基础架构部署的复杂性。
2014 年亚马逊云科技发布了两个重要服务,它们是 Amazon ECS,一个容器服务,Amazon Web Services Lambda,无服务器计算服务。
自此,开发人员可以通过三个层次来调用云计算资源:虚拟机、容器和无服务器。我们认为,无服务器计算比虚拟机和容器提供了更高级别的计算抽象,因为它进一步简化了开发人员配置和管理基础架构资源,实现按需自动扩展和资源交付。
虽然无服务器计算的出现实现了云计算更高级别的抽象,进一步减少了基础架构部署的复杂性,帮助开发人员更专注于编写业务代码。但是,许多开发人员,特别是那些专注于运维的人员,他们仍然在数据库、大数据、机器学习和安全等服务类别的配置和管理上花费大量时间和精力。他们想要自动化基础架构供应的整个生命周期。因此,亚马逊云科技也持续投入资源于其他云资源的深化抽象。
2011 年,亚马逊云科技发布了 CloudFormation,它使开发人员能够以自动化和安全的方式建模和管理基础架构资源。
它支持开发人员使用 JSON 或 YAML 格式的基础架构即代码 (IaC) 模板定义和供应基础架构资源。然后,亚马逊云科技连续推出了 CLI、IDE 工具和 SDK。这些服务抽象了 API 的操作,它们支持开发人员使用熟悉的编程语言和开发工具管理基础架构资源。
2019 年亚马逊云科技又发布了 Amazon Web Service cloud deployment kit (cdk) 。至此,开发人员不仅可以使用熟悉的编程语言和开发工具定义基础架构资源,还可以使用命令和代码。
-
JSON:
-
YAML:
-
基础架构即代码:
https://en.wikipedia.org/wiki/Infrastructure_as_Code?trk=cndc-detail
我们认为 CDK 实现了云资源抽象的更高级别,它可以实现 3 个级别对资源抽象,分别是 cfn 资源、更高级别的抽象资源以及模式:
Cfn 资源指的是可亚马逊云科技提供的基础云资源,类似于 CloudFormation 提供基本的资源定义和配置。更高级别的抽象资源在 Cfn 资源之上,提供更简洁的定义。
例如,CDK 中的 ec2.Instance 比 Cfn 机器实例提供更简洁的定义。模式利用多个资源提供完整的解决方案。例如,CDK 中的 AutoScalingGroup 模式可定义具有弹性负载均衡器、自动扩展组、启动配置和相关警报的完整架构。CDK 通过提供这 3 个层次的资源抽象,简化了定义和管理基础架构资源的过程。相比于手动使用 CloudFormation YAML 模板或脚本,CDK 使基础架构即代码变得更简单,从而实现了云资源抽象的新高度。
用一个具体的例子详细说明 cdk 是如何抽象资源:
首先,开发人员可以使用 CDK 直接创建 S3 存储桶,这是 Cfn 资源的一种抽象。开发人员也可以使用 CDK 为此 S3 存储桶添加事件处理机制,这是操作抽象,就像高级编程语言中的对象和方法一样。开发人员还可以使用 CDK 定义一种典型的场景来执行特定功能和实现特定模式。
计算抽象的不断演进,以及更多资源的深入抽象,使得应用开发从复杂到简单,从繁重到轻巧,帮助开发者去构建一个现代化的应用。于此同时,现代化应用的构建也离不开流程优化和最佳实践。
基于亚马逊云科技开发团队的自身经验,在现代应用程序构建的三个阶段开发者可以借鉴的最佳实践:
1. 构建阶段
- 构建弹性应用程序体系结构。根据不同的业务场景,选择将应用容器化改造或构建新的无服务器应用程序;
- 通过基础架构即代码,将资源管理管理自动化,以实现更高效的操作和维护;
- 开发过程中设置自动化的发布管道,使用 App Mesh 控制网络流量进行自动应用交付,并确保新功能的安全可靠发布。
2. 程序治理阶段
- 提升服务可观察性用于实现微服务的治理。可以使用云托管的 Prometheus 服务,并添加 ADOT 来全面监控系统运营;
- 在应用程序被分解为多个微服务时选择云原生数据库,这有助于实现整体应用程序体系结构的弹性和敏捷性;
- DevSecOps 对应用程序治理很重要。安全团队应该集成到开发和运营团队中,以防止安全性成为管道中的瓶颈。
3. 构建平台
随着应用程序的持续迭代和优化,我们发现平台是云原生的基础。因为我们很少看到有开发团队能够将已经开始的应用开发进程从头开始。开发者可以使用更多的平台级服务,如数据库、消息、API 网关、安全性等来作为协调开发的共享服务。开发者也可以使用云上提供的易于使用、企业标准的平台级服务 Shared Services Platform (SSP), Amazon Web Service Application Composer和 Amazon Codecatelyst。
- Application Composer,是一个可视化构建器,开发人员能够从Amazon Web Service 服务组合和配置无服务器应用程序,并支持部署准备好的基础架构即代码。同时,它也是一个工具,允许用户通过组合预构建的组件或从头开始构建新组件来创建自定义应用程序。
- Amazon Codecatelyst,是一项集成服务,供采用持续集成和部署实践的软件开发团队采用到其软件开发流程中。CodeCatalyst 将开发人员需要的所有工具集中在一处。开发人员可以计划工作、协作编码并使用 CI/CD 管道和工具来构建、测试和部署应用程序,它可以帮助团队快速入门,并帮助开发人员专注于编写业务代码。
编程语言是计算机科学的基础,对于应用开发来说,编程语言的演变是一个引人入胜的旅程。
第一个编程语言 Fortran 于 1950 年由 IBM 开发,用于科学和工程应用程序。20 世纪 70 年代,Dennis Ritchie 在贝尔实验室开发了 C 语言。C 语言成为广泛使用的系统编程语言,至今仍用于操作系统、设备驱动程序和嵌入式系统。20 世纪 80 年代开发了面向对象编程语言,如 C++。20 世纪 90 年代设计了脚本语言,易于学习,可快速编写小程序。今天,Java、C# 和 Swift 等编程语言广泛用于开发桌面和移动应用程序。Python 在数据科学和机器学习领域很流行。
2020 年,人工智能 (AI) 已经改变了许多行业,现在它正在改变我们编写代码的方式。AI 可以帮助开发人员更快、更少错误地编写更好的代码。AI 帮助程序员的方式之一是通过代码补全。AI 还可以帮助检测 bug 和优化代码。AI 正在改变编码的另一种方式是通过代码生成。
对于亚马逊云科技来说,Amazon CodeWhisperer 是一款人工智能编码工具,它可以根据自然语言注释和周围的代码实时在 IDE 中生成整行代码和完整函数代码建议,帮助开发者快速编写安全的代码。
例如:CodeWhisperer 可以自动根据“解析 csv 文件以提取第二个字段并按降序排序”的提示,建议适当的代码和单元测试。CodeWhisperer 可以作为 VS Code 和 IntelliJ 的扩展,并原生在 Amazon Cloud9 和 Amazon Lambda 控制台中使用。
如今,CodeWhisperer 支持 Python、Java、JavaScript、Typescript、C# 和其他 10 种编程语言。CodeWhisperer 也是一个通用的编码工具,并对亚马逊云科技提供的云上服务进行了优化,可以提供高质量的建议。
人工智能编码工具属于生成式 AI,这是最近最流行的技术之一。生成式 AI 是一种可以创建新内容和新想法的 AI,包括对话、故事、图片、视频和音乐。和所有 AI 一样,生成式 AI 由机器学习模型驱动——非常大的模型,预先在大规模数据集上训练。机器学习的最新进展(特别是变压器基神经网络架构的发明)导致包含数十亿参数或变量的模型的出现。生成式 AI 之路漫长,过程中经历了许多突破和挑战。
2019 年,当尖端机器学习模型大约有 3 亿个参数时,目前最先进的模型有超过 500 亿个参数。换句话说,在短短三年内,机器学习的复杂性增加了 1600 倍。许多开发人员将从事基础模型工作。我们大多数人不会参与创建基础模型,但我们可能会参与调优那些基础模型和进行提示工程。
大型语言和基础模型的训练成本非常高,因为我们需要大规模、高速互连的专用硬件群集来训练模型。训练成本在非常集中的位置发生,但在推理方面离我们很近,所以我们必须研究如何优化这些模型,并使用专用硬件进行推理以再次降低成本。
基础模型的规模和通用性使其与传统机器学习模型不同。
传统机器学习模型通常执行特定任务,如分析文本情感、图像分类和趋势预测。对于传统机器学习模型,要实现每个特定任务,使用者需要收集标注的数据,训练模型并部署该模型。对于基础模型,使用者无需为每个模型收集标注的数据和训练多个模型,可以使用同一预训练的基础模型调整各种任务。基础模型也可以使用从头开始训练模型所需的数据和计算量的一小部分,定制执行与其业务不同的特定领域功能。基础模型的潜力令人非常兴奋。但我们仍处于非常早期阶段。虽然 ChatGPT 一直是第一个引起客户注意的广泛生成式 AI 体验,但大多数研究生成式 AI 的人很快意识到,几家公司已经研究基础模型多年。
提示工程是为生成式 AI 模型设计和优化提示或输入查询的过程。这是生成式 AI 模型开发的重要步骤,因为它决定了模型将生成的内容类型。近年来,提示工程领域的研究和开发有很大进展,现在我们看到更高级的技术被用来生成高质量内容。一种方法是使用人工反馈来提高生成内容的质量,允许模型从错误中学习,并随着时间的推移产生更准确、更相关的内容。提示工程对用于特定领域的生成式 AI 模型尤其重要,如医疗保健或金融。通过设计针对这些领域定制的提示,开发人员可以确保模型产生准确、与领域相关的内容。
亚马逊云科技拥有全套的生成式 AI 产品,包括:
-
Amazon Bedrock——这是构建和扩展带有 AI21 实验室、Anthropic、Stability AI 和亚马逊 FMs 的生成式 AI 应用程序的最简单方法。Bedrock 为开发人员提供无服务器的生成式 AI 体验。开发者可以轻松找到合适的模型,快速入门,使用自己的数据私下定制 FMs,并使用熟悉的亚马逊云科技提供的云上工具和功能轻松集成和部署到您的应用程序中,无需管理任何基础设施。Bedrock 使用者可以选择目前可用的一些最尖端的 FMs。这包括 AI21 Labs 的 Jurassic 2、Anthropic 的 Claude、Stability AI 的 Stable Diffusion 和亚马逊的 Titan。
-
Amazon EC2 Trn1n 和 Amazon EC2 Inf2——在云中具有训练和推理的最佳性价比基础设施。当然,亚马逊云科技与 Nvidia 密切合作,为开发人员提供 H100 和 V100 GPU 产品。Titan 是亚马逊的基础模型。这些模型在包含来自不同来源的大量信息的数据集上进行预训练,使客户能够融入更广泛的上下文,并在多个领域和任务上广泛推广。我们最初会有两个模型:第一个是用于摘要、文本生成(例如创建博客文章)、分类、开放式问答和信息提取等任务的生成式 LLM。第二个是将文本输入(单词、短语甚至可能是大段文本)转换为包含文本语义含义的数字表示(称为嵌入)的嵌入式 LLM。虽然此 LLM 不会生成文本,但对于个性化和搜索等应用程序很有用,因为通过比较嵌入,该模型会产生比词匹配更相关、更具上下文的响应。
-
内置生成式 AI 的服务,如 Amazon CodeWhisperer。
我们一起探索了应用开发的演进, 以及无服务器与人工智能的技术创新。无论您是软件开发人员、解决方案架构师、数据科学家还是 DevOps 工程师,让我们一起利用新技术去创造开发的未来。
请持续关注 Build On Cloud 微信公众号,了解更多面向开发者的技术分享和云开发动态!