2022 年给自己定一个小目标,万一实现了呢? 不,是一定要实现 😝
概要
近几年各大应用基本都有社区(动态)的功能,展现形式各不相同,比如国内的有:
- 微博
- 朋友圈
- 抖音
- 小红书
国外的有:
- Twitter 等(当然他们做的就更糟早了)。
也算是比较流行的一个 feature 了,刚好本人近几年也一直从事此类的开发,所以准备搭建一套出来。
社区在 APP 中的作用
简单来说就是使用动态功能可以提高用户在应用内的活跃度,让用户在应用内停留的时间更长(个人观点)。
当然最基本的用户功能也是需要有的,那么如果一个用户发了一条动态,粉丝如何收到呢? 所以这里也离不开关系服务。可以先来看下整体架构。
为什么要做这么一套服务?
主要有两个目的
- 之前都是使用 restful API 来开发的,基础服务会用 gRPC 来实现,同时也对之前做的一些不好的地方做下优化和改进
- 把实现思路开放出来,希望可以帮助到需要的同学
💡 如果有觉得设计不好的地方也欢迎提供建议,共同改进。
通过这套微服务可以学到什么?
- 微服务如何划分
- 代码目录如何分层
- REST 的使用
- gRPC/ProtocolBuffer 的使用
- GORM/Redis/Kakfa 在 Go 中的使用
- 链路追踪的使用
- 微服务在 K8S 中如何部署
- 等等...
业务架构图

服务划分
该微服务系统整体会包含如下 4 大服务:
1. 用户服务(gRPC+Protocol Buffer)
该服务主要提供以下功能
- 注册
- 登录
- 更新用户信息
- 获取用户信息
- 批量获取用户信息
2. 关系服务(gRPC+Protocol Buffer)
该服务主要提供以下功能
- 关注
- 取消关注
- 批量获取关注关系
- 粉丝列表
- 关注列表
3. 动态服务(HTTP)
该服务主要提供以下功能
- 发布动态
- 获取动态详情
- 点赞动态
- 评论动态
- 回复评论
- 点赞评论
- 我发布过的动态列表
- 我关注的动态列表
- 最新的动态列表
4. 聚合层服务
主要对外提供 API 服务,面向的是前端,比如 WEB, iOS, Android 等
上面的几个服务大部分接口都会从此服务进行逻辑调用处理。比如处理用户数据,关系数据等
技术选型
- 开发框架 🦅 eagle 微服务框架
- 开发语言 Go
- 分布式缓存 Redis
- 数据存储 MySQL
- 数据库操作 GORM
- RPC 通信 gRPC + Protocol Buffer
- 应用部署 Docker + K8S + Helm
- 监控告警 Prometheus + Grafana
- 分布式链路追踪 Jaeger
- 消息队列 Kafka/RabbitMQ
开发步骤
会按照服务逐个进行开发,最后在聚合服务中进行组合,最后供客户端进行调用。
-
聚合服务 ins-app
- 用户相关 API 开发
- 关系相关 API 开发
- 动态相关 API 开发
-
用户服务 user-service
- 画架构图
- 数据库定义
- proto 定义
- 定义 repo/service
- 业务逻辑实现
- 注册 grpc 服务进行测试
-
关系服务 relation-service
- 画架构图
- 数据库定义
- proto 定义
- 定义 repo/service
- 业务逻辑实现
- 注册 grpc 服务进行测试
-
动态服务 moment-service
- 画架构图
- 数据库定义
- proto 定义
- 定义 repo/service
- 业务逻辑实现
- 注册 grpc 服务进行测试
🔚 好,小目标定完了😝,后面就是撸起袖子加油干了了 😭
原文(不定期更新): https://legend-hero-0e2.notion.site/Go-0-1-Instagram-6597618e65a647d282a7d45ff2554246