前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务系列(二)-nacos服务发现

微服务系列(二)-nacos服务发现

作者头像
许喜朝
发布2021-01-07 14:53:20
1.1K0
发布2021-01-07 14:53:20
举报
文章被收录于专栏:生如夏花的个人博客

Nacos服务发现

Nacos简介
服务发现产品对比

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

对比项目

Naos

Eureka

Consul

Zookeeper

一致性协议

支持AP和CP模型

AP模型

CP模型

CP模型

健康检查

TCP/HTTP/MYSQL/Client Beat

Client Beat

TCP/HTTP/gRPC/Cmd

Keep Alive

负载均衡策略

权重/metadata/Selector

Ribbon

Fabio

-

雪崩保护

自动注销实例

支持

支持

不支持

支持

访问协议

HTTP/DNS

HTTP

HTTP/DNS

TCP

监听支持

支持

支持

支持

支持

多数据中心

支持

支持

支持

不支持

跨注册中心同步

支持

不支持

支持

不支持

SpringCloud集成

支持

支持

支持

不支持

Dubbo集成

支持

不支持

不支持

支持

k8s集成

支持

不支持

支持

不支持

Nacos简介

Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。 官方是这样说的:

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务 发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构的服务基础设施。

官方地址

Nacos特性

Nacos主要提供以下四大功能: 1.服务发现与服务健康检查 Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防 止向不健康的主机或服务实例发送请求。 2.动态配置管理 动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新 部署应用程序,这使配置的更改更加高效和灵活。 3.动态DNS服务 Nacos提供基于DNS 协议的服务发现能力,旨在支持异构语言的服务发现,支持将注册在Nacos上的服务以 域名的方式暴露端点,让三方应用方便的查阅及发现。 4. 服务和元数据管理 Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周 期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略。 这里1、3、4说明了服务发现的功能特性。

安装Nacos Server
环境准备

Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在 以下版本环境中安装使用: 1 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。 2. 64 bit JDK 1.8+; 3. 3. Maven 3.2.x+;

下载源码或者安装包

你可以通过源码和发行包两种方式来获取Nacos 从Github上下载源码方式

git clone https://github.com/alibaba/nacos.git cd nacos/ mvn ‐Prelease‐nacos clean install ‐U ls ‐al distribution/target/ // change the v e r s i o n t o y o u r a c t u a l p a t h c d d i s t r i b u t i o n / t a r g e t / n a c o s ‐ s e r v e r ‐ version to your actual path cd distribution/target/nacos‐server‐ versiontoyouractualpathcddistribution/target/nacos‐server‐version/nacos/bin

下载编译后压缩包方式 最新稳定版本 下载后解压

unzip nacos‐server‐ v e r s i o n . z i p 或 者 t a r ‐ x v f n a c o s ‐ s e r v e r ‐ version.zip 或者 tar ‐xvf nacos‐server‐ version.zip或者tar‐xvfnacos‐server‐version.tar.gz cd nacos/bin

启动服务器 nacos的默认端口是8848,需要保证8848默认端口没有被其他进程占用 进入安装程序的bin目录 Linux/Unix/Mac启动方式: 启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

bash startup.sh -m standalone

Windows启动方式: 启动命令

cmd startup.cmd

或者双击startup.cmd运行文件。

启动成功,可通过浏览器访问 http://127.0.0.1:8848/nacos nacos控制台界面 默认用户名:nacos,默认密码:nacos

外部数据库支持

单机模式时nacos默认使用嵌入式数据库实现数据的存储,若想使用外部mysql存储nacos数据,需要进行以下步 骤: 1.安装数据库,版本要求:5.6.5+ ,mysql 8 以下 (在nacos1.4版本及以上已经支持到mysql8.0.16) 2.初始化mysql数据库,新建数据库nacos_config,数据库初始化文件: n a c o s h o m e / c o n f / n a c o s − m y s q l . s q l 3. 修 改 {nacoshome}/conf/nacos- mysql.sql 3.修改 nacoshome/conf/nacos−mysql.sql3.修改{nacoshome}/conf/application.properties文件,增加支持mysql数据源配置(目前只支持 mysql),添加mysql数据源的url、用户名和密码。

代码语言:javascript
复制
spring.datasource.platform=mysql 
db.num=1 
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true 
db.user=nacos_devtest 
db.password=youdontknow
RESTful服务发现
测试环境

通过Spring Cloud Alibaba实现解决: 1、服务发现客户端从服务发现中心获取服务列表 2、服务消费方通过负载均衡获取服务地址

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

代码语言:javascript
复制
<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>

分别在服务提供及服务消费工程中添加依赖,此依赖的作用是服务发现

代码语言:javascript
复制
 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  </dependency>
服务注册

在服务提供工程中配置nacos服务发现相关的配置:

代码语言:javascript
复制
spring:
  application:
    name: nacos‐restful‐provider
  cloud:
    nacos:
      discovery:
        server-addr: 172.16.27.3:8848

启动nacos 启动服务提供 观察nacos服务列表, nacos-restful-provider注册成功

服务发现

在服务消费工程中配置nacos服务发现相关的配置 服务消费

代码语言:javascript
复制
#配置服务提供方的地址
provider:
  address: 127.0.0.1:56010

spring:
  application:
    name: nacos-restful-consumer #服务名
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #服务发现中心地址

Controll中远程调用的代码

代码语言:javascript
复制
@RestController
public class RestConsumerController {


    //指定服务名
    String serviceId = "nacos-restful-provider";

    @Autowired
    LoadBalancerClient loadBalancerClient;


    @GetMapping("/service")
    public String service(){
        //远程调用
        RestTemplate template = new RestTemplate();

        ServiceInstance choose = loadBalancerClient.choose(serviceId);
        URI uri = choose.getUri();
        String result = template.getForObject(uri+"/service",String.class);
        return "消费了"+result;
    }
}

执行流程 1.服务方将自己注册到服务注册中心 2.服务消费方从注册中心获取服务地址 3.进行远程调用

负载均衡

在RESTful服务发现的流程中,ServiceA通过负载均衡调用ServiceB 负载均衡就是将用户请求(流量)通过一定的策略,分摊在多个服务实例上执行,它是系统处理高并发、缓解网络 压力和进行服务端扩容的重要手段之一。它分为服务端负载均衡和客户端负载均衡。 服务器端负载均衡:

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

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

例如Nginx,通过Nginx进行负载均衡,客户端发送请求至Nginx,Nginx通过负载均衡算法,在多个服务器 之间选择一个进行访问。即在服务器端再进行负载均衡算法分配。

客户端服务负载均衡:

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

上边使用的LoadBalancerClient就是一个客户端负载均衡器,具体使用的是Ribbon客户端负载均衡器。 Ribbon在发送请求前通过负载均衡算法选择一个服务实例,然后进行访问,这是客户端负载均衡。即在客户 端就进行负载均衡的分配。

Ribbon是一个客户端负载均衡器,它的责任是从一组实例列表中挑选合适的实例,如何挑选?取决于负载均衡策略

Ribbon核心组件IRule是负载均衡策略接口 RoundRobinRule(默认):轮询,即按一定的顺序轮换获取实例的地址。 RandomRule:随机,即以随机的方式获取实例的地址。 AvailabilityFilteringRule: 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,以及并发的连接数量 超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问; WeightedResponseTimeRule: 根据平均响应时间计算所有服务的权重,响应时间越快,服务权重越大,被选中的 机率越高; 刚启动时,如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够时,会切换到 WeightedResponseTimeRule RetryRule: 先按照RoundRobinRule的策略获取服务,如果获取服务失败,则在指定时间内会进行重试,获取可用 的服务; BestAvailableRule: 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的 服务; ZoneAvoidanceRule: 默认规则,复合判断server所在区域的性能和server的可用性选择服务器;

修改负载均衡策略

代码语言:javascript
复制
nacos‐restful‐provider: 
	ribbon: 
		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nacos服务发现
    • Nacos简介
      • 服务发现产品对比
      • Nacos简介
      • Nacos特性
      • 安装Nacos Server
    • RESTful服务发现
      • 测试环境
      • 服务注册
      • 服务发现
      • 负载均衡
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档