SpringCloud深度学习(在更)

微服务简介

微服务是什么?

微服务是一种架构风格,将一个大型应用程序拆分为一组小型、自治的服务。每个服务都运行在自己独立的进程中,使用轻量级的通信机制(通常是HTTP或消息队列)进行相互之间的通信。这种方式使得每个服务可以独立开发、部署和扩展,同时也降低了整个应用程序的复杂性。微服务架构可以提高系统的可伸缩性、灵活性和可维护性,使得团队可以更快地开发和交付新的功能。

微服务项目结构图

单体的Java项目和分布式的Java项目的区别

  单体项目

  • 优点:发布简单,开发时无需考虑接口暴露问题。
  • 缺点:项目耦合度会随着代码量的增大而提高,可读性底。
  • 作用域:面向使用人群小的项目,开发成本底。(个人系统,个人博客,等等)

微服务项目

  • 优点:大大降低耦合度,业务模块分布清楚,可读性高。
  • 缺点:开发成本远远大于单体项目,需要考虑接口暴露问题。
  • 作用域:面向使用人群大的项目。(电商项目,等等) 

 微服务结构

 微服务对比

学习环境

 jdk1.8,。

springboot版本为:2.3.9.RELEASE。

springcloud版本为:Hoxton.SR10。

eureka 

eureka的作用:作为服务中心。

 eureka的使用

1.创建eureka的注册中心

导入依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

在application.yml中配置对应的注册信息

#在注册中心中的名字
spring:
  application:
    name: eurekaService
对应的服务端口
server:
  port: 10086

因为eureka作为服务注册中心,所以也需要将自己注册到服务中心中
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka

在启动类上添加注解驱动 @EnableEurekaServer 

对应的效果图

 2.将服务端和消费端都注册到eureka中。

此时服务端和客户端需要添加的依赖为下

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

 在application.yml编写注册信息

#要注册到的注册中心位置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka
 
spring:
  application:
    name: ”对应名字“

在restTemplate中将原本对应的地址位置修改为在eureka中的要调用的服务名字

注册中心效果图为下:

在未来我们的某个模块不一定只有一个,它可能是多个相同的模块,防止因为宕机的缘故导致服务无法使用。

这里我们就复制一个相同的服务

 在对用的restTemplate的配置类添加 @LoadBalanced

 进行测试,在调用两次接口后发现两个服务都被调用了一次,说明实现了负载均衡。

  Ribbon

Ribbon流程

 Ribbon负载均衡流程源码

在LoadBalancerInterceptor类中会调用intercept方法,其会获取对应的host名字,通过这个host去注册中心中查找对应的服务地址。

效果图为下: 

 获得到的serverName=user-service。

通过后序loadBalancer的execute方法,其会调用实现类下的execute方法,也就是RibbonLoadBalancerClient下的execute方法

 通过getServer方法去eureka中拉去对应的名字的服务,可以得到user-service的实例,这里就是两个user-service实例。

 在getServer方法中最终会调用到rule.choose方法

 在该方法的作用就是选择对应的负载均衡的策略

总共有四大种策略,默认使用轮番查询策略,也就是 RoundRobinRule。

最终只要通过添加@LoadBalanced就可以实现负载均衡。

负载均衡策略 

 设置策略的方法

1. 通过@Bean配置对应的策略,其作用域为全局。

    @Bean
    //设置为随机策略
    public IRule getIRule() {
        return new RandomRule();
    }

2.通过在application.yml中进行配置,此方法的优点就是作用域小,可以只作用在某个服务模块上。

#对应要设置策略的服务名
user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

 饥饿加载

在默认情况下,只有当消费端访问对用的服务端时,服务端才会进行加载,所以在第一次访问服务端的耗时会很长。

为了提高访问效率,我们可以在项目启动时提前加载好对应的服务端,这里就可以使用饥饿加载。

配置方法为下:

ribbon:
  eager-load:
    enabled: true
    #clients是个列表,所以可以设置多个
    clients: 
      - user-service

这样在消费端第一次访问对应的服务端时就会大大减少消耗的时间。

nacos

nacos安装 

 下载并解压对应的nacos文件后,通过cmd进入nacos的bin目录,执行以下指令进行启动。

startup.cmd -m standalone

此时我们就可以访问localhost:8848/nacos,在该界面中的用户名和密码都是:nacos。

将对应的服务端和消费端的注册中心都改为nacos。

1.导入依赖

在父目录中导入的依赖为下:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

 在服务端和消费端导入的依赖为下:

<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在服务端中的application.yml中配置为下:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848

启动微服务,效果图为下:

 nacos服务分级存储模型

实现方法就是:将每个服务分布到不同的集群,这样就可以保证在某个集群失效时不会影响服务的使用。

