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

微服务架构及常见微服务技术栈

一、微服务架构介绍

微服务是什么?

单体服务中拆分出来某个服务,称为微服务。单一应用程序构成的小服务。

微服务技术栈有哪些?

微服务技术栈除了SpringCloud,还有很多,比如常见的Redis、MQ也在这个范围,甚至是云原生也是微服务技术栈中的一部分。

微服务架构是什么?

一种思想,源自于马丁·福勒的一篇论文,将一个应用基于业务分解成一些小型而自治的架构思想。

关键点:

  • 独立的微服务:可以单独运行、更新、拓展,和其他服务之间做到解耦,并且服务之间最好要有独立的数据库,每个微服务都可以做到弹性伸缩。

  • 单一职责、高内聚:每个服务最好都是基于特定的业务功能进行构建的。

  • 云原生:将微服务运行在多台Pod容器内,并且还要提供各种监控的操作。

二、微服务架构的优势与挑战?

优势

  • 灵活性: 每个服务可以使用不用的语言去构建。整个产品是可以做到异构的。(Java,Python,Golang)

  • 可拓展:大流量的服务可以单独进行扩容,不影响其他服务。

  • 独立部署:更新一个微服务,不需要重启整个系统,对于敏捷式开发支持效果更好。

  • 团队自治:小团队服务特定的业务线,团队成员之间的干扰会特别少,对于敏捷式开发支持效果更好。

  • 容错性:不会因为某个服务的宕机导致整个系统不可用。

  • ......

经历回顾:先前,在带领学生团队开展大创项目时,我曾想过一个问题,我们软件采用微服务还是单体?我仅对这俩进行分析,当时项目之初,想着大家都能参与进来,4名后端同学进行项目的搭建,在一期需求的时候,刚对项目整体进行搭建,有的负责日志、异常处理等,有的负责逆向工程、基础功能,项目整体架构的搭建。我印象很清晰,有天彻夜修改一个问题,因为是Git协作开发,因缺陷导致项目无法运行,其他同学无法进行开发调试工作,而这也恰恰体现出单体项目团队自治的薄弱点。当时采用敏捷开发,哈哈,这会想来也是有点假敏捷了。项目分期一方面赶工,另一方面却想要留下文档,从需求分析、数据库设计、接口定义、代码文档等,如果想要从企业的角度出发、从敏捷开发的“灵魂”出发,留下成篇文档显然不行。

挑战

  • 分布式复杂性:服务间通讯、网络延迟、数据一致性问题。(分布式锁、事务、分布式ID、分布式调度等)

  • 运维难度:部署、监控、日志分散。

  • 性能问题:服务间通讯/调用 是存在网络IO成本的,无法规避,所以需要各种方式进行优化程序。

  • 人力、金钱成本:架构设计会导致基础人力成本增加、服务器的成本,运维监控成本的提高。

三、微服务常见的组件

服务的注册与发现:

  • 组件:Nacos、Eureka、Consul、Zookeeper……

  • 解决的问题:服务之间调度的地址问题还有服务上下线监控相关等

负载均衡(客户端负载均衡):

  • 组件:Ribbon、LoadBalancer……

  • 解决的问题:基于 服务名 拉取到多个服务地址信息后,在里面选一个

配置中心:

  • 组件:Nacos、Config、Apollo……

  • 解决的问题:统一管理各个服务组件的配置信息、还有配置动态刷新的效果……

熔断降级:

  • 组件:Hystrix、Sentinel……

  • 解决的问题:解决服务雪崩,给接口提供快速失败(限流、异常、超时、熔断)的手段,返回托底数据……

API网关:

  • 组件:Zuul、Gateway……

  • 解决的问题:后端服务的入口,可以在这统一的做一些限流、鉴权等操作……

负载网关:

  • 组件:Nginx、Kong、Tengine……

  • 解决的问题:客户端请求的入口,在第一步抗住客户端的大流量,负载到各个API网关服务……

消息队列:

  • 工具:RabbitMQ、RocketMQ、Kafka、Stream……

  • 解决的问题:解耦、异步、削峰、大数据传输……

链路追踪:

  • 工具:Sleuth + Zipkin、Skywalking

  • 解决的问题:快速定位问题,更舒服的方式查看整个调用链路……

容器化:

  • 工具:Docker、Containerd、Kubernetes、GraalVM……

  • 解决的问题:快速部署、弹性伸缩…………

监控、日志:

  • 工具:Prometheus + Grafana、ELK、EFK

  • 解决的问题:监控各个容器和硬件资源,收集日志,方便错误排查……

CI、CD:

  • 工具:Jenkins、KuberSphere……

  • 解决的问题:自动化测试、自动化部署

存储………………

http://www.dtcms.com/a/316290.html

相关文章:

  • PromQL(Prometheus 查询语言)语法详解
  • 2um 精度 + 130mm 深孔扫描:新启航激光频率梳方案重塑 3D 轮廓测量标准
  • 【拓扑序】P6286 [COCI 2016/2017 #1] Cezar|省选-
  • 前端遇到页面卡顿问题,如何排查和解决?
  • DM8日常运维命令总结(四)
  • 游戏画面总是卡顿怎么办 告别延迟畅玩游戏
  • Go语言 泛型
  • TypeScript 中的协变与逆变
  • 203.移除链表元素 707.设计链表 206.反转链表
  • Python ttkbootstrap桌面应用开发示例
  • 创建一个可以edit的graph-node-test的永久登录dashboard的token
  • vue3通过按钮实现横向滚动或鼠标滚动横坐标滚动
  • 预测性维护:数字孪生如何重塑航空航天维修与寿命管理
  • Java技术栈/面试题合集(13)-网络篇
  • 李亚鹤:河南息县:淮河金沙滩开园 再添亲水休闲文旅地
  • 在Maxscript中随机化对象变换、颜色和材质
  • 拖车式变电站:灵活电力供应的“移动堡垒”,驱动全球能源转型新引擎
  • nuxt学习笔记
  • 学术论文命名:策略、方案、方法三者的区别
  • 使用Docker Desktop部署MySQL8.4.3
  • LeetCode 149:直线上最多的点数
  • 深入理解 C 语言中的拷贝函数
  • 多模态新方向|从数据融合到场景落地,解锁视觉感知新范式
  • 智能驾驶再提速!批量苏州金龙L4级自动驾驶巴士交付杭州临平区
  • 结合opencv解释图像处理中的结构元素(Structuring Element)
  • 使用PyQT创建一个简单的图形界面
  • 【面试场景题】日志去重与统计系统设计
  • 人工智能领域、图欧科技、IMYAI智能助手2025年5月更新月报
  • UGUI源码剖析(1):基础架构——UIBehaviour与Graphic的核心职责与生命周期
  • Git 中**未暂存**和**未跟踪**的区别: