Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2024腾讯犀牛鸟开源人才培养计划—tRPC #50

Open
tencent-adm opened this issue Jun 26, 2024 · 0 comments
Open

2024腾讯犀牛鸟开源人才培养计划—tRPC #50

tencent-adm opened this issue Jun 26, 2024 · 0 comments

Comments

@tencent-adm
Copy link
Member

tencent-adm commented Jun 26, 2024

腾讯犀牛鸟开源人才培养计划

欢迎广大高校学子加入2024腾讯犀牛鸟开源人才培养计划!腾讯犀牛鸟开源人才培养计划面向全国高校学生发布实践及研学项目,由教育部计算机类专业教学指导委员会、教育部软件工程专业教学指导委员会、教育部电子信息类专业教学指导委员会作为联合指导单位,腾讯开源和腾讯高校合作联合主办,表现优异的高校学生将有机会获得腾讯颁发的荣誉证书、现金奖励以及腾讯特色礼包。

期待同学们在本次研学旅程中,和腾讯一起探索未知、学习技术,让开源伴你成长,收获满满一夏!

更多项目信息请看:腾讯开源活动官网腾讯开源研学基地

项目简介

tRPC是什么?
tRPC是基于插件化理念设计的一款支持多语言、高性能的RPC开发框架,整体设计遵循以下原则:
●简单:用户基于框架进行服务开发简单方便;
●高性能:框架具备高性能,能适用互联网海量访问场景;
●插件化:框架在架构设计和具体实现上进行分层和模块化,各个核心模块可拔插,并能够独立演进;

你可以使用它:
●搭建多个端口支持多个协议(一个端口只能对应一个协议)的服务(tRPC/HTTP(s)/gRPC等),并能同步/异步处理客户端请求;
●以同步、异步、单向的方式访问各种协议后端服务(tRPC/HTTP(s)/gRPC等),调用各种存储系统(redis等);
●流式RPC编程,目前支持tRPC流式、gRPC流式、HTTP流式等,实现类似Push、文件上传/下载、AI类等流式应用服务;
●插件化支持各种协议和对接服务治理系统,比如:开发自定义的协议、对接业务使用的各种名字服务/监控系统/调用链系统/配置系统/日志系统等,方便服务互通和服务运营;

tRPC特点
●跨语言:基于Protocol Buffers来实现跨语言之间的服务通信;
●多通信协议:支持多种通信协议,能够与不同框架进行互通(比如gRPC);
●流式rpc:支持流式RPC,更好地适用于大文件上传/下载、消息Push、AI类语音识别/视频理解等多种应用场景;
●丰富插件生态:提供大量对接业界微服务组件的插件(比如Consul/Promethues/OpenTelemetry等),方便用户构建适合自己的服务治理体系;
●可扩展性:基于框架插件化的设计,用户可以进行二次开发来扩展框架能力,比如:RPC请求参数校验、鉴权、请求录制等;
●流控和过载保护:提供多种应用场景下的流量控制和过载保护插件,防止服务因为访问突增造成过载而不可用;

https://github.com/trpc-group/trpc-cpp
https://github.com/trpc-group
https://github.com/trpc-ecosystem

项目导师

刘豪 , tRPC-Cpp 产品负责人
韦明昌 , tRPC-Cpp 后台技术开发

导师寄语

RPC框架已经成为构建云计算时代复杂应用里各个服务的基础设施,tRPC框架被广泛地用在腾讯的各个应用里(比如腾讯视频、QQ浏览器、腾讯文档等)。
使用tRPC框架,你能体验当前工业界通用的服务开发范式;受益于tRPC高可扩展的设计,你只需简单的启用tRPC插件,较少甚至无需编程即可应对丰富多样的业务场景;对于其中的服务治理插件,你可以初窥云计算时代下,tRPC框架通过插件接入到各服务治理系统(服务路由、监控、调用链追踪、配置中心等)的设计思想,并有机会参与到其中的建设中。

参与tRPC共建,你能更进一步地,从表到里认识到高性能、高可用、高可扩展的设计原则,以及具体到实现所采用的架构、设计模式、针对特定场景提供的优化思路,当然,这需要你了解的知识不局限在解决单个issue范围,更需要你从总体代码上先了解,再针对感兴趣的细节深入挖掘。

本次公开的issue包含了体验类以及功能特性建设类。体验类issue构造了几个业务场景,你需要使用框架提供的能力来完成,通过对代码细节的开发与完善,在实践中更加清晰地理解tRPC框架的一些设计理念。功能特性的issue集中在负载均衡插件与过载保护插件的开发上,作为高性能、高可用、高可扩展的落地方案,相信你能在实现的过程中会对这三个概念有更加深入的认知,在这个过程中,你也能实际完成一次从需求分析、面向对象设计、代码实现、提交上线的软件开发全流程。

