DNS
定义:域名系统(服务)协议(DNS)是一种分布式网络目录服务,主要用于域名与 IP 地址的相互转换,以及控制因特网的电子邮件的发送。
ps:dns系统是一个最终一致性分布式系统,即添加的记录并不会及时生效于每一台服务器,但最终肯定会让每台服务器一致。
SRV(service record)
DNS SRV 是 DNS 记录中的一种,用来查询指定服务的地址。SRV中除了记录服务器的地址,还记录了服务的端口,并且可以设置每个服务地址的优先级和权重。
SRV 的 DNS 类型代码为33。
SRV 的记录格式为:
_Service._Proto.Name TTL Class SRV Priority Weight Port Target Service: 服务名称,前缀“_”是为防止与DNS Label(普通域名)冲突 Proto: 服务使用的通信协议,TCP、UDP、其它标准协议或者自定义的协议 Name: 提供服务的域名 TTL: 缓存有效时间 Class: 类别 Priority: 该记录的优先级,数值越小表示优先级越高,范围0-65535 Weight: 该记录的权重,数值越高权重越高,范围0-65535 Port: 服务端口号,0-65535 Target: host 地址
客户端查询到多条记录的时候,使用优先级最高的记录。对相同优先级的记录,按照权重选择,记录的权重越高,被选择的可能性越高。
选择的时候,将所有记录的权重值累加,得到一个选择区间[0,sum],每个记录在[0,sum]中占据一段连续的、长度为自身权重值区间。然后生成一个[0,sum]中的随机数,随机数落在的区间所属的记录就是被选择的记录。