例子:将所有的user-service设置到集群HZ,将order-service设置到集群BJ。
在application.yml的设置为下:

spring:
  cloud:
    nacos:
      discovery:
        #设置对应的集群名称
        cluster-name: BJ

实现效果为下:

 

 服务实例的权重设置

权重范围为:0~1,数字越大权重就越大。

在nacos中的是设置方式为下:

权重的使用的特殊情况。

当我们需要对某个模块进行升级时,我们不再需要重新发布项目,而是将当前服务的权重设置为0,这样用户访问是就不会调用当前的服务模块,用户对访问到项目功能的其他模块。

nacos设置负载均衡

 在application.yml中配置以下信息:

#对应要设置策略的服务名
user-service:
  ribbon:
    #设置的哦负载均衡的策略
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

该策略为:存在多个拥有同样功能的集时,我们会先去访问,距离我们更近的集群,当该集群宕机时,才会访问其他相同功能的模块。

nacos环境隔离

在nacos中新建一个环境的方式。

 id不设置的话,就会通过UUID自动生成。

在代码application.tml中设置服务的环境空间。

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: BJ
        namespace: 419f5dac-5806-4e04-9017-6f7bf726ba41

 注意:不同环境间的服务模块是无法相互调用的,所以如果出现500异常可能就是跨环境的错误。

nacos和eureka的区别

nacos设置非临时实例的设置为下:

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot-mybatis的增删改查

目录 一、准备工作 二、常用配置 三、尝试 四、增删改查 1、增加 2、删除 3、修改 4、查询 五、XML的映射方法 一、准备工作 实施前的准备工作&#xff1a; 准备数据库表 创建一个新的springboot工程&#xff0c;选择引入对应的起步依赖&#xff08;mybatis、mysql驱动…

TP DP PP 并行训练方法介绍

这里写目录标题 张量并行TP流水线并行 PPnaive模型并行GPipePipeDream 数据并行DPFSDP 张量并行TP 挖坑 流水线并行 PP 经典的流水线并行范式有Google推出的Gpipe&#xff0c;和微软推出的PipeDream。两者的推出时间都在2019年左右&#xff0c;大体设计框架一致。主要差别为…

细讲一个 TCP 连接能发多少个 HTTP 请求(二)

第三个问题&#xff1a;一个 TCP 连接中 HTTP 请求发送可以一起发送么&#xff08;比如一起发三个请求&#xff0c;再三个响应一起接收&#xff09;&#xff1f; HTTP/1.1 存在一个问题&#xff0c;单个 TCP 连接在同一时刻只能处理一个请求&#xff0c;意思是说&#xff1a;两…

[Docker实现测试部署CI/CD----相关服务器的安装配置(2)]

目录 6、Jenkins安装配置安装jdk安装maven拉取镜像启动jenkins修改数据卷权限浏览器访问安装插件配置jenkins移动JDK和Maven配置JDK和Maven 6、Jenkins安装配置 Jenkins 是一个开源软件项目&#xff0c;是基于 Java 开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&…

js省市区下拉框联动——前端笔记

问题&#xff1a; 我们常常要用到下拉框联动的功能&#xff0c;比如最常用的是选择地址的 省 市 区 的联动。思路&#xff1a; 先填充第一个下拉框&#xff0c;然后写一个第一个下拉框的change事件来加载第二个下拉框&#xff0c;再写第二个下拉框的change事件来加载第三个下…

整理mongodb文档:collation

文章连接 整理mongodb文档:collation 看前提示 对于mongodb的collation。个人主要用的范围是在createcollection&#xff0c;以及find的时候用&#xff0c;所以本片介绍的时候也是这两个地方入手&#xff0c;对新手个人觉得理解概念就好。不要求强制性掌握&#xff0c;但是要…

2023 8-5

