域名访问或者ip访问?
域名访问方式处理的过程:
http.png
- 客户端访问DNS服务器,由域名拿到负载的外网ip
- 客户端使用外网IP访问负载
- 负载将请求分发给实际处理HTTP请求的Web-server
优缺点:
1 负载集中,业务上如果有需要的话可以统一处理,比如为进来的每个请求加一个logID等
2 DNS被劫持,那么整个就挂了
3 DNS再快,负载再好也要需要解析传输的时间,速度自然会受到影响
设想:
如果我们将整个实际处理的机器整成一个ip列表内置在客户端呢?比如app,先不考虑安全的元素下,这样可以跳过DNS的解析与负载转发,直接访问到实际工作的web-server(随机访问ipList或别的方式,这个可用不同的算法实现),先来描绘下这个流程,再说
设想流程
imagine.png
大致就是这个样子:
1 本地没有ipList时,走一下DNS拿到一个外网的IP,发出请求,拿到IPlist与它的版本号
2 当本地有ipList存在时,直接拿IPLIst请求,当然,版本号要与当前保持一致,这么做是为了当ip列表发生变化的可以让客户端感知并保持最新.不一致时,才拉取
优点:
- 不需要每次做DNS解析,避免劫持与节省时间
- 节省负载的转发时间(虽然也需要随机计算或者别的算法计算)
- ipList可能长时间都不需要拉取,因为这个短时间不会有太大的变化,依然可以保持水平扩展
能想到的弊端:
- 无法提供一个公共的入口,有些公共的事可能无法提供
- 安全问题,比如最核心的ipList的传输安全
- 地域,dns可以提供地域优化解析,我们好像也可以根据位置与网络识别去做,但是代价好像有点大
结束:
我还未看到有这么处理的架构,也没想到更致命的问题
备注:成本问题,好像成本大了点,ip加密等一顿处理,也是消耗.

