部署 10w 并发的服务器方案

ane · January 21, 2014 · Last by cassiuschen replied at January 21, 2014 · 13402 hits

最近有个事,用户需要给他个服务器方案,要求是支持 10W 以上的手机并发请求。以前还没弄个手机相关的,我想应该是用 json 交互吧,有什么服务器方案可选吗?云服务,可不可以?

用途就是手机给服务器发端数据,服务器将数据特殊处理以后返回给手机。我估计缓存都基本用不上。

其实我个人感觉就好像是一段程序,用 node.js 最好。目前这个要求只是为了做个 demo,用来去和风险谈的。

无共享、分布式架构,单台服务器是不可以的。10W 都到了软件负载均衡的极限了,LVS,DR 模式。

不是吧,刚刚 google 一下,居然第一个就是我的这个问题

#1 楼 @wushexu 肯定不可能一台服务器,只是策划一下,大约需要多少台什么配置的机子,如果用云可不可以

10 来台,可以逐渐加,跟内容能不能静态化、数据能不能缓存有很大关系。 云主要是看价格能不能接受。

这个方案估计是做 PUSH 用的吧,我们一般要求三千万的并发,是指 socket 长连接,一般单台服务器可以支撑到 100-200W,你可以去搜下 mqtt 的开源解决方案,用 C 的或 Java 的都行,Java 一般用 Netty 来搞,可以支撑到 150W 左右 (8 核 16G 内存)

#6 楼 @zeeler 它还真不是 push,用途就是手机给服务器发端数据,服务器将数据处理以后返回给手机

#7 楼 @u1378130755 那得有多大访问量啊,一般的 web app 服务器都能抗住动态请求并发 500 左右,如果用 python 或者 ruby 可以起多个实例,这样算起来要搞好多服务器;我们的客户端每天将近 20 亿的 HTTP 请求量,都没搞那么多并发。。。另外,要了解下是神马业务类型,瓶颈不一定在 WEB 这部分,如果是事务型业务比如电商类,瓶颈在数据库和磁盘 I/O,如果是内容类,比如网易新闻,youku 客户端,这种类型大部分数据都可以通过 cache 来抗压,本身数据系统压力很小,cache 命中率很高的话单台服务器上万的并发一点都不难。

#8 楼 @zeeler 是啊,你说的这些我懂,可用户和老板不懂,老板跟我要方案,搞的我头大,用户基本没啥要求,就是一个支持 10w,追问其他的,他让你想。。。

#9 楼 @u1378130755 那就堆服务器啊,架构设计尽量简单,可以水平扩展下去就行

#10 楼 @zeeler 不过数据库肯定是个瓶颈,必须拆分,比如做集群,数据表分离等等

#10 楼 @zeeler 主要是目前处于 demo,阶段。你说,要是用 node 先写个简单的匹配程序,靠谱吗

#12 楼 @u1378130755 不靠谱啊,都不知道具体业务类型,怎么写,那还不如直接放几个静态 json 文件来请求,瓶颈基本就是磁盘 IO 了,可能五六台服务器就搞定了。。。

#13 楼 @zeeler 五六台大概什么配置额服务器?

至少 8 核 8G-16G 内存吧,关键看你用的技术方案了。。。

ps, 这是忽悠老板的方案,好的方案肯定要分析具体业务形态的

#16 楼 @zeeler 就是要找忽悠老板的方案,我估计老板自己心里多少应该有点概念。这个不是我闭门造车的能出来的

#17 楼 @u1378130755 那就搞复杂点好了,nginx*n + cache*n + app server*n + cache*n + MySQL cluster,8 核 16G+SSD 硬盘 +1000M LAN,另外 IDC 出口带宽也有要求的,需要计算下数据量;数据库如果是瓶颈可以全用内存读写。。。

可以看看 @flyerhzm 黃智敏 這個
https://speakerdeck.com/flyerhzm/gou-jian-yi-bu-apifu-wu

他也在 Homepage http://huangzhimin.com/ 上寫到 I have built a large high-traffic platform, with more than 250 million users, handle more than 300k rpm. I also built some async non-blocking api services, based on EM + fiber, only 16 ruby instances can easily handle 240k rpm.

#18 楼 @zeeler 据说 12306 就把数据库全搞进内存了…

#20 楼 @cassiuschen 唉,并发量太大,网络 IO 就成瓶颈了

@zeeler In memory Database,是 Redis 還是 Memcached?

#22 楼 @ksec 好多都可以啊,看业务类型了,持久化可以自己实现。redis 适合一对多的数据,比如评论,memcached 适合一对一的,比如新闻;另外,MySQL 也有 memory 类型引擎,其他好多数据库都支持

楼主,可以换个头像吗。每次都感觉你刚开完房。

哈哈

弃用 ruby,用 node 或者 go 吧

#20 楼 @cassiuschen 12306 是个奇葩

#24 楼 @xiaoronglv 哈哈,好,换个

#26 楼 @u1378130755 没办法………它那业务环境就这么奇葩…………

You need to Sign in before reply, if you don't have an account, please Sign up first.