GOTC 2023 圆满落幕,字节跳动详解多款开源项目

5 月 27 至 28 日,字节开源携多个开源项目及相关技术实践方案亮相 2023 全球开源技术峰会(Global Open-source Technology Conference,GOTC)。为期两天的峰会上,来自字节跳动的多位开源布道师、工程师向大家讲述了字节跳动开源的故事,以及相关的开源项目和实践经验。

字节跳动的开源之路,经历了从使用到参与,再到主动开源这三个阶段。

Apache 软件基金会董事、字节跳动首席开源布道师姜宁讲述了字节跳动的开源之路。他提到,字节跳动在开源的不同阶段关注的重点不一样。比如在使用开源时,会面临开源软件供应链风险,包括安全风险、运维风险、合规风险,这就需要有对开源软件有清晰的认知。因此字节跳动做了开源合规治理相关的工作,包括基础建设、合规治理、培训宣贯等。整体来说,为了在全阶段都更好地拥抱开源,字节跳动相应地开启了开源合规治理、开源文化培养和教育、开源可持续战略等方面的建设。

之后,字节跳动多位工程师带来具体开源项目与实践的相关分享,覆盖 Rust、云原生、数据库技术、AI 技术、安全实践等多个热点话题。

云原生理念下的技术实践与分享

火山引擎资深云原生工程师、CloudWeGo Reviewer 胡文带来了“基于 Kitex Proxyless 和 Istio 的云原生微服务实践”主题分享。

CloudWeGo-Kitex 是一个支持多协议的 RPC 框架,字节内部主要是 Thrift 协议,所以在 Thrift 协议深耕已久,做了大量优化,Kitex 开源希望能帮助其他企业快速构建微服务,但使用 Kitex-gRPC 采用 Istio - Sidecar 解决方案存在上面说的问题,同时也希望使用 Thrift 协议的用户能基于 Istio 实现服务治理,所以针对多协议,Kitex 支持了基于 Istio 的 Proxyless 模式。

Kitex 直接基于 xDS 协议对接 Istiod 控制面,无需再借助 sidecar 来实现与控制面交互,可以实现 Proxyless 模式的方式纳入到网格中统一管理。

胡文还分享了基于 Kitex Proxyless 落地全链路泳道的实践设计。流量染色环节,在网关层进行流量染色,根据原始请求中的元数据,来进行一定规则(条件、比例)转换成对应的染色标识;基准泳道中,未被染色的流量会被路由到基准泳道中;分支泳道中,被染色的流量会被路由到 reviews-v2 ->ratings-v2 的分支泳道中。

火山引擎资深云原生工程师刘晟丽带来了“字节跳动基于 Kubernetes 的大规模集群联邦技术实践”主题分享。

随着字节跳动内部各业务系统云原生化的演进,k8s 集群数量和规模极速增长,集群维护成本不断提高,同时数量众多,形态各异的集群也为用户选择集群部署带来认知负担。

字节跳动自 2015 年起发展云原生第一代基础架构,自 2021 年起已进入第三代架构设计与搭建中。具体到集群联邦技术方面,字节跳动 2019 年以 KubeFed 为基础引入集群联邦,但随着生产环境的不断变化,KubeFed 无法满足新的要求。

因此在 2021 年,字节跳动为满足多样化负载接入、精细化调度需求、以及更高的业务稳定性保障,提出的第二代联邦系统 KubeAdmiral。 KubeAdmiral 为用户提供统一的服务部署入口,方便任务负载在多集群之间流转,为打造统一资源池,提高资源利用率奠定基础。

数据库技术、分布式训练框架、安全建设实践

火山引擎分析型数据库负责人陈星详细以 ByConity 为例,讲述了分析型数据库技术创新与开放之路。

ByConity 的背景可以追溯到 2018 年,当时字节跳动开始在内部使用 ClickHouse,因为业务的发展,要服务于大量的用户,数据规模变得越来越巨大,ClickHouse 已不能满足需求。所以字节在 ClickHouse 架构基础上进行了升级,于 2020 年在内部启动了 ByConity 项目,并于 2023 年 1 月发布 Beta 版本,5月底正式对外开源。

作为一个分布式的云原生 SQL 数仓引擎,ByConity 擅长交互式查询和即席查询,具有支持多表关联复杂查询、集群扩容无感、离线批数据和实时数据流统一汇总等特点。其核心优势包括:高性能低成本、多种场景统一支持、生态友好。

字节跳动基础架构计算框架研发工程师徐合邦介绍了一款通用的分布式训练调度框架 Primus。

近些年来,机器学习科技已经深植各应用领域,并且成功带来显著的提升。面对与日俱增的训练资料和模型规模,为了满足更高效率的模型训练,分布式训练的概念顺应而生。

作为一个通用的分布式训练调度框架,Primus 提供一个通用的介面桥接了分布式训练任务和物理计算资源,让资料科学家可以专注与学习算法的设计,并且让分散式训练任务可以运行在不同种类的计算集群,例如 Kubernetes 和 YARN。于此基础上,Primus 更提供了分布式训练任务所需的容错能力以及资料调度能力,进而更提升了分布式训练的易用性。

Elkeid 项目负责人、字节跳动主机安全负责人陈越分享了字节跳动技术团队在生产环境下多工作负载安全建设实践。

企业生产环境工作负载随着传统的物理、虚拟机到后来的容器、容器集群的演变,其安全风险也随之变化。伴随着复杂度提升,对安全能力的要求也越来越高,如:反入侵,威胁溯源与止损,风险发现等。理想情况并不独立的解决某一个 Workload 的风险,而是将多种混合的 Workload 其视作一个整体来看。

Elkeid 解决方案通过统一代理、统一平台的方式解决上述风险问题了。主机安全,容器安全,RASP,阻断于响应能力,追溯能力通过插件的形式集成在一个Agent上,既可以通过宿主机部署保护宿主机与之上的容器;也可以云原生方式部署。并不是不同产品的拼接,而是原生的一套架构,带来的优势便是各方信息都可以自然的关联与组合;运维运营压力也会由此降低。

用 Rust 构建新一代工具

Rust 语言在性能、安全性、跨平台和社区支持等方面具有很高的优势,被越来越多的开发者视为一种非常有潜力的编程语言。本次峰会,字节跳动分享了两款基于 Rust 语言构建的新一代工具。

Rspack 是一个基于 Rust 的高性能构建引擎, 具备与 Webpack 生态系统的互操作性,可以从 Webpack 低成本的迁移,并提供更好的构建性能。在处理具有复杂构建配置的巨石应用时,Rspack 可以提供 5~10 倍的编译性能提升。

字节跳动前端工程师何相君详细介绍了 Rspack 的技术选型目标与实现策略,其目标是尽可能保证与 Webpack API 以及插件的兼容,尽可能的提高构建速度。实现策略则是按照 Webpack 原架构进行移植,改进原本的算法以尽可能的并行化。

Rspack 用 Rust 实现核心部分,充分利用并发和 LTO 优化。而之所以选择 Rust 语言,是因为 Rust 性能优秀,和 C、C++ 在一个等级;且 napi 支持良好,可以基于此更好地兼容 Webpack API,得益于 Rust 的宏支持,也可以少写样板代码;Rust 作为 WebAssembly 的新特性,基本上都能很快得到支持,甚至可以看到 WASM proposal 落地后推着 Rust proposal 前进的 issue;Rust 生态中 swc 提供丰富的 AST 操作 API,同时支持转译 JavaScript 到 ES5。

实践证明,Rspack 可以解决许多问题,字节跳动前端工程师何庚坤介绍,Rspack 具备更快的速度,以及更灵活丰富的配置,不止覆盖 Web 开发场景,还能够应对各种场景;强大可自定义配置的拆包能力等决定了产物的性能……

何庚坤还分享了 Rspack 未来的计划,包括支持更多常用框架,如 Vue、Qwik 等;完善插件 API,兼容更多 Webpack 生态;支持 Module Federation 模块联邦;支持 Lazy Compilation 懒编译;支持 Persistent Cache 持久缓存;更多生产环境优化策略;持续优化构建性能。

此外,字节跳动还带来了 Rust RPC 框架背后相关技术的分享。

字节跳动服务框架研发工程师刘翼飞介绍了代码生成工具 Pilota 的设计背景、原理,以及面临的一些挑战。Pilota 通过 IDL 生成 Rust 代码,提供给 Volo 框架和用户使用。而 Volo 则是字节跳动服务框架团队研发的高性能、可扩展性强 的 Rust RPC 框架。

对于一个 Rust RPC 框架来说,根据 IDL 做代码生成是为了让用户更方便地使用框架。而生成代码的质量以及周边能力都会对用户的开发体验有着非常非常直接的影响。面对非常庞大的代码生成量,就需要有更好地处理方式。所以字节跳动开发了 Pilota 框架,来为用户生成良好的代码。Pilota 在面对庞大 IDL 做了体验优化,Thrift Parser 和 Protobuf Parser 只要转换成 Pilota 自有的 AST 格式,即可兼容任意形式的 IDL。

除了在 GOTC 2023 会议上与大家见面的开源项目,字节跳动还开源了多款产品。姜宁表示,字节跳动看重参与开源的长期价值,对开源一直是开放、鼓励的,希望与全球合作伙伴共同实现生态繁荣。

(免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。 )