改变开发的未来 | 探索无服务器与人工智能的协同效应

news2024/11/26 18:41:32

近年来,无服务器计算和人工智能深刻改变着应用程序的开发方式。

无服务器计算实现无需管理底层基础架构就能构建和运行应用程序,而人工智能则让应用程序依据数据和算例做出智能决策。借助云计算,开发者打开了一个应用程序开发、构建的全新世界的大门,开发人员可以比以往任何时候都更快、更高效地构建智能的和可扩展的应用程序。

应用开发要从计算机编程开始说起。计算机编程通常被视为一门需要逻辑和解决问题技能的技术领域,但同时编程的创作过程也是一门艺术,程序员可以如艺术家一般,用富有创造性的精神和产生美好事物的愿望来处理编码。

当艺术和计算机科学结合在一起时,就创造出了独特和美好的东西。

例如,数字艺术是一门利用计算机程序创建令人惊叹的视觉效果和动画的新兴领域。游戏开发也是一种艺术和编程融合的领域,程序员致力于为玩家创建引人入胜的世界和体验。艺术和计算机科学从来都不是毫不相干的两个领域,事实上,这两个领域以独特和令人兴奋的方式相互补充。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

抽象是计算机科学的基本概念,是通过主动隐藏不必要的细节而关注于基本特征来简化复杂的系统。使用抽象,让我们可以构建更高效、可扩展且更可靠的系统。计算机科学的核心是解决问题。抽象为我们提供了一种将问题分解为更小、更易于管理的方法,这使我们能够专注于解决问题的特定方面,而不会被不必要的细节绊住脚步。

在计算机编程中,接口就是一个抽象的例子。

接口定义了模型或模块的边界,定义了功能和责任,隐藏了模块的内部实现细节,程序员只需要关心接口不变,而无需理会模块内部如何变化,开发者通过接口将各种部署实施的细节抽离出来,而专注于它提供的行为。这个抽象帮助代码更加灵活和适应不断变化的需求。除了接口,如今云计算为开发者提供更高层次的抽象。

无服务器计算就是一种更高级别的计算抽象。

那为什么会出现这种计算抽象方式,它的出现为开发者解决了什么问题呢?

我们通过亚马逊云科技的计算抽象的演变过程尝试做个解释:

自 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:

    https://en.wikipedia.org/wiki/JSON?trk=cndc-detail

  • YAML:

    https://en.wikipedia.org/wiki/YAML?trk=cndc-detail

  • 基础架构即代码:

    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 微信公众号,了解更多面向开发者的技术分享和云开发动态!

往期推荐

#Generative AI 新世界

#架构模型最佳实践

#GitOps 最佳实践

作者郑予彬

亚马逊云科技资深开发者布道师,20 年 ICT 行业和数字化转型实践积累,专注于亚马逊云科技云原生、云安全技术领域。18 年架构师经验,致力于为金融、教育、制造以及世界 500 强企业用户提供数据中心建设以及软件定义数据中心等解决方案的咨询及技术落地。

文章来源:https://dev.amazoncloud.cn/column/article/646482761dcde2352204b1a6?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=CSDN 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/573613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux网络编程——有限状态机

在逻辑单元内部的一种高效的编程方法:有限状态机。 有的应用层协议头部包含数据包类型字段,每种类型可以映射为逻辑单元的一种执行状态,服务器可以根据它来编写相应的处理逻辑,下面代码展示的是状态独立的有限状态机 STATE_MACH…

Python中模块的使用3

在运行Python程序时,总会用到Python的标准库模块。一些标准库模块被内嵌到Python解释器中,通过调用这些模块提供的函数,可以实现特殊的功能。sys模块就是Python的一个标准库模块,该模块被被内嵌到Python解释器中。 1 sys模块的导…

阿里云备案服务码申请方法流程

阿里云备案服务码是什么?ICP备案服务码怎么获取?阿里云备案服务码分为免费和付费两种,申请备案服务码是有限制条件的,需要你的阿里云账号下有可用于申请备案服务码的云产品,如云服务器、建站产品、虚拟主机等&#xff…

计算机组成原理-指令系统-指令格式及寻址方式

目录 一、指令的定义 1.1 扩展操作码指令格式 二、指令寻址方式 2.1 顺序寻址 2.2 跳跃寻址 三、 数据寻址 3.1 直接寻址 3.2 间接寻址 3.3 寄存器寻址 ​ 3.4 寄存器间接寻址 3.5 隐含寻址 3.6 立即寻址 3.7 偏移地址 3.7.1 基址寻址 3.7.2 变址寻址 3.7.3 相对寻址…

ICLR2023 | Mole-BERT: 对分子GNN预训练的反思

原文标题:MOLE-BERT: RETHINKING PRE-TRAINING GRAPH NEURAL NETWORKS FOR MOLECULES 原文链接:Mole-BERT: Rethinking Pre-training Graph Neural Networks for Molecules | OpenReview https://github.com/junxia97/Mole-BERT 一、Introduction At…

TreeMap(1):TreeMap介绍

1 TreeMap的特点 概念: TreeMap是一个双列集合,是Map的子类。底层由红黑树结构构成。 特点: 元素中键不能重复元素会按照大小顺序排序 2 TreeMap的数据结构 2.1二叉查找树 2.1.1二叉查找树的定义 特点: 若左子树不空&#…

