学习笔记之微服务(一)

news2024/11/25 4:24:22

一、了解微服务

1、服务架构演变

**单体架构:**所有业务功能都集中在一个项目中开发,打成一个包部署。

优点:架构简单、部署成本低

缺点:耦合度高

在这里插入图片描述

分布式架构:根据业务拆分系统功能,每个业务模块独立项目开发,为一个服务。

优点:耦合度降低、有利于升级扩展

缺点:维护开发变复杂,如需考虑服务拆分粒度、服务集群维护、服务间调用、服务状态感知

在这里插入图片描述

**微服务:**是一种经过良好架构设计的分布式架构方案。

  • 单一职责,每个服务都对应唯一业务能力,做到单一职责
  • 面向服务,微服务对外暴露业务接口
  • 自治,团队独立、技术独立、数据独立、部署独立

在这里插入图片描述

微服务结构:

在这里插入图片描述

2、微服务技术对比
DubboSpringCloudSpringCloudAlibaba
注册中心Zookeeper、RedisEureka、ConsulNacos、Eurake
服务远程调用Dubbo协议Feign(http协议)Dubbo、Feign
配置中心SpringCloudConfigSpringCloudConfig、Nacos
服务网关SpringCloudGateway、ZuulSpringCloudGateway、Zuul
服务监控和保护dubbo-admin,功能弱HystrixSentinel

二、Eurake注册中心

1、作用

  • 服务启动时向Eureka注册信息,消费者根据服务名称向Eureka拉取信息
  • 当存在多个服务,利用负载均衡算法,从服务列表中挑一个服务
  • 服务会每隔30s向Eurake发送心跳,报告健康状态,并且Eurake会记录更新,心跳不正常的服务会被踢出
    在这里插入图片描述

Eurake架构中,微服务角色有两类:

  • Eurake Server:

    • 记录服务信息
    • 心跳监控
  • Eurake Client:

    • Provider:服务提供者

      • 注册信息到Eurake Server
      • 每隔30s向 Eurake Server 发送心跳
    • Consumer:服务消费者

      • 根据服务名,从Eurake Server拉取服务列表
      • 负载均衡,选中一个微服务发起远程调用

三、Ribbon负载均衡

1、负载均衡的流程
在这里插入图片描述
2、负载均衡策略
Ribbon负载均衡规则由 IRule 接口定义,每个子接口都是一种规则。
在这里插入图片描述

负载均衡规则类规则描述
RoundRobinRule简单轮询,默认
AvailabilityFilteringRule忽略并发数过高和短路状态的服务器(超过配置并发数和3次连接失败)
WeightedResponseTimeRule为每个服务器赋予一个权重值,服务器响应时间越长,权重越小。该规则会随机选择服务器,权重值影响服务器的选择
ZoneAvoidanceRule使用Zone对服务器分类,再对Zone内多个服务做轮询
BestAvailableRule选择并发数较低的服务器
RandomRule随机选择可用的
RetryRule重试机制的选择逻辑

3、饥饿加载
Ribbon默认采用懒加载,即第一次访问才会创建LoadBalanceClient,请求时间会很长。
饥饿加载会在项目启动时创建。

ribbon:
	eager-load:
		enabled: true	# 开启饥饿加载
		clients: userService # 指定对userService服务饥饿加载

四、Nacos 注册中心

Nacos是Alibaba的产品,现是SpringCloud组件,国内受欢迎程度较高。
在这里插入图片描述
1、服务注册到Nacos

  1. 添加spring-cloud-alibaba的管理依赖
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-alibaba-dependencies</artifactId>
	<version>2.2.6.RELEASE</version>
	<type>pom</type>
	<scope>import</scope>
</dependency>
  1. 添加nacos客户端依赖
<!-- nacos客户端依赖 -->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 添加 nacos地址
spring:
	cloud:
		nacos:
			server-addr: localhost:8848 # nacos 服务端地址 

2、Nacos服务分级存储模型
容灾等考虑,将服务-实例,再划分为 服务-集群-实例。

  • 一级是服务,如userService
  • 二级是集群,如北京、上海
  • 三级是实例,如上海部署了userService的服务器
    在这里插入图片描述
  1. 配置集群名称:
spring:
	cloud:
		nacos:
			server-addr: localhost:8848 # nacos 服务端地址 
			discovery:
				cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
  1. 然后在order-service中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务:
userservice:
	ribbon:
		NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 

NacosRule负载均衡策略

  • 优先选择同集群服务实例列表
  • 本地集群找不到提供者,才去其它集群寻找,并且会报警告
  • 确定了可用实例列表后,再采用随机负载均衡挑选实例

