Yandex 开源 userver 框架,用于构建高负载应用程序

Yandex 近日公开了 userver 框架的源代码,它允许开发者创建在异步模式下运行的高负载 C++ 应用程序。该框架已经在 Yandex 内部进行了测试,并被用于 Yandex Go、Lavka、Delivery、Market 等服务。userver 是用 C++ 编写的,并在 GitHub 上以 Apache 2.0 许可发布。

根据官方介绍,userver 适合于开发具有微服务架构的应用程序。一开始它仅仅是为 Yandex Taxi 而开发的,在 userver 的帮助下,团队将 Yandex Taxi 从单体应用转为允许开发各个独立组件(微服务)并在不同应用中使用它们的架构。微服务各自独立,所以这样架构上的应用更容易更新,而且可以添加新的功能。

今天,我们发布了用于构建高负载应用程序的开源用户框架。对我们来说,这是分享我们所积累的开发微服务经验的一个重要途径。GitHub 仓库包含有源代码、文档、示例、创建自己服务的模板(配置了 CI、构建和测试环境),以及动态配置服务。所有这些都是在 Apache 2.0 许可下发布的。

Yandex 表示,单体应用程序有以下的这些缺点:

  • 将所有的代码整合在一个应用程序内,在这样庞大的代码库中,构建和测试可能需要几个小时,而部署可能需要一整天的时间。
  • 不同部分代码的密切关联,你必须在代码审查中投入大量的精力,以使不同部分不会变得混乱。
  • 脆弱性:一个模块的改变会影响另一个模块
  • 模糊的责任区:在开发过程中,谁对产生的模块负责并不清晰

该框架具有可靠和便利这样的特点,里面提供了开发、诊断、监控、调试和实验所需的一切。userver 目前支持 Ubuntu、Debian、Fedora、Arch、Gentoo、macOS 系统;x86、x86_64、AArch64、Arm 架构;GCC 8+ 和 Clang 9+ 编译器;以及 C++ 17、C++ 20、C++ 23。

关于组成,提到了包括与 DBMS 异步工作的驱动(MongoDB、PostgreSQL、Redis、ClickHouse、MySQL),为各种协议异步工作的客户端和服务器(HTTP、HTTPS、GRPC、TCP、UDP、TLS)。管理同步和访问系统能力的低级基元,以及处理缓存、任务、分布式锁、跟踪、指标、统计和JSON/YAML/BSON格式数据的高级组件,此外,它还支持在不停止服务的情况下,即时改变服务配置。

除了 userver,Yandex 在今年还开源了多个项目,以这样的形式公开了多项其开发的关键技术,例如,能够每秒处理数百万个请求的 YDB 分布式数据库管理系统,以及具有千亿参数的语言模型 YaLM 100B。在更早之前,Yandex 还开源了在搜索和其他服务中使用的 CatBoost 机器学习库。

猜你喜欢

转载自www.oschina.net/news/205008/yandex-open-source-userver