分享五个前端WebGis地图框架(优缺点以及该如何选择)附地址

如何选择一个合适的前端GIS框架时,需要考虑以下几点: 1,功能和特性 前端GIS框架的主要目的是在 Web 环境下使用,以可视化地理数据。需要考虑所需功能和特性,例如应用需不需要数据编辑、地图标注、3D 可视化、如何实现…

五、Spring从入门到改行

一、Spring概述 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器&#xff08;框架&#xff09;。 二、Spring基础程序 1、pom.xml中导入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifact…

【特征选择】基于二进制粒子群算法的特征选择方法(KNN分类器)【Matlab代码#28】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】1. 基于群智能算法的特征选择2. 二进制粒子群算法3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】 1. 基于群智能算法…

ollvm反混淆实战

[原创]记一次基于unidbg模拟执行的去除ollvm混淆-Android安全-看雪-安全社区|安全招聘|kanxue.com 参考上面的博客进行操作。这里记录操作细节 首先配置unidbg框架 git clone --recursive https://github.com/zhaoboy9692/unidbgweb.git 然后在unidbg-android中添加自定义类…

Vue3.x的设计理念-Vue3导读

目录 VUE-NEXT【vue3】 VUE-NEXT最核心的变更 Why not SFC&#xff1f;【单文件组件】 Composition API 生命周期钩子变化 什么是响应式&#xff08;Reactivity&#xff09; Reactive值 Proactive vs Reactive 声明式程序 声明式程序&#xff1a;创造语言 声明式程序…

MATLAB串口通信使STM32出现复位情况分析

前言 这几天&#xff0c;在使用matlab进行串口读取的操作&#xff0c;一次读几百个数据后&#xff0c;对数据进行操作分析&#xff0c;打印图片。但是遇到一个奇怪的问题&#xff0c;每次串口操作完毕后&#xff0c;STM32就会出现复位状况。 matlab串口操作 下面直接附上正常…

【特征选择】基于二进制蝗虫优化算法的特征选择方法(KNN分类器)【Matlab代码#29】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】1. 基于群智能算法的特征选择2. 二进制蝗虫优化算法3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】 1. 基于群智能算…

【社区图书馆】读《一本书读懂AIGC:ChatGPT、AI绘画、智能文明与生产力变革》所感

文章目录 《一本书读懂AIGC&#xff1a;ChatGPT、AI绘画、智能文明与生产力变革》目录作者简介我的体会&#xff1a; AI带来的挑战和机遇是不可避免的 《一本书读懂AIGC&#xff1a;ChatGPT、AI绘画、智能文明与生产力变革》 作者&#xff1a;a15a 著 贾雪丽 0xAres 张炯 主编 …

百度统计是什么?百度统计数据可以自动同步吗?

百度统计是什么&#xff1f; 百度统计是一款稳定、专业、安全的数据分析产品&#xff0c;提供数据看板、行为分析、用户管理、转化归因、营销管理、AB测试等多个板块的高阶分析能力&#xff0c;帮助提升客户各职能角色工作效能&#xff0c;以数据分析助力企业达成用户全生命周…

算法|5.快速排序相关

算法|5.快速排序相关 1.荷兰国旗问题 题意&#xff1a;给定一个数组arr&#xff0c;以arr[R]为划分值&#xff0c;请把arr[R]的数放在数组的左边&#xff0c;等于arr[R]的数放在数组的中间&#xff0c;大于arr[R]的数放在数组的右边&#xff0c;返回等于arr[R]的区间。要求额…

MSP432笔记8:定时器A_PWM驱动舵机

开发板型号&#xff1a;MSP432P401r 今日得以继续我的MSP432电赛速通之路&#xff0c;文首提供本次学习实践项目文件。 注&#xff1a;我笔记实践都是从原始空项目工程文件开始配置的。 有道是 —_—_—_—_— “山无重数周遭碧&#xff0c;花不知名分外娇” “曲…

Linux驱动入门(三)——源码下载阅读、分析和嵌入式文件系统介绍

文章目录 从内核出发获取内核源码使用Git安装内核源码使用补丁 阅读Linux内核源码Source Insight简介阅读源码 内核开发的特点无libc库抑或无标准头文件GNU C没有内存保护机制不要轻易在内核中使用浮点数容积小而固定的栈同步和并发可移植性的重要性 Linux源码分析Linux源码结构…

每日一题——用两个队列实现栈

每日一题 用两个队列实现栈 题目链接 思路 这里主要讲怎么实现出栈StackPop操作做完用两个栈实现队列&#xff0c;我们可能会想当然的认为&#xff0c;这一题也是一个主队列&#xff0c;一个辅助队列&#xff0c;当要出队时&#xff0c;首先判断辅助队列是否为空&#xff0c;…

代码线程安全

线程生命周期 synchronized synchronized会自动释放锁 synchronized同步代码块 synchronized后面括号里obj是锁对象(保证唯一)&#xff1b;static修饰的obj对象是自定义MyThread线程类的静态成员变量&#xff0c;该自定义线程类所有实例共享保证锁对象唯一性&#xff1b;另一…