淘客熙熙

主题:【原创】wikipedia架构学习笔记(一)他们的骄傲 -- 羽羊

共:💬62 🌺262 新:
全看分页树展 · 主题 跟帖
家园 【原创】wikipedia架构学习笔记(二)路标

wikipedia有多少台服务器?上回小羊数了,357台,多少台放在前端接受用户访问请求?没数,谁爱数谁自己数去,人不能太八卦,呵呵,不过肯定不少于100台了,分别组成N个cluster,放置在好几个机房,上次贴了一个wikipedia架构图,相信那个写实风格的架构图,不是小羊一个人晕菜——这TMD简直就是一片服务器的丛林阿。但是,对于用户来说,就算它有百万台server、八百个cluster都不关我事儿,用户只管输入www.wikipedia.org,那么用户访问的时候,指向的是哪里?访问的是哪一个IP?

我们跟着感觉走一回,设想两台服务器,一台就在你们家隔壁,一台在地球的另一端,两台服务器都能够提供你需要的服务,你访问哪一台?

恭喜你,答对了,当然是离你最近的那一台,而且wikipedia就是这么干的。

用户首先遇到的就是wikipedia玩儿的第一个花样——DNS解析

DNS我们都知道是个什么东西——当我们在browser地址栏输入西西河的地址的时候,我们真正要去的,其实不是ccthere.com,而是寂寞。。。不对不对,乱了乱了呵呵,而是205.209.175.100这个ip地址,ip地址才是ipv4网络的根本,browser就是从DNS服务器那里获得了205.209.175.100这个地址,才能把我们扔到河里来的。其实中间还有一步,就是把ccthere.com变成ccthere.com. 看到区别了?(没看到的跟我来——为革命,保护视力,眼保健操,现在开始。)从难记的ip地址,到好记的域名,再到会自动补齐那个小圆点,技术,就是在人类贪得无厌的偷懒欲望中进步嘀。

知道了网站的IP地址,实际上还没有开始访问网站呢,这个时候,wikipedia的花样就已经开始玩儿了。以查询 zh.wikipedia.org 为例:

首先客户端发送查询报文"query zh.wikipedia.org"至DNS服务器,DNS服务器首先检查自身缓存,如果存在记录则直接返回结果。如果记录老化或不存在:

1.DNS服务器向根域名服务器发送查询报文"query zh.wikipedia.org",根域名服务器返回 .org 域的权威域名服务器地址。

2.DNS服务器向 .org 域的权威域名服务器发送查询报文"query zh.wikipedia.org",得到 .wikipedia.org 域的权威域名服务器地址。

3.DNS服务器向 .wikipedia.org 域的权威域名服务器发送查询报文"query zh.wikipedia.org",得到主机 zh 的A记录,存入自身缓存并返回给客户端。

花样就在第二步,看下图,我们实际查询的结果

点看全图

外链图片需谨慎,可能会被源头改

分析一下:A记录的TTL很短,Ns记录地址类型是IN,也就是说,一般情况下,我们本地的DNS服务器不管怎么设置,因为TTL时间实在太短了,本地设置的DNS服务器缓存中 wikipedia.org这个域的解析基本都会从第五列的那三台域名解析服务器获得最新的结果。

wikipedia在他自己的DNS服务器上做了手脚,添加了地理信息设置,这个就是架构图当中所谓GeoDNS。

点看全图

外链图片需谨慎,可能会被源头改

这样一来,整个流程就清晰了,我们访问wikipedia.org,从我们指向的DNS服务器中获取的就是离我们最近的wikipedia服务器IP地址,然后这个地址就被存放到本地缓存中直到我们手工flush或者过期,从而在地域上先对服务器做了一次基于DNS的负载均衡。

小平说:电脑要从娃娃抓起

wikipedia说:提高网站性能要从用户端抓起

其实写到这里,有个疑问:

首先,首尔yahoo机房提供的服务器离线之后,wikipedia现在的机房只有两处,在这种情况下,GeoDNS基于地理信息对于用户的引导,不能说没有用,至少在wikipedia强悍的处理能力和足够的带宽面前,用处不大了;

其次、wikipedia的内容庞大是毫无疑问的,但是其内容却并非对于全部用户均有价值,而是根据语种的分别对用户有价值,语种的分别又天然的和地理信息有关系;

那么,我们可以想象一下:

1、为德语区的用户访问提供服务的server cluster如果存储非德语资料,利用率一定是底下的

2、如果德语区的cluster无法提供用户需要的内容,那么它需要找到最近的服务器获取内容

再看看wikipeida自己的DNS技术说明,有这样一句话“Wikimedia use two separate kinds of DNS servers, authoritative nameservers (that respond to queries from third party nameservers for our domains) and resolvers (that resolve DNS queries for our own servers) ”

我们有理由怀疑GeoDNS对于wikipedia最重要的用处应该在于内容的分布、存储和读取方面。

真的么?

参考:

wikipedia的DNS设置说明

pwoerDNS地理设置

为bind添加geoDNS功能

MaxMind GeoIP Country Database

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河