动态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的注册发现中心
FROM 《NACOS BLOG》
当ServiceA发起服务调用时,先要去 Service Registry
查询该服务的服务提供者的IP地址和端口列表,然后再调用。
基于DNS的注册发现中心
DNS
本身是一个域名解析系统,通过一个固定的域名可以查询到对应的IP地址。那么我们的服务消费者就能只需要通过一个固定的域名(内部的),就能实现服务的发现。
目前有两种方式:
- 集中式的
DNS
- 拦截式的
DNS
集中式的DNS
FROM 《NACOS BLOG》
此时ServiceA发起的所有调用都会查询DNS
这种类型的服务发现方式优缺点分别如下:
- 优点
- 集中的DNS服务器,便于升级维护
- 缺点
- 对DNS服务器性能要求高
- 这种情况下一般需要LVS设备为DNS服务器集群做请求转发,存在单点问题
拦截式的DNS
这种模式中,首先要保证ServiceA的DNS查询都被拦截到本机的DNS服务器上(127.0.0.1:53),在获取到服务的IP列表后发起调用。由于这种方式把DNS服务器前置到实际调用的机器上,所以它解决了独立DNS服务器模式的单点问题,完全P2P的模式。但由于需要在应用机器上安装DNS服务器,其维护和升级成本较前者高一些。
基于ZooKeeper的DDNS
那么在ZooKeeper的一种应用场景上,就是通过 Watch
机制,实现一个 DDNS
~
参考资料
- 《微服务架构中基于DNS的服务注册与发现》
- 《从Paxos到ZooKeeper 分布式一致性原理与实践》