实战 | 全栈云-分布式智能DNS服务建设实践
1.三层网络架构
为了适应云时代的敏捷开发和迭代,应用架构与网络架构解耦,跨中心的数据访问从大二层网络改为三层网络。
2.统一域名访问
在三层网络下,没有全局可用的浮动IP地址作为统一出入口,全栈云应用需要转变为统一采用域名方式提供服务和访问。
3.应用多活架构、分布式改造
全栈云采用多可用区架构建设,为应用多活、分布式系统提供跨数据中心、跨异地的多活部署能力,其中分布式域名解析能力作为全栈云平台的基础核心能力之一,提供区域就近访问、轮询等多种智能域名解析算法,贴近应用需求。域名解析服务在用户与服务端之间、在应用与底层网络架构之间加了一层缓冲,所有的访问请求流量第一步先到达DNS进行域名解析,由DNS给予其对应的IP资源,之后才是真正的业务数据流量的交互;数据中心灾备、多活数据中心可依托于分布式智能DNS系统的智能解析与流量调度指引。
4.自主可控
当前我国各领域使用的DNS软件多为基于开源DNS版本进行的二次研发,存在较大的信息安全风险。全栈云作为光大银行下一代基础设施,域名解析服务必须搭建在安全可控的基础上,并具备完全自主可控的能力。
建设目标
随着分布式成为主流的系统架构设计方案,大规模分布式系统的稳定性保障能力越来越成为业界关注的重点,稳定性工作贯穿软件生命周期的全过程,从故障的视角来看,稳定性建设的最终目标是“降发生”和“降影响”,即降低故障发生的概率、降低故障发生后的影响范围。围绕稳定性建设目标,稳定性建设思路主要包括了四大建设模式:良好的系统架构和实现、合理的容量规划设计、完备的运维方案设计,以及规范的安全设计。
结合背景及全栈云应用需求,分布式智能DNS主要建设目标如下:
●分布式智能DNS系统稳定性,提供分布式智能解析能力;
●采用分布式系统稳定性建设模式,“降发生”和“降影响”;
●良好的系统架构和容量设计;
●具备自主可控能力和安全设计;
●完备的运维方案设计。
选型及部署架构
通过结合业界技术产品情况,具备采用自主可控DNS作为全栈云-分布式智能DNS服务的条件(见图1)。
图1 主流DNS与自主可控DNS对比
作为分布式智能DNS系统,需要考虑关乎分布式系统稳定性的核心要素,影响分布式系统稳定性的核心要素主要有以下几点。
1.去除单点
全栈云分布式智能DNS系统采用多机房、多可用区(AZ)、多节点,两套独立分布式智能DNS系统(另一套待建设)等设计方案,避免了包括硬件单点、存储单点、网络单点、机房单点、基础技术单点、内部服务单点等隐患。
2.依赖设计
高等级服务不允许强依赖于低等级的服务或资源。全栈云分布式智能DNS系统作为行内的二级DNS,面向全栈云应用提供域名解析服务,向上只依赖于全行DNS根节点,纳入全行DNS统一管理序列。
3.数据保护设计
具备两级数据保护能力:
一是通过部署探测节点可以自动对业务数据(应用域名)进行一致性校验,并自动备份为hosts文件,可保证业务数据完整性、一致性。
二是具备定期系统级整体数据备份,单机房灾难情况下可分钟级整体恢复。
4.灾备设计
分布式智能DNS系统是全栈云关键基础设施,采用两级灾备+逃生方案设计。
第一级灾备:
系统内分DNS管理节点、DNS解析节点角色。DNS管理节点负责配置、分发系统配置给解析节点,自身具备解析能力但不做解析服务。管理节点采用同城热备+异地热备灾备架构。
某台管理节点出现故障既不影响系统管理能力也不影响应用解析服务。
全部管理节点出现故障只影响系统管理能力(无法新增应用域名配置),但不影响应用解析服务(不影响为存量应用域名提供解析服务)。
DNS解析节点接受来自于管理节点的配置数据,专门负责应用域名的解析服务,并且在全栈云每个数据中心的每个可用区都有部署,只要有1台解析节点正常就能保证应用域名解析服务能正常进行。
第二级灾备(待建设):
在设计阶段,考虑极端情况下系统整体出现问题,所有DNS管理节点、DNS解析节点全部故障的情况下,除系统整体恢复方案外,在不考虑成本的情况下,可在全栈云内再建设一个独立分布式智能DNS系统B(已建设的为系统A),A、B两系统完全独立,具备故障隔离并随时独立为全栈云应用提供分布式智能域名解析能力。
日常只用系统A提供分布式智能域名服务,系统B只做热备不提供服务。通过云管平台同时对A、B两个系统同步做变更和管理。在灾备演练或A系统出现问题时,可分钟级平滑切换到B系统,接管A系统继续提供分布式智能域名解析服务。
逃生方案设计:
在A、B两套分布式智能DNS系统全部出现问题时,应用域名解析服务仍然需要最后的手段来保障,上文数据保护设计中提到的hosts文件,可以直接用来下发到应用系统中,把所有域名记录追加到系统/etc/hosts文件后,仍然可以最大限度保障应用域名解析服务不受影响(除某些需要特殊算法的域名外)。
5.弹性设计和安全设计
系统/组件间不具有强依赖关系,也不具有共享资源的场景,具备防止故障从一个系统/组件传播到另一个系统/组件的能力。通过IP解析限速、域名解析限速、缓存安全防护、黑名单、白名单、最小权限访问等机制可实现系统自身的安全保障,在需要时实现域名解析服务降级、限流与熔断能力。
6.容量设计
容量设计的目的是根据业务优先级、资源消耗情况等合理评估及分配资源,良好的容量设计可以提升核心业务稳定同时带来成本节约。
根据业务发展需要,综合考虑单台DNS解析节点能力、域名查询请求数(QPS)、域名查询并发递归能力,DNS解析节点的分布式部署方式可以在不影响现有域名解析的情况下实现单台或多台DNS解析节点透明扩容(管理节点只做简单的管理配置,不做解析服务),满足海量高并发的域名查询要求。
全栈云-分布式智能DNS系统整体架构设计和部署示意图详见图2。
图2 全栈云-分布式智能DNS系统
整体架构设计和部署示意图
运维方案设计
考虑系统上线后持续迭代发布变更以及运维诉求,做到变更可控、流程可控、演练到位、可观测性&监控应急处置等能力。
1.变更可控
全栈云-分布式智能DNS系统自身通过自研工具变更,已实现多个原子封装变更工具,可以实现包括新增、修改、删除动态/静态域名记录配置、全局地址池、健康检测、数据中心服务、解析同步组、远程认证策略、用户权限管理、域名记录用户授权、用户区域、就近访问策略等约50种类型变更。
2.流程可控
通过自研云管平台,对分布式智能DNS系统进行纳管,云管平台作为统一入口,对所有平台操作流程进行管控,后端调用上述的变更工具进行标准化、模板化操作。在A、B两套独立分布式智能域名解析系统的情况下,云管平台可对A、B两套独立系统分别进行单立配置,实现A、B系统具备独立的操作逻辑,从入口即实现A、B系统配置独立,这样从部署实体到操作配置均实现A、B两套分布式智能DNS系统完全独立,完全解耦,真正实现系统级冗余。
3.系统软件版本升级
DNS管理节点域DNS解析节点角色分离设计,以及DNS解析节点全局服务能力可以实现系统内的DNS解析节点灰度变更/升级/回滚(管理节点只做简单的管理配置,不做解析服务,升级时不影响应用域名解析)。
A/B两个独立部署系统设计方案,可以支持系统间灰度变更/升级/回滚。
4.可观测性&监控应急处置
DNS产品自身具备完善的日志、监控指标等基础的可观测性手段,全面分析架构特点后,梳理出60余项监控能力及11种应急处置场景。另外通过在DNS管理节点、DNS解析节点部署全栈云流量采集分析工具,充分复用全栈云自身的可视化流量分析能力,补充了全栈云平台内DNS流量全链路追踪能力,可及时掌握域名解析请求实时运行情况并及时定位处理问题。
总结与展望
全栈云平台作为光大银行最重要的基础设施之一,自身的安全稳定性至关重要。作为全栈云平台服务能力之一的分布式智能DNS系统,在考虑使用需求和全面自主可控的前提下,基于分布式系统稳定性建设目标、建设模式指引下设计并完成了系统的建设,已正式上线并全面提供服务,经过模拟演练圆满实现了预期的效果。下一步,我们将继续探索全栈云上智能DNS的高阶应用,通过智能DNS实现云上应用的引流、隔离等场景,无需通过应用启停实现云上应用优雅的切换。
