此文档为第六轮微服务考核,Java后端合作分布式系统考核,该轮为我们今年新上线的考核,可以适当推迟考核时间。
- 理解分布式系统的核心概念
- 提高解决分布式系统中常见问题的能力
- 熟悉微服务的架构设计
- 提高团队协作能力
- 掌握微服务架构和Web工作原理
- 掌握HTTP协议和RPC调度方法
- 掌握BASE、CAP理论
最近,FanOne喜欢的小哥哥发布的高数视频被限流了,FanOne希望能有一个视频网站来帮助学长推广视频,增强学长的信心,因为没有相关的技术,FanOne每天都失眠,FanOne的舍友很担心FanOne接下来的四级考试,想起了你们曾经开发的视频网站,希望你们用微服务架构重构原来的视频网站,帮助FanOne和小哥哥度过难关
你除了需要完成下面模块的开发(每个模块对应一个微服务),你还需要完成这些事情
-
小组讨论各自完成的微服务
-
基于Spring Cloud进行开发
-
学习服务路由(网关)Spring Cloud Gateway等
-
服务注册发现:Eureka、Nacos、Zookeeper等
-
分布式事务:Seata等
-
学习Spring Cloud原生微服务通信方式
-
使用Dubbo,openFeign,gRPC等方式实现RPC通信请求
-
项目支持负载均衡(Load Balance),实现轮询(Round-Robin)策略即可
-
使用docker-compose快速搭建起你的开发环境(例如使用docker-compose启动你的mysql、redis等)
-
编写项目文档,其中包括接口、项目结构目录树
模块名 | 最低需要完成的接口 | 数量 |
---|---|---|
用户 | 注册、登录、用户信息、上传头像 | 4 |
视频 | 投稿、发布列表、搜索视频、热门排行榜 | 4 |
互动 | 点赞操作、点赞列表、评论、评论列表、删除评论 | 5 |
社交 | 关注操作、关注列表、粉丝列表、好友列表 | 4 |
聊天 | 单聊群聊、查询聊天记录 | 2~3 |
网关 | 请求分发、登录授权 | 0 |
首先说明,请开放云服务的安全组,添加IP白名单保证其他同学可以正常使用你部署的接口
nacos的占用内存会比较大,在限制使用内存大小的情况下服务器还是宕机,我们就需要购买新的大内存服务器,多人合作下,时间安排容易冲突,所以可考虑一起购买一台按量付费或包月8G内存(推荐火山云,新人一个月三四十,五个人就是一个月就几块)的服务器,剩下的白嫖阿里云的2G服务器,参考以下文章
https://west2-online.feishu.cn/wiki/G1O2wQLYviyyLzkCnPjcBscRnDe
我们后期将召开会议,根据各位的学习进度等,来决定是否对nacos和redis,mysql等进行集群部署
假设我们有六台服务器(Server 1、Server 2、Server 3、Server 4、Server 5、Server 6),以下是一个优化的部署建议:
- API 网关(Gateway):作为所有请求的入口,负责路由和负载均衡。
- Nacos:作为服务注册与发现中心。
- Redis:作为缓存。
- Seata:第二个 Seata 实例,保证分布式事务的高可用性。
- MySQL:作为数据库,存储所有系统必须的数据。
- 用户服务(User Service):处理用户相关的逻辑,如注册、登录、用户信息等。
- 用户服务(User Service):处理用户相关的逻辑,如注册、登录、用户信息等。
- 用户服务(User Service):处理用户相关的逻辑,如注册、登录、用户信息等。
- 微服务 A:处理特定业务逻辑。
- 微服务 A:处理特定业务逻辑。
- 微服务 A:处理特定业务逻辑。
- 微服务 B:处理特定业务逻辑。
- 微服务 B:处理特定业务逻辑。
- 微服务 B:处理特定业务逻辑。
- 微服务 C:处理特定业务逻辑。
- 微服务 C:处理特定业务逻辑。
- 微服务 C:处理特定业务逻辑。
我们会召开一周一次的大会,了解你们的完成情况,并提供帮助,后期根据人数情况,我们也考虑亲自带你们完成此轮考核
你们需要指定一名队长,队长需要完成总体的规划
包括以下任务
-
技术选型,架构设计
-
网关,用户模块设计
-
数据库设计
-
组织队内协调
组长需要在git上建立仓库,其他成员fork仓库并push自己的代码,组长作为仓库拥有者,负责审核并合并组内队员的push
组员需要编写对应的模块并进行性能分析和编写测试,push代码
**备注:**遇到无法解决的困难,我们会给你提供帮助
-
首先能决定好一份API文档来保证合作的顺利,文档需要更新请及时在群里通知你的队友
-
了解每个同学学习的技术领域,比如不同的组员可能使用不同的mq,选择适合的mq,如果有必要,请教会你的组员该mq的使用方式
-
每隔三天,进行一次组内会议,同步进度,解决已知的困难,预期之后一周的目标
负责不同技术领域的组员我们会进行不同程度的提问,组长负责回答整体的方向,为防止出现一人懈怠,整组项目完成度不高而淘汰的情况,我们会对每个组员进行不同的评估,而不是以一个组都无法通过考核的方式进行,不要过分担心自己被分配任务简单而表现欠佳,做好分内的工作就可以通过考核,我们不会无情的pass你
- 为什么使用网关,没有网关会出现什么问题
- 不同的服务之间应该如何相互调用
- 思考如何正确的将认证信息传入下游模块
- 传统的Spring事务还可以用吗,如何进行技术选型
-
对项目整合OpenTracing分布式链路追踪系统(例如Jaeger、Skywalking)
-
项目中集成熔断降级功能,推荐使用Hystrix
-
如果在写完这些还有余力,证明你是真正的佬,可以去写单人项目的限流组件,作为加分项