当前位置: 首页 > ai >正文

【Easylive】微服务架构在系统中的优缺点的具体体现

【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版

在线视频分享系统项目简介

系统概述

该项目是一个基于SpringCloud微服务架构的在线视频分享系统,主要功能包括:
• 用户自主发布视频
• 后台视频审核
• 用户互动功能(评论、点赞、投币、弹幕)

系统采用springcloud微服务架构构建,主要服务包括 资源服务、主站、互动服务、管理后台 几个服务。项目采用nacos实现服务注册与发现,统一配置管理,通过gateway网关统一对外提供服务,实现负载均衡,服务与服务之间采用openfeign进行相互调用,使用seata解决分布式事务。使用elesticserch实现视频搜索功能。

系统架构

在这里插入图片描述

1. 微服务架构

系统采用Spring Cloud微服务架构进行构建,将整个系统拆分为多个独立的服务。

2. 主要服务

资源服务:负责视频资源的管理和存储
主站服务:提供视频展示和用户交互的主要界面
互动服务:处理用户评论、点赞、投币等互动功能
管理后台服务:提供后台管理功能,包括视频审核、用户管理等

3. 技术组件

服务注册与发现:使用Nacos实现
统一配置管理:通过Nacos进行统一配置管理
网关服务:使用Gateway网关统一对外提供服务,实现负载均衡
服务间调用:采用OpenFeign进行相互调用
分布式事务:使用Seata解决分布式事务问题
视频搜索:使用Elasticsearch实现

功能模块

1. 账号模块

登录:用户可以通过账号和密码安全登录系统
注册:新用户可以轻松注册账号

2. 主站模块

视频列表展示:按分类展示视频内容
视频详情:提供视频播放、实时评论、点赞、收藏、弹幕、投币等互动功能
推荐视频:基于Elasticsearch分词技术智能推荐相似视频

3. 创作中心模块

发布视频:分片上传视频,使用Redis消息队列进行异步处理(视频合并、转码和切割TS分片)
数据统计:展示用户粉丝、播放量、评论、弹幕、点赞、收藏、投币等数据
互动管理:评论管理和弹幕管理功能

4. 个人中心模块

个人信息展示:展示关注数、粉丝数、获赞数、播放数等
投稿视频管理:管理上传的视频(编辑、删除等操作)
粉丝管理:查看和管理粉丝列表

5. 搜索模块

视频搜索:使用Elasticsearch结合IK分词器实现快速检索
搜索热词:通过Redis的incrementScore功能记录热词搜索次数

6. 管理后台模块

分类管理:新增、修改、删除视频分类
视频管理:视频审核、推荐、删除等操作
用户管理:查看用户列表、管理用户状态
系统设置:设置文件上传大小、分级数量、评论限制、弹幕限制等系统参数

系统特点

  1. 高可用性、可扩展性的微服务架构
  2. 高效的视频处理和搜索能力
  3. 丰富的用户互动功能
  4. 完善的创作者支持工具
  5. 强大的后台管理能力

了解微服务

什么是微服务?

微服务是一种软件架构风格,将一个庞大的系统拆分为多个独立的服务,每个服务都是自包含的,并专注于单一的业务能力。在微服务架构中,每个服务都是独立打包和部署的小型应用程序,它们通过轻量级通信机制(如 API)进行交互。


微服务的优势

  1. 小型化:每个微服务专注于单一功能,易于开发和维护。
  2. 自治性:微服务可独立开发、部署和扩展,不受其他服务影响。
  3. 松耦合:服务间通过定义良好的接口通信,内部实现细节对其他服务隐藏。
  4. 技术多样性:不同微服务可采用不同的编程语言、数据存储技术和框架。
  5. 独立部署:每个微服务可单独部署,无需影响整个系统。
  6. 容错性:单个服务故障不会导致整个系统崩溃。
  7. 易于扩展:可根据需求独立扩展特定服务,而不必扩展整个应用。
  8. 支持 CI/CD:微服务架构促进敏捷开发和持续集成/持续交付(CI/CD),加快功能交付速度。

