动态DNS的概念如下:

动态DNS(英语:Dynamic DNS,简称DDNS)是域名系统(DNS)中的一种自动更新名称服务器(Name server)内容的技术。根据互联网的域名订立规则,域名必须跟从固定的IP地址。但动态DNS系统为动态网域提供一个固定的名称服务器(Name server),透过即时更新,使外界用户能够连上动态用户的网址。

简单来说就是,我们多次访问一个固定网址时,可能提供服务的服务器实例(IP地址)并不是同一个。举个例子,我们访问 www.bilibili.com 时,第一次获取到的IP地址(通过 DNS )可能是 139.159.241.37 ,第二次获取到的IP地址可能就是 119.3.238.64 ,不同IP地址上的服务器实例不同。这就是DDNS的作用!
点击查看【processon】
本篇文章就要讲一讲 DDNS 在服务注册发现中的一些应用。
目前服务发现从对应用的侵入性上可以分为两大类:

  • SDK-Based 这类的服务发现方式,需要调用方依赖相应的SDK,显式调用SDK代码才可以实现服务调用,即对业务有侵入性,典型例子如eureka、zookeeper等。
  • DNS-Based DNS本身是一种域名解析系统,可以满足简单的服务发现场景,如双方约定好端口、序列化协议等等。

服务注册发现架构

通常,搭建一个服务注册发现中心少不了三个角色——

  • 服务提供者
  • 服务消费者
  • 注册发现中心

这里省略一部分

在服务发现这一环节,从对应用的侵入性上可以分为两大类:

  • SDK-Based 这类的服务发现方式,需要调用方依赖相应的SDK,显式调用SDK代码才可以实现服务调用,即对业务有侵入性,典型例子如eureka、zookeeper等。
  • DNS-Based DNS本身是一种域名解析系统,可以满足简单的服务发现场景,如双方约定好端口、序列化协议等等。

基于SDK的注册发现中心

ZooKeeper - 动态DNS - 图1
FROM 《NACOS BLOG》
当ServiceA发起服务调用时,先要去 Service Registry 查询该服务的服务提供者的IP地址和端口列表,然后再调用

基于DNS的注册发现中心

DNS 本身是一个域名解析系统,通过一个固定的域名可以查询到对应的IP地址。那么我们的服务消费者就能只需要通过一个固定的域名(内部的),就能实现服务的发现。
目前有两种方式:

  1. 集中式的 DNS
  2. 拦截式的 DNS

集中式的DNS

ZooKeeper - 动态DNS - 图2
FROM 《NACOS BLOG》
此时ServiceA发起的所有调用都会查询DNS
这种类型的服务发现方式优缺点分别如下:

  • 优点
    • 集中的DNS服务器,便于升级维护
  • 缺点
    • 对DNS服务器性能要求高
    • 这种情况下一般需要LVS设备为DNS服务器集群做请求转发,存在单点问题

拦截式的DNS

ZooKeeper - 动态DNS - 图3
这种模式中,首先要保证ServiceA的DNS查询都被拦截到本机的DNS服务器上(127.0.0.1:53),在获取到服务的IP列表后发起调用。由于这种方式把DNS服务器前置到实际调用的机器上,所以它解决了独立DNS服务器模式的单点问题,完全P2P的模式。但由于需要在应用机器上安装DNS服务器,其维护和升级成本较前者高一些。

基于ZooKeeper的DDNS

那么在ZooKeeper的一种应用场景上,就是通过 Watch 机制,实现一个 DDNS ~

参考资料