- 掌握微服务架构和Web工作原理
- 掌握HTTP协议和RPC调度方法
- 掌握BASE、CAP理论
由于疫情封校了,FanOne和小哥哥们外出Happy的计划泡汤了,只能在宿舍一起网聊。但长期沉迷网聊的FanOne,忘记了即将到来的考试。为了帮助FanOne有计划的复习考试,请你写一个基于微服务架构的备忘录,帮助FanOne记录任务,渡过难关!
你除了需要完成下面模块的开发(每个模块对应一个微服务),你还需要完成这些事情
- 使用docker-compose快速搭建起你的开发环境(例如使用docker-compose启动你的mysql、redis等)
- 编写项目文档,其中包括接口、项目结构目录树
- 实现用户注册、登录
增
- 添加一条新的待办事项
改
- 将 一条/所有 代办事项设置为已完成
- 将 一条/所有 已完成事项设置为待办
查
- 查看所有 已完成/未完成/所有事项。 (需要分页)
- 输入关键词查询事项。(需要分页)
删
- 删除 一条/所有已经完成/所有待办/所有事项
- 对项目使用链路追踪(例如Jaeger)
- 对项目提供监控特性(例如Prometheus 与 Skywalking)
- 对项目使用服务注册发现(例如 etcd 与 Consul)
- 使用Makefile简化你的protoc生成、项目编译等内容
- 项目支持负载均衡(Load Balance),实现轮询(Round-Robin)策略即可
- 项目中集成熔断降级功能,推荐使用框架 hystrix
- 利用Github实现CICD(不要求全部完成,只需要能够使用Github Action实现部分自动化即可)
- 编写单元测试
- 结合7和8,实现自动化代码单元测试
- 添加一个上传视频的接口,具体实现为
- 使用流式请求分片上传视频
- 与用户绑定(即对于每个视频,都要求在数据库中设定上传者、上传时间等内容)
常见的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
- 学习MIT-6.824
- 了解分布式注册中心,如 etcd , zookeeper , euruka 等,并在代码中封装分布式系统中的服务注册、服务发现功能。有兴趣还可以了解一下Raft算法,参考hashicorp/raft
- 可以学习一些分布式存储方面的技术,如MySQL主从复制、读写分离、高可用配置,Redis的分布式锁(Redlock 算法)、主从模式和哨兵模式,ELK日志系统等。
- 可学习Kubernetes基础,并提前了解云原生方向 https://www.cncf.io/