后端异步编程网络【免费下载链接】seastarHigh performance server-side application framework项目地址https://gitcode.com/gh_mirrors/se/seastar点击查看免费下载Seastar 是一个基于事件驱动与 future 编程模型的高性能服务器端 C 框架支持 C23/C26采用共享无内存share-nothing的多核架构为网络与存储 I/O 提供零拷贝能力。本文以仓库根目录 README.md 为主线系统讲解 Seastar 的编译构建流程、四种构建模式、pkg-config/CMake 两种消费方式、C 标准选择以及第一个 Hello World 应用的编写与运行并结合 HACKING.md、configure.py、demos/hello-world.cc 等仓库源码给出可复现的实战方案。Seastar 是什么Seastar 是一个事件驱动框架event-driven framework它允许开发者以相对直接的方式一旦理解之后编写非阻塞、异步的 C 代码。其 API 全部基于future未来值与continuation延续回调模型这一点在 README.md 与 doc/mini-tutorial.md 中都有明确说明。Seastar 的设计初衷是同时解决传统服务器编程中的两大矛盾既要效率如 DPDK 只能处理简单的逐包应用又要复杂度如允许构建庞大复杂的应用。它的第一个实践用例是 Scylla——一个用 Seastar 重写的 Apache Cassandra在吞吐量上获得了数量级的提升同时显著降低了延迟抖动。四大核心设计支柱Seastar 依赖以下四个概念来达到极致性能协作式微任务调度器Cooperative micro-task scheduler每个 CPU 核运行一个协作式任务调度器而不是传统线程。每个任务非常轻量只执行处理上一次 I/O 结果并提交下一次 I/O 所需的时间杜绝了上下文切换开销。共享无多核架构Share-nothing SMP architecture每个核独立运行内存、数据结构和 CPU 时间均不共享核间通信通过显式消息传递完成。一个 Seastar 核通常称为一个 shard。基于 future 的 API通过 future 提交 I/O 操作并链式调度后续任务可以轻松并行执行多个 I/O 操作例如在一个 TCP 请求的响应路径中同时发起多个磁盘 I/O、向其他核发送消息、聚合结果后再返回响应。共享无 TCP 协议栈与 DMA 存储 APISeastar 自带高性能用户态 TCP/IP 协议栈双向零拷贝存储 API 同样支持零拷贝 DMA 传输。这四个概念的具体展开可见 doc/tutorial.md 的 Introduction 章节源码层面则散落在 src/core/reactor.cc、src/core/smp.cc 等核心实现中。编译构建 SeastarSeastar 的构建流程以configure.pyCMake 包装脚本配合 Ninja 构建系统为核心详见 README.md。第一步安装系统依赖假设你希望使用系统包RPM 或 DEB来满足 Seastar 的依赖先运行仓库根目录下的依赖安装脚本$ sudo ./install-dependencies.sh该脚本会根据当前发行版安装编译 Seastar 所需的系统库如 Boost、hwloc、yaml-cpp、c-ares、fmt、lz4 等。更详细的替代工作流请参考 HACKING.md。第二步配置release 模式$ ./configure.py --modereleaseconfigure.py本质上是 CMake 的包装脚本源码见 configure.py--mode参数直接映射到CMAKE_BUILD_TYPE。配置完成后会生成对应的构建目录。第三步编译$ ninja -C build/release如果编译失败并出现类似g: internal compiler error: Killed (program cc1plus)的错误说明 GCC 内存不足。解决方法是限制并行任务数并使用-j1同时至少为机器分配 4 GiB 内存$ ninja -C build/release -j1依赖缺失时的处理--cook如果你缺少 Seastar 的某个依赖可以让配置过程在本地临时获取该依赖的版本用于开发。例如在本地获取fmt$ ./configure.py --modedev --cook fmt--cook可以重复多次以选择多个依赖。该机制基于 cmake-cooking配方定义见 cooking_recipe.cmake会把依赖安装到构建目录下的_cooking区域实现可复现的开发环境。有效配方名如fmt、c-ares、dpdk等由configure.py在运行期从cooking_recipe.cmake中解析校验见 configure.py。构建模式详解configure.py --mode支持以下模式完整表格来自 README.md每个模式映射到特定的 CMake 构建类型模式CMake 模式调试信息优化Sanitizers分配器检查用途debugDebug有-O0ASAN, UBSAN系统全部gdb 调试releaseRelWithDebInfo有-O3无Seastar 自研Asserts生产环境devDev自定义无-O1无Seastar 自研Asserts构建与测试循环sanitizeSanitize自定义有-OsASAN, UBSAN系统全部第二轮测试、追踪 bug注意Seastar 对分配器和优化比一般项目更敏感。粗略的经验法则是release比dev快约 2 倍比sanitize快约 150 倍比debug快约 300 倍。该结论来自 README 原文建议根据你的实际硬件自行验证。模式到 CMake 构建类型的映射可以在 configure.py 中确认release → RelWithDebInfo、debug → Debug、dev → Dev、sanitize → Sanitize。此外还有fuzz模式映射到Fuzz。configure.py 进阶选项从 configure.py 可以看到configure.py还支持大量可定制选项常用者包括--build-root自定义构建根目录名允许同一仓库内并存多个配置--cflags/--ldflags/--optflags追加编译器、链接器与 release 专用优化参数--compiler/--c-compiler指定 C/C 编译器默认 g/gcc也可改用 clang--compiler-cache自动选择 sccache/ccache 加速增量编译--c-standard显式指定 C 标准23 或 26--cook以 cmake-cooking 方式在本地供应某个依赖--dpdk/--disable-dpdk、--io-uring、--gnutls、--openssl、--lttng三态开关控制 DPDK、io_uringliburing、TLS 后端与 LTTng 追踪支持--prefix安装路径默认/usr/local--scheduling-groups-countreactor 中可用的调度组数量默认 16--api-level兼容性 API 级别默认 10即最新--without-tests/--without-apps/--without-demos默认不构建测试、应用或示例--compile-commands-json生成compile_commands.json以配合 clangd。在不安装的情况下使用 SeastarSeastar 支持直接从构建目录消费无需安装到系统既可以用 pkg-config也可以用 CMake详见 README.md。以下假设 Seastar 仓库位于$seastar_dir。方式一pkg-config$ g my_app.cc $(pkg-config --libs --cflags --static $seastar_dir/build/release/seastar.pc) -o my_app--static是必需的当前 Seastar 以静态库形式构建必须告诉 pkg-config 在链接命令中包含其私有依赖。seastar.pc的生成模板位于 pkgconfig/seastar.pc.in其中Libs.private段聚合了 dl、rt、lksctp-tools、liburing、LTTng、stdatomic、DPDK 等全部静态传递依赖。方式二CMake 的 Seastar 包my_app的CMakeLists.txt如下注意CMAKE_CXX_STANDARD设为 23set (CMAKE_CXX_STANDARD 23) 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/ 目录下的 Find*.cmake来定位依赖。安装后使用 Seastar也可以将 Seastar 安装到文件系统后再消费详见 README.md。重要前提Seastar 与定制版 DPDK 配合工作默认会构建并把 DPDK 子模块安装到$build_dir/_cooking/installed。先配置安装路径$ ./configure.py --moderelease --prefix/usr/local再执行 install 目标$ 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。HACKING.md 还提供了多文件编译的 pkg-config 用法先分别编译.o目标文件只带--cflags最后统一链接带--libs --static以及通过ninja test_unit、ninja test、ninja test_unit_thread_run运行测试见 HACKING.md。C 标准C23 或 C26Seastar 同时支持 C23 与 C26构建默认采用编译器支持的最新标准但可以通过--c-standard配置选项显式选择例如$ ./configure.py --c-standard23如果直接使用 CMake则设置CMAKE_CXX_STANDARD变量。从 configure.py 的源码可以看到未显式指定时configure 会依次探测 C26、C23取编译器支持的第一个若都不支持则直接报错。兼容性策略详见 doc/compatibility.mdSeastar 将一直支持 ISO C 委员会最新批准的两个标准每当新标准获批较老的一个即被退役同时保持源码级向后兼容二进制协议如 RPC 也保持兼容但不维护链接级兼容——不能用某个版本的 Seastar 链接用另一版本构建的应用。Seastar 支持 GCC 与 Clang当前两个大版本平台为 Linux。快速上手第一个 Seastar 程序仓库中的示例程序 demos/hello-world.cc 使用日志 API 输出 Hello World。更简化的入门版在 doc/tutorial.md#include seastar/core/app-template.hh #include seastar/core/reactor.hh #include iostream int main(int argc, char** argv) { seastar::app_template app; return app.run(argc, argv, [] { std::cout Hello world\n; return seastar::make_ready_future(); }); }每个 Seastar 程序都必须定义一个app_template对象并调用其run方法它会启动主事件循环Seastarengine在一个或多个 CPU 上运行然后执行传入的 lambda。return make_ready_future();让事件循环在打印完消息后立即退出更典型的服务器程序应返回一个决定何时退出的 future。注意不应使用 C 语言exit()否则会阻止 Seastar 与应用执行清理。所有 Seastar 类型与函数都位于seastar命名空间。编译这个程序对应 demos/hello-world.cc可以直接使用 DockerDockerfile 见 docker/dev/Dockerfile$ docker build -t seastar-dev -f ./docker/dev/Dockerfile . $ docker run -it --rm -v $(pwd):/seastar seastar-dev /seastar/configure.py --modedev --cookc-ares $ docker run -it --rm -v $(pwd):/seastar seastar-dev ninja -C /seastar/build/dev $ docker run -it --rm -v $(pwd):/seastar seastar-dev /seastar/build/dev/demos/hello-world_demo -c1不用 Docker 的话先用 pkg-config 编译$SEASTAR为构建目录$ c getting-started.cc pkg-config --cflags --libs --static $SEASTAR/build/release/seastar.pc如果 Seastar 已安装命令行更短$ c getting-started.cc pkg-config --cflags --libs --static seastar或用 CMakeCMakeLists.txt中使用find_package(Seastar REQUIRED)与target_link_libraries(example PRIVATE Seastar::seastar)随后mkdir build cd build cmake .. make运行结果$ ./example Hello world核心概念future 与 continuationfuture是 Seastar 异步编程的基石一个 future 表示一个可能尚未就绪的计算结果例如从网络读到的数据缓冲区、定时器到期、磁盘写完成、或需要多个 future 值组合才能得到的结果。future表示某件事最终会完成但不返回任何值。future 通过then()方法消费传入回调通常为 lambda即可把多个异步步骤链式组合futureint get(); // 承诺最终产生一个 int future put(int); // 承诺存储一个 int future f() { return get().then([] (int value) { return put(value 1).then([] { std::cout value stored successfully\n; }); }); }由于then()的 lambda 若返回 future x则then()本身返回的 future y 会承载相同的值因此可以扁平化嵌套future f() { return get().then([] (int value) { return put(value 1); }).then([] { std::cout value stored successfully\n; }); }循环则通过尾递归实现make_ready_future()返回一个立即可用的 future对应循环终止条件。上述模式与底层链式回调的完整推导见 doc/mini-tutorial.md 与 doc/tutorial.mdtutorial 还覆盖了线程与内存模型、-c控制线程数、-m/--reserve-memory控制内存分配等深入内容。原生 TCP/IP 协议栈Seastar 自带用户态 TCP/IP 协议栈share-nothing 架构之上实现以获得比内核协议栈更优的性能详见 doc/native-stack.md。它同时提供双向零拷贝可以直接处理 TCP 栈缓冲区中的数据也可以把自有数据结构的内容作为消息的一部分发出而无需拷贝。当然Seastar 也允许使用宿主机操作系统的 TCP 协议栈POSIX 栈。协议栈实现位于 src/net/如 src/net/tcp.cc、src/net/native-stack.ccDPDK 支持为可选项构建说明见 doc/building-dpdk.md。推荐硬件配置根据 README.mdSeastar 推荐的硬件配置如下CPU多多益善Seastar 非常适合多核与 NUMA 系统NIC越快越好建议 10G 或 40G 网卡1G 网卡也可用但吞吐可能受其容量限制。此外每个 CPU 对应的硬件队列越多越好否则需要在软件中模拟磁盘IOPS 高的快速 SSD客户端机器通常单个客户端机器无法压满服务器。memaslapmemcached 压测和 wrkhttpd 压测都可能无法压垮对应服务端建议把客户端放在服务器之外的机器上并用多台客户端。使用 Seastar 的项目README 明确列出的 Seastar 使用者包括Scylla兼容 Cassandra 与 DynamoDB 的快速 NoSQL 数据存储Seastar 的诞生契机Redpanda面向关键任务系统的 Kafka 兼容流式数据平台cpv-cql-driver基于 Seastar 的 Cassandra/Scylla C 驱动cpv-framework基于 Seastar 的 C Web 框架smf高性能 RPC 框架CephCrimson基于 Seastar 的下一代 OSD对象存储守护进程实现。更多学习资源入门教程doc/mini-tutorial.md完整教程doc/tutorial.md用户态网络栈doc/native-stack.mdDPDK 构建doc/building-dpdk.mdDocker 构建doc/building-docker.md开发与贡献指引HACKING.md、CONTRIBUTING.md、coding-style.md兼容性与 API 级别doc/compatibility.md可运行的示例代码集中在 demos/如 hello-world.cc、echo_demo.cc、tcp_demo.cc、rpc_demo.cc配套应用与测试分别在 apps/ 与 tests/。从源码结构看Seastar 的核心实现分布在 src/core/reactor、smp、app-template、future、io_queue 等与 src/net/协议栈与 socket 抽象公共头文件则在 include/seastar/如 include/seastar/core/future.hh、include/seastar/core/app-template.hh。按本文流程完成构建后即可在这些示例的基础上逐步深入 Seastar 的异步编程世界。赞分享后端异步编程网络【免费下载链接】seastarHigh performance server-side application framework项目地址https://gitcode.com/gh_mirrors/se/seastar点击查看免费下载相关推荐10倍性能跃迁Seastar构建高性能HTTP服务器实战指南10倍性能跃迁Seastar构建高性能HTTP服务器实战指南 你还在为传统HTTP服务器的性能瓶颈发愁吗当并发连接数突破万级响应延迟是否让你彻夜难眠本文后端异步编程网络AI Agent 开发实战构建智能推荐系统的10大核心策略 AI Agent 开发实战构建智能推荐系统的10大核心策略 在当今信息爆炸的时代智能推荐系统已成为我们日常生活中不可或缺的一部分。从电商平台的产品推荐文档教程AI Agent人工智能Wangle框架教程构建高性能C异步服务的完整指南Wangle框架教程构建高性能C异步服务的完整指南 引言 在现代分布式系统开发中构建高性能、可扩展的网络服务是一个常见需求。Wangle作为一个基于C上一篇Gas Town Dolt 存储架构多 Agent 工作区的 Git 化数据库底座下一篇OpenSEO v0.1.6 发布解读共享项目上下文、SAM Skills 与 Google Analytics 深度集成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
