工具高阶篇 — 准确且实时更新 Host

2,344 阅读5分钟

背景

一个系统发布上线需要经历:测试、预发、灰度等阶段,不同阶段对应不同环境:测试环境、预发环境 ...。在开发、测试过程中,往往需要通过 Host 切换来指向不同的环境。Host 的准确性以及切换后的实时性就显得非常关键,但配置文件的不准确、生效不及时常常导致这个目标难以达成。

配置不准确

配置不准确的问题是由于数据人肉共享和更新不及时导致的,没有管理且强依赖人肉导致问题不可控:

数据共享

目前 Host 数据大多是通过互相拷贝的方式共享,没有合理的管理和检查机制,导致一份不准确的配置被传播到多人电脑上的情况非常多见。这种数据共享方式会导致配置冗余,环境错误、混乱等问题。

通知更新

当一些产品环境发生变更时,由于没有完善的通知机制,用户保存在本地的 Host 文件会存在更新不及时等问题。Host 文件更新不及时,会出现因为配置错误,无法访问系统等问题。


notValid.gif


生效不实时

由于浏览器 DNS 缓存问题,直接修改 Hosts 文件并不能实时生效,有时会引起未知的环境混乱,导致线上故障。

DNS缓存

一条域名的 DNS 记录会在本地有两种缓存:浏览器缓存和操作系统 (OS) 缓存。在浏览器中访问的时候,会优先访问浏览器缓存,如果未命中则访问 OS 缓存,最后再访问 DNS 服务器,然后 DNS 服务器会递归式的查找域名记录,然后返回。

DNS 记录会有一个 ttl 值(time to live),单位是秒,意思是这个记录最大有效期是多少。经过实验,OS 缓存会参考ttl值,但是不完全等于ttl值,而浏览器 DNS 缓存的时间跟ttl值无关,每种浏览器都使用一个固定值。

浏览器缓存

为了减少网络请求的损耗,浏览器在获取网站域名的实际 IP 地址后会对其 IP 进行缓存。每种浏览器都有一个固定的 DNS 缓存时间,其中 Chrome 的过期时间是1分钟,在这个期限内不会重新请求 DNS。这种情况下,就会出现如下现象:当开发从测试环境切换到预发环境,返回的仍是测试环境系统。


bLOKdSMFQH.gif

解决方案

基本流程

如下流程图所示,为了解决前文提到的 Host 配置不准确、生效不实时问题,本方案设计了 Host 配置后台、Host 客户端。

产品 Owner 在 Host 配置后台配置了产品相关的 Host 列表后,关注了该产品的运用、测试、开发等同学可以通过客户端自动拉取到相关产品的 Host 数据。

开发需要切换环境时,选择相应产品后,可以叠加本地自定义的配置,勾选相应配置文件后,客户端会自动执行合并、替换操作,在修改 Hosts 文件后客户端会执行自动化脚本,自动清除浏览器 DNS 缓存,达成 Host 实时生效。


image.png


远程共享数据

如下图所示,通过配置后台和客户端拉取远程数据可以达成远程共享数据,通过统一维护的机器数据保证 Host 配置的准确性。


Group 8.jpg


自动清除缓存

开发通过客户端完成 Host 切换后,客户端会自动执行脚本清除浏览器 DNS 。脚本的本质操作是分别打开浏览器 DNS 和 Sockets 链接:

分别执行清除操作,操作完成后关闭浏览器。


Group 9.jpg


附上清除缓存脚本:

image.png


总结

通过 Host 配置后台,由专人(或系统)统一维护,保证用户共享一份数据,后台更新后,客户端通过定时任务实时更新到用户本地,每次用户切换后都能保证使用的是最新且准确的 Host,保证了配置的准确性;通过执行系统自带脚本语言操作浏览器开放接口,达到自动清除浏览器 DNS 缓存的效果,Host 实时生效,保证了 Host 切换的实时性。

在日常工作生活中,有时会发现一些小问题,抽丝剥茧后,你会得到一个想法,从它出发,做一个微小且美丽的变化。

参考


                                                   更多文章请关注微信公众号:前端可视化之路



————————————————  这是一条分割线 ————————————————


科技与才智相伴,青春与金融相遇,

蚂蚁金服风控Plus,期待与你同行。

在这里,你能接触到最前沿的风控技术,进行高并发、高可用、高性能系统开发设计,接触云计算、大数据、人工智能、区块链等潮流技术,与各种技术大牛自由交流沟通;

你一定出类拔萃

缺的只是展示的平台

我们给你的不只是一份工作

更是一片任你翱翔的天空

没有更多华丽的词藻,只希望我们能坦诚相待。

招聘岗位:WEB 前端工程师 (React技术栈)

不要吝啬你的才华,我们想快快看到你的简历:qianqiao.xxx@antfin.com