Go微服务实战 - 从0到1搭建一个类Instagram应用(持续更新)
概要
近几年各大移动应用基本都有社区Community(或动态Moments)的功能,展现形式各不相同,比如
国内的有:微博、朋友圈、抖音、小红书、keep、绿洲、即刻等
国外的有:Instagram、Twitter、HelloTalk等
特别是近几年流行的社交类应用,更是一个不可或缺的feature了,本人刚好近几年也一直从事此类的开发,所以准备搭建一套出来。
社区(动态)在APP中的作用
简单来说就是使用动态功能可以通过增加人与人之间的沟通进而提高用户在应用内的活跃度,让用户在应用内停留的时间更长(个人观点)。
为什么要做这么一套服务?
主要有两个目的
- 之前都是使用 RESTful API 来开发的,这次基础服务会使用gRPC来实现,同时也对之前做的一些不好的地方做下优化和改进
- 把实现思路开放出来,希望可以帮助到需要的同学
通过这套微服务可以学到什么?
- 微服务如何划分
- 代码目录如何分层
- 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应用(持续更新)的更多相关文章
- Spring Cloud 微服务实战——nacos 服务注册中心搭建(附源码)
作为微服务的基础功能之一的注册中心担任重要的角色.微服务将单体的服务拆分成不同的模块下的服务,而不同的模块的服务如果进行通信调用呢?这就需要服务注册与发现.本文将使用阿里开源项目 nacos 搭建服务 ...
- Go微服务实战 - 用户服务开发(gRPC+Protocol Buffer)
概要 用户服务基本是每个互联网产品里必备的一个服务了,因为没有用户基本是什么也干不了.所以他的重要性不言而喻.本文主要介绍下如何开发一个用户微服务,以及他的详细开发流程. 目录 Go微服务实战 - 从 ...
- ASP.NET Core微服务实战系列
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. 前言 这里记录的是个人奋斗和成长的地方,该篇只是一个系列目录和构想 ...
- Spring Cloud微服务实战阅读笔记(一) 基础知识
本文系<Spring Cloud微服务实战>作者:翟永超,一书的阅读笔记. 一:基础知识 1:什么是微服务架构 是一种架构设计风格,主旨是将一个原本独立的系统拆分成多个小型服务 ...
- 微服务实战(三):深入微服务架构的进程间通信 - DockOne.io
原文:微服务实战(三):深入微服务架构的进程间通信 - DockOne.io [编者的话]这是采用微服务架构创建自己应用系列第三篇文章.第一篇介绍了微服务架构模式,和单体式模式进行了比较,并且讨论了使 ...
- SpringCloud Alibaba微服务实战三 - 服务调用
导读:通过前面两篇文章我们准备好了微服务的基础环境并让accout-service 和 product-service对外提供了增删改查的能力,本篇我们的内容是让order-service作为消费者远 ...
- .Net微服务实战之负载均衡(上)
系列文章 .Net微服务实战之技术选型篇 .Net微服务实战之技术架构分层篇 .Net微服务实战之DevOps篇 相关源码:https://github.com/SkyChenSky/Sikiro P ...
- .Net微服务实战之负载均衡(下)
系列文章 .Net微服务实战之技术选型篇 .Net微服务实战之技术架构分层篇 .Net微服务实战之DevOps篇 .Net微服务实战之负载均衡(上) .Net微服务实战之CI/CD .Net微服务实战 ...
- .Net微服务实战之可观测性
系列文章 .Net微服务实战之技术选型篇 .Net微服务实战之技术架构分层篇 .Net微服务实战之DevOps篇 .Net微服务实战之负载均衡(上) .Net微服务实战之CI/CD .Net微服务实战 ...
随机推荐
- Rails_via牛客网
题目 链接:https://ac.nowcoder.com/acm/contest/28537/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...
- 「SDOI2016」征途 题解
「SDOI2016」征途 先浅浅复制一个方差 显然dp,可以搞一个 \(dp[i][j]\)为前i段路程j天到达的最小方差 开始暴力转移 \(dp[i][j]=min(dp[k][j-1]+?)(j- ...
- Javascript 正则使用笔记
# 一.如何创建正则表达式对象 # 1.通过RegExp构造函数来创建.i代表忽略大小写,g代表全局搜索(非全局搜索正则只匹配第一次符合的内容,全局搜索可以匹配多次). var reg = new R ...
- Python 汽车之家 全系车型参数(包含历史停售车型) 最全
本文仅供学习交流使用,如侵立删!联系方式及demo下载见文末 汽车之家2021 全系车型参数(包含历史停售车型) 2021.10.21更新 增加参数:电动扰流板.无框设计车门.隐藏电动门把手.自动驾驶 ...
- 10. 选主算法、多版本兼容性及滚动升级 | 深入浅出MGR
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 选主算法 2. 多版本兼容性 3. MGR 5.7滚动升级至8.0 4. 小结 参考资料.文档 免责声明 文章 ...
- Apache Dolphinscheduler 1.3.x 系列配置文件指南
前言 本文档为dolphinscheduler配置文件指南,针对版本为 dolphinscheduler-1.3.x 版本. 考虑公众号对markdown文件格式支持不那么友好的问题,建议大家在PC端 ...
- 开源有魔力 - DolphinScheduler 的 Apache 之路
关于 Apache DolphinScheduler社区 Apache DolphinScheduler(incubator) 于17年在易观数科立项,19年3月开源, 19 年8月进入Apache ...
- 【喜讯】新一代大数据任务调度 - Apache DolphinScheduler 社区荣获OSCHINA年度 “最佳技术团队”...
新一代大数据任务调度 - Apache DolphinScheduler 继 11 月 19 日由 InfoQ 举办.在 300+ 参评项目中脱颖而出获得 "2020 年度十大开源新锐项目 ...
- Babylon.js 入门简介和开发实例
Babylon.js是一款WebGL开发框架,和Three.js类似. Three.js是由社区推动的,比Babylon.js要成熟些,而Babylon.js是微软推动的,和微软的相关技术结合更好. ...
- Docker与GU 安装管理配置
Linux 下的 Docker 安装与使用 一.安装与配置 1.安装依赖包 1 sudo yum install -y yum-utils device-mapper-persistent-data ...