服务发现
- 我们在做微服务开发的时候,客户端的一个接口可能需要调用N个服务,客户端必须知道所有服务的网络位置(ip+port),如下所示
-
客户端 Client
- 服务A (IP 1, PROT 1)
- 服务B (IP 2, PROT 2)
- 服务C (IP 3, PROT 3)
- …
- 服务N (IP N, PROT N)
- 客户端需要知道目前所有可用的服务端的ip和端口
- 以往的做法是把服务的地址放在配置文件或者数据库中,这样就有以下几个问题:
- 需要配置N个服务的网络位置,加大配置的复杂性
- 服务的网络位置变化,需要改变每个调用者的配置
- 集群的情况下,难以做负载(反向代理的方式除外)
- 总结起来一句话:服务多了,配置很麻烦,问题一大堆
- 所以现在就选择服务发现来解决这些问题,具体设计如下:
-
服务发现系统
- 服务A (注册IP+PORT)
- 服务B (注册IP+PORT)
- 服务C (注册IP+PORT)
- …
- 服务N (注册IP+PORT)
- 客户端 <------ 根据服务名获取IP+PORT ------ 服务发现系统
-
服务发现系统
- 与之前解决方法不同的是,加了个服务发现模块,服务端把当前自己的网络位置注册到服务发现模块(这里注册的意思就是告诉)
- 服务发现就以K-V的方式记录下,K一般是服务名,V就是IP:PORT
- 服务发现模块定时的轮询查看这些服务能不能访问的了(这就是健康检查)
- 客户端在调用服务A-N的时候,就跑去服务发现模块问下它们的网络位置,然后再调用它们的服务
- 这样的方式是不是就可以解决上面的问题了呢?
- 客户端完全不需要记录这些服务的网络位置,客户端和服务端完全解耦!
常见的服务发现框架(微服务注册中心)
- Etcd:k8s 内嵌的服务发现
- Mdns:以前mdns是go-micro中默认自带的服务发现go-micro的默认服务发现也是consul
- Consul:是一个分布式高可用的系统,是为基础设施提供服务发现和服务配置的工具,常应用于grpc、 go-micro中
- Zookeeper:是 Apache 公司为分布式应用设计的协调服务,java中较常用
- Eureka:Netflix 开源的一款提供服务注册和发现的产品,已闭源,提供了完整的服务注册和发现,springcloud中最核心的组件之一,需要手动配置 Eureka Server 服务器
- Nacos:Alibaba 开源的一款专注于动态服务发现,配置和服务管理的组件
关于服务发现框架Consul
- Consul是Go语言写的开源的服务器发现软件,用于实现分布式系统的服务发现与配置
- 包含多个组件, 但是作为一个整体, 为你的基础设施提供服务发现和服务配置的工具
- 它提供以下关键特性:
- 服务发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册
- 健康检查:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面 (心跳机制)
- 键/值存储:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作
-
多数据中心:无需复杂的配置,即可支持任意数量的区域
- 官方建议:最好是三台或者三台以上的consul在运行,同名服务最好是三台或三台以上
- 默认可以搭建集群
-
Web管理界面:官方提供web管理界面
- 官网:https://www.consul.io
- Git地址:https://github.com/hashicorp/consul
- 负载均衡:可实现负载均衡功能
Consul安装
- Consul用Golang实现,因此具有天然可移植性 (支持 Linux、windows和macOS),安装包仅包含一个可执行文件
- Consul安装非常简单,只需要下载对应系统的软件包并解压后就可使用
1 ) Windows安装
- 地址: https://www.consul.io/downloads 或 :https://releases.hashicorp.com/consul
- 下载consul
- 解压consul到某一个目录
- 配置consul到环境变量
- 测试:
consul -v
2 ) Mac安装
-
方式1:
- $
brew tap hashicorp/tap
- $
brew install hashicorp/tap/consul
- $
-
方式2:文章来源:https://www.toymoban.com/news/detail-408837.html
- 下载consul,地址:https://releases.hashicorp.com/consul,注意下载非ent的,选择 consul_x.xx.x_darwin_amd64.zip (按照自己机型cpu架构选择)
- 解压consul到某一个目录,配置consul到环境变量,或者下载解压后,将文件放置在 /usr/local/bin 目录下
- 查看安装情况:$
consul --version
3 ) Linux安装文章来源地址https://www.toymoban.com/news/detail-408837.html
- 方式1:
- 1 )Ubuntu
- $
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
- $
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
- $
sudo apt update && sudo apt install consul
- 2 )CentOS
- $
sudo yum install -y yum-utils
- $
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
- $
sudo yum -y install consul
- 方式2:
- 下载consul,地址:https://releases.hashicorp.com/consul
- 解压 consul到某一个目录, 配置consul到环境变量
[root@localhost ~]# mkdir -p usr/local/consul
[root@localhost ~]# unzip consul_1.11.4_linux_arm64.zip -d /usr/local/consul/
[root@localhost ~]# cd /usr/local/consul/
[root@localhost ~]# ./consul -v
- 注意:如果要全局使用请把consul加入到环境变量,或者下载解压后,将文件放置在 /usr/local/bin 目录下
- 安装 Consul后,通过执行 consul命令,你可以看到命令列表的输出: $
consul
到了这里,关于nodejs微服务:服务发现与Consul的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!