V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qloog
V2EX  ›  推广

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

  •  
  •   qloog · 2022-01-18 23:09:04 +08:00 · 2555 次点击
    这是一个创建于 800 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    概要

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

    • 微博
    • 朋友圈
    • 抖音
    • 小红书

    国外的有:

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

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

    社区在 APP 中的作用

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

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

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

    主要有两个目的

    1. 之前都是使用 restful API 来开发的,基础服务会用 gRPC 来实现,同时也对之前做的一些不好的地方做下优化和改进
    2. 把实现思路开放出来,希望可以帮助到需要的同学

    💡 如果有觉得设计不好的地方也欢迎提供建议,共同改进。

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

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

    业务架构图

    arch

    服务划分

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

    第 1 条附言  ·  2022-01-19 10:26:29 +08:00
    第 2 条附言  ·  268 天前
    主体功能已经开发完毕,后面就是优化和持续迭代了
    https://github.com/go-microservice
    13 条回复    2022-02-10 11:19:47 +08:00
    wsseo
        1
    wsseo  
       2022-01-18 23:30:56 +08:00
    没有地址
    nekota
        2
    nekota  
       2022-01-19 00:33:43 +08:00 via iPhone
    很合理的架构。能展开讲一下聚合层和消息队列的应用吗?
    ufan0
        3
    ufan0  
       2022-01-19 00:38:48 +08:00
    持续关注,期待更新
    rv54ntjwfm3ug8
        4
    rv54ntjwfm3ug8  
       2022-01-19 00:54:18 +08:00   ❤️ 1
    你这是来推广你的框架吧 /t/669961 GitHub 1024casts/snake 重定向到 go-eagle/eagle
    推广贴请发在 推广 节点
    @Livid
    rv54ntjwfm3ug8
        5
    rv54ntjwfm3ug8  
       2022-01-19 01:00:42 +08:00   ❤️ 1
    看了下 OP 已经发了不止一个花式推广贴了 /t/675331
    muzuiget
        6
    muzuiget  
       2022-01-19 01:16:03 +08:00
    机智如我直奔评论区。
    Livid
        7
    Livid  
    MOD
       2022-01-19 03:40:43 +08:00
    @qloog 这个主题已经被移动。

    请阅读 V2EX 的节点使用说明:

    https://www.v2ex.com/help/node
    qloog
        8
    qloog  
    OP
       2022-01-19 10:23:31 +08:00
    @theklf4 推广的时代已经过去,现在主要是应用阶段
    qloog
        9
    qloog  
    OP
       2022-01-19 10:27:08 +08:00
    qloog
        10
    qloog  
    OP
       2022-01-19 10:28:33 +08:00
    @theklf4 不算吧😭,就是要做实战项目呢
    codespots
        11
    codespots  
       2022-01-20 18:48:01 +08:00
    老哥,我还没用 yaf 写过一个实际项目,你这都从 go 进化到 go 的微服务了
    qloog
        12
    qloog  
    OP
       2022-02-10 10:25:55 +08:00
    @codespots 跟上市场形式,转型要快😁
    codespots
        13
    codespots  
       2022-02-10 11:19:47 +08:00   ❤️ 1
    @qloog 那看来我要 star 下了,跟着你学习 go 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5370 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:03 · PVG 16:03 · LAX 01:03 · JFK 04:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.