[单master节点k8s部署]37.微服务(一)springCloud 微服务

news2024/11/24 15:45:15

微服务架构的一个重要特点是,它与开发中使用的具体编程语言技术栈无关。每个微服务都可以使用最适合其功能需求的语言或技术来实现。例如,一个微服务可以用Java编写,另一个微服务可以用Python、Go、Node.js等编写。微服务架构允许这种灵活性,因为每个服务都是独立的,负责处理特定的业务功能,且每个服务都有独立的开发、部署和执行环境。

微服务之间通常需要通过某种通信机制进行交互,RESTful API是最常见的选择之一。RESTful风格基于HTTP协议,并使用标准的HTTP方法(如GET、POST、PUT、DELETE)来操作资源。由于HTTP协议是通用的,且每个编程语言都提供了对HTTP协议的强大支持,采用RESTful API可以使不同技术栈编写的微服务通过统一的接口进行通信。

RESTful

REST是一种架构风格,定义了如何设计系统以通过网络操作资源,而HTTP是一种传输协议,RESTful API通常使用HTTP作为底层协议来实现REST的设计理念。RESTful API是遵循REST原则并通过HTTP提供服务的API,利用HTTP的特性,如通过URL标识资源,使用GET、POST、PUT、DELETE等方法操作资源,并保持无状态通信。RESTful API通过合理应用HTTP方法和状态码来实现对资源的管理和操作,是一种特定的网络接口设计方式。

尽管RESTful API是非常常见的通信方式,但微服务并不强制要求使用RESTful架构风格。根据系统的需求和性能要求,微服务也可以使用其他通信协议,如:

  • gRPC(基于HTTP/2的高效RPC框架)
  • GraphQL(灵活的查询语言)
  • 消息队列(如RabbitMQ、Kafka,用于异步通信)

微服务框架

第一代微服务架构:Spring Cloud由于基于REST的同步通信,服务之间的耦合性较高,调用链复杂时容易产生级联故障。此外,Spring Cloud的组件大多运行在应用层,随着服务数量的增加,管理复杂度上升。

Dubbo是阿里巴巴开源的面向服务的RPC框架,代表了第二代微服务架构。与Spring Cloud不同,Dubbo更强调高性能的RPC通信,适合服务数量较多、系统性能要求较高的场景。Dubbo的RPC通信方式虽然高效,但它的依赖更紧密,服务间的强耦合可能导致扩展性不如基于HTTP/REST的架构灵活。

Service Mesh代表了第三代微服务架构,它通过将服务间的网络通信功能下沉到基础设施层,使微服务更加关注业务逻辑,而不需要处理复杂的通信、负载均衡、监控等基础功能。

  • 零侵入性:与Spring Cloud和Dubbo不同,Service Mesh不需要修改应用代码。所有的网络通信、流量管理、监控、策略控制等都由Sidecar代理完成。应用和基础设施解耦,开发者不再需要关心通信细节。
  • 高级流量管理:Service Mesh能够提供更复杂的流量管理策略,如流量分割、灰度发布、熔断、限流等。这些功能可以通过配置实现,而无需在代码层面实现。
  • 可观测性和安全性:Service Mesh可以通过Sidecar代理自动采集服务的监控数据、日志、分布式追踪等信息,提升了系统的可观测性。同时,它还能实现服务间的加密通信,提高数据传输的安全性。

典型实现:Service Mesh的典型实现包括Istio、Linkerd和Consul,其中Istio是目前最为流行的解决方案,广泛应用于Kubernetes环境下。

优点:Service Mesh实现了真正的“服务与基础设施分离”,开发者可以专注于业务逻辑,基础设施层自动处理复杂的网络通信、监控、安全等问题。此外,随着服务数量的增加,Service Mesh可以统一管理服务的流量和安全策略,适合大规模、复杂分布式系统的管理需求。
缺点:Service Mesh的引入增加了系统的复杂性,特别是在早期部署和维护时,Sidecar代理的管理和监控可能成为新的挑战。此外,由于Sidecar代理的存在,Service Mesh的性能开销也需要考虑。

统一的配置管理中心

在微服务架构中,每个服务通常都是独立的应用,具有各自的配置文件,例如数据库连接、API密钥、第三方服务地址等。然而,随着微服务数量的增加,配置管理变得复杂且难以维护,因此需要一个统一的配置管理中心来简化这个过程。

在微服务中有三种配置,第一种是几乎不变的配置,一般被打包在容器镜像中,第二种是启动的时候需要的配置,一般通过环境变量的方式放在创建pod的deployment或者deamonset文件中。第三种是微服务统一的配置,需要通过配置中心下发。

配置中心 SpringCloud Config

SpringCloud Config 是一个解决分布式系统的配置管理方案,它包含了 server 和 client 两个部分。 server 用来获取远程的配置信息(默认为 Git 仓库),并且以接口的形式提供出去,client 根据 server 提供的接口读取配置文件,以便于初始化自己的应用。如果配置中心出现了问题,将导致灾难性 的后果,因此在生产环境下配置中心都会做集群,来保证高可用。此处配置高可用实际就是把多个配置中 心(指定同一个 Git 远程仓库)注册到注册中心。

全链路监控

对系统的监控和对调用关系的监控。

zipkin,skywalking,pinpoint,prometheus。

Springcloud组件

eureka

服务发现和注册的组件。包含eureka client 和eureka server。

各个节点启动之后,就会将自己的ip等网络信息提供给eureka server。在微服务架构中,Eureka 客户端的下载和配置通常发生在微服务实例启动的过程中在构建微服务时,开发者需要在项目的依赖管理文件中(如 pom.xml 或 build.gradle)添加 Eureka 客户端的依赖。当微服务实例启动时,Spring Boot 应用会自动初始化 Eureka 客户端。在启动过程中,Eureka 客户端会读取配置文件中的信息,并尝试连接到配置的 Eureka 服务器。

Eureka Client 通常分为两个角色:服务提供者(Service Provider)和服务消费者(Service Consumer)。服务提供者是实现具体业务逻辑的微服务,它向 Eureka 服务器注册自己,以便其他服务可以发现并调用它。服务消费者是调用其他微服务的客户端,它从 Eureka 服务器获取需要调用的服务的实例信息。在构建项目时下载的依赖是 Eureka Client 的两个角色中的 服务提供者(Service Provider) 和 服务消费者(Service Consumer) 的通用实现。

 eureka发起的操作有:

  • 服务注册:当微服务实例启动的时候,Eureka 客户端会向 Eureka Server 发送注册请求,包含自身的 IP、端口和状态信息。
  • 服务续约:Eureka 客户端会定期(通常每 30 秒)发送心跳请求,以续约其在 Eureka Server 上的注册状态,告知服务器它仍然活跃。
  • 服务下线:当微服务实例关闭或不再需要注册时,Eureka 客户端会向 Eureka Server 发送取消请求,以从注册表中移除自身的信息。

其中服务消费者发起的是以下两个:

  • 获取服务注册列表:服务消费者在需要调用其他服务时,会向 Eureka Server 查询当前的服务注册列表,以获取可用服务的实例信息。
  • 远程调用:服务消费者根据从 Eureka Server 获取的服务实例信息,通过 HTTP 或其他协议调用目标服务。

而Eureka server发起的操作为:集群中数据同步。

  • 在 Eureka 的集群模式中,Eureka Server 会在集群节点之间进行数据复制与同步,确保所有节点上的服务注册信息一致。
ribbon

ribbon是工作在消费者端的负载均衡,这意味着ribbon负载均衡是在服务消费者一侧执行的,而不是在服务提供者一侧或网关、代理等中间层执行的。Ribbon会通过服务注册中心(如Eureka)或通过配置文件中的静态列表,获取服务提供者的多个实例地址。通过某种负载均衡算法(如轮询、随机、权重等),ribbon选择一个服务实例来发送请求。这个负载均衡操作是发生在客户端的。

与eureka类似,ribbon也是一个嵌入在服务代码中的服务。假设服务 A 想调用服务 B,系统中可能存在多个服务 B 的实例(例如 B1, B2, B3),Ribbon 的工作流程如下:

  1. 服务 A 通过 Ribbon 从服务注册中心(如 Eureka)获取服务 B 的所有可用实例的列表。
  2. Ribbon 根据负载均衡算法(例如轮询)选择一个实例,比如 B2
  3. 服务 A 通过 Ribbon 发送请求到 B2 实例。

与nginx的对比:

nginx是一个独立的服务,提供负载均衡。但是nginx抽象了服务之间的通信,服务发起方不需要知道服务提供者的信息,只需要知道nginx服务器的地址,而ribbon的服务发起端(服务A)需要知道服务提供者(服务B)的所有实例信息。

  • Ribbon 可以实时检测服务实例的可用性和响应时间。如果某个实例的响应时间超过设定的阈值,Ribbon 会将其标记为不健康。
  • 智能路由:在选择服务实例时,Ribbon 不仅考虑负载均衡策略(如轮询、随机等),还会优先选择那些符合 SLA 标准的实例。
  • 容错处理:如果一个服务实例的性能下降到 SLA 标准以下,Ribbon 可以自动切换到其他健康的实例,避免影响用户体验。

