Skip to content

Latest commit

 

History

History
101 lines (73 loc) · 6.28 KB

6-微服务.md

File metadata and controls

101 lines (73 loc) · 6.28 KB

Golang 第六轮考核

目的

  • 掌握微服务架构和Web工作原理
  • 掌握HTTP协议和RPC调度方法
  • 掌握BASE、CAP理论

背景

由于疫情封校了,FanOne和小哥哥们外出Happy的计划泡汤了,只能在宿舍一起网聊。但长期沉迷网聊的FanOne,忘记了即将到来的考试。为了帮助FanOne有计划的复习考试,请你写一个基于微服务架构的备忘录,帮助FanOne记录任务,渡过难关!

任务

你除了需要完成下面模块的开发(每个模块对应一个微服务),你还需要完成这些事情

  1. 使用docker-compose快速搭建起你的开发环境(例如使用docker-compose启动你的mysql、redis等)
  2. 编写项目文档,其中包括接口、项目结构目录树

用户模块

  • 实现用户注册、登录

事务模块

  • 添加一条新的待办事项

  • 将 一条/所有 代办事项设置为已完成
  • 将 一条/所有 已完成事项设置为待办

  • 查看所有 已完成/未完成/所有事项。 (需要分页)
  • 输入关键词查询事项。(需要分页)

  • 删除 一条/所有已经完成/所有待办/所有事项

Bonus

  1. 对项目使用链路追踪(例如Jaeger
  2. 对项目提供监控特性(例如PrometheusSkywalking
  3. 对项目使用服务注册发现(例如 etcdConsul
  4. 使用Makefile简化你的protoc生成、项目编译等内容
  5. 项目支持负载均衡(Load Balance),实现轮询(Round-Robin)策略即可
  6. 项目中集成熔断降级功能,推荐使用框架 hystrix
  7. 利用Github实现CICD(不要求全部完成,只需要能够使用Github Action实现部分自动化即可)
  8. 编写单元测试
  9. 结合7和8,实现自动化代码单元测试
  10. 添加一个上传视频的接口,具体实现为
    • 使用流式请求分片上传视频
    • 与用户绑定(即对于每个视频,都要求在数据库中设定上传者、上传时间等内容)

参考

常见的RPC框架

公司 名称 地址
谷歌 grpc-go https://github.com/grpc/grpc-go
七牛 go-zero https://github.com/zeromicro/go-zero
Bilibili Kratos https://github.com/go-kratos/kratos
字节跳动 Kitex https://github.com/cloudwego/kitex
Apache Dubbo https://github.com/apache/dubbo-go
腾讯 Tars https://github.com/TarsCloud/TarsGo
斗鱼 jupiter https://github.com/douyu/jupiter

建议学习一些资料较为完善的RPC框架,比如grpc-go,这里不推荐go-micro,因为国内用的少且版本比较混乱。

标题 地址
Google API 设计指南 https://cloud.google.com/apis/design
如何才能更好的学习MIT 6.824? https://zhuanlan.zhihu.com/p/110168818
MIT 6.824课程中文学习资料 https://mit-public-courses-cn-translatio.gitbook.io/mit6-824/
Sorosliu1029/6.824 https://github.com/Sorosliu1029/6.824
字节跳动自研高性能微服务框架Kitex的演进之旅 https://juejin.cn/post/7098631562232594462
RPC框架Kitex实践入门:性能测试指南 https://juejin.cn/post/7033972008257847304
高性能RPC框架CloudWeGo-Kitex内外统一的开源实践 https://juejin.cn/post/7148688078083915807
[译] Go 语言的整洁架构之道 —— 一个使用 gRPC 的 Go 项目整洁架构例子 https://juejin.cn/post/6844903687463108616
写给go开发者的gRPC教程-protobuf基础 https://juejin.cn/post/7191008929986379836
go基于grpc构建微服务框架-服务注册与发现 https://juejin.cn/post/6844903593758162958
《gor入门grpc》第一章:什么是gRPC https://segmentfault.com/a/1190000043343832
Raft算法动画演示 https://github.com/klboke/raft-animation

当然,这里面只列举了一部分内容,微服务的资料网上非常非常的多

提示

你可能需要先学习一定的云原生知识(不需要学习太深,我们现在只是做一个toy demo):云原生资料库

  • 每个厂都会有自己开源的RPC框架,选择哪个RPC框架都无所谓,主要是学习微服务的思想,本质都是一样的
  • 不过这些厂开源的RPC框架都非常的完善,以至于实现起来很简单,比如服务注册可以直接调用封装好的功能,虽然提高了开发流程,但不建议初学者这样使用,容易成为API工程师。建议使用相对原始一点的rpc框架如grpc-go来自己实现一个服务注册与发现的方法

如果你想深入学习分布式,可以参考下面这些提示,同时尝试完成所有的Bonus

  1. 学习MIT-6.824
  2. 了解分布式注册中心,如 etcd , zookeeper , euruka 等,并在代码中封装分布式系统中的服务注册、服务发现功能。有兴趣还可以了解一下Raft算法,参考hashicorp/raft
  3. 可以学习一些分布式存储方面的技术,如MySQL主从复制、读写分离、高可用配置,Redis的分布式锁(Redlock 算法)、主从模式和哨兵模式,ELK日志系统等。
  4. 可学习Kubernetes基础,并提前了解云原生方向 https://www.cncf.io/