系统架构师大会(SACC 2012)第一天

今天是 SACC 的第一天,整体的感受就是讲的比较实在,不装比。当然上午的还是基本以广告为主,前面的实在指的是下午场。

1. Tencent,泛泛而谈了他们的 webapp 开放平台的架构设计。基本运维这部分还是大同小异了,无非是监控,log 收集分析以便及时发现问题,自动化的部署,自动化的版本发布,质量的监测,这个我理解的还是属于监控这个范畴了,只不过是业务层的监控监控问题。
2. 然后是 MicroShit 吹嘘他那啥云云之类的;IBM 的在那边大谈特谈究竟什么是云。

人类大部分的活动,无非都是对资源划分于利用,这个是前天下午看完《敢死队2》的感受,其实对云来说也一样,无非是原来 100 台服务器,我不能很好的利用他的资源,现在有了云这个东西,可以把资源进一步的整合,你需要多少 cpu,需要多少 ram,我就给你分配多少的 cpu 以及 ram,不浪费,扩展起来很容易。我觉得这才是云要实现的目标。

3. 而余锋讲的则是 MySQL 在云方面的体系架构,目的也很简单,就是要更有效的利用、压榨物理机的每一点资源,同样这样的好处是管理起来也比较方便。最开始的 MySQL 使用的是 MS,这会出现同步不完全的问题并且 S 的利用率也比较低;后来改成了 proxy 的模式,制定一个统一的入口,前端 LVS 做 LB,这样控制起来比较方便。另外还使用 rabbitMQ 作为消息队列,使用 Mnesia 作为 db 的管理系统,整个系统大概 10w 代码,很多地方使用 Erlang 实现,据说该语言的特性使其特别的稳定。资源的划分是通过 cgroup 实现的,记得 baidu 也是这么做的。该系统还提供 SSL、白名单、log 追踪记录、FlashBack restore 的功能。不过该系统貌似目前还是有不少问题需要解决的,比如不能实现 group by 等操作。

接下来是下午场的。
1. sougou 团队的介绍了他们的 VPS 演进过程。最开始只有几台物理机,人肉操作,wiki 记录一切;后来比较多了,使用脚本,搞了个简单的 web 界面,在每台机器上跑 cron,定期收集机器的信息,及时更新至 DB;再后来,到了目前 5k+ VM 的级别,上面的已经满足不了他们了。于是他们自己写了套调度,来控制 VPS 的所有操作,比如分配、销毁等等。难能可贵的是,这一切都是由两个兼职的运维负责。
存储目前还是本地,每台机器 90G 的内存,3.5T 的硬盘,缺点很明显,IO 不易隔离,这个可以通过 LVM 的方式缓解;还可以通过比较高级的 cgroup 的方式实现;最要命的是扩容比较麻烦,没有快照,还有迁移问题也比较麻烦。因此他们正在改造成网络存储。
VM 最大的问题还是网络的瓶颈,虚拟网桥的性能比较差,只有物理机的 60% 左右,他们建议可以通过 SR-IOV 的硬件方式解决。

2. 听乐蜂网讲中小型网站的变迁过程。有印象的不多,最重要的是监控要全面,看到他们有个专门为网络设备做物理、逻辑画图的东西,不知道叫啥(13 年 1 月更新,在研究 cacti 的时候发现用的是一个叫 weathermap 的插件);然后是审计问题,他们有套程序,可以向收集 log 一样把所有在该机器上执行的命令记录到一台中央机器上;禁止一切不必要的危险的命令,一旦侦测倒有人执行,立马发邮件通知相关人员。淘宝就是这样做的,这个可以参见之前 @levin108 遇到的一次小事故

3. 飞信的介绍他们的 MySQL 演变过程,基本就是从开始 MS 到加了 VIP 的 MS,通过域名的方式访问,再到 MySQL Proxy。搞笑的是,他们为啥不做 shard 了?他们招的那帮程序猿都是从 MicroShit 招来的,然后这帮人貌似对 shard 不熟,然后就没做了。在过程中飞信的有提到,他们在做到 Proxy 的时候,主要瓶颈在网络上,看来这个跟阿里的技术差距还是蛮大的。上面余锋介绍的那个 MySQL 云就是通过万兆以太网相连的,而飞信到目前为止还在使用千兆以太网卡。还有种方案是使用 NDB,不过还没完全成熟,不敢用。

4. 职业发展规划的这个几个案例说的倒是蛮好的,尤其是第一个,通过各种排查,lsof, socketstat, strace 定位到是 php 忘关 socket 的问题。有点说的比较好,就是要进行故障预演,这样才能及时发现问题,越是牛逼的,高冗余的没有 OSPF 的系统,出现问题造成的损失就越大。

5. 最后一个是 DNSPod,基本就是一个创业事,最开始是如何的简单粗暴的来实现某些东西,到后来慢慢的发展,招人,自己写 DNS,直到最近能正确的解析到使用 8.8.8.8 用户的 IP。还有过从内核态实现 DNS 的想法,这导致系统的性能虽然提高了,但是变得不稳定了,最后只能躺在实验室了。有点要注意的是,他们在 freebsd 上的实现比在 Linux 上的网络性能提高了 20% 多,这个跟之前看到的使用 freebsd 做 c100k 结论应该是吻合的。