概要

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

国内的有:微博、朋友圈、抖音、小红书、keep、绿洲、即刻等

国外的有:Instagram、Twitter、HelloTalk等

特别是近几年流行的社交类应用,更是一个不可或缺的feature了,本人刚好近几年也一直从事此类的开发,所以准备搭建一套出来。

社区(动态)在APP中的作用

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

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

主要有两个目的

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

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

  • 微服务如何划分
  • 代码目录如何分层
  • RESTful的使用
  • gRPC/ProtocolBuffer的使用
  • GORM/Redis/RabbitMQ在Go中的使用
  • 如何写单元测试
  • 链路追踪的使用
  • 如何在K8s中部署微服务
  • 使用Prometheus+Grafana进行监控
  • 等等...

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

业务架构图

技术选型

  • 网关Gateway Apache APISIX
  • 开发语言 Go
  • 开发框架 eagle 微服务框架
  • 分布式缓存 Redis
  • 数据存储 MySQL
  • 数据库操作 GORM
  • RPC通信 gRPC + Protocol Buffer
  • 应用部署 Docker + K8s
  • 监控告警 Prometheus + Grafana
  • 分布式链路追踪 OpenTelemetry(Jaeger)
  • 消息队列 Redis/RabbitMQ

项目分层架构

在开发具体的服务之前,让我们先了解一下项目内的分层架构

微服务划分

该微服务系统整体会包含如下4大服务:

1. 用户服务(gRPC+Protocol Buffer)

该服务主要提供以下功能

  • 用户登录
  • 用户注册
  • 修改密码
  • 更新用户信息
  • 获取用户信息
  • 批量获取用户信息

2. 关系服务(gRPC+Protocol Buffer)

该服务主要提供以下功能

  • 关注
  • 取消关注
  • 批量获取关注关系
  • 粉丝列表
  • 关注列表

3. 动态服务(gRPC+Protocol Buffer)

该服务主要提供以下功能

  • 发布动态
  • 获取动态详情
  • 点赞动态
  • 评论动态
  • 我发布过的动态列表
  • 我关注的动态列表
  • 最新的动态列表
  • 评论列表
  • 回复评论
  • 点赞评论
  • 回复列表
  • 通知列表

4. 聚合层服务

主要对外提供API服务,面向的是前端,比如WEB, iOS, Android、小程序等

上面的几个服务大部分接口都会从此服务进行逻辑调用处理。比如处理用户数据,关系数据等

开发 Plan

会按照服务逐个进行开发,然后在聚合服务中进行数据组装,最后供客户端进行调用。

  • 聚合服务 ins-api

    • 用户相关API开发
    • 关系相关API开发
    • 动态相关API开发
      • 发布动态
      • 获取动态详情
      • 点赞动态
      • 评论动态
      • 回复评论
      • 点赞评论
      • 我发布过的动态列表
      • 我关注的动态列表
      • 最新的动态列表
      • 评论列表
      • 回复列表
  • 用户服务 user-service
    • 画架构图
    • 数据库定义
    • proto定义
    • 生成repo/cache/service
    • 业务逻辑实现
    • 注册grpc服务进行测试
    • cache 单元测试
    • repo生成mock, 单元测试
    • 服务部署
    • 链路追踪
  • 关系服务 relation-service
    • 画架构图
    • 数据库定义
    • proto定义
    • 定义repo/service
    • 业务逻辑实现
    • 注册grpc服务进行测试
    • 服务部署
    • 链路追踪
  • 动态服务 moment-service
    • 画架构图
    • 数据库定义
    • proto定义
    • 定义repo/service
    • 业务逻辑实现
    • 注册grpc服务进行测试
    • 服务部署
    • 链路追踪

项目源码

https://github.com/go-microservice

目前已经完成了一半多的工作,后面会继续补充具体服务的详细内容,包括但不限于开发流程、测试、部署、链路追踪等。

Go微服务实战 - 从0到1搭建一个类Instagram应用(持续更新)的更多相关文章

  1. Spring Cloud 微服务实战——nacos 服务注册中心搭建(附源码)

    作为微服务的基础功能之一的注册中心担任重要的角色.微服务将单体的服务拆分成不同的模块下的服务,而不同的模块的服务如果进行通信调用呢?这就需要服务注册与发现.本文将使用阿里开源项目 nacos 搭建服务 ...

  2. Go微服务实战 - 用户服务开发(gRPC+Protocol Buffer)

    概要 用户服务基本是每个互联网产品里必备的一个服务了,因为没有用户基本是什么也干不了.所以他的重要性不言而喻.本文主要介绍下如何开发一个用户微服务,以及他的详细开发流程. 目录 Go微服务实战 - 从 ...

  3. ASP.NET Core微服务实战系列

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. 前言 这里记录的是个人奋斗和成长的地方,该篇只是一个系列目录和构想 ...

  4. Spring Cloud微服务实战阅读笔记(一) 基础知识

    本文系<Spring Cloud微服务实战>作者:翟永超,一书的阅读笔记. 一:基础知识   1:什么是微服务架构     是一种架构设计风格,主旨是将一个原本独立的系统拆分成多个小型服务 ...

  5. 微服务实战(三):深入微服务架构的进程间通信 - DockOne.io

    原文:微服务实战(三):深入微服务架构的进程间通信 - DockOne.io [编者的话]这是采用微服务架构创建自己应用系列第三篇文章.第一篇介绍了微服务架构模式,和单体式模式进行了比较,并且讨论了使 ...

  6. SpringCloud Alibaba微服务实战三 - 服务调用

    导读:通过前面两篇文章我们准备好了微服务的基础环境并让accout-service 和 product-service对外提供了增删改查的能力,本篇我们的内容是让order-service作为消费者远 ...

  7. .Net微服务实战之负载均衡(上)

    系列文章 .Net微服务实战之技术选型篇 .Net微服务实战之技术架构分层篇 .Net微服务实战之DevOps篇 相关源码:https://github.com/SkyChenSky/Sikiro P ...

  8. .Net微服务实战之负载均衡(下)

    系列文章 .Net微服务实战之技术选型篇 .Net微服务实战之技术架构分层篇 .Net微服务实战之DevOps篇 .Net微服务实战之负载均衡(上) .Net微服务实战之CI/CD .Net微服务实战 ...

  9. .Net微服务实战之可观测性

    系列文章 .Net微服务实战之技术选型篇 .Net微服务实战之技术架构分层篇 .Net微服务实战之DevOps篇 .Net微服务实战之负载均衡(上) .Net微服务实战之CI/CD .Net微服务实战 ...

随机推荐

  1. B+树索引页大小是如何确定的?

    B+树简介 在正式介绍本文的主题前,需要对 B+ 树有一定的了解,B+树是一种磁盘上数据的索引结构,大概长这个样子. B+树的叶子节点是所有的数据,非叶子节点称为索引页,索引页里有若干个索引项,本例中 ...

  2. css基础03

    就近原则执行粉色.而不是全覆盖,只有样式冲突的地方才会覆盖. 会执行粉色和12px.后来者居上 高度宽度内外边距这些不会继承. 子元素会继承行高, 1.5是行高是字体大小的1.5倍的意思. 有了!im ...

  3. 在oracle中创建管理员密码

    1.因为在安装Oracle11g时没有设置sys和system用户的密码,导致登陆不上SQLplus,后面用sqlplus / as sysdba ,密码为:root登陆上去创建了密码. 2.如下图

  4. [51nod 1822]序列求和

    \(k\leq 200000\) 考虑转化成枚举 \(k\) 的形式 我们错位相减! \[A_k=\sum_{i=1}^N i^K\times R^i \\ RA_k=\sum_{i=2}^{N+1} ...

  5. BZOJ3262/Luogu3810 陌上花开 (三维偏序,CDQ)

    一个下午的光阴之死,凶手是细节与手残. 致命的一枪:BIT存权值时: for(; x <= maxx; x += x&-x) t[x] += w; //for(; x <= n; ...

  6. C++11实现的数据库连接池

    它什么是? 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:类似的还有线程池. 为什么要用? 一个数据库连接对象均对应一个物理数据库连接, ...

  7. 【HTML】学习路径3-段落标签和标题标签

    第一章:标题标签 <h1>  </h1> <h2>  </h2> 等等... 数字越大,字体尺寸越小. <!--标题会加粗.独占一行--> ...

  8. VM虚拟机安装

    VM虚拟机安装 1.安装vm虚拟机软件 1.1 双击打开虚拟机文件 1.2 根据向导安装 下一步 安装好了 不要着急点完成在 安装目录中有许可证. 1.3激活操作 2.虚拟机原理简介 3. 新建虚拟机 ...

  9. 【FAQ】接入华为应用内支付服务常见问题解答

    HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.开发者的应用集成IAP SDK后,调用IAP SDK接口,启动IAP收银台,即 ...

  10. flutter系列之:flutter中常用的ListView layout详解

    目录 简介 ListView详解 ListView中的特有属性 ListView的构造函数 ListView的使用 总结 简介 ListView是包含多个child组件的widget,在ListVie ...