V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
markfang
V2EX  ›  数据库

面试 mysql 如何应对百万并发?

  •  1
     
  •   markfang · 2017-03-09 14:18:20 +08:00 · 5348 次点击
    这是一个创建于 2851 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2017-03-09 16:58:28 +08:00
    一个用户榜单 瞬间有 100W 用户去那个页面看数据
    56 条回复    2017-03-13 09:09:48 +08:00
    knightdf
        1
    knightdf  
       2017-03-09 14:34:43 +08:00   ❤️ 8
    开一百万台 mysql
    wangdu2012
        2
    wangdu2012  
       2017-03-09 14:46:02 +08:00 via iPhone
    问这种问题的人没脑子没水平
    isphone
        3
    isphone  
       2017-03-09 14:46:50 +08:00
    ipeony
        4
    ipeony  
       2017-03-09 14:48:18 +08:00
    读写分离,分库分表 扯点~
    thai9quohs6jae1C
        5
    thai9quohs6jae1C  
       2017-03-09 14:51:49 +08:00   ❤️ 5
    你可以问他 “如何实现百万并发”
    em70
        6
    em70  
       2017-03-09 14:54:10 +08:00
    让老板掏钱买 10 万台服务器就行了.

    题目又没限制成本,又没限制必须纯技术解决,也没说明目前的配置,烂题
    lfautumn
        7
    lfautumn  
       2017-03-09 15:08:59 +08:00
    把阿里巴巴买下就行啦
    vus520
        8
    vus520  
       2017-03-09 15:38:12 +08:00   ❤️ 6
    我没有做过单机这么大的量,目前单台 LB 上最大的并发连接是 18 万 /s (多台 LB ,要是合起来算应该超过百万连接,毕竟用户数在百万以上)

    这里的并发,如果仅是『连接』,并无实际请求和处理,常见的 32G 内存的服务器完全可以抗住 C1000K ,这个问题不用讨论。
    如果有读写行为,最好按读写分开计算。

    1 ,按常见只读业务, mysql 达到 3-5w QPS 比较容易达到,也就是说 20 台 mysql 机器就能抗下来,只需要分配好主从节点,前端再加上一些缓存,如果有 50%左右的缓存命中, Mysql 的读取压力就能降到 50 wQPS ,一点问题都没有,妥妥的。

    2 ,按常见的写业务, 100wQPS 的写我觉得是相当恐怖的,感觉 mysql 还是算了吧,随便上个 hadoop , es ,前端套个队列,有压力,但估计问题也不大。

    最后,我实再编不下去了。
    QQ2112755791
        9
    QQ2112755791  
       2017-03-09 15:41:15 +08:00
    没有什么实际意义吧。有强大的服务器支撑还是可以实现。
    shiny
        10
    shiny  
       2017-03-09 15:49:52 +08:00
    取决于业务类型才有意义吧
    HLT
        11
    HLT  
       2017-03-09 15:57:46 +08:00   ❤️ 1
    如果单就这一句话。。。。对方简直是个煞笔
    mhycy
        12
    mhycy  
       2017-03-09 16:15:38 +08:00
    前些天还有个在这问类似的问题
    说是开放思维。。。。
    echo1937
        13
    echo1937  
       2017-03-09 16:39:50 +08:00
    每秒百万,每日八六十四百亿吧,考虑访问转化率 10%,至少八千亿的日 PV ,这是什么服务?
    tabris17
        14
    tabris17  
       2017-03-09 16:56:08 +08:00
    百万并发个啥?具体场景不说,烧饼问题
    yxslnmp
        15
    yxslnmp  
       2017-03-09 17:00:18 +08:00
    曾经就被问过这类的烧饼问题。表示聊不下去,还得强颜欢笑
    markfang
        16
    markfang  
    OP
       2017-03-09 17:07:50 +08:00
    @tabris17 一个用户榜单 瞬间有 100W 用户去那个页面看数据
    markfang
        17
    markfang  
    OP
       2017-03-09 17:08:22 +08:00
    @wangdu2012 面试官没水平?
    Pastsong
        18
    Pastsong  
       2017-03-09 17:11:53 +08:00
    买机器啊
    binux
        19
    binux  
       2017-03-09 17:15:10 +08:00
    百万并发 != 百万并发落到 mysql 上啊
    yidinghe
        20
    yidinghe  
       2017-03-09 17:17:50 +08:00
    不能让这些请求同时到达数据库,缓存肯定是要用的,而且是每台负载均衡的服务器将缓存内容主动加载到本地,而不是当请求来时去访问远程缓存。
    oa414
        21
    oa414  
       2017-03-09 17:18:53 +08:00
    @markfang 直接把榜单的字段存 Redis ,然后取 TOP N 就行了。

    如果一定要用 MySQL ,榜单字段建索引,应用层做合适的缓存,瞬时 100 W 个用户查看的榜单不会有多大变化。
    phrack
        22
    phrack  
       2017-03-09 17:20:07 +08:00 via Android
    啥公司这么吊啊,日活上亿?
    markfang
        23
    markfang  
    OP
       2017-03-09 17:21:50 +08:00
    @phrack 某大厂
    qq496844026
        24
    qq496844026  
       2017-03-09 17:26:01 +08:00
    问这个问题真没意义,就算你回答用缓存或者优化 sql 之类的,然后他又会问缓存挂了怎么办,曾几何时我也被这个问题坑过....
    redtea
        25
    redtea  
       2017-03-09 17:33:17 +08:00
    数据从 Mysql 查询后静态化生成 html ,多搭几台 nginx 负载均衡, Redis 之类的缓存都不用使用。
    owt5008137
        26
    owt5008137  
       2017-03-09 17:41:02 +08:00
    分库分表->缓存->CDN 。就酱
    百度得 QPS 才 50W 。什么 NB 业务会 100W 同时请求?
    lhbc
        27
    lhbc  
       2017-03-09 17:43:24 +08:00 via iPhone
    动不动就百万千万亿并发……
    现在没个几亿并发都不敢说是干互联网的。
    swulling
        28
    swulling  
       2017-03-09 17:50:25 +08:00
    @lhbc 问题是就算是百度首页,每秒的 pv 也就是千万级,顶多上亿

    要是页面的平均响应时间只有 100ms 的话,也就百万并发啊
    lhbc
        29
    lhbc  
       2017-03-09 17:57:43 +08:00 via iPhone
    @swulling 可惜百度的日 PV 不到 5 亿,哪来每秒 PV 千万级
    http://alexa.chinaz.com/www.baidu.com
    swulling
        30
    swulling  
       2017-03-09 18:37:31 +08:00 via iPhone
    @lhbc pv 写错了,应该是流量。每一个 js css 请求都是一次流量,差不多吧,
    swulling
        31
    swulling  
       2017-03-09 18:38:04 +08:00 via iPhone
    @lhbc 另外 pv 早不止五亿了……
    paranoiagu
        32
    paranoiagu  
       2017-03-09 18:54:17 +08:00 via Android
    不同意说面试官傻的。其实问题提出来,并不一定有标准答案,或者问题本身有可能有问题,这个时候就应该和面试官进一步讨论,分析。也许面试官考的就是大家都分析问题能力。
    paranoiagu
        33
    paranoiagu  
       2017-03-09 18:55:55 +08:00 via Android
    大家要这么想,如果提这个问题的是客户。那我们怎么出解决方案呢?一定也是要进一步讨论明确后才能出方案。
    wangdu2012
        34
    wangdu2012  
       2017-03-09 19:41:49 +08:00 via iPhone
    @markfang 说的是你。明显人家不会问这么没有条件以及上下文的问题
    pathbox
        35
    pathbox  
       2017-03-09 20:16:24 +08:00 via Android
    也许面试官给了你一个吹水的机会,而你 fuck it 了
    lhbc
        36
    lhbc  
       2017-03-09 20:38:21 +08:00 via iPhone
    @swulling 静态是 CDN 的事,都在各个地区的 CDN 节点的内存里呢,而且,浏览器也会缓存这些静态文件相当长的时间。跟搜索引擎一点关系都没。
    超过五亿那也没有量级的差距。
    sorkl
        37
    sorkl  
       2017-03-09 21:03:31 +08:00 via iPhone
    @paranoiagu 支持,有问题拿出来分析清楚。
    觉得应该积极的去面对问题,当然有时候也可能故意抛一个 SB 问题看你的反应,这很正常嘛……
    frankzeng
        38
    frankzeng  
       2017-03-09 21:06:35 +08:00
    异步处理嘛,先把榜单生成为静态文件,定时更新就可以了。
    RobertYang
        39
    RobertYang  
       2017-03-09 21:10:31 +08:00 via Android
    大胸弟,送分题啊,反正都是吹水 2333
    jybox
        40
    jybox  
       2017-03-09 21:51:54 +08:00
    「瞬间有 100 万用户去看数据」不等于 100 万的并发,如果这些用户集中在 1 分钟内请求,那么 QPS 也只有 1.7 万而已;如果真的是 100 万的并发,按照一个请求 20 毫秒的处理时间,就是 500 万的 QPS 。
    wdlth
        41
    wdlth  
       2017-03-09 21:53:49 +08:00
    史上最大电商网站 12306 峰值并发量才有几十万 TPS ……
    面试官是看斗鱼在线数看多了吧。
    nanpuyue
        42
    nanpuyue  
       2017-03-09 22:06:24 +08:00
    首先,要确定这是不是个伪需求。
    snnn
        43
    snnn  
       2017-03-09 22:38:25 +08:00 via Android
    百万同时在线一点都不多。。。我就抗过每秒 500 万次请求。
    janxin
        44
    janxin  
       2017-03-09 22:38:58 +08:00
    变化不大,静态页面,搞定 XD
    vultr
        45
    vultr  
       2017-03-09 22:50:58 +08:00
    给我 200 台服务器,差不多可以抗住百万并发。
    cokyhe
        46
    cokyhe  
       2017-03-10 08:19:47 +08:00
    用户榜单,几分钟读一次数据库,生成静态页面不就行了吗,还 tmd 的 100 万并发
    torbrowserbridge
        47
    torbrowserbridge  
       2017-03-10 08:37:08 +08:00 via iPhone
    某大厂,干这事儿就是事先生成 js 数据文件
    Jakesoft
        48
    Jakesoft  
       2017-03-10 08:42:54 +08:00 via iPhone
    这种高并发请求就不该让 mysql 来扛
    killerv
        49
    killerv  
       2017-03-10 09:12:31 +08:00
    我觉得应该问如何应对百万并发,而不是问 MySQL 去扛这百万并发。
    ivvei
        50
    ivvei  
       2017-03-10 09:26:25 +08:00
    看榜单为什么要都访问数据库…… 数据库把榜单生成后就给一个页面让人看好了啊,要扛访问量的是 web 服务器。
    jianzhiyao020
        51
    jianzhiyao020  
       2017-03-10 09:35:11 +08:00
    瞬间的话可以这样子的,用 memory 引擎,分表分库,定期维护缓存
    thai9quohs6jae1C
        52
    thai9quohs6jae1C  
       2017-03-10 09:44:56 +08:00 via Android
    其实现在有的招聘人员,特别是自以为很懂的企业自己圈养的 hr 智商是越来越低,问的问题只是想说明他会什么,这种公司往往是不想招你去面试的这个职位,很多职位是虚拟出来的,因为 hr 也不想失业嘛,也有 KPI 。
    notreami
        53
    notreami  
       2017-03-10 12:09:43 +08:00
    榜单而已,所有数据全上 CDN , N 久变动一次的数据,考虑啥 mysql 、 redis 、 nginx ,要考虑的是 DNS 域名解析。 C1000K ,上 F5 估计没啥问题,不过这个估计也就一瞬间的事,找个第三方公司,世纪互联啥的,租用一会也就完事了。
    JerryZhang
        54
    JerryZhang  
       2017-03-10 16:54:58 +08:00
    加缓存就好。
    stormpeach
        55
    stormpeach  
       2017-03-10 18:30:46 +08:00
    mysql 扛百万并发? redis 还差不多
    skyblue
        56
    skyblue  
       2017-03-13 09:09:48 +08:00
    我觉得吧, 这个问题还是很有意义的.
    1. 对高并发的概念
    2. 对 mysql 的概念
    3. 对预设考题的理解, 对业务隐含问题的挖掘能力
    4. (我圆不下去了....
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2847 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:17 · PVG 16:17 · LAX 00:17 · JFK 03:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.