初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos

一时失言乱红尘 2024-04-08 12:56 192阅读 0赞

f06981e2ec5844938c7d475942921be1.png

学习路径

认识微服务" class="reference-link">4def740e9c2b419fac2807dc546d3021.png 认识微服务

单体架构特点?

简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统

分布式架构特点?

松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝

微服务:一种良好的分布式架构方案

优点:拆分粒度更小、服务更独立、耦合度更低

缺点:架构非常复杂,运维、监控、部署难度提高

SpringCloud

SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。

SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验:

ddb47254f1f94a2aa2a2e43a065104b1.png

微服务拆分**与调用**

单一职责:不同微服务,不要重复开发相同业务

数据独立:不要访问其它微服务的数据库

面向服务:将自己的业务暴露为接口,供其它微服务调用

微服务调用方式

基于RestTemplate发起的http请求实现远程调用

在启动类中注入

ad8ef54f043b411784d9535cc3c94565.png

在业务逻辑层中访问封装

1e3090747ed14f389ba74d5c8ff7e0b5.png

http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可。

服务调用关系

服务提供者:暴露接口给其它微服务调用

服务消费者:调用其它微服务提供的接口

提供者与消费者角色其实是相对的

一个服务可以同时是服务提供者和服务消费者

E**ureka注册中心**

远程调用的问题

  1. 服务消费者该如何获取服务提供者的地址信息?
  2. 如果有多个服务提供者,消费者该如何选择?
  3. 消费者如何得知服务提供者的健康状态?

E**ureka原理**

de74c8c2d8e44253b34e0a9008ed76c3.png

  1. 消费者该如何获取服务提供者具体信息?

服务提供者启动时向eureka注册自己的信息

eureka保存这些信息

消费者根据服务名称向eureka拉取提供者信息

2.如果有多个服务提供者,消费者该如何选择?

服务消费者利用负载均衡算法,从服务列表中挑选一个

3.消费者如何感知服务提供者健康状态?

服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态

eureka会更新记录服务列表信息,心跳不正常会被剔除

消费者就可以拉取到最新的信息

ef5bbd2696604ab6b57b2916cc011fa9.png

搭建EurekaServer

搭建EurekaServer服务步骤如下:

  1. 创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server
  2. 编写启动类,添加@EnableEurekaServer注解

3.添加application.yml文件,编写下面的配置:

  1. server:
  2. port: 10086 # 自定义端口号
  3. spring:
  4. application:
  5. name: eurekaserver # 项目名称
  6. eureka:
  7. client:
  8. service-url: # eureka地址信息
  9. defaultZone: http://127.0.0.1:10086/eureka/

服务注册

引入eureka-client依赖

  1. <!-- eureka -->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  5. </dependency>

在application.yml中配置eureka地址

  1. eureka:
  2. client:
  3. service-url: # eureka地址信息
  4. defaultZone: http://127.0.0.1:10086/eureka/

无论是消费者还是提供者,引入eureka-client依赖、知道eureka地址后,都可以完成服务注册

2e5888ac4dbe4b3c8bad3b3583edbb31.png

70e066b3a3664bfc98f43ffb9b7c3a30.png 服务发现

  1. 引入eureka-client依赖
  2. 在application.yml中配置eureka地址

    String url = “http://userserver/user/“ + order.getUserId();

  3. 给RestTemplate添加@LoadBalanced注解

    /**

    1. * 创建RestTemplate并注入spring容器
    2. * */
    3. @Bean
    4. @LoadBalanced
    5. public RestTemplate restTemplate(){
    6. return new RestTemplate();
    7. }
  4. 用服务提供者的服务名称远程调用

Ribbon负载均衡原理

负载均衡原理

3e7cdfd4cecf484abeeccd76e49ae73a.png

103a8c22891340dabe1b995c7456139d.png

bc584f5a35844d8a8ab7467275ab34e9.png

负载均衡策略

a0b142cf02b94c08a4db3be902fd2654.png

f757bc8b14be435a8c62231444243dce.png

N**acos注册中心**

认识和安装Nacos

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

b59dd33c0f2e4768aa9193f72d144416.png

9e00614d0d9a472aad134e2289c17d8e.png

577b0d06543d450baf8e295052b7215a.png

  1. 在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖:

com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.2.6.RELEASE
pom
import
  1. 注释掉order-service和user-service中原有的eureka依赖。
  2. 添加nacos的客户端依赖:

com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
  1. 修改user-service&order-service中的application.yml文件,注释eureka地址,添加nacos地址:

    spring:
    datasource:

    1. url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    2. username: BLS
    3. password: 123456
    4. driver-class-name: com.mysql.jdbc.Driver

    application:

    1. name: orderserver

    cloud:

    1. nacos:
    2. server-addr: localhost:8848

2.启动并测试:

d1eb7f98060f4366a14317cba5de923d.png

Nacos快速入门

Nacos服务搭建

下载安装包

解压

在bin目录下运行指令:startup.cmd -m standalone

Nacos服务注册或发现

引入nacos.discovery依赖

配置nacos地址spring.cloud.nacos.server-addr

Nacos服务分级存储模型

a8612ba4001d4a0c9321d3df1725e93e.png

e968f84fc7ee4a899887c1bcdbfe5730.png

  1. 修改application.yml,添加如下内容:

    spring:
    datasource:

    1. url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
    2. username: BLS
    3. password: 123456
    4. driver-class-name: com.mysql.jdbc.Driver

    application:

    1. name: userserver # 项目名称

    cloud:

    1. nacos:
    2. server-addr: localhost:8848 # nacos配置地址
    3. discovery:
    4. cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
  2. 在Nacos控制台可以看到集群变化:

  3. 74798a08a9054452a586932395052c23.png

Nacos环境隔离

  1. Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离

2fbcd7626190420494eebe2d7a1017b6.png

2.在Nacos控制台可以创建namespace,用来隔离不同环境

4f15401053794e1792e75fd9dabd06c3.png

3.然后填写一个新的命名空间信息:

1e66318c7395415b822166a294bbe1f0.png

4.保存后会在控制台看到这个命名空间的id:

6ee0f60864b74b7381cca644901b9c5e.png

5.修改order-service的application.yml,添加namespace:

877000107ead4639bf68bb00eea3887c.png

6.重启order-service后,再来查看控制台:

4ec7e434a72343f8a7d0f9f56a85ca1b.png

7.此时访问order-service,因为namespace不同,会导致找不到userservice,控制台会报错:

8d2b3021a13c46d386d66e4227c68558.png

  1. Nacos与eureka的共同点

都支持服务注册和服务拉取

都支持服务提供者心跳方式做健康检测

2.Nacos与Eureka的区别

Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式

临时实例心跳不正常会被剔除,非临时实例则不会被剔除

Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

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

发表评论

表情:
评论列表 (有 0 条评论,192人围观)

还没有评论,来说两句吧...

相关阅读

    相关 负载均衡

    1 什么是负载均衡 当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能。 那么,在服务器集群中,需要有一台服务器充当调度者的角色,用