Seastar

高性能服务器端应用程序框架。(High performance server-side application framework)

Github星跟踪图

Seastar(海星)

介绍

SeaStar 是一个事件驱动的框架,允许您以相对直接的方式(一旦理解)编写非阻塞的异步代码。它基于 futures

Seastar 构建

有关更多详细信息和可选工作流程,请阅读 HACKING.md

假设您想使用系统软件包(RPM 或 DEB)作为 Seastar 的依赖项,请首先安装它们:

$ sudo ./install-dependencies.sh

然后配置(在"release"模式下):

$ ./configure.py --mode=release

然后编译:

$ ninja -C build/release

如果您缺少 Seastar 的依赖项,则可以让配置过程在本地获取依赖项的版本以进行开发。

例如,要在本地获取 fmt,请按以下方式配置 Seastar:

$ ./configure.py --mode=dev --cook fmt

--cook 可以重复多次以选择多个依赖项。

构建模式

configure.p y脚本是 cmake 的包装。 --mode 参数映射到 CMAKE_BUILD_TYPE,并支持以下模式

      | CMake mode        | Debug info | Optimizations  | Sanitizers   | Allocator | Checks   | Use for                                |
---------+-------------------+------------+----------------+--------------+-----------+----------+----------------------------------------|
debug    | Debug             | Yes        | -O0            | ASAN, UBSAN  | System    | All      | gdb                                    |
release  | RelWithDebInfo    | Yes        | -O3            | None         | Seastar   | Asserts  | production                             |
dev      | Dev (Custom)      | No         | -O1            | None         | Seastar   | Asserts  | build and test cycle                   |
sanitize | Sanitize (Custom) | Yes        | -Os            | ASAN, UBSAN  | System    | All      | second level of tests, track down bugs |

注意,seastar 对分配器和优化比平常更加敏感。有关性能的一个简单经验法则是,release 比 dev 快 2 倍,比 sanitize 快 150 倍,比 debug 快 300 倍。

从其构建目录使用 Seastar(无需安装)

可以使用 CMake 或 pkg-config 从其构建目录直接使用 Seastar。

我们假设 Seastar 存储库位于 $seastar_dir 的目录中。

通过 pkg-config:

$ g++ my_app.cc $(pkg-config --libs --cflags --static $seastar_dir/build/release/seastar.pc) -o my_app

以及使用 Seastar 软件包的 CMake:

my_app 的 CMakeLists.txt:

find_package (Seastar REQUIRED)
add_executable (my_app
  my_app.cc)
target_link_libraries (my_app
  Seastar::seastar)
$ mkdir $my_app_dir/build
$ cd $my_app_dir/build
$ cmake -DCMAKE_PREFIX_PATH="$seastar_dir/build/release;$seastar_dir/build/release/_cooking/installed" -DCMAKE_MODULE_PATH=$seastar_dir/cmake $my_app_dir

CMAKE_PREFIX_PATH 值可确保 CMake 可以定位 Seastar 及其编译的子模块。 CMAKE_MODULE_PATH 值可确保 CMake 可以使用 Seastar 的 CMake 脚本来查找其依赖项。

使用已安装的 Seastar

您也可以在将 Seastar 安装到文件系统后使用它。

重要:

  • Seastar 使用自定义版本的DPDK,因此默认情况下会构建DPDK子模块并将其安装到 $build_dir/_cooking/installed

首先,配置安装路径:

$ ./configure.py --mode=release --prefix=/usr/local

然后运行安装目标:

$ ninja -C build/release install

然后从 pkg-config 中使用它:

$ g++ my_app.cc $(pkg-config --libs --cflags --static seastar) -o my_app

或者使用与之前相同的 CMakeLists.txt,但使用更简单的 CMake 调用来使用它 :

$ cmake ..

(如果尚未将 Seastar 安装到 /usr 或 /usr/local 这样的“标准”位置,则可以使用 -DCMAKE_PREFIX_PATH=$my_install_root 调用 CMake。)

