首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Vol 106 RGW 异步化

MONDay

这是Ceph开发每周谈的第一百零六篇文章,记录从18年1月8号到18年1月15号的社区开发情况。

一句话消息

Cephalocon 2018 APAC 已经正式在社区宣布,将在 3 月 22 日- 23 日举行。

RGW异步化

目前 RGW 的 HTTP 框架默认是 civetweb,一种基于每连接独占线程的实现方式,使得在高并发下需要大量的线程进行处理,同时很难增加类似 QoS 优先级队列的功能。

目前社区切换为 beast 框架,该框架使用 boost::beast 作为 http 解析,boost::asio 作为异步网络实现,使得异步的接受连接并且读取消息头部,允许根据头部进行 QoS 调度,但是在 process_request 过程还是需要同步处理,导致大量线程需要。

因此,社区的下一步目的是要让 process_request 异步化,使得横向扩展不依赖于线程数量。这个流程也会采用 boost::asio,该框架不会暴露线程模型,而是使用 reactor 的方式从每个线程执行。并且会成为 c++ std::net 标准库,目前草案已经通过。这个异步模型同时提供了一些异步原语,如 callback,future,coroutine。

目前社区首先提交了 librados api 支持 boost::asio 框架的 PR ( https://github.com/ceph/ceph/pull/19054 ),主要是对 librados c++ api 的一层封装,去兼容扩展异步模型来支持同样的原语。接下来会对 Objecter 进行改造。这样 RGW 就可以在客户端层面全部使用异步接口来实现从 HTTP 到 RADOS。

参考材料:

[1] "C++ Technical Specification - Extensions for Networking"

http://cplusplus.github.io/networking-ts/draft.pdf

[2] "Library Foundations for Asynchronous Operations"

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3896.pdf

[3] Reference: boost::asio::spawn

http://www.boost.org/doc/libs/1_65_1/doc/html/boost_asio/reference/spawn.html

[4] "librados: add async interfaces for use with boost::asio"

https://github.com/ceph/ceph/pull/19054

[5] "osdc/Objecter: Boost.Asio (I object!)"

https://github.com/ceph/ceph/pull/16715

[6] work in progress branch:

https://github.com/cbodley/ceph/commits/wip-rgw-async-process-171120

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180206G0CU7500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券