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

微服务杂谈

几个概念


        还是第一次听说Spring Cloud Alibaba ,真是孤陋寡闻了,以前只知道 SpringCloud 是为了搭建微服务的,spring boot 则是快速创建一个项目,也可以是一个微服务 。那么SpringCloud 和 Spring boot 有什么区别呢?SpringCloud是管路整个服务上的各个微服务,会依赖spring boot ,但是Spring boot也可以是普通的项目,也可以是微服务 所以不一定需要依赖Spring cloud 。

        那再来说一下Spring Cloud Alibaba和 SpringCloud 关系,Spring Cloud Alibaba 是 SpringCloud 的一个子集。Spring Cloud主要依赖于Netflix OSS作为其核心组件,然而Netflix OSS的维护已经逐渐减少,为了弥补这一缺失并跟进最新的技术发展,阿里巴巴提供了Spring Cloud Alibaba。

Spring Cloud Alibaba 组件有哪些?

Nacos:作为注册中心和配置中心,为微服务应用程序的服务发现和动态配置提供了一种更现代的解决方案。

Sentinel:用于流量控制、熔断降级和系统负载保护,使得应用程序能够在面对复杂的网络环境时保持稳定。

RocketMQ:作为分布式消息队列,用于在微服务之间实现异步通信和解耦。

Dubbo:作为高性能的RPC框架,支持跨服务之间的远程调用。

Seata : 分布式事务解决方案

除了上面这些之外,使用 Spring Cloud Alibaba 的时候一般会搭配下面这些 Spring Cloud 组件一起使用:

  • OpenFeign:轻量级 RESTful 的 HTTP 服务客户端,用于替代已经进入停更维护状态的 Feign(Netflix Feign)
  • Gateway:用于网关服务,实现请求的转发和路由。
  • Ribbon:用于客户端负载均衡,将请求分发给不同的微服务实例。

        配置文件: 

        <!-- Dubbo Spring Cloud Starter -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

     

Spring CloudAlibaba 总结
1. 背景与由来:Spring Cloud Alibaba是由阿里巴巴推出的开源项目,源于阿里巴巴在构建大规模分布式系统时的实际需求。它整合了阿里巴巴自己的核心技术和Spring Cloud生态系统,提供了一个完整的微服务解决方案。

2. 功能丰富:Spring Cloud Alibaba提供了多个核心组件,包括Nacos(服务注册与发现)、Sentinel(流量控制、熔断降级)、RocketMQ(分布式消息中间件)、Dubbo(远程服务调用)等。这些组件为构建微服务应用提供了必要的基础设施和支持。

3. 与Spring Cloud的整合:作为Spring Cloud生态系统的一部分,Spring Cloud Alibaba与Spring Cloud的其他组件紧密结合,使得开发者可以在现有的Spring Cloud技术栈上无缝地集成和扩展应用。

4. 国内应用普及:随着国内企业对微服务架构的认知不断提升,Spring Cloud Alibaba作为一个专注于微服务的框架,逐渐得到了广泛应用。阿里巴巴的背景和技术实力也加速了Spring Cloud Alibaba在国内的普及。

5. 优秀的社区支持:Spring Cloud Alibaba拥有一个活跃的开源社区,吸引了许多国内开发者积极参与到项目的开发和贡献中。社区的支持为项目的不断改进和完善提供了有力的支持。


组件nacos:

配置文件:

        <!-- Spring Cloud Nacos Service Discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

1. nacos简介

   nacos是阿里巴巴开源的动态服务发现、配置和服务管理组件。nacos的核心功能主要有:

  • 服务注册:服务提供方向nacos注册服务
  • 服务发现:服务消费方从nacos获取到服务提供方的调用信息
  • 配置管理:作为配置中心,统一管理配置文件。使得配置文件可以动态修改而无需重启服务

 2. nacos服务注册原理


1、每个服务提供者都会引入nacos-client的依赖,并且需要配置nacos的服务地址,当服务提供者启动的时候,nacos-client就会将服务提供者注册到nacos服务上去

2、之后服务提供者会定期(默认5s一次)向nacos发送心跳包请求(包含信息:服务名,ip,端口,权重,集群名等),告诉nacos服务“我还活着”,nacos收到这个心跳包之后就会在服务列表中找到这个服务,并将状态设置为健康,返回心跳间隔信息给到nacos-client。当超过一定时间(默认15s)没有收到服务提供者的心跳包后,就会更新其状态为不健康。如果30s没有收到服务提供者的心跳包,就会将其从服务列表中剔除。所以可以看到nacos认为服务不健康后并不会马上将其剔除。

3、服务调用者(如网关)会定期(默认10s一次)向nacos获取服务列表,并且会缓存到本地,然后调用时就是从本地的服务列表调用的

springcloud:注册中心、配置中心组件nacos详解(四)_nacos-client-CSDN博客

3. nacos的使用

Spring Cloud Nacos 服务注册与发现_spring.cloud.nacos.discovery.service-CSDN博客


组件dubbo:

微服务之间部署在不同的物理机器上那怎么通信呢,rpc 远程调用服务,dubbo的功能是能两两通信,dubbo组件中的zookerper或者 nacos 是服务的注册和发现。zookeper或者 nacos就好比一个“淘宝”平台,让买家能够发现卖家,买家买(通信)东西,就是通过dubbo。

dubbo可以替换sping cloud哪些组件?

Dubbo主要用于服务之间的远程调用和通信。虽然Dubbo本身并不是Spring Cloud的一部分,但它可以与Spring框架进行集成,并在某些场景下替换Spring Cloud中的某些组件或功能。具体来说,Dubbo可以替换或补充Spring Cloud中的以下组件或功能:

服务注册与发现:Dubbo使用自身的注册中心组件(如Zookeeper、Nacos、Etcd等),可以替换Spring Cloud中的Eureka、Consul等服务注册与发现组件。Dubbo的注册中心用于维护服务提供者和消费者的信息,实现服务的自动注册、发现和管理。

远程调用:Dubbo提供了基于RPC的远程调用机制,可以替换Spring Cloud中基于HTTP的远程调用方式(如使用RestTemplate或Feign)。Dubbo的RPC调用更加轻量级和高效,适用于大规模、高并发的服务调用场景。

负载均衡:Dubbo内置了多种负载均衡策略(如随机、轮询、一致性哈希等),可以替换或补充Spring Cloud中的负载均衡组件。Dubbo的负载均衡机制能够根据服务提供者的性能和负载情况,智能地分配请求,提高系统的吞吐量和稳定性。

虽然Dubbo可以在某些方面替换Spring Cloud的组件,但两者在设计和定位上存在差异。Dubbo更专注于服务之间的远程调用和通信,而Spring Cloud则是一个更完整的微服务解决方案,提供了服务治理、配置管理、熔断降级、智能路由等一系列功能.

有一个疑问?不是还有一个nacos么 ,为什么不用nacos 还再引出一个zookerper呢 ??

dubbo作为国内一款主流的分布式系统,支持的注册中心有zookeeper、nacos和redis等第三方中间件,同时也支持Simple和Multicast的方式。zk和nacos可能是最常使用的方式,到底谁更胜一筹呢?

nacos 和 zookeeper 

一场事故告诉你zookeeper和nacos谁更适合做注册中心_为什么用nacos不用zk-CSDN博客

组件gateway:

1.k8s kvm docker 

Docker、Kubernetes(K8s)和KVM辨析_kvm docker-CSDN博客

2. 微服务的缩容

        减少实例数

3. 微服务常见问题


http://www.kler.cn/news/302989.html

相关文章:

  • Android Studio打开Modem模块出现:The project ‘***‘ is not a Gradle-based project
  • 北京市推进车路城协同发展的创新实践与未来展望
  • 【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237
  • torchvision.transforms.ToPILImage()使用
  • 【工具】前端JavaScript代码在线执行器 方便通过网页 手机测试js代码
  • 基于深度学习的时空预测
  • 谷粒商城の缓存篇
  • 软件工程进度管理
  • Linux进阶命令-top
  • 学习记录之C语言学习笔记2
  • 【笔记】绪论 轨道交通材料及其加工工艺
  • 密码学---黄道十二宫
  • 春秋云境靶场之CVE-2022-32991
  • 统计在线人数,百万数据表,查询很慢,如何统计,用php如何实现
  • 产品经理如何转型为AI产品经理,如何理解AI产品工程化
  • 工厂安灯系统在优化生产流程上的优势
  • redis底层—数据结构
  • 动态规划问题
  • day48
  • 【hot100-java】【接雨水】
  • NCBI-get-spesis-ref-IDs_fast.py
  • AI与艺术的碰撞:当机器开始创作,创造力何在?
  • HarmonyOS4升级到Harmonyos Next(Api 11)系列教程
  • 音视频开发之旅(93)-图像超分增强之Real-ESRGAN
  • Vue 3 组合式 API
  • C++ | Leetcode C++题解之第393题UTF-8编码验证
  • RabbitMQ SDK 支持发布、消费,连接恢复,死信队列,多种使用场景
  • db.fsyncLock() 和 db.fsyncUnlock()
  • 前后端分离项目实现SSE
  • Redis Sentinel(哨兵)详解