可靠、安全、稳定,开源高质量项目 | 亚马逊的开源文化

news2024/9/21 19:37:40

亚马逊的领导力准则是亚马逊文化的核心,它如同亚马逊的 DNA 融入贯穿每一个重要决策,深深影响着每一位亚麻人、影响着每一位亚马逊的客户、合作伙伴以及每一位亚马逊云科技的构建者。同时,亚马逊的领导力准则对亚马逊与开源的互动方式也产生着深远的影响。

上篇文章,我们为大家讲述了亚马逊是如何在开源社区中践行最重要的一条领导力准则——客户至尚:通过始终以客户为中心,聆听开发者的反馈,通过合作和参与开源社区,让开源更易用。

本篇我们想与大家分享我们另一条领导力准则在开源文化中的实践——最高标准。

最高标准


不论是为开发者提供全托管开源软件服务,还是为自管理方式的客户提供各类复杂的基础云服务,我们都需要确保这些产品及服务能够在满足开发者需求的基础上具备足够的可靠性、安全性、稳定性。这就是亚马逊的另一领导力准则——最高标准。

亚马逊内部使用 Apache Lucene 多年,在 2019 年 Amazon.com 决定将搜索服务 100% 转为由 Lucene 驱动。作为一项开源技术,Lucene 能否支持亚马逊运行的规模下的搜索性能,迁移是否会有业务风险?事实证明,亚马逊的加入,将 Lucene 搜索性能的极限推向又一个新高峰。

Apache Lucene


  • 项目主页

https://lucene.apache.org/

  • 项目地址

https://github.com/apache/lucene

Apache Lucene 是一个使用 Java 构建的开源全文搜索库,亚马逊的高级首席搜索工程师 Mike McCandless(Lucene 和相关项目的长期贡献者)表示,在将 Lucene 的使用“推向极限”的过程中,亚马逊的工程师们发现了一些边缘粗糙 (rough edges)、漏洞和其他问题,并有效解决了这些问题。

出于行业竞争或者产品战略的考虑,Apache 2.0 许可证允许开发者们在使用开源产品时,可以自行修改代码且无需把更改回馈给上游。但亚马逊选择了将代码修改和最佳实践积极回馈给 Lucene 社区以帮助与之相关的其他项目。并且亚马逊的工程师们一直在加大参与开源项目的力度以更好地服务客户,即使在搜索等可能创造竞争优势的战略性领域也是如此。

亚马逊已经向 Lucene 提出了多项重要的改进,包括:

  • 对 Lucene 索引代码进行的重大低级别更改, 实现并发 “更新” 和 “删除” ,使得在支持并发执行的硬件上的执行效率极大提升;

  • 建立自定义词频索引,将行为信号引入排名依据中(例如顾客在搜索某个商品后可能的行为);

  • 众多错误修复,并向上游分支推送更改。

Open 3D Engine

  • 项目主页

https://www.o3de.org/

  • 项目地址

https://github.com/o3de/o3de

游戏、模拟开发人员对我们说,从头开始构建 3D 工具成本高昂,需要数年的开发时间,并需要大量的资源来维护。要么将大部分资金花费在重复做别人或者自己已经做过的事情上,要么只好使用那些难以定制的专用解决方案。他们想要更多的选择,帮助他们在生产过程中实现协作、自定义和创造性控制。

2021 年 7 月 7 日亚马逊官方发布一款模块化的、开源的、跨平台的 3D 引擎 Open 3D Engine (O3DE),为从 3A 级游戏到电影质量的 3D 世界再到高保真模拟提供动力。这是一个开源项目,没有费用或者商业义务。O3DE 使用了 Apache 2.0 许可,并由 Linux 基金会管理。

O3DE 的开发初衷

故事需要从 2016 年亚马逊推出 Lumberyard 游戏引擎开始。Lumberyard 提供了完全免费、源代码可用的实时 3D 开发引擎,以便通过云集成进行快速构建、部署和扩展。过去几年中,通过不断地根据使用者新的需求进行改进,终于构建了功能强大的组件实体系统和备受欢迎的 Script Canvas 可视化脚本引擎。亚马逊为此收购了 Emotion FX 动画编辑器,创建了模块化 Gem 系统,并实施了许多 Twitch 和亚马逊云科技集成。

要想提供世界一流免费 3D 渲染工具,Lumberyard 还不够,于是亚马逊借助 Lumberyard 的构建经验,在此基础上进一步的迭代改进,实现了更好的协作和创新性控制,在 2021 年发布了 O3DE。区别于传统游戏引擎整体式的构建设计,O3DE 被设计为具有可扩展性的模块化引擎,并采用开放的、标准化工具。在此基础上,我们添加了预置系统、新构建系统、可扩展 UI、新的云属性的功能、大量数据库优化、新网络功能等等。另外我们还添加了全新的基于物理渲染 (Physically Based Rendering - PBR) 的渲染器,它能够通过光线追踪和 Gi 支持实现前向渲染和延迟渲染。

O3DE 的设计

模块化

借助 O3DE 的模块化架构添加新功能非常简单,这样开发人员就可以持续创新。

O3DE 引擎被设计为模块化引擎,几乎所有引擎部件都是一个库。因此开发人员可以独立替换图形渲染器、音频子系统、编辑器、语言支持、网络堆栈、物理系统和其他库,而不影响其他库。核心引擎模块和任何附加组件或插件统称为“Gem”。开发人员可以通过引入 30 多种功能和工具中的任何一种来精简项目,也可以将这些功能和工具作为独立库来实施。如果开发人员已经拥有引擎并希望减少技术债务或更新代码,可以从开源项目中轻松选择所需的功能,然后将其实施到自己的技术堆栈中。他们可以创建并合并自己的堆栈。

引擎即 SDK

便于自定义引擎组件,并根据需要用特定自定义模块替换预构建组件。

Lumberyard 开发人员会发现引擎已经发生了很大的变化。它的构建类似于 SDK,因为对于引擎模块和 Gem,它可以以预编译的形式提供,这可被视为是一种“引擎即 SDK”方法。同样,在项目发生变化时,不需要重新编译预编译的库或 Gem。而且,当新引擎版本发布时,开发人员可以更新核心 Gem,只需解决项目代码本身的编译问题即可。

Atom 渲染器

另一个重大变化是 Atom 渲染器,正如预期的那样,它作为 Gem 交付。该渲染器通过提供基于物理的现代渲染器 (PBR) 来支持多个平台,该渲染器符合 ACES 色彩空间标准并完全支持 Vulkan、Metal(开发中)和 DirectX 12 的光线追踪。Atom 随附全局光照 (GI) 和前向+ 渲染,开箱即用,并支持延迟渲染管道。与 O3DE 本身一样,Atom 具有模块化、可编写脚本和数据驱动等特点。亚马逊云科技甚至为它编写了一种全新的着色语言,称为 AZSL。这种语言利用 Atom 的数据驱动功能,方便开发人员随着新硬件接口的出现不断创新。同时,Atom 是开源且免费的,就像 O3DE 中的其他所有功能一样。请参阅这篇博客,详细了解 Atom 渲染器:

网络

O3DE 中包含了全新的网络堆栈,它具有高度灵活的数据驱动模型,支持 TCP/UDP,并在简单的 API 背后抽象了低延迟传输层。该堆栈支持加密和压缩,并具有内置模拟器,用于延迟、抖动、重新排序和丢失。为了确保最低延迟和最高保真度,它支持通过无序不可靠的数据复制进行实体复制、本地预测延迟补偿、针对服务器权限的向后协调,及支持自动去同步检测和修正的可拆分玩家行为。为了确保开发人员可以使用不同的服务器型号,该堆栈支持开箱即用的玩家托管服务器和专用服务器型号。请参阅这篇博客,获取更多开发详情:

O3DE 的发展和未来

开源友好型构建系统

对于开发人员来说,模块化还必须易于理解并允许快速开发,因此,我们决定将整个构建系统移到开源 CMake 系统中。这一选择为各种 IDE(例如 Visual Studio、XCode 等)提供了更好的 CTest、插件库、分析、编辑并继续、快速代码生成及本机项目生成的支持。这种新方法通过适当的依赖关系树来构建所选的目标,并确保只重新构建实际的依赖关系,以便提高迭代开发的速度,进而节省时间。这种模块化特性还允许我们简化项目和 Gem 管理,方法是:删除所有二进制格式,然后将其移到可使用 CMake 编写脚本的人类可读的 JSON 文件。因此,只需简单地更改 JSON 文件中的某一行,即可在项目中添加或删除Gem。通过博客详细了解 Lumberyard 构建系统的未来:

更快、更轻、性能更高

相较于前一代的 Lumberyard,O3DE 更轻便、速度更快、性能更高。现在的版本已经删除了超过 200 万行旧代码冗余,为开源做好来准备。

创建了新的高性能数学库,这些库利用现代 CPU 和当前 SIMD 指令集。数学是精彩游戏和模拟的核心,它提供了使用者、贡献者和社群拥有非常坚实的工作基础。最终结果将是,帧率提高,平台支持得到改进(尤其是在 ARM 设备上),准确性提高,及可用于动画、特效和游戏运行的计算资源增加。毕竟,3D 引擎中的几乎所有内容都与数学有关!请参阅这篇博客,详细了解我们的高性能数学工作:

