ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springCloud架构简述及Eureka、Nacos注册中心应用入门

2022-08-27 11:04:11  阅读:305  来源: 互联网

标签:服务 springCloud Nacos Eureka nacos spring 服务器 cloud


一、微服务架构(持续集成)

 

二、微服务知识模块

三、微服务特征

1.单一职责:拆分粒度小,对应业务能力唯一,避免重复开发

2.面向服务:微服务对外暴露业务接口

3.自治:团队独立、技术独立、数据独立、部署独立

4.隔离性强:服务调用做好隔离、容错、降级,比卖你出现级联问题

缺点:架构复杂,运维监控,部署难度大

四、SpringCloud与SpringBoot的版本兼容关系

五、服务远程调用

1、向容器中注入RestTemplate对象

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

2、调用 restTmplate的接口发送http请求

@Autowired
private RestTemplate restTemplate;
​
@GetMapping("{orderId}")
public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
     // 根据id查询订单并返回
     Order order = orderService.queryOrderById(orderId);
    // 发送http请求,需要请求的准确路径和返回值的类型
     User user = restTemplate.getForObject( 、// 方法视实际情况而定
             "http://localhost:8081/user/" 
                     + order.getUserId(), User.class);
     order.setUser(user);
     return order;
}

3、服务提供者

被调用的微服务(提供接口)

4、服务消费者

调用其他微服务(调用接口)

5、消费与调用是相对的

六、eureka注册中心简介

微服务分类:

  • EurekaServer:服务端,注册中心

    • 记录服务信息

    • 心跳监控

  • EurekaClient:客户端

    • Provider:服务提供者

      • 创建时将自己的信息注册到EurekaServer

      • 每隔30秒向EurekaServer发送心跳信号

    • Consumer:消费者

      • 根据服务名称从EurekaServer中拉取服务列表

      • 基于服务列表做负载均衡,远程调用其中一个

七、Eureka实现流程

1、搭建EurekaServer

  • 依赖

<!--eureka服务端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  • 启动类加注解@EnableEurekaServer

  • 添加application.yml文件

server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka

2、服务注册

  • 依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 添加application.yml配置

spring:
  application:
    name: userservice  #微服务名称
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka/ # 远程调用地址

3、服务发现

  • 给RestTemplate添加@LoadBalance注解

  • 用服务者名称远程调用服务

@GetMapping("{orderId}")
public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
    // 根据id查询订单并返回
    Order order = orderService.queryOrderById(orderId);
    User user = restTemplate.getForObject(
            "http://userserver/user/"
                    + order.getUserId(), User.class);
    order.setUser(user);
    return order;
}

七、负载均衡流程

 

 

八、负载均衡策略

1、继承关系

2、策略概览

内置负载均衡规则类规则描述
RoundRobinRule 简单轮询服务列表来选择服务器。
AvailabilityFilteringRule 对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。 (2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的<clientName>.<clientConfigNameSpace>.ActiveConnectionsLimit属性进行配置。
WeightedResponseTimeRule 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
BestAvailableRule 忽略那些短路的服务器,并选择并发数较低的服务器。
RandomRule 随机选择一个可用的服务器。
RetryRule 重试机制的选择逻辑

3、策略配置

  • 通过定义IRule实现负载均衡规则(该方式位全局配置,即通过注入bean使该微服务调用任何微服务都适用此规则)

@Bean
public IRule randomRule(){
    return new RandomRule(); // 可以返回任意IRule的实现类对象,来指定相应的均衡策略
}
  • 配置文件方式:(application.yml)仅针对某一个服务做均衡策略

userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 

4、加载策略

  • Ribbon默认采用懒加载,在第一次访问时创建LoadBalanceClient

  • 通过application可以开启饥饿加载,减少第一次访问时间

ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients: userservice # 指定策略对userservice生效(多个服务以数组形式添加)

九、Nacos注册中心简介

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

十、Nacos注册

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

<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>
  • 微服务端引入nacos-discovery依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • 修改application.yml中的nacos地址

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule 
    # 负载均衡规则,同集群优先

十一、Nacos集群配置

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名称
        
# -Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH 启动时指定集群

十二、Nacos权重负载均衡

访问概率与权重成正比,可以用作服务升级(权重为0,则不访问)

十三、nameSpace名称空间

  • nacos中可以有多个namespace

  • namespace下可以有group、service等

  • 不同namespace之间相互隔离,例如不同namespace的服务互相不可见

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID

十四、Nacos注册中心原理

 

  • 设置非临时实例

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 设置为非临时实例
  • Nacos与eureka的共同点

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

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

  • Nacos与Eureka的区别

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

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

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

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

标签:服务,springCloud,Nacos,Eureka,nacos,spring,服务器,cloud
来源: https://www.cnblogs.com/stare-of-the-dog/p/16629967.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有