『分享』简单的亿级构架

2014-06-17 16:32:38 +08:00
 FarBox
《简单的亿级构架》是一次去他厂做的分享的Topic,基本结构很简单,但很有效,也是FarBox目前采用的基础构架。

实际分享的1个小时里,涉及到很多其它的知识点,我们梳理了主干,就有了这篇文章。

如果你正在做全新的Startup,它或许会有参考的价值;结构非常简单,却能让你的服务变得更加稳健。

http://tech.farbox.com/post/a-simple-structure-for-billions-pv
7502 次点击
所在节点    程序员
45 条回复
binux
2014-06-17 16:44:11 +08:00
负载均衡是DNS做的?不怕ISP、用户缓存?防止单点故障的方案那么多,怎么就选了个这个。。
心跳自己做?那么多开源方案工具不用?为什么?
tftk
2014-06-17 17:07:45 +08:00
完全没看出来和'亿级'有何关系.
kslr
2014-06-17 17:12:52 +08:00
标题党
dongbeta
2014-06-17 17:16:27 +08:00
好吧 我是看到 “亿级” 才进来的,感觉和楼上一样
missdeer
2014-06-17 17:21:06 +08:00
确实有标题党嫌疑
FarBox
2014-06-17 17:24:53 +08:00
@binux 这主要是水平扩展的结构,所以一个特性是具备了负载均衡的能力。另外,DNS作为基础的负载均衡,也是一个非常常见的手法。

不论ISP或者本地的DNS查询,都是遵循的DNS的基本协议,所以你可以自己控制TTL的时间,那么出现某个节点问题,可以在很短的窗口期内自动恢复。我们在文章中比较详细的解释过了。

防止单点故障的方案,很多都要考虑不同的场景,而有自己的局限性;比如考虑到节点是分布在各个机房甚至各个国家的,这就过滤掉大部分的解决方案了。 不过@binux 也可以分享一些,这样能给大家有更多参考的可能。

`心跳`的逻辑本身很简单,我们在文章中也贴了主要的代码,加上内部的一些逻辑判断,都是百行内的规模。比`心跳`更加重要的是,它是按照什么形式跳动的,比如自己web程序中一个组件能否正常运作,这种判断引入第三方的方案,实际上更加麻烦。
更加重要的是,`心跳`只是分布式构架中常见的组成部分,它是逻辑的部分,我们可能这个解释不清楚,举个例子,比如`Serf`,它肯定有心跳机制,但它不是心跳的package……
FarBox
2014-06-17 17:29:10 +08:00
@tftk @kslr @dongbeta @missdeer

非常不好意思,没有想到会给人这样的观感。这样的结构,确实是亿级别的,很soft,却是底层的。实际的构架中,肯定需要考虑到其它方面的配合,以提高单机的负载能力,进而降低集群的成本。
qiongqi
2014-06-17 17:30:25 +08:00
亿级是啥?PV?
acthtml
2014-06-17 17:33:49 +08:00
恩,不错。
FarBox
2014-06-17 17:35:53 +08:00
@qiongqi PV/IP都可以算…… 去掉集群本身的系统开销,实际上总的容量就是堆机器x每个单机的负载能力。
dongbeta
2014-06-17 17:39:12 +08:00
@FarBox 问一个题外话,选择 python 的原因是什么呢?
rrfeng
2014-06-17 17:41:54 +08:00
这也讲的太简单了。

真正的服务跑起来,一切都复杂了
qiongqi
2014-06-17 17:41:59 +08:00
@FarBox 你的dns服务器不会成为瓶颈吗?
kslr
2014-06-17 17:42:33 +08:00
@FarBox 看起来很棒,不能迁移评论是个大问题
FarBox
2014-06-17 17:48:25 +08:00
@dongbeta 主要是写起来快,代码逻辑比较干净。

其实,最主要的原因还是我们对Python是最熟悉的,FarBox使用了很多第三方库,在Python的前提下,我们对里面存在的问题能直接发现并处理掉;虽然其它比如Node也能上手,但没有这方面的自信。

也题外话一个:其实Python最大的问题就是性能的问题,我们现在一些主要模板基本上都是引入了C包,而且缓存机制以及比较完善了,性能的问题就不大了。比如我们渲染一个页面现在平均能控制在10ms以下了……
FarBox
2014-06-17 17:50:13 +08:00
@qiongqi LOL, 不会, DNS这个基础协议,其实是21世纪非常伟大的一个发明。它本身就是分布式……

我们这样的设计,只是在它的应用层上沾了点光。
FarBox
2014-06-17 17:54:04 +08:00
@rrfeng 是的。基本逻辑是这么简单的,即使不是做后端的Dev,也能解释清楚。

不过,也有另外一方面的考虑,构架足够简单,所以可以将它分离出去而不用去考虑它的存在;复杂的就归于复杂的本身。

其实,如果开发团队的人数和实力是可控的,复杂也是可控的。也不得不承认,现实情况,项目过程中太容易腐败了,可能也是部分这个原因吧,所以我们出来自己做产品。 :)
jerry74
2014-06-17 18:08:08 +08:00
动态内容的都不用考虑后端?
一个dns轮替就叫亿级构架?
flykite
2014-06-17 18:22:01 +08:00
呃,这个应该是系列教程,万里长征的第一步才对。期待后面有更多佳作。
HowardMei
2014-06-17 18:34:58 +08:00
很好的分享,常常最有价值的不是设计上多么复杂巧妙的系统,而是经过生产环境证明切实可行的系统,这是有真金白银意义的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/118000

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX