腾讯的 GSLB 新思路HttpDNS - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
179.91D
584.44D
V2EX    DNS

腾讯的 GSLB 新思路HttpDNS

  •  1
     
  •   Livid
    PRO
    2014-11-13 09:40:18 +08:00 24506 次点击
    这是一个创建于 4036 天前的主题,其中的信息可能已经有所发展或是发生改变。
    90 条回复    2016-11-21 13:52:53 +08:00
    tvvocold
        1
    tvvocold  
       2014-11-13 09:44:59 +08:00
    能不能翻?
    mywaiting
        2
    mywaiting  
       2014-11-13 09:50:24 +08:00
    实质上还是要通过DNS query的过程吧。如果是单单针对mobile端,其实可以这样,什么DNS query都不用了:

    通过当前的位置自动连接内置的对应地区的服务器IP列表,此IP列表搞成可动态更新形式的,每次连上服务器就会自动更新,这样就不用饶个大弯去请求什么HttpDNS了,完全多此一举。
    est
        3
    est  
       2014-11-13 09:52:35 +08:00   3
    就一个 $ curl http://ip138.com/ 还可以包装那么多东西。哈哈。
    mywaiting
        4
    mywaiting  
       2014-11-13 09:56:44 +08:00
    另外腾讯自己怎么不搞个public DNS?我想到的是,在指责别人缓存DNS的时候,为什么自己不用自己庞大的基础设施干点什么?
    abelyao
        5
    abelyao  
       2014-11-13 09:59:41 +08:00
    @mywaiting 文章中有说到吧,自己弄个 DNS 当然没问题,问题是怎么让用户都换成你的 Public DNS 呢?
    tomliu
        6
    tomliu  
       2014-11-13 09:59:53 +08:00
    和我厂的撞名了
    withrock
        7
    withrock  
       2014-11-13 10:03:00 +08:00
    @est 没这么简单吧,GSLB 还有包括了企鹅内在的调度,所以控制能力要稍强。
    abelyao
        8
    abelyao  
       2014-11-13 10:03:51 +08:00
    首先鹅厂这个思路其实挺好的,支持创新(创意是否原创不知,但至少付出实践应用了值得肯定)。
    然后… 这套东西的效果就是今年微信好几次断网么?
    millken
        9
    millken  
       2014-11-13 10:11:47 +08:00
    对于app类有帮助,对于web则无效。
    mywaiting
        10
    mywaiting  
       2014-11-13 10:14:12 +08:00
    @abelyao 那我们为什么都换114和Google的?我觉得,好用吧,自然就越来越多的用户吧。这个过程急不来的吧。
    abelyao
        11
    abelyao  
       2014-11-13 10:16:42 +08:00
    @mywaiting 你们换了,不代表所有人都换,对于使用QQ服务的用户群来说,到底有百分之几的人换了,你给个统计?
    wdlth
        12
    wdlth  
       2014-11-13 10:19:58 +08:00
    运营商DNS不支持edns-client-subnet,然后就想出这么个蛋疼的东西……
    iLiberty
        13
    iLiberty  
       2014-11-13 10:24:37 +08:00
    http://dns.weixin.qq.com
    用的就是这个吧
    mywaiting
        14
    mywaiting  
       2014-11-13 10:34:32 +08:00
    @abelyao 那好吧,我没有统计。我混的圈子窄,都是程序员的圈子,不懂QQ用户群。也不是可以想跟你争辩什么,我只是想说腾讯怎么不自己搞个public DNS的吧。至于用不用,这个,我真的不知道。
    zhujinliang
        15
    zhujinliang  
       2014-11-13 10:46:11 +08:00
    @mywaiting dnspod不已经是腾讯的了么
    zhujinliang
        16
    zhujinliang  
       2014-11-13 10:47:07 +08:00
    @mywaiting 啊不对。。。不是一回事。。。
    mornlight
        17
    mornlight  
       2014-11-13 10:53:21 +08:00
    @mywaiting 感觉你根本没看懂文章
    darcy
        18
    darcy  
       2014-11-13 10:58:38 +08:00
    既然是在移动app里使用,都已经通过http下发ip了,就没必要跟DNS扯上关系了,叫discover server更合适一些。
    而且只能自家使用,无法开放成公共的服务,把一个简单的问题复杂化了。
    c0878
        19
    c0878  
       2014-11-13 11:03:32 +08:00
    很好的方案 不过bgp anycast也就腾讯这种级别能搞定吧 小厂商还是得靠DNS
    zhouzm
        20
    zhouzm  
       2014-11-13 11:08:20 +08:00
    @darcy 文章里提了,114 也推出了 HttpDNS

    用 http 实现了原来 dns 的一部分目的, 名称和 DNS 带点关系也无妨
    mywaiting
        21
    mywaiting  
       2014-11-13 11:28:45 +08:00
    @mornlight 好吧,大佬讲我没有看懂那我就是不懂咯.....泪奔.........
    FrankFang128
        22
    FrankFang128  
       2014-11-13 11:29:27 +08:00
    把域名去掉了……很多东西都依赖域名的呀。
    darcy
        23
    darcy  
       2014-11-13 11:34:54 +08:00
    @zhouzm 嗯,刚去看了,的确提供了一个API;你会在什么情况下使用这种dns http proxy?
    invite
        24
    invite  
       2014-11-13 11:40:35 +08:00
    没看明白,其他应用如何使用这个?要修改所有应用?现在的应用应该直接调用操作系统接口的吧,难道在操作系统和应用之间添加一层适配层?

    而且,一个HTTP的DNS请求,比直接DNS请求的流量,增加了多少个百分点?这个流量费用谁来支付?


    阅读以后,还发现如下问题:


    1、文中提到的BGP AnyCast,不知道这个基于TCP的HTTP协议,如何稳定的使用AnyCast?

    2、文中还提到,A、根治域名解析异常:由于绕过了运营商的LocalDNS,用户解析域名的请求通过Http协议直接透传到了腾讯的HttpDNS服务器IP上,用户在客户端的域名解析请求将不会遭受到域名解析异常的困扰。

    这个简直是拍脑袋,你HTTP本身的请求怎么发起?难道不需要经过DNS解析?如果需要过运营商解析,人家DNS能劫持,HTTP就不能劫持了?
    oott123
        25
    oott123  
       2014-11-13 11:43:16 +08:00 via Android
    对小厂来说,如何确定 HttpDNS 要访问的 IP 是个麻烦的问题…当然对于腾讯不存在这个问题就是了。
    不然我们搞个用其它的方案用来解析 HttpDNS 要访问的 IP ? :P
    mornlight
        26
    mornlight  
       2014-11-13 11:44:39 +08:00
    @mywaiting 哪有什么大佬。原文把pulicDNS存在的问题都说了,再扯DNS的事就有些无聊,那些问题不是有个自己的DNS就可以解决掉的。
    msg7086
        27
    msg7086  
       2014-11-13 11:46:09 +08:00
    @invite 估摸着是做两次dns。第一次由本地解析出他的服务地址,第二次由他的服务来跳转到目标机器。
    blijf
        28
    blijf  
       2014-11-13 11:48:07 +08:00


    该不该剁手呢 XD
    typcn
        29
    typcn  
       2014-11-13 11:50:23 +08:00
    @invite HTTP请求为什么必须需要经过DNS解析?
    invite
        30
    invite  
       2014-11-13 11:53:02 +08:00
    @typcn 哦,看来你都直接记住服务器IP地址的。
    typcn
        31
    typcn  
       2014-11-13 11:53:06 +08:00
    这种解析我早就想过了,是想逃过某墙检测。HttpDNSProxy 然后给设备用,又想了想这样还很慢,要是 Private DNS 还不如直接建立一个长连接两边 emit
    invite
        32
    invite  
       2014-11-13 11:53:54 +08:00
    @blijf 要9.19啊?没有优惠码的么?
    typcn
        33
    typcn  
       2014-11-13 11:54:14 +08:00
    @invite 为什么不能放一个静态IP地址专门用于获取解析?
    blijf
        34
    blijf  
       2014-11-13 11:55:17 +08:00
    @invite 貌似优惠码只能用一次
    hitsmaxft
        35
    hitsmaxft  
       2014-11-13 11:55:22 +08:00
    关键字 运营商劫持, 能解决这个就是个大好事.
    abelyao
        36
    abelyao  
       2014-11-13 11:57:09 +08:00
    @blijf 这是要注册 httpdns.org 吗… 貌似有站啊
    invite
        37
    invite  
       2014-11-13 11:57:34 +08:00
    @typcn 那你觉得这个静态IP的服务器,得怎么放?就1个节点?那怎么提高访问速度?
    typcn
        38
    typcn  
       2014-11-13 11:59:32 +08:00
    @invite bgp + 客户端内置IP列表
    blijf
        39
    blijf  
       2014-11-13 11:59:33 +08:00
    @abelyao registered
    abelyao
        40
    abelyao  
       2014-11-13 12:01:39 +08:00
    @blijf 竟然是刚注册的,好样的,到时有免费服务的话记得通知一下
    hedaode
        41
    hedaode  
       2014-11-13 12:14:44 +08:00
    114DNS的这个HttpDns解析接口貌似访问不了呀! http://114.114.114.114/d?dn=www.google.com
    blijf
        42
    blijf  
       2014-11-13 12:30:48 +08:00
    @hedaode 需翻
    invite
        43
    invite  
       2014-11-13 12:36:48 +08:00
    @typcn BGP ? 基于TCP握手的交互的,能保证数据发送到你那个服务器上?谁给你做TCP会话保持啊?
    benjiam
        44
    benjiam  
       2014-11-13 13:19:17 +08:00
    我也没看懂, 用了http 获取 dns,是这样的概念吗? 所有的劫持都存在啊
    zhouzm
        45
    zhouzm  
       2014-11-13 16:34:19 +08:00
    @benjiam http 方式获得 server ip,代替了 dns
    crisrock
        46
    crisrock  
       2014-11-13 16:34:26 +08:00
    benjiam
        47
    benjiam  
       2014-11-13 17:07:25 +08:00
    @zhouzm 用http方式获取了server ip, 这个方案是很早以前 qq空间就说过的。
    通过 http访问,获得客户端ip,然后将客户端对应的server ip 返回给客户。

    但是只要http结果被缓存了,那么这个问题就还是没有被解决。
    hicdn
        48
    hicdn  
       2014-11-13 17:14:48 +08:00
    @invite 明显没有仔细看文章,第一次的 HTTP 请求是直接连接 IP,这个 IP 做了 BGP anycast,完全用不着 LocalDNS
    BOYPT
        49
    BOYPT  
       2014-11-13 17:19:11 +08:00
    @benjiam
    用http的方式获取最优服务器IP地址,因为目前的“智能区域DNS”有局限性。
    这是在做客户端程序时候的一个解决思路,和现有的操作系统的DNS,或者什么public dns,完全无关的。
    mornlight
        50
    mornlight  
       2014-11-13 17:29:03 +08:00
    你们为何这么吊,httpdns的 org,cn,com.cn 域名都在上午被注册了
    wzxjohn
        51
    wzxjohn  
       2014-11-13 17:30:53 +08:00
    哈哈哈哈哈哈。。。厂里N久之前的文章发出来被热炒一下。。。
    Livid
        52
    Livid  
    MOD
    OP
    PRO
       2014-11-13 17:45:06 +08:00
    @wzxjohn 是啊。来自大公司内部的技术分享,总是可以开拓思路的。
    wzxjohn
        53
    wzxjohn  
       2014-11-13 18:30:41 +08:00 via iPhone
    @mywaiting 你太天真了,你以为我厂没有自己的公共DNS?现在114的基础设施有一大部分是我厂在运营维护!
    然后运营商缓存是绝对无法解决的事情,你把事情看的太简单了。你见过哪个运营商主动给你DHCP推送114.114.114.114么?只要运营商不配合,你建再大的公众DNS都没用。而且,尤其是移动,还会对公众DNS的解析请求进行污染投毒,让你就算用了114也一样得到错误的结果。
    wzxjohn
        54
    wzxjohn  
       2014-11-13 18:35:02 +08:00 via iPhone
    @abelyao 微信断网跟这有啥关系。。。光纤被挖断你有办法?
    @Livid 确实能开拓思路,但是用起来还有一定的问题。其实这套方案最初我记得就是用在移动端,因为移动端的DNS解析真的非常耗时,但是把IP写死就更不科学,所以退而求其次,用这种方式来获得服务端的地址。其实我们还有另一套方案在另一个领域解决类似的问题。。。
    wzxjohn
        55
    wzxjohn  
       2014-11-13 18:36:31 +08:00 via iPhone
    @invite DNS是写死IP的。。。你见过系统里填DNS的时候写域名么。。。
    abelyao
        56
    abelyao  
       2014-11-13 19:04:24 +08:00
    @wzxjohn 呵呵
    benjiam
        57
    benjiam  
       2014-11-13 20:36:54 +08:00 via iPad
    但是如何防止第一次http访问不被ISP缓存呢
    mywaiting
        58
    mywaiting  
       2014-11-13 21:13:10 +08:00
    @wzxjohn 加油:)
    wzxjohn
        59
    wzxjohn  
       2014-11-13 21:23:33 +08:00 via iPhone
    @mywaiting 不明白你在加油什么。。。我在纠正你的错误。。。
    reorx
        60
    reorx  
       2014-11-13 21:53:15 +08:00
    这个方案手机淘宝很早就在用了,Velocity Conf 上还有过分享,几个月前也和同事自己实现了一套。
    typcn
        61
    typcn  
       2014-11-14 03:54:54 +08:00
    @benjiam DNS Over HTTPS 233
    invite
        62
    invite  
       2014-11-14 08:27:01 +08:00
    @wzxjohn 你说反了吧,DNS是自动获取的吧,特别手机。你见过几个人的手机,是自己配置DNS的?
    invite
        63
    invite  
       2014-11-14 08:30:06 +08:00
    @hicdn 你明显没有看我的回复,BGP AnyCast的时候,如何保证TCP数据发往同一个服务器?
    wzxjohn
        64
    wzxjohn  
       2014-11-14 08:30:47 +08:00
    @invite 我没说反啊。。。我的意思就是因为现在大多数人的DNS都是自动获取的,所以Public DNS用来解决运营商缓存意义不大。
    zhengshuai
        65
    zhengshuai  
       2014-11-14 09:10:31 +08:00
    HttpDNS大赞,mark之。
    benjiam
        66
    benjiam  
       2014-11-14 11:39:44 +08:00
    @reorx 这个方案最关键的一点 是IP库。IP库不准等于白搭
    hicdn
        67
    hicdn  
       2014-11-14 11:53:27 +08:00
    @invite 你在移动,还能把数据发到电信服务器上去?
    invite
        68
    invite  
       2014-11-14 15:36:19 +08:00
    @hicdn 难道你只在移动部署一个节点?
    9hills
        69
    9hills  
       2014-11-15 18:05:41 +08:00 via iPhone
    @invite 文章里有说 anycast 啊,你不会以为google 的8.8.8.8后面只有一台服务器吧。。。
    invite
        70
    invite  
       2014-11-15 19:10:20 +08:00
    @9hills 哥, 8.8.8.8 UDP的. 一个请求一个应答就够了, TCP需要多个请求......
    9hills
        71
    9hills  
       2014-11-15 21:54:42 +08:00 via iPhone
    @invite udp一台也不行,只有一台机器可用性顶多两个到三个9 话说你还是认为8.8.8.8 后面只有一台?呵呵
    invite
        72
    invite  
       2014-11-16 10:57:55 +08:00
    @9hills 关键不是台数懂了么? 关键是多个TCP请求能指向同一个服务器的问题.
    lovejoy
        73
    lovejoy  
       2014-11-16 13:27:48 +08:00
    @invite 你在同一个地方连到的后端服务器必然是同一个吧,anycast 难道会随意发到一个后端?这块我不懂,猜测,anycast后面应该不是随机的吧。
    9hills
        74
    9hills  
       2014-11-16 13:59:23 +08:00
    @invite Google "TCP anycast",这个早就有了。。。

    另外8.8.8.8 也支持TCP over DNS的。。不还是一个IP?

    @lovejoy
    9hills
        75
    9hills  
       2014-11-16 14:03:28 +08:00
    @invite
    @lovejoy 来篇PDF: https://www.nanog.org/meetings/nanog37/presentations/matt.levine.pdf

    人民群众的创造力是无穷的。引用pdf的一句话:

    "Stop telling people anycast doesn’t work for
    TCP if you haven’t tested it, it just makes us
    mad."
    invite
        76
    invite  
       2014-11-16 16:54:41 +08:00
    @9hills 没有说TCP不行, 得看你怎么运作, 而且很大程度上取决于运营商(当然, 如果你只跟一个运营商保留一条连接, 那么就随你了.). 如果一个方案需要由运营商来决定, 那么这个方案肯定是有缺陷的.
    @lovejoy 首先, 你的AS跟其他AS相连, 肯定不会只有一条, 这个情况下, 运营商有可能会通过多条连接发送同一个会话里的不同数据包.
    9hills
        77
    9hills  
       2014-11-16 17:48:13 +08:00 via iPad
    @invite 我不知道你在尝试表达什么,在我看来你第一次回复的疑问全部得到了解答。。。

    另外单IP做负载均衡不止Anycast一种方法。。。
    invite
        78
    invite  
       2014-11-17 08:33:29 +08:00
    @9hills 跟一个不是搞网络的人说话真的很累。现在不只是单IP的负载均衡问题,而是考虑到运营商的问题,否则上F5啥的谁不会。
    zhicheng
        79
    zhicheng  
       2014-11-20 07:01:04 +08:00
    我也是做 DNS 的,说两句。

    TCP 是可以运行在 Anycast 上的。前提是每个 /24 段不能承载过多的业务。节点都比较稳定,不会经常因为负载过高而重新route。这也是为什么 Anycast 大多用在 DNS 和 CDN 这种单纯流量的简单业务上。

    我理解原文中的含义大概是,client 本地存储一个 Anycast IP 。在需要解析的时候,向这个 Anycast IP 发送一个带有解析消息的 HTTP 的请求,HTTP 会返回一组解析后的 IP 。

    这样肯定可以工作,但我有几个问题。
    一,这种方式肯定没有办法在浏览器上运行。但如果是 client ,那为什么不直接向 Anycast IP 发送 DNS 请求?
    二,用了 Anycast ,就不需要 IP 库了。
    三,最简单的办法,难道不是 301 + subdomain 吗。
    四,既然每次请求多发送一次 HTTP 的成本都能承受得起,干脆把 records 的 ttl 设成 10 好了。
    五,用了 Anycast 就是机房遭受核打击都没关系啊,难道微信所有机房的光揽被同时挖断了吗,太巧合了。
    Viztor
        80
    Viztor  
       2015-04-01 17:59:04 +08:00
    @invite 用IP发起吖。。
    Viztor
        81
    Viztor  
       2015-04-01 18:01:13 +08:00
    @zhicheng 本身的目的就是为了防止DNS污染,怎么能再去用域名系统呢。。。
    zhicheng
        82
    zhicheng  
       2015-04-01 18:19:12 +08:00
    @Viztor 用这种方式防止污染的方法简直是自欺欺人,单纯把 DNS 协议替换成 HTTP 协议,本质上对防止污染没有任何帮助。
    jesse_luo
        83
    jesse_luo  
       2015-04-02 03:23:35 +08:00   1
    为啥突然被挖坟了……= =

    淘宝似乎在2013年也启用类似技术了
    karonl
        84
    karonl  
       2015-04-17 19:49:25 +08:00
    @jesse_luo 我也突然挖坟了,是因为我看到最近的dnspod https://www.dnspod.cn/httpdns/guide
    xalinx
        85
    xalinx  
       2015-06-23 14:31:53 +08:00
    @karonl dnspod就是鹅厂吧
    stevenc
        86
    stevenc  
       2016-08-04 20:17:19 +08:00
    @invite @zhicheng 你们对 HTTPDNS 要解决的问题一无所知,还扯淡!

    APP 域名解析主要面临以下几个问题:

    1 、解析被劫持。
    2 、解析结果不按 TTL 缓存。
    3 、解析被错误递归(跨地区甚至跨运营商)。

    直接导致解析过慢、出错、无法正确分流等等。

    可以考虑的解决方式:

    1 、要求用户更换你认为可靠的 DNS 。
    不切实际,哪怕腾讯有自己的 119.29.29.29 解析服务也不可能要求每个用户用腾讯产品之后先更换成腾讯的 DNS 地址。

    2 、直接使用 IP 地址访问。

    3 、 HTTPDNS 可以实现精确流量调度。
    stevenc
        87
    stevenc  
       2016-08-04 20:18:16 +08:00
    什么鬼,连续按两次回车就发布了,还没打完。。。
    stevenc
        88
    stevenc  
       2016-08-04 20:23:50 +08:00
    简单说就是:

    1 、要求用户更换 DNS 不切实际。
    2 、指定 IP 地址访问不切实际。(无法实现分流,要是只有少数几个 IP 地址那倒无所谓)
    3 、首次访问先通过 HTTP 返回 IP 地址。(多次一举,这不就是自建 HTTPDNS 吗)

    HTTPDNS 就相当于是不用改 DNS 的 DNS ,将 DNS 解析结果通过 HTTP 的方式返回。更重要的是,公共 DNS 服务在各地有解析服务,提供的 HTTPDNS 返回的结果不会出现错误递归。
    great2soul
        89
    great2soul  
       2016-10-03 21:40:42 +08:00
    DNS 服务如果做得不好就去做一个更好的 DNS 服务或者督促 DNS 服务商做得更好才是正道吧。这种剑走偏锋的做法不太认同,比如安全性问题。
    zhighest
        90
    zhighest  
       2016-11-21 13:52:53 +08:00
    过段时间要换成 HttpsDNS 。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     969 人在线   最高记录 6679   &nbs;   Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 45ms UTC 22:39 PVG 06:39 LAX 14:39 JFK 17:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86