编者按:本文来自陌陌运维主管陈湛翀,他参与并主导建设了知乎和陌陌办公室的网络环境,之前在36氪看到《豌豆荚技术总监高磊:我们是如何搞定180人的Wi-Fi的》一文,文中提到的无线环境与他自己的做法相似,因此想和大家分享下陌陌是如何解决上网问题的。
屈指一算,陌陌已经两岁多了。一个两岁的小屁孩也已经背起书包上学背英文单词了,两岁的陌陌也正在创业的路上越走越顺。回头看看这一路,不容易啊。遥想当年那只有四五台电脑,60 平米左右的办公室,再对比现在一人手持四五个移动设备,1000 平的高上大 CBD 写字楼,些许感慨。
当年那个60 平米的小办公室,大家上网办公依赖的是一条4M的不对称企业 ADSL。所谓的不对称,指的是上行下行速率的不相等,也就是,我下载能达到 4Mbps,但上传只有 512Kbps。很多人认为上传不重要。设想一下,一个 10M 的陌陌APP,要上传到服务器去,只能以 64K/秒 的速度上传,这个还是理论。一个人单独只用整条线的最快值,需要时间两分半。相信现在家庭用的XX光纤入户都比这个要快了,当时整个陌陌的所有员工都在使用这条小水管。
后来,我们的办公室搬到了环境宜人的别墅。同样是ADSL(当然,带宽是扩大了)陪我们度过了这段温馨的时光。再后来,也就是现在的办公室,急速增长的员工数量和比之前大十倍以上的办公室,终于让我们正视这些问题了。我们需要一个能满足数百设备的有线无线办公室网络环境。
首先,我们看看一个初创移动互联网公司所面临的问题:
1)众多设备的有线无线上网
2)各类下载加速
3)爬篱笆
陌陌的办公室上网使用的是大厦提供的宽带上网,从大厦端给我们的就是一根普通的网线,我们只要插上网关服务器(关键角色,将在第二部分详细介绍),配置上大厦分配的IP就可以使用了。关于有线上网,都是实打实的东西了,有多少个网线口,就得有相应数量的交换机端口。我们选购了一款性价比超高的 N 家的交换机,24 口千兆,只要不到 1000 的价格。这些交换机以级联的方式连起来,然后扩展也比较方便,办公室需要扩工位时,就继续买交换机来级联。
好了,说完有线,我们来说说比较关键的无线。作为一家有态度的移动互联网公司,一个员工的桌子不放上那么五六个移动设备,都不好意思说在陌陌工作。作为一个脑残果粉,在这里就不选择 C 家的瘦 AP 了,而是直接选择了 Apple 的 Airport Extreme 。Apple 的 AE 其实是一个路由器,但是我将其当做一个 AP 来使用,只是负责建立无线网络,关闭 DHCP ,以 Bridge 的方式与网关相连。而之所以不选用 C 家的 AP ,则是考虑到 C 家的 AP 其实也不便宜,能达到和 AE 宣称的理论最多 50 个同时接入的 AP ,甚至比 AE 还贵。
陌陌的办公室并不是一个大开间,而是一个类似“回”字的形状(中间是电梯)。办公室的布局,与路由器的摆放有直接关系。我们当前布置了 11 个 AE ,平均每个 AE 连接了 30+ 个用户。只广播一个 SSID ,2.4G 和 5G 网络都用同一个 SSID ,不让用户选择就是最好的选择。整个办公室就一个 SSID,无缝漫游,即使用户的位置移动了,也会自动寻找最近的接入。
用户的设备支持 2.4 的就连接到 2.4,支持 5 的就连接到 5。众所周知,大部分的 PC 和除了 iPhone 5 以上的手机,都只支持 2.4G,而 2.4G 基本已经拥挤得无法使用了。所以我们在 Android Team 的附近,布置了3~4个路由,以保证它们还能顺利上网,但速度已经无法保证了。另外,也不能太相信 AE 的自动分配,必须手动指定每个路由广播的信道,以保证相邻的两个路由的信道不要重叠。
Apple 新款的 Airport Extreme ,支持 802.11ac ,理论上可达到 1.3Gbps 的吞吐,比一般配备的有线千兆网卡更快。最近,我们终于也入手了新款 Airport Extreme ,豪华的外型背后,却是一个无奈的事实:英雄无用武之地。现在支持 802.11ac 的设备真是少之又少,连去年的 retina MacBook Pro 都不支持 ac。
在这里稍微吐槽一下 Apple 的无线管理工具 Airport Utility 。6.0 版本不好用吧,Apple 自己也知道,让 5.6 版本可以与 6.0 共存。但新款 AE 不能通过 5.6 进行管理,而且系统升级 Mavericks 以后,5.6 就已经不能用了。Airport Utility 6.0 + 新款 AE 缺少了很多可监控的选项。而 Airport 5.6 + 旧款 AE 是可以通过 snmpd 和 syslog 获取一些信息的。
接着就是加速的事情。我们这里,有请一位关键角色出场——墨迹。墨迹是陌陌的No.15号员工,我们的卖萌总监。我们用退役下来的黑苹果,装了一个 Linux 作为我们的办公室网关。为了纪念墨迹,这个机器的名字叫墨迹。墨迹在我们创业的初期,一路用卖萌来陪伴着我们加班的日子。终于在某一天遇到了一生中所爱,从此离家出走去追寻自己的幸福了,再也没有回来了。我们没有怪她的不辞而别,而是祝福她,终于找到了一生的归宿。
我们也为此特别做了一个版本来纪念这位永远的卖萌总监。下图就是陌陌 1.9 的开机载入画面:
墨迹上安装了 Smokeping、Cacti、Ntop 等软件,Smokeping 可以检测办公网到各个地方的网络情况,Cacti 用于监控整个办公室的带宽情况,Ntop 用于监控办公室每个人的网络使用情况。
说回来加速。我们主要加速的内容是,iTunes的APP更新,和 Testflight ipa 的下载。方法都是,在网关上面安装一个 squid,用于缓存 ipa,然后用 iptables 把下载的地址,指向 squid,让 squid 缓存住 ipa。只要第一次下载成功后,就会缓存到 squid 上面,办公室的其他人就因此受益了。更新速度都是唰唰的。
iTunes 的更新一直没有使用 CDN ,直到今年初,App Store 的 ipa 下载使用了国内的 CDN ,办公室的 iTunes 加速的作用才没那么大了。再到后来 iOS 7 发布后,这个就更不是问题了,因为 iOS 的新功能自动下载更新,iOS APP 基本所有的更新都可以在大家睡觉时完成了。但 testflight 的下载仍然没有 CDN 的,而且慢得令人发指,如果没有加速,难以想象还有谁会去使用它。
作为一个从来不用百度的装逼犯,表示绝对不能忍受一天不能使用 Google 。于是,爬篱笆成为办公室上网的一个必备因素。同样,网关是一个 Linux 实在太方便了,我们仍然利用它来做这个事情。原理就是,中国的IP走默认的出口,而非中国的IP则走VPN的出口。
而中国的IP怎么获取呢?从 APNIC 下载一份IP列表回来,把属于中国的IP过滤出来。正如大家所知,全球的 iPv4 地址已经早就分批完毕,所以这份列表的变动性其实已经不大了。即使经常变动,一天更新一次也是没什么问题的。