trpc-group / trpc-cpp

A pluggable, high-performance RPC framework written in cpp
Other
270 stars 78 forks source link

【腾讯犀牛鸟计划】实现过载保护插件 - 滑动时间窗口 #144

Open weimch opened 2 months ago

weimch commented 2 months ago

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给下一位等候者。

diya-he commented 2 months ago

已成功领取本issue

Huixiaohuilalala commented 1 month ago

已成功领取本issue

2549141519 commented 1 month ago

已成功领取本issue

2549141519 commented 1 month ago

老师 您好! 1 我目前实现了滑动窗口算法和filter(分别继承ServerOverloadController 、MessageServerFilter), image 2 我在服务端程序代码helloworld_server.cc调用如下func进行filter、算法的注册(该func重载自”trpc_plugin.h") image 3 yaml文件配置使用我写的my_flow_control(filter)和滑动窗口算法 image image 最后运行结果限流成功 这种实现思路目前是对的吗

2549141519 commented 1 month ago

我感觉有点问题的点主要是我是在代码级别注册的filter和算法 不是在yaml文件内,这个地方是否最后应该做到根据yaml文件分别去注册filter和算法吗?

2549141519 commented 1 month ago

老师您好!抱歉打扰 上述两个问题我已经搞定了 我现在理解用户自定义的filter注册是重载方法后放进helloworld_server.cc的class内自动调用的,yaml可以指定使用某个filter以及采用何种算法、参数,这个我通过修改我的server_flow_controller_generator.cc完成算法的注册(不过算法注册也可以通过代码里写死)我打算明天整理一下我自己的仓库 并给出相应文档

2549141519 commented 1 month ago

老师您好!抱歉打扰 我已经完成任务 文档链接为【腾讯文档】【腾讯犀牛鸟计划】实现过载保护插件 -滑动时间窗口 https://docs.qq.com/doc/DWHZPbXFNc0drZUtE 里边有实现思路和编译运行命令。 个人仓库链接为https://github.com/2549141519/trpc-cpp 代码在main分支下