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]中的随机数,随机数落在的区间所属的记录就是被选择的记录。