微服务架构的核心优势在于其灵活性、可扩展性和容错性,但也带来了一些挑战,如服务间通信复杂性、数据一致性问题和分布式系统管理难度。


微服务的缺点

尽管微服务架构具有诸多优势,但也存在以下挑战和缺点:

  1. 复杂性增加
    • 系统被拆分为多个服务,需管理更多服务实例、网络通信、数据一致性等问题。

  2. 运维难度增大
    • 每个微服务需独立部署、监控、升级和维护,对自动化工具(如 Kubernetes)依赖性强。

  3. 服务间通信成本高
    • 服务间依赖 API 调用,可能引入网络延迟、故障点,并需处理分布式事务和负载均衡。

  4. 数据一致性难题
    • 传统 ACID 事务难以适用,需采用 Saga 模式、事件驱动或补偿事务等方案。

  5. 开发与测试复杂
    • 需考虑服务边界划分、接口设计、版本控制,测试需覆盖服务间兼容性和端到端功能。

  6. 团队组织与协作挑战
    • 团队需按服务划分,可能导致沟通成本增加,需更强的协调能力。

  7. 基础设施开销大
    • 每个服务运行在独立进程中,可能消耗更多硬件资源,并需单独的数据存储。

  8. 故障排查困难
    • 错误可能分布在多个服务中,定位问题比单体架构更复杂。

  9. 安全与权限管理复杂
    • 更多服务意味着更多安全入口,需严格管控访问权限,防止安全漏洞。


总结

微服务架构适合大型、复杂且需要高可扩展性的系统,但在实施时需权衡其带来的额外复杂性。通过合理的设计(如清晰的领域划分)、自动化运维工具(如 Docker、Kubernetes)和有效的团队协作,可以降低其负面影响。

微服务架构在在线视频分享系统中的具体体现

1. 小型化 & 自治性

优点体现

单体架构问题:在单体架构中,视频上传、审核、互动、搜索等功能耦合在一个代码库中,修改一个功能可能影响整个系统。
微服务拆分后
资源服务:只负责视频存储、转码、分片上传,可独立优化存储策略(如使用阿里云OSS)。
互动服务:专注处理评论、点赞、弹幕,可单独优化高并发写入(如用Redis缓存热门评论)。
管理后台服务:审核逻辑变更时,只需重新部署该服务,不影响主站服务。

举例
当视频转码需求从FFmpeg改为阿里云视频点播服务时,只需修改资源服务,无需改动其他服务。


2. 技术多样性

优点体现

单体架构限制:必须统一使用Java+SpringBoot+MySQL技术栈。
微服务灵活性
搜索服务:使用Elasticsearch(非Java技术栈)实现分词和推荐,比MySQL全文检索更高效。
实时弹幕:可用Go编写WebSocket服务,利用其高并发特性。
数据分析:用Python编写用户行为分析微服务,调用Spark进行大数据处理。

举例
互动服务中,弹幕功能需要高并发,可以用Go替代Java,而其他服务仍保持Java技术栈。


3. 独立部署 & 易于扩展

优点体现

扩展性
• 热门视频导致流量激增时,只需横向扩展主站服务资源服务的实例,无需扩展整个系统。
管理后台服务访问量低,可保持单实例运行。

举例
双11活动期间,通过Kubernetes快速扩容主站服务到10个实例,活动结束后缩回2个实例。


4. 容错性

优点体现

故障隔离
• 如果Elasticsearch宕机,搜索功能降级(返回缓存结果),但视频播放和评论仍可用。
资源服务故障时,网关可返回兜底视频(如提示“视频暂时无法加载”),而非整个系统崩溃。

举例
互动服务因数据库连接超时而崩溃时,用户仍能正常观看视频(主站服务不受影响)。


5. 复杂性增加

缺点体现

单体架构:所有功能在同一个进程内调用,无网络开销。
微服务问题
• 用户发布视频需跨服务调用:
主站服务 → 资源服务(上传)→ 管理后台服务(审核)→ 主站服务(展示)
• 一次API调用可能涉及多个服务,链路变长。

举例
用户上传视频后,需等待资源服务转码完成,再由管理后台服务审核,最后主站服务更新状态,流程复杂。


6. 运维难度增大

