SpringCloud全系列知识(1)——初识微服务和注册中心

news2024/12/22 19:00:15

SpringCloud(微服务)相关笔记

一 基础框架图

1.微服务技术栈

在这里插入图片描述

2.技术栈分类

在这里插入图片描述

二 认识微服务

1.单体架构

将业务功能集中在一个项目中,打成一个包部署。
优点:架构简单,部署成本低。
]
缺点:耦合度高

2.分布式架构

根据业务功能对系统进行拆分,每个业务作为独立项目开发,称之为一个服务。
优点:降低耦合度,有利于服务升级拓展

1.微服务

经过良好架构设计的分布式架构方案,微服务的特征:
1.单一职责:微服务拆分粒度更小,每个服务对应一种能力,做到单一职责,避免重复开发
2.面向服务:微服务对外暴露业务接口
3.自治:团队独立,技术独立,数据独立,部署独立
4.隔离性强:服务做好隔离,容错,降级,避免出现级联失败

总结:为实现 “高内聚,低耦合”
优点:拆分粒度更小,服务更独立,耦合度更低
缺点:架构非常复杂,运维,监控,部署等都将变得困难

2.技术落地

当前主要为 SpringCloud,Alibaba的Dubbo 和 SpringCloudAlibaba。
在这里插入图片描述

三 SpringCloud框架介绍

1.SpringCloud是目前使用最广泛的微服务框架
2.SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。
在这里插入图片描述

1.拆分注意

1.不同微服务,不应该重复开发相同业务

2.数据独立,不调用其他服务的数据库

3.将自己的作为接口暴露,供其他微服务访问

核心:单一职责

2.调用方式-RestTemplate

Spring提供的远程调用工具类,需要注册到Bean中以后再使用。

可以实现各个服务之间的相互调用

3.提供者与消费者

1.提供者:业务中被其他服务所调用的服务称之为提供者,即提供服务给其他微服务

2.消费者:业务中调用其他微服务的服务称之为消费者。

实际业务中,每个微服务的提供者或消费者身份是根据实际情况互相转换的。

四 Eureka注册中心

1.核心问题

服务消费者该如何知道众多服务提供者的地址以及是否可用?

2.Eureka注册中心的作用

记录和管理,所有服务的地址及状态

3.实现原理

eureka与各个微服务之间通过“心跳”续约,保证下发给消费者的微服务地址都是可用的。
在这里插入图片描述
4.官方地址 : GitHub - Netflix/eureka

1.搭建 Eureka Server

1.引入 Eureka Server依赖

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

或者在使用Spring initializr 创建项目时直接勾选
在这里插入图片描述

2.配置Eureka

1.在启动类中加入EurekaServer的注解

@EnableEurekaServer

2.在配置文件中配置Eureka相关参数

# 实现Eureka服务自身的注册
server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    # Eureka服务的注册地址
    service-url:
      defaultZone: http://localhost:10086/eureka/

3.浏览器访问 http://localhost:10086
在这里插入图片描述

3.注册微服务

1.引入依赖

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

或者在使用Spring initializr 创建项目时直接勾选
在这里插入图片描述

由于各个版本不完全一直,建议通过 Spring initializr 直接勾选添加

2.在各个服务的配置文件中配置eureka的服务地址

eureka:
  client:
    # Eureka服务的注册地址
    service-url:
      defaultZone: http://localhost:10086/eureka/

3.在启动类中加入 @EnableEurekaClient 注解

#部分版本已经做了整合,此步骤非必须,视情况而定
@EnableEurekaClient

在这里插入图片描述

4.一个服务启动多个实例

在这里插入图片描述在这里插入图片描述

复制配置文件后,为避免端口号冲突,应使用 -Dserver.port=xxx 修改端口号

-Dserver.port=[new port]

启动服务成功后,刚复制的服务将出现在服务列表中。
在这里插入图片描述

5.负载均衡

1.使用 RestTemplate 访问其他微服务时,可以使用 @LoadBalanced 注解快速实现负载均衡

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

2.调用实现时将不再使用具体的 Host+ port 地址,而是使用服务名称进行访问。

@GetMapping("/{id}")
public Order get(@PathVariable Integer id){
    Order order = orderService.getById(id);
    //String url="http://localhost:8082/user/"+order.getUserId();
    // 此处使用服务名称 cloud_user 进行访问
    String url="http://cloud_user/user/"+order.getUserId();
    User user = restTemplate.getForObject(url, User.class);
    order.setUser(user);
    return order;
}