希望各位同学能在完成issue的时候,不只限于完成issue,可以尝试着以issue为着眼点,更系统全面地学习tRPC框架的代码。虽然软件开发的领域技术变化飞快,但一些底层的原理、思想却经久不衰,只有保持好奇、保持学习、保持进步,尽可能地将理论联系实践,才能在面对未来不断变化的世界中,有自己的安身立命之本。

培养概览

1️⃣ 参与“腾讯开源基础课程”
完成考试可获得《腾讯开源研学结课证书》

2️⃣ 参与“腾讯开源issue实战”
完成任意issue即可获得专属《腾讯开源实战证书》+ 腾讯周边精美礼包一套。其中issue难度对应礼包大小

3️⃣ 参与“腾讯开源课题实战”
任务奖金从6K、8K到12K不等、腾讯犀牛鸟研学专属《优秀学生证书》、全球限量《腾讯开源贡献者证书》

如何贡献

参与“腾讯开源issue实战”

进入“研学基地”,参与“腾讯开源issue实战”,选择你感兴趣项目的 Issue 任务,认领和完成它。6月28日开放 issue ,学生可无门槛参与和认领

1、如果你愿意解决issue,请在腾讯开源研学基地「领取issue任务」
2、Fork 到个人的仓库下
3、在个人仓库解决完对应的任务后,提交 PR 至 Issue 所在仓库的 master 分支
4、PR提交后,项目导师将进行 code review, PR 被合并后即视为任务完成
5、如有任何疑问可以在评论区留言或者邮件至联络人

参与“腾讯开源课题实战”

时间安排:6月28日至7月28日为活动报名期,8月12日公布入围名单,8月12日至10月12日为课题实战期,通过筛选的学生即可参与此模块

任务1:trpc协议的wireshark解析
○背景介绍:wireshark是一种广泛应用的协议包解析工具,trpc协议作为tRPC各语言框架的基础,有着良好的设计。简单来说,你可以认为trpc协议是由:固定字节帧头+pb协议包头+包体组成,包体即为业务数据(可以为pb/json各种序列化类型的数据)。

○需求:需求:你可以按下面两个阶段来完成,其中第二个阶段是可选的。
1、解析tRPC一应一答协议
2、【可选】解析tRPC流式协议

○参考资料:
tRPC协议介绍:trpc/docs/zh/trpc_protocol_design.md at main · trpc-group/trpc · GitHub
wireshark三方协议的解析实现参考:How can I add a custom protocol analyzer to wireshark? - Stack Overflow

任务2:prometheus插件专项建设(PUSH模式支持等)
○Prometheus监控支持Push模式
背景:当前框架的Prometheus只支持pull模式,没有提供主动push数据的能力。对于一些生命周期短于 Prometheus 抓取间隔的任务,pull模式可能无法有效地收集指标,这种场景下就需要有push能力。
需求:通过配置的方式开启push模式,对接Prometheus Pushgateway。

○其他Prometheus特性的支持
需求:你可以试着找出当前Prometheus插件支持还不完善的地方(比如鉴权等),欢迎提出来,与协助你完成任务的腾讯同学,一起评估功能点的合理性。

○参考资料:
1、tRPC-Cpp框架的Prometheus插件源码:trpc/metrics/prometheus
2、拦截器介绍(插件的实现原理):trpc-cpp/docs/zh/filter.md at main · trpc-group/trpc-cpp · GitHub

任务3:对接mysql sdk
○背景:mysql数据库已经成为构建互联网世界的基石,尤其是其支持事务的特性,支撑了很多互联网的很多应用场景,比如电商、支付等。

○需求:希望你能参考当前已有类库的接口,为tRPC-Cpp设计一套灵活、易用的接口,更好地扩展tRPC的生态。具体来来说,在实现时,你需要注意下面的要点:
你应该封装的mysql c-api,并且基于线程池来驱动c-api的调用,并做好与框架协程模式、线程模式的下框架工作线程的交互。
你应该尽可能复用tRPC-Cpp的各个模块,具体来说,你应该继承 ServiceProxy,实现一个比如MysqlServiceProxy,提供设计良好的接口,在实现接口时,应该复用框架的服务发现以及拦截器模块。
当前阶段,支持事务的接口不是必须的,你可以按需按能力来完成这个需求。

○参考资料:
框架线程池工具:trpc/util/thread目录下
mysql c-api:MySQL :MySQL 8.0 C API Developer Guide

联系导师

韦明昌 [email protected]

💁🏻‍♀️ 如有项目任何疑问,欢迎加入腾讯开源犀牛鸟官方QQ群859260607,期待你来!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant