微服务杂谈
几个概念
还是第一次听说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. 微服务常见问题
相关文章:
微服务杂谈
几个概念 还是第一次听说Spring Cloud Alibaba ,真是孤陋寡闻了,以前只知道 SpringCloud 是为了搭建微服务的,spring boot 则是快速创建一个项目,也可以是一个微服务 。那么SpringCloud 和 Spring boot 有什么区别呢?S…...
【Pandas操作2】groupby函数、pivot_table函数、数据运算(map和apply)、重复值清洗、异常值清洗、缺失值处理
1 数据清洗 #### 概述数据清洗是指对原始数据进行处理和转换,以去除无效、重复、缺失或错误的数据,使数据符合分析的要求。#### 作用和意义- 提高数据质量:- 通过数据清洗,数据质量得到提升,减少错误分析和错误决策。…...
如何分辨IP地址是否能够正常使用
在互联网的日常使用中,无论是进行网络测试、网站访问、数据抓取还是远程访问,一个正常工作的IP地址都是必不可少的。然而,由于各种原因,IP地址可能无法正常使用,如被封禁、网络连接问题或配置错误等。本文将详细介绍如…...
Sqoop 数据迁移
Sqoop 数据迁移 一、Sqoop 概述二、Sqoop 优势三、Sqoop 的架构与工作机制四、Sqoop Import 流程五、Sqoop Export 流程六、Sqoop 安装部署6.1 下载解压6.2 修改 Sqoop 配置文件6.3 配置 Sqoop 环境变量6.4 添加 MySQL 驱动包6.5 测试运行 Sqoop6.5.1 查看Sqoop命令语法6.5.2 测…...
【数据结构】排序算法系列——希尔排序(附源码+图解)
希尔排序 算法思想 希尔排序(Shell Sort)是一种改进的插入排序算法,希尔排序的创造者Donald Shell想出了这个极具创造力的改进。其时间复杂度取决于步长序列(gap)的选择。我们在插入排序中,会发现是对整体…...
c++(继承、模板进阶)
一、模板进阶 1、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中…...
【机器学习】从零开始理解深度学习——揭开神经网络的神秘面纱
1. 引言 随着技术的飞速发展,人工智能(AI)已从学术研究的实验室走向现实应用的舞台,成为推动现代社会变革的核心动力之一。而在这一进程中,深度学习(Deep Learning)因其在大规模数据处理和复杂问题求解中的卓越表现,迅速崛起为人工智能的最前沿技术。深度学习的核心是…...
WebLogic 笔记汇总
WebLogic 笔记汇总 一、weblogic安装 1、创建用户和用户组 groupadd weblogicuseradd -g weblogic weblogic # 添加用户,并用-g参数来制定 web用户组passwd weblogic # passwd命令修改密码# 在文件末尾增加以下内容 cat >>/etc/security/limits.conf<<EOF web…...
leetcode:2710. 移除字符串中的尾随零(python3解法)
难度:简单 给你一个用字符串表示的正整数 num ,请你以字符串形式返回不含尾随零的整数 num 。 示例 1: 输入:num "51230100" 输出:"512301" 解释:整数 "51230100" 有 2 个尾…...
Python GUI入门详解-学习篇
一、简介 GUI就是图形用户界面的意思,在Python中使用PyQt可以快速搭建自己的应用,自己的程序看上去就会更加高大上。 有时候使用 python 做自动化运维操作,开发一个简单的应用程序非常方便。程序写好,每次都要通过命令行运行 pyt…...
QT5实现https的post请求(QNetworkAccessManager、QNetworkRequest和QNetworkReply)
QT5实现https的post请求 前言一、一定要有sslErrors处理1、问题经过2、代码示例 二、要利用抓包工具1、问题经过2、wireshark的使用3、利用wireshark查看服务器地址4、利用wireshark查看自己构建的请求报文 三、返回数据只能读一次1、问题描述2、部分代码 总结 前言 QNetworkA…...
vscode 使用git bash,路径分隔符缺少问题
window使用bash --login -i 使用bash时候,在系统自带的terminal里面进入,测试conda可以正常输出,但是在vscode里面输入conda发现有问题 bash: C:\Users\marswennaconda3\Scripts: No such file or directory实际路径应该要为 C:\Users\mars…...
F12抓包10:UI自动化 - Elements(元素)定位页面元素
课程大纲 1、前端基础 1.1 元素 元素是构成HTML文档的基本组成部分之一,定义了文档的结构和内容,比如段落、标题、链接等。 元素大致分为3种:基本结构、自闭合元素(self-closing element)、嵌套元素。 1、基本结构&…...
android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。
1、先上一个图:这个是keystore无效的原因 之前在安装这个旧版本android studio的时候呢,安装过一版最新的android studio,然后通过模拟器跑过测试的demo。 2、运行旧的项目到模拟器的时候,就报错了: Execution failed…...
SQL入门题
作者SQL入门小白,此栏仅是记录一些解题过程 1、题目 用户访问表users,记录了用户id(usr_id)和访问日期(log_date),求出连续3天以上访问的用户id。 2、解答过程 2.1数据准备 通过navicat创建数据…...
Python实战:实战练习案例汇总
Python实战:实战练习案例汇总 **Python世界系列****Python实践系列****Python语音处理系列** 本文逆序更新,汇总实践练习案例。 Python世界系列 Python世界:力扣题43大数相乘算法实践Python世界:求解满足某完全平方关系的整数实…...
zabbix之钉钉告警
钉钉告警设置 我们可以将同一个运維组的人员加入到同一个钉钉工作群中,当有异常出现后,Zabbix 将告警信息发送到钉钉的群里面,此时,群内所有的运维人员都能在第一时间看到这则告警详细。 Zabbix 监控系统默认没有开箱即用…...
《OpenCV计算机视觉》—— 对图片进行旋转的两种方法
文章目录 一、用numpy库中的方法对图片进行旋转二、用OpenCV库中的方法对图片进行旋转 一、用numpy库中的方法对图片进行旋转 numpy库中的 np.rot90 函数方法可以对图片进行旋转 代码实现如下: import cv2 import numpy as np# 读取图片 img cv2.imread(wechat.jp…...
Python 错误 ValueError 解析,实际错误实例详解 (一)
文章目录 前言Python 中错误 ValueError: No JSON object Could Be Decoded在 Python 中解码 JSON 对象将 JSON 字符串解码为 Python 对象将 Python 对象编码为 JSON 字符串Python 中错误 ValueError: Unsupported Pickle Protocol: 3Python 中的 Pickling 和 UnpicklingPython…...
[java][git]上传本地代码及更新代码到GitHub教程
上传本地代码及更新代码到GitHub教程 上传本地代码 第一步:去github上创建自己的Repository,创建页面如下图所示: 红框为新建的仓库的https地址 第二步: echo "# Test" >> README.md 第三步:建立g…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用
阻止除自定义标签之外的所有标签 先输入一些标签测试,说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时(如通过点击或键盘导航&…...