3.踩坑笔记

配置文件中的服务名称,不要使用下划线(_),否则 RestTemplate 通过服务名称调用时将无法识别。

2.Ribbon负载均衡

1.Ribbon负载均衡流程
在这里插入图片描述

2.负载均衡策略

在这里插入图片描述

1.Ribbon中的负载均衡策略

在这里插入图片描述

2.定义负载均衡规则

1.通过 实现 IRule 定义规则
// 通过 IRule 配置的负载均衡规则将作用于所有微服务的提供者
@Bean
public IRule rule(){
    //实现随机规则
    return new RandomRule();
}
2.通过配置文件定义规则
eureka:
  client:
    # Eureka的地址信息
    service-url:
      defaultZone: http://localhost:10086/eureka/
# 为指定服务配置负载均衡规则
cloud-user: # 微服务名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
3.饥饿加载

Ribbon默认采用的是懒加载,即第一次访问时才会创建LoadBalanceClient,请求时间较长。

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过一下配置开启饥饿加载:

# 为指定服务配置负载均衡规则
cloud-user: # 微服务名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
ribbon:
  # 饥饿加载
  eager-load:
    #需要饥饿加载的微服务名
    clients: cloud-user
    #开启
    enabled: true

使用 RestTemplate 用于负载均衡时 必须使用 @LoadBalanced 注解

五 Nacos注册中心

由 Alibaba 开发的微服务注册中心,比Eureka功能更加丰富,完善。

GitHub网址:home (nacos.io)

下载地址:Releases · alibaba/nacos (github.com)

文档地址:Nacos 快速开始

1.运行Nacos

1.standalone代表着单机模式运行,非集群模式

Windows下运行:startup.cmd -m standalone
Linux/Unix/Mac:sh startup.sh -m standalone

在这里插入图片描述
2.浏览器访问 http://localhost:8848/nacos,即可打开nacos的登录界面,第一次打开会比较缓慢。默认端口为8848。
在这里插入图片描述
3.默认配置可通过配置文件进行修改,若端口被占用,打开配置文件修改即可。
在这里插入图片描述
默认的账号密码均为 nacos

2.服务发现