生产力和可扩展性

工具和管道实施对于简化生产所需的时间同样至关重要。为了帮助加速自定义,它被扩展了 UI 工具,它使用可访问代码接口的 Python 扩展和 Qt 来创建自定义编辑器组件。通过新的步骤前和步骤后 Python 绑定极大地更新了资产创建,以允许 FBX 和材料处理的动态处理和自定义行为。这些绑定使技术类游戏艺术家能够编写可拆分、分配或重新定位资产的 Python 脚本,以及从任何输入源创建自定义材料。

许多其他功能也发生了变化,以便社群以新方式对其扩展。Script Canvas 现在支持通过未来本机代码支持编译为 Lua,并通过可扩展行为上下文管理器进行脚本绑定。O3DE 终于已经从 Lumberyard 管理游戏内部资产的“切片”模型转向了大家都很熟悉的预制模型。O3DE 模块化标准接口使开发人员能够针对其他 Gem 接口执行直接函数调用,并提供 IDE 自动完成支持,这样使得开发人员能够在自己的项目中发现和实施功能(无论是整个还是部分功能)。

小结


对于亚马逊云科技来说,我们将继续与 Linux Foundation、合作伙伴和大学合作,以帮助实现更多创新,开展令人兴奋的即将宣布的年度 O3DE 新活动,以及举办全球行业展览和骇客马拉松。我们希望任何人都可以利用这项开源技术提供的游戏模拟开发平台,快速构建更加精彩的游戏和实时模拟。我们相信现在正是发展 3D 可视化和工具业务的理想时机,我们期待更多的开发者加入到这个项目中来。

我们会在下一篇分享中,解读指引亚马逊开源文化的另一领导力准则——创新简化。你将会了解到我们在这一准则指导下倾力打造的两款开源产品 Bottlerocket 和 Firecracker。

欢迎持续关注 Build On Cloud 微信公众号,了解更多面向开发者的技术分享和云开发动态!

推荐阅读


  • 合作、参与、让开源更易用 | 亚马逊的开源文化

  • 机器学习洞察 | JAX,机器学习领域的“新面孔”

  • 机器学习洞察 | 一文带你“讲透” JAX

作者郑予彬

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

亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案 联系亚马逊云科技专家

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

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

相关文章

(原创)不小心禁用或者卸载Kotlin插件的解决方法

问题 之前因为kotlin版本的一些问题,不小心禁用了kotlin插件 等到再重启Android Studio,就发现进不去了 后来在网上找到方法解决了,但是某一天 又脑子一热,直接把Kotlin插件给卸载了,这下直接玩大发了 花了一点时间才…

Springboot 使用quartz 定时任务 增删改查

前段时间公司项目用到了 定时任务 所以写了一篇定时任务的文章 ,浏览量还不错 , Springboot 整合定时任务 ) 所以就准备写第二篇, 如果你是一名Java工程师,你也可以会看到如下的页面 ,去添加定时任务 定时任务展示 :…

linux学习笔记 超详细 0基础(下)shell

shell是一个命令解释器,为我们提供了交互式的文本控制台界面,我们可以通过终端控制台来输入命令,由shell解释并交给linux内核执行。Shell是一个解释器,Unix下的Bourne Shell命令解释器的加强版Bourne Again Shell ,bas…

甘特图:项目管理工具,轻松简化工作流程

项目规模越大,管理就越复杂,有时候甚至一个项目经理需要管理多个项目,当多个项目、多条任务同时进行,项目所涉及的范围广,内容越来越复杂,使得项目越难以把控,好的管理工具,可以提升…

2023美赛C题:Wordle筛选算法

Wordle 规则介绍 Wordle 每天会更新一个5个字母的单词,在6次尝试中猜出单词就算成功。每个猜测必须是一个有效的单词(不能是不能组成单词的字母排列)。 每次猜测后,字母块的颜色会改变,颜色含义如下: 程…

Unity导出WebGL工程,并部署本地web服务器

WebGL打包 设置修改 在Build Settings->PlayerSettings->Other Settings->Rendering 将Color Space 设置为Gamma 将Lightmap Encoding 设置为NormalQuality 在Build Settings->PlayerSettings->Publishing Settings 勾选Decompression Fallback 打包 完成配…

有这几个表现可能是认知障碍前兆

我国目前对于认知障碍的认知率、就诊率、诊断率很低,然而认知障碍如果能在早期发现,并及时治疗,生活质量会有效提高,缓解家属的精神和经济负担。所以,认知障碍的前兆一定要了解。1.记忆力减退,一周内的重要…

