一、初拟的发明名称
一种基于DPDK的多租户私有域隔离和解析的方法及装置。
二、所属技术领域
本发明涉及计算机域名解析技术领域,DNS智能解析,基于地理位置的智能调度,基于运营商的智能调度,用户自定义线路,尤其涉及一种基于DPDK的多租户私有域隔离和解析的方法及装置。
三、背景技术
多租户私有域解析技术是集成于一种软件架构之上的内网DNS解析技术,该技术实现了如何在多租户的环境下使用相同的系统和硬件资源,仍可确保各租户的域名的隔离性和数据面的实时解析。由于多租户技术可以让多个租户公用一个应用程序或者运算环境,对供应商来说多租户技术可以有效的降低环境建设的成本,具体包括硬件系统本身、操作系统等。
传统的多租户架构的隔离方案主要有两种,一种是基于关系型数据库的域名数据隔离,每次通过查询数据库获取租户信息进而解析对应的域名,另一种是基于流行的容器技术,以租户为最小粒度来隔离私有域名数据,该方案需要在宿主机上启动数以千计的虚拟机来支撑众多租户的域名数据;以上技术方案存在占用系统资源多,部署困难,运维成本高,业务高峰期容易出现性能瓶颈等弊端。
四、发明创造的目的
有鉴于此,本发明的目的在于提供一种基于DPDK的多租户私有域隔离和解析的方法及装置,该方法即满足多租户的私有域名的有效隔离和高性能的实时解析,同时不占用系统资源,达到一种“即插即用”的部署方案。
五、发明创造的技术方案
为了达到本发明目的,本发明实施例提供了基于DPDK的多租户私有域隔离和解析的方法及装置,步骤如下:
步骤一:
控制面相关部署
- 平台侧提供租户访问云平台内网DNS的相关配置界面,租户需要拥有登录平台侧和操作配置增删改的权限。
- 登录后,操作增加域名信息和VPC信息,并将添加的域名和VPC进行关联,随后添加主机记录到域。
- 平台侧会把所有租户的操作信息发送至控制器,控制器会保存完整的配置信息包括zone和VPC,同时调用DNS网元节点的API, 下发租户配置信息。同时控制器会轮询分配2个DNS节点配置到对应新租户,用于均衡负载和保证后续租户ECS的DNS业务正常运行。
- DNS网元节点收到对应的租户配置信息后,进行增删改处理后,通知named进程,加载变化的配置即增量加载,满足热数据同步。
步骤二:
域名空间
- 域相关配置格式
采用有层次的目录结构来保存对应租户的zone和VPC配置信息,用于保证租户信息隔离,同时数据清晰,易于维护部署。
- 租户域名目录
“conf/{tenant_id}/zone/{zone_id}/{zone_name}”
目录中 {tenant_id}是租户的ID,全Region唯一,用以区分不同租户。
目录中{zone_id}是对应租户配置的zone,是随机生产的32位十六进程字符串,全region唯一,用以区分不同的zone。
目录中{zone_name}是对应租户配置的域,用于关联到VPC,同时不同租户的域名可能出现相同的名字,由 {zone_id}区分。
存储格式如下:
86400
A,7200,www.test.com,192.168.1.2
A,7200,www.test.com,192.168.1.3
A,7200,www.test.com,192.168.1.4
AAAA,7200,test.com,::1
CNAME,7200,cname.test.com,www.test.com
CNAME,7200,cname1.test.com,cname.test.com
CNAME,7200,cname2.test.com,cname1.test.com
CNAME,7200,cname3.test.com,cname2.test.com
MX,7200,mx.test.com,10,192.168.1.4
MX,7200,mx.test.com,9,192.168.1.3
SRV,7200,_rdap._tcp.test.com,10,200,80,server.test.com
TXT,7200,txt.test.com,this is txt record
对应DNS的不同类型,每个类型均支持多个。目前支持常用的TXT,CNAME,MX,SRV,A,AAAA等。
- 共享域名
为了满足所有租户共享域名的需求,即对应OSS内网域名存储等逻辑,需要内部共享域名,则采用租户名字是cndns,zone_id 是全0,域名是public,对应主机记录则采用FQDN的方式显式记录,完全兼容租户域名格式,在代码也完全服用了租户域名相关的代码逻辑。
- 公网域名
访问公网需要经转发模块访问公共递归服务器获取结果,同时会在缓存模块缓存记录,用于下次快速访问,提高性能和客户体验。转发模块支持配置多个上游服务器,随机选择一个用于DNS的访问,当访问失败时,会尝试下一个上游服务器获取结果,保证业务连续性和程序健壮性。
缓存模块是域名树方式存储完全兼容互联网域名格式逐级记录类似根,顶级域,二级域等。数据结构hash桶+二叉树,提高查询效率。同样也支持缓存超时机制,用于及时清除长时间未访问的域名,释放资源,将有限资源用于缓存频繁访问的域名,提高访问效率。
- 租户VPC目录
conf/{tenant_id}/vpc/{vni}
目录中 {tenant_id}是租户的ID,全Region唯一,用以区分不同租户。
目录中{vni}是对应租户VPC建立VXLAN隧道的VNI,是Overlay网络的基础,全region唯一,用以区分不同的VPC。
当然一个租户可以由多个VPC,即多个VNI。此处主要用于关联ZONE使用。虽然zone和VPC是多对多的关系,但从实现上,只在VPC对象中记录被关联的zone,而在zone记录中无需记录关联VPC的任何信息,结构清晰,易于实现。
存储格式如下:
第一行 100.125.200.1
第二行 192.168.0.0/16
第三行 8a106a4e7859c01801793fa5d84e01c2
第四行 ba106a4e7859c01801793fa5d84e01ab
以此对应 vxlan 隧道的vtepIP,VPC关联私网,VPC关联的zone ID,支持多个无上限。
步骤三:
数据面相关部署
- DNS网元节点会根据租户配置的VPC相关信息会自动加载和创建VXLAN隧道相关信息,用于后续ECS访问租户域名。
- 租户侧对应的ECS启动时,会根据控制器事先配置好的2个DNS节点,自动加载到 /etc/resolv.conf文件。
- 当租户需要解析域名时,默认访问第一个主DNS节点获取结果,当第一个主DNS节点出现故障时,尝试第二个DNS节点,起到容灾机制。
- ECS访问DNS通过宿主机的OVS组件建立的vxlan隧道到达DNS网元节点。
- DNS网元节点处理ECS的DNS请求,依次经过租户域名,共享域名,缓存模块,转发模块,最终将合理结果返回给ECS。
步骤四:
基于DPDK系统架构
- 二层收发报文,由开源的DPDK完成保证了性能;
- 网络和传输层,采用freeBSD协议栈,满足各种复杂业务场景的需求,保证稳定性;
- 七层完成纯自研的业务代码满足内网域名,公网域名和共享域名的需求。
- 应用层和协议栈对接,则借用开源的f-stack的API,完美的实现底层数据报文到业务层的传送。
- 为了满足多租户场景,对协议栈也进行改动,满足租户会话隔离的场景,充分发挥多进程架构的优势,采用无锁处理,需要在调度策略上严格区分各个进程的会话范围。并考虑到控制面的配置更改,数据面重新加载配置,实现用户热数据更新。
- 数据面和控制面的业务分流,很好的并行开发,提高效率和大大降低了后期上线排查问题的难度。
六、本申请相对现有技术而言,所具有的优点和效果。
- 多租户DNS网元节点部署方便,无需安装过多的组件服务(mysql,OVS等 )和复杂的容器(k8s, docker 等)。支持Overlay网络的ARP学习,能更好在复杂的云网络环境中灵活部署。
- 多租户DNS网元节点性能极限,在相同的系统资源配置下,本产品可达到百万级QPS, 远高于其它同类产品的性能(5W)。
七、附图
图1为云平台DNS节点的数据面网络拓扑示意图。
图2为云平台DNS节点的数据面通信流程图。
图3为云平台DNS节点的控制面网络拓扑示意图。
图4为云平台DNS节点的控制面配置下发策略示意图。
图5为云平台DNS节点的域名解析流程图。
图6为云平台DNS节点的系统架构图。
图7为云平台DNS节点的业务多进程模型。
图1
图2
图3
图4
图5
图6
图7
八、实施例
为了使本技术领域的人更好地理解本发明中的技术方案,下面结合附图和具体实施例,对本发明的技术方案作进一步描述。显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。
图1 数据面的网络拓扑,每个ECS都配置了2个DNS节点,用于DNS主备,需要指出的时ECS配置的DNS节点IP是100.64.0.1和100.64.0.2 作为Overlay网络的IP,DNS节点的IP 10.0.0.1 是用于构造Overlay网络的VXLAN vtep。所以DNS节点一般会提供2个IP,且支持配置。数据面只需要关心inner IP即可。
图2 数据通信流程图,ECS通过VXLAN 隧道到达DNS节点,作为NVE 自动处理对应的VXLAN,上行业务层会依次经租户域名,共享域名,缓存域名,转发模块,上游服务器。
图3 控制面网络拓扑图,是平台侧,控制器和DNS网络节点通信,平台侧会把对应租户配置信息发送给控制器;对应控制器IP 10.0.0.150 和 DNS IP 10.0.0.1 - 10.0.0.4 直接通信,目前全量下发策略,需要控制器和图3的4个DNS 节点一对一的通信,调用API,保证租户的配置成功下发至每个DNS节点,用于避免主DNS故障,切换备DNS时,大量配置迁移,减少运维工作量和降低发送同步配置错误的概率。
图4 控制器分配DNS策略,即控制器从所有的DNS节点中,依次轮询获取2个DNS节点,分配给新的租户使用,有效的降低DNS业务故障的概率。例如 租户1 配置DNS节点A和B;租户2 配置DNS节点B和C;租户3 配置DNS节点C和D;租户4 配置DNS节点D和A。全region内,对应租户ECS较多,分配DNS节点则采用最小粒度是租户级别,则有利于租户体验。同时此种分配策略,也将DNS业务流进行有效的均衡负载。
图5 DNS网元节点域名解析的流程图,优先访问租户域名,如果命中则直接返回;即满足需求,租户配置域名和公网域名相同,则以租户域名优先返回。比如租户配置www.baidu.com 192.168.1.1 则租户查询 www.baidu.com A记录返回 192.168.1.1. 如果未命中租户域名,则访问共享域名,是所有租户共享域名,一般是云网内部的OSS相关域名,用于保证返回内网IP,而非公网IP,提高访问效率和降低延迟。如果未命中共享域名,则查询缓存域名,此处的缓存域名均是公网域名,和转发模块紧密结合,所有转发模块的响应结果都会记录域名结果到缓存模块,用于频繁访问域名的高效回复和资源的合理利用,因为转发模块比较耗费资源,相对性能较缓存也低很多。
图6是系统架构图,是DNS网元的核心实现,底层采用DPDK收发报文,保证性能。在送往协议栈之前,会根据端口信息进行业务分流,即vxlan 4789和DNS 53 端口送至freeBSD协议栈,http 80端口的送至linux 协议栈。freeBSD协议栈会处理vxlan提取VNI,并将其透传至DNS 查询业务,用于保证租户域名隔离。Agent进程的增删改业务直接修改配置信息并保存到磁盘,然后通知DNS主进程变化的配置,达到热数据加载,业务不中断和客户无感知的效果。
图7是多进程模型,为了保证性能,避免cache miss。需要在收包进程进行相关业务的处理和发送,目前采用DPDK RSS 或者软件HASH去实现。多进程模型实现完全并发执行,单进程最高可达10WQPS,在接收报文绝对均衡的情况下,实现性能QPS 随着系统资源的增加而成线性增长。系统资源包含但不限于CPU,内存等
九、发明人认为要保护的发明内容的技术要点
DNS网元节点部署模型,不仅支持单点DNS节点,而且支持HA 主备模型,支持集群模型。
DNS系统架构是技术要点。