3、Nacos 权重负责均衡

Nacos提供权重配置来控制访问频率,权重越大访问频率越高(0 ~ 1 之间)。
权重设为0,则完全不被访问。

在这里插入图片描述
4、Nacos 环境隔离 namespace
Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离

  • 每个namespace有唯一ID
  • 服务设置namespace使用ID
  • 不同namespace的服务互不可见

在这里插入图片描述

  1. 创建namespace
    在这里插入图片描述
  2. 配置添加 namespace
spring:
	datasource:
	  url: jdbc:mysql://localhost:3306/heima?useSSL=false
	  username: root
	  password: 123
	  driver-class-name: com.mysql.jdbc.Driver 
	cloud:
	  nacos:
		server-addr: localhost:8848
		discovery:
		  cluster-name: SH # 上海
		  namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID

5、临时实例与非临时实例
临时实例宕机时,会从nacos的服务列表中剔除,而非临时实例则不会

spring:
	cloud:
	  nacos:
		discovery:
		  ephemeral: false # 设置为非临时实例

6、Nacos与Eureka的区别
共同点:

  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测

不同点:

  • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
  • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

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

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

相关文章

微信小程序map 之个性化地图(日出日落主题)

微信小程序map 之个性化地图&#xff08;日出日落主题&#xff09; 个性化地图之根据日出日落时间动态变换地图主题个性化前的准备进入腾讯地址服务官网小程序开发html 代码. layer-style 编号为样式名称js代码. 注意的是&#xff0c;layer-style只能定义一次&#xff0c;所以值…

Yarn【常用命令】

1、yarn application 查看Application运行情况 1.1、列出所有Application yarn application -list 可以通过Web UI端来查看&#xff1a; 1.2、根据Application状态过滤&#xff1a; yarn application -list -appStates &#xff08;所有状态&#xff1a; ALL 、 NEW 、 NEW…

Spring Cloud Alibaba 同时兼容dubbo与openfeign

一、前言 dubbo与springcloud都可以单独作为微服务治理框架在生产中进行使用&#xff0c;但使用过springcloud的同学大概了解到&#xff0c;springcloud生态的相关组件这些年已经逐步停更&#xff0c;这就导致在服务架构演进过程中的迭代断层&#xff0c;以至于一些新的技术组…

聚合/组合

谨慎使用继承的方式来进行扩展&#xff0c;优先使用聚合/组合的方式来实现。 Father类里有两个方法A和方法B&#xff0c;并且A调用了B。子类Son重写了方法B&#xff0c;这时候如果子类调用继承来的方法A&#xff0c;那么方法A调用的就不再是Father.B()&#xff0c;而是子类中的…

使用kali里的dnschef进行DNS欺骗

1. 前言 DNSChef是针对渗透测试人员和恶意软件分析师的高度可配置的DNS代理。它能够精细配置哪些DNS回复以修改或简单地代理真实响应。为了利用该工具&#xff0c;您必须手动配置DNS服务器以指向DNSChef。 2. 执行参数 选项参数&#xff1a; -h,--help显示帮助信息并退出--f…

C语言:计算 1! + 2! + 3! + ... + n!

题目&#xff1a; 从键盘输入一个值n&#xff0c;计算 1的阶乘 至 n的阶乘 的和&#xff0c; 如&#xff1a;输入10&#xff0c;计算 1的阶乘 至 n的阶乘 的和 --> 计算&#xff1a;1! 2! 3! ... 10! 思路一&#xff1a; 效率比较低&#xff0c;会重复计算之前计算过的…

Stable Diffusion 从听说到超神日记

1.安装模型&#xff08;B站搜秋叶&#xff09; 2.下载模型&#xff0c;安装好的界面有模型下载 有了上面模型已经可以根据模型风格去生成一些照片了 3.使用Additional Networks/lora模型 模型大多都是继承了很多网友自行训练的图库模型&#xff0c;各类风格都有&#xff01; …

分享一个卡通人物

这几天较忙&#xff0c;像它一样&#xff1a; 代码在这里&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>卡通打字</title><script src"https://s3-us-west-2.amazonaws…

《MySQL(五):基础篇- 多表查询》

文章目录 5. 多表查询5.1 多表关系5.1.1 一对多5.1.2 多对多5.1.3 一对一 5.2 多表查询概述5.2.1 数据准备5.2.2 概述5.2.3 分类 5.3 内连接5.4 外连接5.5 自连接5.5.1 自连接查询5.5.2 联合查询5.6.2 标量子查询5.6.3 列子查询5.6.5 表子查询 5.7 多表查询案例 5. 多表查询 我…

【Sql】根据字段分组排序,取其第一条数据