【Spring】@Value注入配置文件 application.yml 中的值失败怎么办

本期目录一、 问题背景二、 问题原因三、 解决方法一、 问题背景 今天碰到的问题是用 Value 注解无法注入配置文件 application.yml 中的配置值。 检查过该类已经交给 Spring 容器管理了,即已经在类上加了 Configuration 和 ConfigurationProperties(prefix &quo…

UnityEditor编辑器扩展自己实现了一遍SceneView的镜头移动

基本实现由于最近一个星期都比较魔怔《天际线》,突然开始要工作了,用Editor好像突然没了按键反而不习惯就是要实现一个点击AWSD,能方便编辑地图的功能其实大可不必自己写代码本身Unity自带的,飞跃模式已经包含(按鼠标右…

抽象工厂模式(Abstract Factory Pattern)

1.抽象工厂模式定义: 抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类 2.抽象工厂模式适用场景: 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量…

ONLYOFFICE中的chatGPT是怎样提升工作效率的

几乎一夜之间chatGPT火遍国内外网络,作为一个总是努力提高工作效率并在一天内完成更多工作的人,我很高兴发现 ONLYOFFICE添加了ChatGPT — 一个人工智能驱动的聊天机器人,可以帮助您管理时间、设定目标并改善您的个人和职业生活。 ONLOYOFFIC…

Allegro172版本无法低亮颜色的原因和解决办法

Allegro172版本无法低亮颜色的原因和解决办法 用Allegro版本做PCB设计的时候,高亮是使用非常频繁的功能,低亮已经高亮的对象也是使用较为频繁的。 在用172版本时会出现无法低亮的情况,如下图 使用Dehilight命令无法低亮器件,如何解决,具体操作步骤如下 点击Display选择De…

Python:每日一题之剪邮票(BFS全排列)

如【图1.jpg】, 有12张连在一起的12生肖的邮票。 现在你要从中剪下 5 张来,要求必须是连着的。 (仅仅连接一个角不算相连) 比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。 请你计算&…

redis的安装步骤及前台,后台redis服务启动

redis的安装步骤1. 官网下载安装包2. 使用Xftp将安装包传输到Linux的opt目录下3. 使用Xshell连接Linux主机进行redis的安装安装目录说明4. redis 服务启动的两种方式4.1 前台启动4.2 后台启动1. 官网下载安装包 首先,我们进入到redis的官网: https://redis.io/down…

代码随想录算法训练营第三十一天 | 贪心专题-理论基础,455.分发饼干,376. 摆动序列,53. 最大子序和

一、参考资料理论基础https://programmercarl.com/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 分发饼干https://programmercarl.com/0455.%E5%88%86%E5%8F%91%E9%A5%BC%E5%B9%B2.html 摆动序列https://programmercarl.com/0376.%E6%91%86…

数据库存储

RAID DSL : Domain Spesic Language 专用领域语言 单机存储 一切皆Key-Value 本地文件系统 一切皆文件 Ceph - 分布式存储 关系型数据库通用组件 Query Engine :解析query,生成查询计划Txn Manager :事务并发管理Lock Man…

知识汇总:Python办公自动化应该学习哪些内容

当前python自动化越来越受到欢迎,python一度成为了加班族的福音。还有大部分人想利用python自动化来简化工作,不知道从何处下手,所以,这里整理了一下python自动化过程中的各种办公场景以及需要用到的python知识点。 Excel办公自动…

【C++】类和对象(第二篇)

文章目录1. 类的6个默认成员函数2. 构造函数2.1 构造函数的引出2.2 构造函数的特性3. 析构函数3.1 析构函数的引出3.2 析构函数的特性4. 拷贝构造函数4.1 概念4.2 特性5.赋值运算符重载5.1 运算符重载概念注意练习5.2 赋值重载实现赋值重载的特性6. const成员函数7. 取地址及co…

传统图机器学习的特征工程

视频资料同济子豪兄中文精讲视频:节点特征工程:https://www.bilibili.com/video/BV1HK411175s连接特征工程:https://www.bilibili.com/video/BV1r3411m7sD全图特征工程:https://www.bilibili.com/video/BV14W4y1V7gg斯坦福原版视频…

spring的事物控制

1.调用这个方法的对象是否是spring的代理对象($CGLIB结尾的) 2.这个方法是否是加了Transactional注释 都符合才可以被事物控制 如果调用方法的对象没有被事物控制,那么被调用的方法即便是加了Transactional也是没用的 一个非事务方法调同类…