430. 扁平化多级双向链表 前序遍历(递归) 脖子左歪45度,多级链表变成了二叉树,输出先序即可。 前序遍历再将结果存放在双向链表中,通过将链表存入节点来改变原来的节点 /* // Definition for a Node. class Node { public:int val;Node* prev;Node* next;Node* child; }; *…

芯片工程师求职题目之CPU篇(2)

1. CPU架构中流水线的概念&#xff1f; CPU流水线(pipelining)是一种将指令分解为多步&#xff0c;并让不同指令的各步操作重叠&#xff0c;从而实现几条指令并行处理&#xff0c;以加速程序运行过程的技术。指令的每步有各自独立的电路来处理&#xff0c;每完成一步&#xff…

Java问题排查工具Arthas安装教程

Java问题排查工具Arthas入门教程 什么是阿里Arthas&#xff1f; 在生产环境经常遇到大量的日志&#xff0c;同时还有一些性能问题&#xff0c;需要进行进程分析&#xff0c;排查&#xff0c;有时候确实比较花时间&#xff0c;所以可以借助一些开源的框架来实现&#xff0c;Art…

深入学习 Redis - 谈谈你对 Redis 的 RDB、AOF、混合持久化的了解吧?

目录 一、Redis 是怎么存储数据的&#xff1f; 二、Redis 具体是按照什么样的策略来实现持久化的&#xff1f; 2.1、RDB&#xff08;Redis Database&#xff09; 2.1.1、触发机制 2.1.2、bgsave 命令处理流程 2.1.3、RDB 文件的处理 2.1.4、演示效果 1&#xff09;手动执…

2023华数杯数学建模A题思路 - 隔热材料的结构优化控制研究

# 1 赛题 A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性&#xff0c;在航天、军工、石化、建筑、交通等 高科技领域中有着广泛的应用。 目前&#xff0c;由单根隔热材料 A 纤维编织成的织物&#xff0c;其热导率可以直接测出&#xff1b;但是 单根隔热…

Multimodal Learning with Transformer: A Survey

Transformer多模态学习 Abstract1 INTRODUCTION2 BACKGROUND2.1 Multimodal Learning (MML)2.2 Transformers: a Brief History and Milestones2.3 Multimodal Big Data 3 TRANSFORMERS: A GEOMETRICALLY TOPOLOGICAL PERSPECTIVE3.1 Vanilla Transformer3.1.1 Input Tokenizat…

查看gz文件 linux zcat file.gz mtx.gz

可以使用以下命令来查看 gz 压缩文件的内容&#xff1a; zcat file.gz 1 该命令会将 file.gz 文件解压并输出到标准输出&#xff0c;可以通过管道符将其与 grep 命令结合使用来查找需要的关键词&#xff0c;例如&#xff1a; zcat file.gz | grep keyword 1 该命令会将 file.gz…

GD32F103的EXTI中断和EXTI事件

GD32F103的EXTI可以产生中断&#xff0c;也产生事件信号。 GD32F03的EXTI触发源: 1、I/O管脚的16根线&#xff1b; 2、内部模块的4根线(包括LVD、RTC闹钟、USB唤醒、以太网唤醒)。 通过配置GPIO模块的AFIO_EXTISSx寄存器&#xff0c;所有的GPIO管脚都可以被选作EXTI的触发源…

windows开机运行jar

windows开机自启动jar包&#xff1a; 一、保存bat批处理文件 echo off %1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit java -jar E:\projects\ruoyi-admin.jar > E:\server.log 2>&1 &…

VX-API-Gateway开源网关技术的使用记录

VX-API-Gateway开源网关技术的使用记录 官网地址 https://mirren.gitee.io/vx-api-gateway-doc/ VX-API-Gateway(以下称为VX-API)是基于Vert.x (java)开发的 API网关, 是一个分布式、全异步、高性能、可扩展、轻量级的可视化配置的API网关服务官网下载程序zip包 访问 https:/…

【机器学习】 贝叶斯理论的变分推理

许志永 一、说明 贝叶斯原理&#xff0c;站在概率角度上似乎容易解释&#xff0c;但站在函数立场上就不那么容易了&#xff1b;然而&#xff0c;在高端数学模型中&#xff0c;必须要在函数和集合立场上有一套完整的概念&#xff0c;其迭代和运算才能有坚定的理论基础。 二、贝叶…

刷题笔记 day7

力扣 209 长度最小的子数组 解法&#xff1a;滑动指针&#xff08;对同向双指针区间内的数据处理&#xff09; 1&#xff09;先初始化 两个指针 left &#xff0c;right。 2&#xff09;右移指针right的同时使用sum记录指针right处的值&#xff0c;并判断sum的值是否满足要求&…

【C#学习笔记】装箱和拆箱

文章目录 装箱和拆箱性能消耗装箱拆箱 比较var&#xff0c;object&#xff0c;dynamic&#xff0c;\<T\>varobject\<T\> 泛型dynamic 装箱和拆箱 在讲引用类型object的时候&#xff0c;我们说它是万能的&#xff0c;却没说它万能在哪里。 除了object为每一种变量…

【TiDB理论知识08】HATP概述

1 HTAP技术 OLTP 在线事务 支付 转账 高并发 每次操作的数据量少 &#xff0c;行存 OLAP 报表分析 每次操作大量数据 列存储 2 传统解决方案 数据抽取到数仓或者数据湖 ETL有延迟 &#xff0c;一般会有T1 T2 数据多副本 3 HTAP的要求 4 TIDB的HTAP架构 TiFlash特点&…