Archaius 是 Netflix 提供的一个动态配置管理库,用于支持在运行时对应用配置进行动态更新。使用 Archaius 完成运行时配置的意思是,应用程序可以在不重新启动的情况下,实时更新和应用配置更改。Ribbon 作为客户端负载均衡器,可以根据不同的策略(如轮询、随机、权重)选择服务实例。通过 Archaius,Ribbon 的这些策略可以在运行时根据需求进行动态调整。

例如,如果当前的负载均衡策略是轮询,但系统负载增加时可以动态切换为权重负载均衡,Archaius 可以让你在不重启应用的情况下实现这一点。

Zuul
Zuul 是 SpringCloud 中的微服务网关,首先是一个微服务。也是会在 Eureka 注册中心中进行服务的注 册和发现。也是一个网关,请求应该通过 Zuul 来进行路由。Zuul 网关不是必要的,是推荐使用的。
Zuul的功能不如istio的gateway,而且Zuul也是需要单独部署一个微服务。
Hystrix

Netflix 开发的一个开源库,用于实现微服务架构中的容错管理。它的主要目的是在分布式系统中提高系统的稳定性和弹性,尤其是在面对服务调用失败或延迟时。Hystrix 在 SpringCloud 中负责服务熔断和服务降级的作用。

springCloud gateway

目前springcloud已经弃用了Zuul,转而使用springCloud gateway。springCloud gateway 已经集成了Hystrix,而且相比Zuul有更多的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209062.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV高级图形用户界面(5)获取指定滑动条(trackbar)的当前位置函数getTrackbarPos()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 返回滑动条的位置。 该函数返回指定滑动条的当前位置。 cv::getTrackbarPos() 函数用于获取指定滑动条(trackbar)的当前…

【C++差分数组】P1672何时运输的饲料

本文涉及知识点 C差分数组 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 P1672何时运输的饲料 原文比较啰嗦&#xff0c;我简述一下&#xff1a; 第x天运来F1(1<F1<1e6)千克的饲料&#xff0c;第D&#xff08;1<2e3)天还剩F2&…

数据结构-5.7.二叉树的层次遍历

一.演示&#xff1a; 1.初始化队列&#xff1a; 2.根结点入队&#xff1a; 3.判断队列是否为空&#xff0c;此时有根结点&#xff0c;说明不为空&#xff0c;则队头结点即根结点出队并访问&#xff0c;再先进它的左结点&#xff0c;最后进它的右结点&#xff1a; 4.之后对进来…

4.stm32 GPIO输入

按键简介 按键&#xff1a;常见的输入设备&#xff0c;按下导通&#xff0c;松手断开 按键抖动&#xff1a;由于按键内部使用的是机械式弹簧片来进行通断的&#xff0c;所以在按下和松手的瞬间会伴随有一连串的抖动 传感器模块简介 传感器模块&#xff1a;传感器元件&#…

如何使用ssm实现超市管理系统

TOC 10917ssm超市管理系统 系统概述 进过系统的分析后&#xff0c;就开始记性系统的设计&#xff0c;系统设计包含总体设计和详细设计。总体设计只是一个大体的设计&#xff0c;经过了总体设计&#xff0c;我们能够划分出系统的一些东西&#xff0c;例如文件、文档、数据等。…

专线监控的使用方法:运维团队的全面实战指南

在当今高度信息化的时代&#xff0c;专线网络已成为企业连接不同地域、保障业务连续性的重要基础设施。然而&#xff0c;随着网络架构的复杂化和业务需求的多样化&#xff0c;运维团队面临着前所未有的挑战。为了有效应对这些挑战&#xff0c;运维团队需要深入了解并熟练掌握专…

利用GPU的OpenCL和MLC-LLM框架运行小语言模型-地瓜RDK X5开发板-非量产算法仅供整活

RDK™ X5机器人开发套件&#xff0c;D-Robotics RDK X5搭载Sunrise 5智能计算芯片&#xff0c;可提供高达10 Tops的算力&#xff0c;是一款面向智能计算与机器人应用的全能开发套件&#xff0c;接口丰富&#xff0c;极致易用。 本文利用其32GFLOPS的一颗小GPU&#xff0c;支持…

60 mysql 存储引擎之静态格式 MyISAM

前言 我们这里来看一下 MyISAM 存储引擎, 我们常见的那些 user, db, table_priv, proc 等等是基于 MyISAM 这是我们经常会提及的 两种持久化的存储引擎之一, 一是 MyISAM存储引擎, 另外一个是 InnoDB存储引擎 我们这里来看一下 MyISAM 中固定长度的数据表的相关处理 mysql…

振动分析-35-滚动轴承全生命周期模式下的时域特征对比(实战)

文章目录 1 数据集概述1.1 轴承参数1.2 运行工况1.3 数据详情2 加载显示全量数据2.1 数据提取2.2 全寿命数据可视化3 每次测量的时域特征3.1 计算时域特征的函数3.2 水平和垂直对比35Hz12kN3.3 水平和垂直对比37.5Hz11kN3.4 水平和垂直对比40Hz10kN3.5 结果分析4 参考附录1 数据…

单链表速通后续!

目录 1>>闲话 2>>头删 3>>查找 4>>在指定位置之前插入 5>>删除指定结点 6>>指定位置之后插入 7>>删除指定位置之后的结点 特别思考&#xff1a; 8>>销毁单链表 Slist.h Slist.c test.c 9>>总结 1>>闲话…

C++一个很好的计时方法

C一个很好的计时方法 //记时LARGE_INTEGER t1;LARGE_INTEGER t2;LARGE_INTEGER f;QueryPerformanceFrequency(&f);QueryPerformanceCounter(&t1);Sleep(100);QueryPerformanceCounter(&t2);double time;time (double)(t2.QuadPart-t1.QuadPart)/(double)f.QuadPar…

机器学习篇-day06-集成学习-随机森林 Adaboost GBDT XGBoost

一. 集成学习思想 集成学习 原理 集成学习是机器学习中的一种思想&#xff0c;它通过多个模型的组合形成一个精度更高的模型&#xff0c;参与组合的模型称为弱学习器&#xff08;基学习器&#xff09;。训练时&#xff0c;使用训练集依次训练出这些弱学习器&#xff0c;对未知…

Chromium 如何查找前端 window.navigator, window.screen等对象在c++中的实现

以前端Navigator 对象为例&#xff1a; 1、直接在vscode里面搜索"Navigator" 过滤条件*.idl&#xff0c;这样可以搜到Navigator.idl对象文件。 2、打开Navigator.idl 可以看到平级目录对应的Navigator.h 和Navigator.cc定义 3、Navigator.idl会在out\Debug\gen\thir…

【系统集成中级】线上直播平台开发项目质量管理案例分析

【系统集成中级】线上直播平台开发项目质量管理案例分析 一、案例二、小林在项目质量管理中存在的问题&#xff08;一&#xff09;计划阶段缺失&#xff08;二&#xff09;测试用例编制与执行问题&#xff08;三&#xff09;质量管理流程问题&#xff08;四&#xff09;质量保证…

全金属的两足机器人钢铁侠开发

比较喜欢钢铁侠和终结者&#xff0c;其全金属的机身&#xff0c;反射着金属的光泽&#xff0c;透露出令人惊叹的美感。 这也是一个全金属机器人&#xff0c;周身有十几片铝片和四个舵机组成&#xff0c;可以叫他钢铁侠或者终结者。这么笨&#xff0c;这么小&#xff0c;可以说是…

【笔记】shell基本使用,超全,更新ing

一、shell的执行 1、执行命令但不输出结果到命令行 [rootlocalhost ~]$ command >/dev/null2、多命令顺序执行 命令 1;命令 2 #顺序执行命令&#xff0c;命令间无逻辑关联 命令 1&&命令 2 #命令1正确执行才执行命令2&#xff0c;否则不执行 命令 1||命令 2 #命令…

记录IDEA编译报错:不支持发行版本

一共四个地方&#xff0c;版本均保持一致

成分喵(一键查询食品/化妆品成分)

一款免费可以一键查询各大品牌食品和化妆品成分神器&#xff0c;无论是拍照、扫码又或者是商品链接都能查成分&#xff0c;还能根据成分查商品&#xff0c;而且各种成分的功效、作用和安全性都会一一标注出来&#xff0c;包括是否对身体有害、敏感风险等级等等。 下载&#xf…

大模型应用开发速成:一本通向LLM专家之路

大家好&#xff0c;今天给大家推荐一本大模型应用开发入门书籍《大模型应用开发极简入门》&#xff0c;本书对很多AI概念做了讲解和说明&#xff01; 朋友们如果有需要 《大模型应用开发极简入门》&#xff0c;扫码获取~ 本书主要讲解了以下几个方面的大模型技术&#xff1a; G…

技术发明一等奖!FISCO BCOS研究成果荣获CCF权威认可

近日&#xff0c;中国计算机学会&#xff08;CCF&#xff09;正式揭晓了2024年度“CCF科技成果奖”的获奖名单。FISCO BCOS开源工作组组长单位微众银行与清华大学合作的“安全可控高性能区块链基础平台”项目&#xff0c;凭借卓越的技术创新与显著的社会经济效益&#xff0c;荣…