概要

近几年各大移动应用基本都有社区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. Go语言基础六:结构体和方法

    结构体 结构体是一个由用户定义的复合类型,它由一系列属性组成,每个属性都有自己的类型和值.Go语言中数组可以存储同一类型的数据,但在结构体中用户可以为不同项定义不同(或相同)的数据类型.结构体是值类型 ...

  2. 零基础学Java(12)静态字段与静态方法

    静态字段与静态方法   之前我们都定义的main方法都被标记了static修饰符,那到底是什么意思?下面我们来看看 静态字段   如果将一个字段定义为static,每个类只有一个这样的字段.而对于非静 ...

  3. MySQL客户端工具的使用与MySQL SQL语句

    MySQL客户端工具的使用 1.MySQL程序的组成 客户端 mysql:CLI交互式客户端程序 mycli:CLI交互式客户端程序;使用sql语句时会有提示信息 mysql_secure_insta ...

  4. PHP几个常见不常用的方法

    method_exists判断方法是否存在 <?php class F{ public function __construct(){ if(method_exists($this, 'son_ ...

  5. Redis缓存雪崩、缓存穿透、缓存击穿

    缓存雪崩 Redis中的缓存数据是有过期时间的,当在同一时间大量的缓存同时失效时就会造成缓存雪崩. 解决方案 1.设置Redis中的key永不过期,缺点是会占用很多内存 2.使用Redis的分布式锁S ...

  6. kali的安装与配置

    VMware虚拟机与kali下载及安装教程 进入官网https://www.kali.org/get-kali/#kali-platforms 安装kali镜像 需要安装虚拟机 这里我们选择安装VMw ...

  7. Luogu2580 于是他错误的点名开始了 (Trie树)

    复习\(Trie\),忘了用\(val[]\)表示每个节点权值,用\(vis[]\)水过了 #include <iostream> #include <cstdio> #inc ...

  8. 【AGC】集成华为AGC崩溃服务实用教程

    ​简介 AppGallery Connect(简称AGC)崩溃服务提供了轻量级崩溃分析服务,集成Crash SDK,可以实现零代码快速集成,您的应用能够在崩溃时自动收集崩溃报告,帮助您了解应用版本质量 ...

  9. 从零搭建云原生技术kubernetes(K8S)环境-通过kubesPhere的AllInOne方式

    前言 k8s云原生搭建,步骤有点多,但通过kubesphere,可以快速搭建k8s环境,同时有一个以 Kubernetes 为内核的云原生分布式操作系统-kubesphere,本文将从零开始进行kub ...

  10. apk编辑器测评

    hi你好,我今天要介绍的就是apk编辑器 这里我用的是apk编辑器专业版 APK编辑器 关于 APK 编辑器智友汉化组论坛:bbs.zhiyoo.com修改应用程序名称美化 UI: 更改背景图片删除广 ...