Go微服务实战 - 从0到1搭建一个类Instagram应用

974 阅读3分钟

2022年给自己定一个小目标,万一实现了呢? 不,是一定要实现 😝

概要

近几年各大应用基本都有社区(动态)的功能,展现形式各不相同,比如国内的有:

  • 掘金
  • 脉脉
  • 抖音
  • 小红书

国外的有:

  • Instagram
  • Twitter等(当然他们做的就更糟早了)。

也算是比较流行的一个feature了,刚好本人近几年也一直从事此类的开发,所以准备搭建一套出来。

目录

社区在APP中的作用

简单来说就是使用动态功能可以提高用户在应用内的活跃度,让用户在应用内停留的时间更长(个人观点)。

当然最基本的用户功能也是需要有的,那么如果一个用户发了一条动态,粉丝如何收到呢? 所以这里也离不开关系服务。可以先来看下整体架构。

为什么要做这么一套服务?

主要有两个目的

  1. 之前都是使用restful API 来开发的,基础服务会用gRPC来实现,同时也对之前做的一些不好的地方做下优化和改进
  2. 把实现思路开放出来,希望可以帮助到需要的同学
💡 如果有觉得设计不好的地方也欢迎提供建议,共同改进。

通过这套微服务可以学到什么?

  • 微服务如何划分
  • 代码目录如何分层
  • REST的使用
  • gRPC/ProtocolBuffer的使用
  • GORM/Redis/Kakfa在Go中的使用
  • 链路追踪的使用
  • 微服务在K8S中如何部署
  • 等等...

业务架构图

image.png

服务划分

该微服务系统整体会包含如下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服务进行测试

🔚 好,小目标定完了😝,后面就是撸起袖子加油干了了 😭