缺点体现

监控困难
• 单体架构只需监控一个应用,微服务需监控Nacos、Gateway、Seata、各微服务等10+组件。
• 需使用Prometheus+Grafana搭建全链路监控。

举例
某次上线后,用户反馈视频加载慢,运维需排查:

  1. 资源服务存储慢?
  2. 还是Gateway限流?
  3. 或是Nacos服务发现延迟?

7. 数据一致性难题

缺点体现

单体架构:用户点赞视频时,可用本地事务保证“视频点赞数+1”和“用户点赞记录”的一致性。
微服务问题
• 点赞涉及主站服务(更新视频点赞数)和互动服务(记录用户点赞),需引入Seata分布式事务。
• 极端情况下可能数据不一致(如点赞成功但计数未更新)。

举例
用户点赞时,互动服务记录成功,但主站服务因网络超时未更新计数,需人工补偿数据。


8. 开发与测试复杂

缺点体现

接口兼容性
• 如果主站服务修改了视频详情API的返回字段,但互动服务未适配,会导致前端弹幕加载失败。
测试困难
• 需搭建完整微服务环境才能测试“视频发布→审核→展示”全流程。

举例
开发新功能“视频合拍”,需协调资源服务(存储)、主站服务(展示)、互动服务(合拍评论)三个团队联调。


总结对比

维度单体架构微服务架构(本项目)
小型化所有功能耦合,修改风险高各服务独立,如资源服务可单独优化转码逻辑
技术多样性必须统一技术栈搜索用Elasticsearch,弹幕可用Go
扩展性必须整体扩展仅扩展高流量服务(如主站服务)
容错性一个模块崩溃导致整个系统不可用搜索服务宕机不影响视频播放
复杂性代码耦合但运维简单需管理服务发现、分布式事务、链路追踪等
数据一致性本地事务保证需引入Seata,仍有最终一致性风险

结论
微服务适合业务复杂、需快速迭代、团队规模较大的场景(如本视频系统),但会显著增加运维和开发成本。对于小型项目,单体架构仍是更简单高效的选择。

http://www.xdnf.cn/news/119.html

相关文章:

  • Linux之基础命令
  • 文件上传漏洞
  • 【Linux】进程概念(二):PCB,ps 和 fork
  • 《AI大模型应知应会100篇》第25篇:Few-shot与Zero-shot使用方法对比
  • 残差连接缓解梯度消失的含义;残差连接的真正含义:F(x) = y - x ;y=F(x)+x
  • vue3 nprogress 使用
  • 4月18日星期五今日早报简报微语报早读
  • 从PDF到播客:MIT开发的超越NotebookLM的工具
  • Python项目调用Java数据接口实现CRUD操作
  • 游戏一:俄罗斯方块简易版
  • 关于yarn和hadoop
  • Java学习手册:Java并发编程最佳实践
  • Spring Boot 3 + SpringDoc:打造接口文档
  • docker.desktop下安装普罗米修斯prometheus、grafana并看服务器信息
  • PHP腾讯云人脸核身获取NONCE ticket
  • 系统架构设计师:流水线技术相关知识点、记忆卡片、多同类型练习题、答案与解析
  • Python爬虫第17节-动态渲染页面抓取之Selenium使用下篇
  • 过去十年前端框架演变与技术驱动因素剖析
  • Linux网络编程 深入解析TFTP协议:基于UDP的文件传输实战
  • jQuery — DOM与CSS操作
  • 使用 PySpark 批量清理 Hive 表历史分区
  • Layui Table组件,设置data数据源,以及page为False,表格只能显示10条数据的问题
  • Spring Boot日志系统详解:Logback与SLF4J的默认集成
  • J值即正义——Policy Gradient思想、REINFORCE算法,以及贪吃蛇小游戏(三)
  • JVM对象创建全过程
  • 大模型面经 | DeepSpeed中ZeRO-1、ZeRO-2和ZeRO-3的区别是什么?
  • uniapp运行在app端如何使用缓存
  • 【ubuntu】在Linux Yocto的基础上去适配Ubuntu的wifi模块
  • 科技如何改变世界?
  • 微博辐射源和干扰机