Closed weimch closed 2 months ago
已成功领取本issue
你好,我目前在测试过程中遇到了一个问题,bazel编译成功,trpc_server的日志也没有打印任何错误信息,客户端也能接受到返回信息,但是trpc_server似乎没有调用过载保护插件(我在server filter中的OnRequest函数中使用TRPC_FMT_INFO打印调试信息,但是日志中并没有输出,包括我也测试了其他已经完成的插件,如flow_control)。
想问一下可能是什么原因?
其中已经按照要求对过载保护插件和bazel编译进行配置。
1. bazel编译选项 2. trpc_server启动配置
filter是否通过AddServerFilter加入到了拦截器管理系统中?
filter是否通过AddServerFilter加入到了拦截器管理系统中?
感谢您的指点,我这边测试起来没什么大问题了,后续再优化一下代码和补充下注释就提交PR。
记得也单独给一个可运行的例子代码及文档链接,附上编译运行步骤(这部分不用提PR)
已成功领取本issue
issue介绍
作为实现服务高可用的一部分,过载保护算法是一种常用手段,能在请求激增的时候防止服务过载导致的性能急剧恶化甚至崩溃。
不同的负载均衡算法适用于不同的业务场景,令牌桶算法的实现原理是,当系统收到一个请求时,先要到令牌桶里面拿“令牌”,拿到令牌才能进一步处理,拿不到就要丢弃请求,它的本质是速率控制。
你需要开发一个令牌桶算法的过载保护插件,并提PR到tRPC-Cpp中。
具体地,你可以参考下面的步骤进行开发 1、继承抽象类ServerOverloadController,实现过载保护插件。 2、实现server filter,调用过载保护插件。 3、用于测试验证,你可以复用examples/helloworld的代码来做测试,用在yaml里为服务配置server filter,额外的,你还需要改写fiber_client客户端代码,让其并发发送请求,提高并发量触发过载保护的效果。
参考资料
1、需要基于框架提供的过载保护的抽象类开发:trpc/overload_control/server_overload_controller.h
其他说明
本issue为2024犀牛鸟开源人才培养活动专属issue,仅供在校大学生参与领取 【认领issue】在研学基地"issue营地"对应issue行的M~R列抢滩报名,即视为认领成功。 【完成issue】已认领issue的同学,请同步在本issue评论区回复“已成功领取本issue”; 如7天内无提交任何进展包括不限于comment \ commit \ Pull Request,则将视为同学主动放弃issue,组委会将释放issue给下一位等候者。