还有在任何支持 Docker 的主机上进行构建的说明。

DPDK 的使用是 可选的

Seastar 的 C++ 方言:C++ 17 或 C++ 20

Seastar 支持 C++ 17 和 C++ 20。 可以使用 --c++-dialect=gnu++17 配置选项来选择它,或者,如果直接使用 CMake,则可以通过在 Seastar_CXX_DIALECT CMake 变量上进行设置来选择它。

有关更多信息,请参见兼容性声明

入门

有一个迷你教程,一个更全面的教程

该文档可从 web 上获得。

资源

在开发邮件列表中提出问题并发布补丁。订阅信息和档案可以在这里找到,或者发送电子邮件到seastar-dev@googlegroups.com。

信息可以在主项目网站上找到。

在项目问题跟踪器上记录错误报告。

本机 TCP/IP 堆栈

Seastar 带有自己的用户空间 TCP/IP 堆栈,以提高性能。

SeaStar的推荐硬件配置

  • CPU -- 随您所需。 SeaStar 对多核和 NUMA 非常友好。
  • 网卡 -- 尽可能快,我们建议使用 10G 或 40G 卡。也可以使用 1G,但可能会受到容量的限制。此外,每个 cpu 的硬件队列越多,对 SeaStar 越好。否则,我们必须在软件中进行仿真。
  • 磁盘 -- 具有高 IOPS 数量的快速 SSD。
  • 客户端计算机 -- 通常一台客户端计算机无法加载我们的服务器。 memaslap(memcached)和 WRK(httpd)都不能过载其匹配的服务器计数器部分。我们建议在不同的机器上运行客户机,而不是在服务器上运行,并使用多个服务器。

使用Seastar的项目

  • cpv-cql-driver:基于 seastar 框架的 Cassandra/Scylla C++ 驱动程序
  • cpv-framework:一个基于 c++ 的基于 seastar 框架的 Web 框架
  • redpanda:关键任务系统的 Kafka 替代品
  • Scylla:与 Cassandra 和 DynamoDB 兼容的快速可靠的 NoSQL 数据存储
  • smf:西方最快的RPC

(The first version translated by vz on 2020.07.04)


主要指标

概览
名称与所有者scylladb/seastar
主编程语言C++
编程语言C++ (语言数: 6)
平台Docker, Linux, OSv
许可证Apache License 2.0
所有者活动
创建于2014-08-18 07:01:07
推送于2025-06-11 09:57:10
最后一次提交2024-04-21 16:47:25
发布数6
最新版本名称seastar-25.05.0 (发布于 )
第一版名称seastar-17.05.0 (发布于 )
用户参与
星数8.7k
关注者数392
派生数1.6k
提交数9.1k
已启用问题?
问题数1310
打开的问题数441
拉请求数638
打开的拉请求数109
关闭的拉请求数739
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?

Seastar

CircleCI
Version
License: Apache2
n00b issues

Introduction

SeaStar is an event-driven framework allowing you to write non-blocking,
asynchronous code in a relatively straightforward manner (once understood).
It is based on futures.

Building Seastar

For more details and alternative work-flows, read HACKING.md.

Assuming that you would like to use system packages (RPMs or DEBs) for Seastar's dependencies, first install them:

$ sudo ./install-dependencies.sh

then configure (in "release" mode):

$ ./configure.py --mode=release

then compile:

$ ninja -C build/release

If you're missing a dependency of Seastar, then it is possible to have the configuration process fetch a version of the dependency locally for development.

For example, to fetch fmt locally, configure Seastar like this:

$ ./configure.py --mode=dev --cook fmt

--cook can be repeated many times for selecting multiple dependencies.

Build modes

The configure.py script is a wrapper around cmake. The --mode argument
maps to CMAKE_BUILD_TYPE, and supports the following modes