• Nacos学习总结


    Nacos 学习总结

    微服务架构

    为了适应企业的业务发展,软件架构现如今也做了升级和优化,将一个独立的系统拆分成若干个小的服务,每个服务都运行在不同的进程中,服务和服务之间采用RESTFul, RPC等协议传输数据,每个服务所拥有的功能具有独立性强的特点,这样的设计实现了服务之间的低耦合、服务内部的高内聚。

    如下图所示,这是一个基于微服务架构的电商系统:

    特点:

    1. 服务层按业务拆分为一个一个的微服务
    2. 微服务的职责单一
    3. 微服务之间采用RESTFul、RPC等轻量级协议传输
    4. 有利于前后端分离架构

    服务发现流程

    在上述的架构中,当微服务很多时,可能会出现A服务调用B服务,B服务调用C服务,C服务调用A服务,从而服务循环;微服务之间的调用需要有各个服务的地址,当某个服务出现升级或宕机的情况,服务实例网址可能会发生变化,因此就需要有服务发现。

    服务发现流程引入了一个服务发现中心

    1. 在每个服务启动时会向服务中心上报自己的网络地址,这样在服务发现中心内部会形成一个服务注册表服务注册表是服务发现的核心部分,是包含所有服务实例的网络地址的数据库;
    2. 服务发现客户端会定期的从服务中心同步服务注册表,并缓存在客户端;
    3. 当需要对某个服务进行请求时,服务实例通过注册表,定位目标服务网络地址,若目标服务存在多个网络地址,则使用负载均衡算法从多个服务实例中选择一个,然后发出请求。

    Nacos

    目前市面上用得比较多的服务中心有:Nacos、Eureka、Consul 和 Zookeeper

    Nacos作为服务中心,相比较其他软件具有更多的功能特性,且从长远角度来看,Nacos会在以后的版本中会支持SpringCloud和Kubernetes的组合,填补两者之间的鸿沟。另外,Nacos计划实现Service Mesh,也是未来微服务发展的趋势。

    Nacos特性

    Nacos提供以下4功能:

    • 服务发现与服务健康检查

      Nacos使服务更容易注册,通过DNS和http端口更容易发现其他服务,Nacos提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。

    • 动态配置管理

      动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。消除了在更新配置时重新部署应用程序,这使配置的更改更加高效灵活。

    • 动态DNS服务

      Nacos提供基于DNS协议的服务发现能力,旨在支持异构语言的服务发现,支持将注册在Nacos上的服务以域名的方式暴露端口,让三方应用方便的查阅和发现。

    • 服务和元数据管理

      Nacos能让你以微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康检查、服务的流量管理、路由及安全策略。

    Nacos 安装

    Nacos依赖Java环境来运行,下载地址:

    https://github.com/alibaba/nacos/releases

    启动服务器:

    Nacos的默认端口是8848,需要保证8848端口没有被其他进程占用;

    进入安装程序的bin目录,启动命令(standalone代表单机模式运行,cluster代表集群模式):

    startup.cmd -m standalone
    

    默认用户名/密码:nacos/nacos

    Restful服务发现

    测试环境

    Spring Cloud是一套微服务开发框架集合,使用Spring Cloud Alibaba实现解决:

    1. 服务发现客户端从服务发现中心获取服务列表
    2. 服务消费方通过负载均衡获取服务地址

    nacos-discovery父工程

    nacos-discovery父工程添加依赖管理:

    <groupId>com.example.nacos</groupId>
    <artifactId>nacos-discovery</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>nacos-restful-consumer</module>
        <module>nacos-restful-provider</module>
    </modules>
    <packaging>pom</packaging>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

    服务注册

    spring:
      application:
        name: nacos-restful-provider
      cloud:
        .nacos:
          discovery:
            server-addr: 127.0.0.1:8848
    
    1. 启动Nacos
    2. 启动服务注册应用
    3. 观察Nacos服务列表,nacos-restful-provider注册成功

    服务发现

    spring:
      application:
        name: nacos-restful-consumer
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
    

    修改Controller中远程调用的代码:

    @GetMapping(value = "/service")
    public String service(){
        RestTemplate restTemplate = new RestTemplate();
        ServiceInstance serviceInstance = loadBalancerClient.choose(serviceId);
        URI uri = serviceInstance.getUri();
        String providerResult = restTemplate.getForObject(uri + "/service",String.class);
        return "consumer invoke | " + providerResult;
    }
    
    1. 服务提供方将自己注册到服务注册中心
    2. 服务消费方从注册中心获取服务地址
    3. 进行远程调用

    负载均衡

    1. 服务器端均衡

    在负载均衡器中维护一个可用的服务实例清单,当客户端请求来临时,负载均衡器按照某种配置好的规则从可用服务实例清单中选取一个去处理客户端的请求。例如Nginx

    2. 客户端均衡

    在发送请求时选择一个服务实例,然后进行访问

    可以通过下面方式在服务消费方的配置文件中修改默认的负载均衡策略:

    nacos-restful-provider:
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    

    代码demo

    详细链接:

    https://gitee.com/dingyelf/mylearn_code/tree/master/nacos-discovery

  • 相关阅读:
    【转】Yeoman自动构建 Angularjs 项目
    【转】jquery的extend和fn.extend
    Centos查看已经安装的软件或者包
    Big Boss
    利用防火墙实现向外网提供内网web和dns服务
    从浏览器控制和管理 Android 及iOS设备 stf
    python 3 解决 ERROR: Could not find a version that satisfies the requirement xxx 的问题
    一直在说高并发,多少QPS才算高并发?
    压力/负载/性能(强度、容量、稳定性)测试之异同
    CPU利用率、内存利用率、磁盘IO、网卡负载解读和学习
  • 原文地址:https://www.cnblogs.com/lfdingye/p/15973969.html
Copyright © 2020-2023  润新知