架构设计之——域名设计

推荐文章 shanhuhai 581℃ 0评论

域名的使用规划, 看似不重要,但是在大型的软件架构中实际非常关键。域名是用户的请求入口,设计不恰当, 使用不规范,非常容易造成系统的不稳定。在系统架构过程中,我总结了以下经验, 供君参考:

资源域名与动态域名分开

网站打开时,页面上的图片、js、 css 等文件是无状态的,不需要改动的,通常需要经过CDN或者其他代理缓存。而动态的请求, 通常是有状态的, 例如开启了SESSION 会话,通常不能做CDN缓存,这两种请求如果使用了同一个域名, 会导致使用CDN 时难以配置的尴尬, 有时可能需要在CDN 上做一些强制配置才能使CDN 生效,达到理想效果。

上传域名与访问域名分开

有些情况, 我们需要上传资源,例如视频, 而上传视频的域名跟播放视频使用了同一个域名, 同样的情况, 播放视频时我们希望视频使用CDN 或其他缓存代理,而上传时请求一定不会允许请求被缓存, 同样的尴尬会再次发生。

资源域名应有多个备用域名

我们设计资源域名例如

 s0.xxx.com

通常会预留

s1.xxx.com
s2.xxx.com
....
s9.xxx.com

并确保通过这些域名通过同样的路径能访问到同样的资源。

例如:

http://s0.xxx.com/img/1.jpg

能够访问到图片 1.jpg
那么通过:

http://s1.xxx.com/img/1.jpg
http://s2.xxx.com/img/1.jpg
...

同样能够访问到 1.jpg。

这样做的目的主要是为了方便缓存刷新,有时候网页制作好后,图片地址就固定了, 被访问后, 图片容易被 CDN 其他代理缓存, 我们更新了图片,地址不变, 用户不能立即看到更新, 通过使用备用域名,编辑或者前端人员就能方便的通过修改域名来刷新缓存。

对内域名与对外域名分开

对内域名是指内部子服务模块之间互相调用的域名,外部域名是指需要域名解析指向对外提供服务的服务模块。

对内域名, 可以自己定义, 因为不需要做公网解析, 可以通过设置 内网DNS或者 HOSTS 实现转发。

而对外域名则必须是在域名注册商购买注册的域名。

很多情况下, 本应自行设计的对内请求域名, 因考虑不周,使用了对外域名, 虽然也可以运行,但容易出现如下问题:

  1. 内部请求通信只需要发生在内网, 但是因为没有配置内网DNS或者HOSTS, 请求会走到外网。
  2. 运维人员难以区分对内域名、对外域名, 配置容易出错
  3. 对外DNS解析容易出错,多配或者少配域名

看一个实例,如图:

correct-domain
正确的方式下, 对外域名为 xxx.com, 对内域名用 internal-xxx.com做区分, 这样运维人员可以直观的看到,这个域名属于内部使用,无需外网解析, 只需要在内部 DNS 或者HOSTS解析即可。

wrong-domain
在错误的配置方法下, 对外域名与对内域名没有做区分, 都使用 xxx.com, 运维在实施过程可能因为部署文档描述不清,将所有域名都对公网解析,这样导致内部回调请求转发到公网,可能会发生请求被缓存等异常问题, 而且此类问题也非常难以排查。

转载请注明:大后端 » 架构设计之——域名设计

喜欢 (3)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址