1.引入 SpringCloudAlibaba 的坐标 和 Nacos客户端的坐标

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>${spring-cloud-alibaba.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<!--nacos客户端-->
 <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

或者在使用Spring initializr 创建项目时直接勾选,便可自动引用
![](https://img-blog.csdnimg.cn/a0b1ecf9a7b54dbfbb6e96b029984521.png)

2.在服务器中配置Nacos的相关信息

server:
  port: 8081
spring:
  application:
    # 服务名称
    name:  alibaba-order
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/cloud_order?serverTimezone=Asia/Shanghai&characterEncoding=utf8
    username: root
    password: 123456
  cloud:
   # nacos的主要配置信息如下:
    nacos:
      discovery:
        # 注册中心地址
        server-addr: http://localhost:8848
        # 名称空间
        namespace: public
        # 注册中心的账号及密码
        username: nacos
        password: nacos

3.配置完成以后便可以在 nacos 注册中心发现名为 alibaba-order 的服务了
在这里插入图片描述

3.分级存储模型

分级存储的意义:

1.当某一个集群瘫痪时,可以立即启用另一个集群。起到容灾的作用。

2.尽可能访问距离自己较近的服务,使得访问距离更短,延迟更低,速度更快。
在这里插入图片描述

1.Nacos分级存储的配置

cloud:
  nacos:
    server-addr: http://localhost:8848
    discovery:
      namespace: public
      username: nacos
      password: nacos
      # 通过 cluster-name 属性设置服务所在的集群区域
      cluster-name: xian

2.优先本地集群

优先使用本地集群(同集群)的服务,需要通过设置负载均衡规则实现,本地集群没有可用服务时才回去其他集群调用服务,同时会给出警告信息。

alibaba-user: # 微服务名称
  ribbon:
    # 使用 NacosRule 作为负载均衡规则,将优先使用同一集群内的服务
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

或者使用 IRule 实现统一配置

@Bean
public IRule rule(){
    return new NacosRule();
}

Nacos的访问特点:

优先使用本地集群的服务,且访问规则是随机,并非轮询。

3.权重配置

通过配置权重,将决定服务所承担的请求量比重,权重越高则被访问的几率和次数越多。

在实际使用中,配置高的服务器可使用更大的权重值来承担更多的访问量。另外权重为0时,服务器将不会被访问。
在这里插入图片描述

权重为0可用于服务的平滑升级,整个过程中用户是无感知的。

4.环境隔离-NameSpace

Nacos中的服务存储和数据存储的最外层是名为 namespace 的层,用来做最外层隔离

通过命名空间,可用于做开发环境和测试环境的隔离。不同命名空间的服务不允许相互访问
在这里插入图片描述

通过命名空间,可用于做开发环境和测试环境的隔离。不同命名空间的服务不允许相互访问(不可见)。
在这里插入图片描述在这里插入图片描述

命名空间的配置,通过在项目的配置文件中使用命名空间的ID来设置

cloud:
  nacos:
    server-addr: http://localhost:8848
    discovery:
      # 使用 nacos 的命名空间的ID来设置,而并非名称
      namespace: 77cb474b-03a8-405a-b4f0-cdd5d954af7a
      username: nacos
      password: nacos
      cluster-name: xian

1.Nacos细节分析

1.服务消费者定时拉取(pull)服务提供者缓存信息,间隔30秒。Nacos注册中心也会定时向服务消费者推送(push)服务列表。

2.Nacos中实例分为 临时实例 和 非临时实例。

3.对于临时实例,服务提供者间隔 指定时间 发送新跳到Nacos注册中心。服务提供者未发送心跳时会被Nacos从服务列表中剔除。

4.对于非临时实例,不通过心跳来维持与Nacos注册中心的联系,由Nacos主动发送请求去检测服务提供者是否健康。且服务提供者宕机时并不会被Nacos剔除。
在这里插入图片描述
5.设置实例为非临时实例,通过配置文件来设置。

nacos:
  server-addr: http://localhost:8848
  discovery:
    namespace: public
    username: nacos
    password: nacos
    cluster-name: xian
    # 通过 ephemeral 属性,设置该实例为非临时实例
    ephemeral: false

6.非临时实例宕机时不会被Nacost剔除,而是给出警示色。
在这里插入图片描述

2.集群方式

Nacos默认采用AP方式,当集群中存在非临时实例时,使用CP模式;

Eureka采用AP方式;

AP方式注重服务的可用性,CP模式注重服务的一致性和可靠性

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

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

相关文章

最具影响力的15颗国外开放数据气象卫星介绍

1.热带降雨测量任务(TRMM) TRMM 是 NASA 和日本宇宙航空研究开发机构 (以前称日本国家空间发展署) 的合作项目&#xff0c;是 NASA 地球科学计划中的航天任务。日本提供运载火箭和测雨雷达&#xff0c;而由 NASA 提供卫星、4台仪器和卫星运行系统。 TRMM 卫星是三轴稳定的&…

深度强化学习中利用Q-Learngin和期望Sarsa算法确定机器人最优策略实战(超详细 附源码)

需要源码和环境搭建请点赞关注收藏后评论区留下QQ~~~ 一、Q-Learning算法 Q-Learning算法中动作值函数Q的更新方向是最优动作值函数q&#xff0c;而与Agent所遵循的行为策略无关&#xff0c;在评估动作值函数Q时&#xff0c;更新目标为最优动作值函数q的直接近似&#xff0c;故…

深入理解java虚拟机:虚拟机类加载机制(2)

文章目录3.类加载器3.1 类与类加载器3.2 双亲委派模型3.3 破坏双亲委派模型3.类加载器 虚拟机设计团队把类加载阶段中的通过一个类的全限定名来获取描述此类的二进制字节流这个动作放到Java虚拟机外部去实现&#xff0c;以便让应用程序自己决定如何去获取所需要的类。实现这个…

【密码学篇】数字签名基础知识(无保密性)

【密码学篇】数字签名基础知识&#xff08;无保密性&#xff09; 数字签名主要用于确认数据的完整性、签名者身份的真实性和签名行为的不可否认性等。—【蘇小沐】 文章目录【密码学篇】数字签名基础知识&#xff08;无保密性&#xff09;1.数字签名定义2.数字签名原理3.数字签…

Apache-DBUtils实现CRUD操作

Apache-DBUtils实现CRUD操作 每博一文案 有人说&#xff0c;不要轻易去伤害任何一个人&#xff0c;因为你会因此而受伤。欠的债&#xff0c;躲不掉&#xff0c;总是要还的。 要知道&#xff0c;哪些能被你欺骗的人&#xff0c;都是无条件相信你的人&#xff0c;因为心里有你&a…

【LeetCode-中等】240. 搜索二维矩阵 II(详解)

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/…

ROS之话题通信自定义msg

文章目录背景自定义msg例子1.定义msg文件2.编辑配置文件3.编译话题通信自定义msg调用A(C)0.vscode 配置1.发布方2.订阅方3.配置 CMakeLists.txt4.执行背景 在 ROS 通信协议中&#xff0c;数据载体是一个较为重要组成部分&#xff0c;ROS 中通过 std_msgs 封装了一些原生的数据…

【软考软件评测师】第三十三章 数据库系统应用

【软考软件评测师】第三十三章 数据库系统应用 【软考软件评测师】第三十三章 数据库系统应用【软考软件评测师】第三十三章 数据库系统应用第一部分 知识点集锦1.关系数据库候选码2.自然连接3.元祖关系1&#xff09;1对多关系2&#xff09;多对多关系3&#xff09;复合属性4&a…

Centos8界面语言怎么设置? Centos用户界面语言的设置方法

Centos8怎么给用户设置界面语言&#xff1f;想要设置界面语言&#xff0c;该怎么设置呢&#xff1f;下面我们就来看看详细的教程。 1、Gnome桌面环境下&#xff0c;在桌面空白处右键选择【设置】。 2、在【设置】中点【详细信息】。 3、之后点【用户】。 4、首先单击选中要设置…

ADS原理图到Layout,Layout更新原理图

RF Design-22 目录方法1&#xff1a;自动生成Generate/update Layout将理想元件转换为带footprint的元件统一修改元件参数生成Layout添加传输线&#xff0c;T节由Layout更新原理图Ground pouring覆铜设置地过孔方法2&#xff1a;place components from schem to Layout将原理图…

一种无需调查船上坞的调查设备安装测量方法和安装测量系统

本文来自于博主发明专利的技术交底。 大型科考船船底安装大型的精密测量设备&#xff0c;对安装的测量精度要求比较高&#xff0c;通过上坞&#xff0c;采用传统的测量方式&#xff0c;先做控制网&#xff0c;然后进行碎步测量&#xff0c;得到测量设备及其室内附属设备与船舶的…

Spring Cloud Ribbon面试题大全

Spring Cloud Ribbon面试题大全 目录 文档索引 面试题汇总 Q&#xff1a;Ribbon的总体流程&#xff1f; Q&#xff1a;Ribbon如何选择调用哪个实例&#xff1f; Q&#xff1a;服务列表的获取过程&#xff1f; Q&#xff1a;Ribbon如何避免调用失效实例&#xff1f; Q&am…

JavaScript高级复习上(59th)

1、类 constructor 构造函数 constructor() 方法是类的构造函数&#xff08;默认方法&#xff09;&#xff0c;用于传递参数&#xff0c;返回实例对象&#xff0c;通过new命令生成对象实例时&#xff0c;自动调用该方法。如果没有显示定义,类内部会自动给我们创建一个 constru…

【CPP】string 类的模拟实现

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;前言&…

Angular 学习 之 Hello World !

目录 0.前言・前提&#xff08;Angular介绍&#xff09; 前言 前提&#xff08;node.js已经按照&#xff09; 1.安装・查看版本 2.创建・启动Angular工程 2.1.创建工程 2.2.启动工程 2.3.启动之后&#xff0c;浏览器访问&#xff0c;显示的效果 2.4.工程目录结构 3.各…

计算机毕业设计——基于html汽车商城网站页面设计与实现论文源码ppt(35页) HTML+CSS+JavaScript

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

Flutter高仿微信-第29篇-单聊

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; 单聊包含&#xff1a;文本、表情、语音、图片、小视频、…

HTML学生个人网站作业设计——HTML+CSS+JavaScript优分期大学生分期购物商城(7页)

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

Vue3【Composition API 的优势、新的组件(Fragment、Teleport、Suspense)、全局API的转移】

文章目录四、Composition API 的优势1.Options API 存在的问题2.Composition API 的优势五、新的组件1.Fragment2.Teleport3.Suspense六、其他1.全局API的转移2.其他改变四、Composition API 的优势 1.Options API 存在的问题 使用传统OptionsAPI中&#xff0c;新增或者修改一…

web前端网页设计与制作:HTML+CSS旅游网页设计——桂林旅游(3页) web前端旅游风景网页设计与制作 div静态网页设计

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…