Open weimch opened 2 months ago
已成功领取本issue
已成功领取本issue
没有太理解这里的2.实现server filter,调用过载保护插件。
我目前的实现是在服务端直接集成了过载保护插件,具体在helloworld_server.cc
中,我将实现的逻辑包装进了了GreeterServiceImpl
通过 auto overloadControlledGreeterService = std::make_shared<OverloadControlledGreeterService>(greeterService, overloadController);
请问这样实现是否符合要求,或者可以进一步说明一下server filter的逻辑?感谢
没有太理解这里的
2.实现server filter,调用过载保护插件。
我目前的实现是在服务端直接集成了过载保护插件,具体在helloworld_server.cc
中,我将实现的逻辑包装进了了GreeterServiceImpl
通过auto overloadControlledGreeterService = std::make_shared<OverloadControlledGreeterService>(greeterService, overloadController);
请问这样实现是否符合要求,或者可以进一步说明一下server filter的逻辑?感谢
不符合要求哈,rpc框架通过拦截点扩展功能,具体是可以在rpc前后执行一些自定义的逻辑,实现server filter就是接入到这个拦截点的方法,你可以参考trpc-cpp提供的拦截器文档来实现,但需要继承server_overload_controller实现过载保护逻辑,并用server filter调用他。
https://github.com/trpc-group/trpc-cpp/blob/main/docs/README.zh_CN.md
你好,目前我将插件的逻辑都实现了,测试也没有问题
但是用example进行测试时没能触发过载保护逻辑,包括我测试了现有的concurrency_limiter
也没有触发,想问下原因怎么排查?
服务端注册:
客户端:
yaml文件里是不是没有填filter?
https://github.com/trpc-group/trpc-cpp/blob/main/docs/zh/filter.md
yaml文件里是不是没有填filter?
https://github.com/trpc-group/trpc-cpp/blob/main/docs/zh/filter.md
是不是 .brazelrc中的编译选项 没加
是不是 .brazelrc中的编译选项 没加
加了的,要不然test文件也没法成功运行0.0
感觉文档写得有问题,看了下代码,在service里配置的话,要这样填
server:
service:
- name: xxx
service_filters:
- fixedwindow_limiter
已成功领取本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给下一位等候者。