Douyin项目框架学习 | 青训营笔记

122 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第3天

我们小组采用了DDD架构实现抖音app。目前用到的框架有Gin、Kitex、Gorm。以我所做的message模块为例,展示本小组的项目构成。

用户通过HTTP协议向/douyin/message/chat/发送GET请求后,基于Gin实现的HTTP服务器调用GetMessageList函数处理用户获取消息记录的请求。该函数将解析用户发来的报文,获取其中的参数(接受方的用户ID),然后调用应用层的函数application.MessageAppIns.GetMessageList。在我们的框架中,应用层是底下领域层的封装,所以application.MessageAppIns.GetMessageList会继续调用领域层的函数。由于领域层提供了微服务,此时的调用是RPC(远端过程调用),应用层作为客户端向服务端(领域层)发起远程调用。我们使用的RPC框架是Kitex,该框架是字节内部使用的RPC框架,在具有高性能高可用性的同时,还提供了方便开发者使用的代码生成功能。借助Kitex的代码生成功能,我们只需要使用IDL语言定义RPC的协议,就能自动化地生成代码去实现RPC协议,随后只需要实现RPC服务端的代码即可。在实现服务端的代码时,需要使用到GORM来访问底层的MySQL数据库。GORM是字节开源的ORM库,能提供具有面向对象语义的API,方便开发者访问SQL数据库。服务端在接收到客户端的GetMessageList请求后,会根据RPC的参数通过GORM语句搜索SQL数据库,然后将搜索到的结果以协议约定好的格式返回给客户端。至此一次由前端发起的获取消息列表的请求就经历后端得到处理,然后再返回给前端加以显示。