【Sql】根据字段分组排序&#xff0c;取组内第一条数据 【一】问题描述【二】解决方案&#xff08;oracle和mysql都可用&#xff09;【三】总结 【一】问题描述 &#xff08;1&#xff09;问题描述 有时候我们需要对数据进行去重处理&#xff0c;例如查询结果里的文件名有重复…

常用模拟低通滤波器的设计——契比雪夫I型滤波器

目录 常用模拟低通滤波器的设计——契比雪夫I型滤波器 1、cheb1ap 函数 2、cheb1ord 函数 3、cheby1函数 4、实例演示 常用模拟低通滤波器的设计——契比雪夫I型滤波器 巴特沃斯滤波器的频率特性曲线在通带和阻带内&#xff0c;幅度特性是单调下降的&#xff0c;如果阶次一…

RISC-V体系结构的U-Boot引导过程

RISC-V体系结构的U-Boot引导过程 flyfish BootLoader Boot是Bootstrap&#xff08;鞋带&#xff09;的缩写&#xff0c;它来自于一句谚语&#xff1a;“Pull oneself up by one’s own bootstraps”&#xff0c;直译的意思是“拽着鞋带把自己拉起来” 干这件事&#xff0c;得…

文心一言 VS 讯飞星火 VS chatgpt (33)-- 算法导论5.2 5题

五、设A[1…n]是由n个不同数构成的数列。如果i<j且A[i]>A[j]&#xff0c;则称(i&#xff0c;j)对为A的一个逆序对(inversion)。(参看思考题2-4 中更多关于逆序对的例子。)假设A的元素构成(1&#xff0c;2&#xff0c;… &#xff0c;n)上的一个均匀随机排列。请用指示器随…

Win11配置Anaconda-Cuda-Pytorch-Tenserflow环境

之前搞了一个月左右时间用WSL2跑模型&#xff0c;后来发现还是不太习惯&#xff08;其实用不明白&#xff09;&#xff0c;就转成Windows了。这次也是记录一下自己配环境的过程&#xff0c;以免下次还需要 安装Anaconda 下载方式 Anaconda官网清华镜像下载 tip&#xff1a;…

OpenHarmony源码解析(11): hiview维测平台

作者: 鸿湖万联(武汉) 许文龙 1、概述 Hiview是一个跨平台的终端设备维测服务集,由插件管理平台和基于平台上运行的服务插件来构成整套系统。Hiview维测服务是由HiSysEvent事件驱动的,其核心为分布在系统各处的HiSysEvent桩点,格式化的事件会通过HiSysEvent打点API上报至H…

Tomcat【尚硅谷】

一、Tomcat基础 1、常见的web服务器 概念 服务器&#xff1a;安装了服务器软件的计算机服务器软件&#xff1a;接收用户的请求&#xff0c;处理请求&#xff0c;做出响应web服务器软件&#xff1a;在web服务器软件中&#xff0c;可以部署web项目&#xff0c;让浏览器来访问这…

【模块系列】DHT11时序理论

前言 基于stm32f103C6T6核心板STM32CubeMX的DHT11的使用。其实吧&#xff0c;要不是网上关于stm32调用DHT11的代码大多数用不了或者乱七八糟的&#xff0c;我也不想推时序的&#xff0c;嘎嘎麻烦。写着写着就发现&#xff0c;本章的篇幅有点长了&#xff0c;所以本文就先介绍DH…

Fiddler抓包返回的Response中总是出现“Response body is encoded. Click to decode. “的解决办法

在进行网页开发和接口调试时&#xff0c;我们经常会用到Fiddler这个工具。 但是&#xff0c;有时候我们会遇到一个非常头疼的问题&#xff0c;就是在抓取网页返回的Response时总是出现“Response body is encoded. Click to decode.”的提示。 这种情况下我们可能无法正常查看…

【Web服务应用】Nginx七层反向代理与四层反向代理

Nginx七层反向代理与四层反向代理 一、代理1.1什么是代理1.2正向代理1.3反向代理1.4反向代理的适用场景1.5正向代理与反向代理的区别 二、反向代理2.1负载均衡2.2动静分离 三、Nginx实战3.1七层反向代理&#xff0c;负载均衡&#xff0c;动静分离3.2四层反向代理 一、代理 1.1…

测试复习(自用)

测试复习 通识/基础/概念 什么是软件测试 验证软件特性是否满足用户的需求 专业名词 需求 满足用户期望或正式文档&#xff08;合同、标准、规范&#xff09;所具备的条件和权能&#xff0c;包含用户需求和软件需求 用户需求软件需求 是测试人员开展软件测试工作的依据 如…