2022年给自己定一个小目标,万一实现了呢? 不,是一定要实现 😝
概要
近几年各大应用基本都有社区(动态)的功能,展现形式各不相同,比如国内的有:
- 掘金
- 脉脉
- 抖音
- 小红书
国外的有:
- Twitter等(当然他们做的就更糟早了)。
也算是比较流行的一个feature了,刚好本人近几年也一直从事此类的开发,所以准备搭建一套出来。
目录
- Go微服务实战 - 从0到1搭建一个类Instagram应用(持续更新)
- Go微服务实战 - 用户服务(gRPC+Protocol Buffer)
- Go微服务实战 - 关系服务服务(gRPC+Protocol Buffer)
- Go微服务实战 - 动态服务(gRPC+Protocol Buffer)
- Go微服务实战 - 聚合服务(http)
社区在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
- 分布式链路追踪 OpenTelemetry(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服务进行测试
🔚 好,小目标定完了😝,后面就是撸起袖子加油干了了 😭