首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

一天 2 亿 pv 左右 一般需要多少台机器,目前 swoole+redis+mysql

  •  1
     
  •   void1900 · 36 天前 · 6383 次点击
    这是一个创建于 36 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一天 2 亿 pv 左右 一般需要多少台机器,目前 swoole+redis+mysql

    三台机器,其中两台放着 redis+跑 swoole 服务,mysql 是云上的 1H1G 50G...

    目前三台机器负载基本满了,如果换 go 会得到提升吗……

    统计业务,redis 计次,定时+某些条件写入 mysql

    redis
    instantaneous_ops_per_sec:62207
    ...
    80 回复  |  直到 2019-04-19 15:53:56 +08:00
        1
    mscb   36 天前 via Android
    峰值 qps 有多少呢?
        2
    void1900   36 天前
    @mscb 3000 左右 峰值负载基本上是满的
        3
    void1900   36 天前
    nginx status
    Active connections: 37033
    server accepts handled requests
    31769296193 31769296193 31445439302
    Reading: 2 Writing: 7 Waiting: 37024


    3000 qps 是 ngxtop -l 日志文件的统计
        4
    mscb   36 天前 via Android
    我觉得 swoole 已经不错了,直接换到 go 可能不会有大的提升,但是可能还是有帮助。主要是目前瓶颈在哪个方面呢?是数据库部分还是 API 接口部分呢?
        5
    void1900   36 天前
    @mscb 数据库连接数比较低,主要是 redis 和 swoole 的服务, 两台跑 redis+swoole 的机器都分别开了 3 个 redis 实例

    主要是想知道其他语言( java/go )会不会有提升
        6
    sagaxu   36 天前 via Android
    只是统计?一台就够了
        7
    void1900   36 天前
    三台机器都是 4H8G 的
        8
    Vegetable   36 天前
    换到的话是可以降低资源的消耗,但是具体能降多少就很难判断了.
        9
    void1900   36 天前
    @sagaxu 统计的维度很多。。。
        10
    mscb   36 天前 via Android
    @void1900 那可以试试切换到 go
        11
    sagaxu   36 天前 via Android
    @void1900 如果统计的 item 不多,直接放内存里,定期刷入 db,redis 都不用
        12
    void1900   36 天前
    @sagaxu 统计的计次维度相乘 大概有 50w 左右,还要 ip,uv 去重,也是放 redis,一台机器不现实吧
        13
    mscb   36 天前 via Android
    @void1900 所以看你们的业务,统计还需要做一定的计算是吗?那确实可以试试切换到 go
        14
    void1900   36 天前
    @mscb 计算其实不多,需要的资源确实和业务相关性比较强,算了,太难讨论了,关贴了。。
        15
    davidyanxw   36 天前
    一天 pv2 亿,按照 12 小时计算,qps:4629
    两台机器,单机 qps:2314
    qps4000+, 扩容一台机器单机 qps1500+,扩容两台机器单机 qps1200+

    按照 swoole 官方的测试,swoole 的性能比 golang 会高
    https://wiki.swoole.com/wiki/page/508.html

    所以,个人不建议换 golang,收益不会高太多;
    建议扩容,收益更高一些。
        16
    oneonesv   36 天前
    记得以前压测接口,golang 和 swoole 差距不是很大
        17
    void1900   36 天前
    @davidyanxw 主要 redis 进程 cpu 占用也在 80%左右,我在想 swoole 性能应该是够的
        18
    shenqi   36 天前
    前端外行的建议:

    统计业务入口使用 go 重写,一个入口通过参数,设置不同的统计值+1,写入 redis。实时。
    写入 mysql 那边通过定时或者某些条件触发现有接口写入。非实时。
        19
    liprais   36 天前
    你不用换语言就再写一遍性能都会高很多
        20
    void1900   36 天前
    @shenqi 哈哈 现在就是这样了
        21
    void1900   36 天前
    @liprais 感觉瓶颈在 redis,有点太依赖 redis 了,有什么别的方案吗,直接放进程了怕进程重启丢数据比较严重 T_T
        22
    yann1992   36 天前
    换成 Go
        23
    gz911122   36 天前
    借楼插一句
    为什么 php 换语言的话倾向于 go 的比较多呢?
    体感
        24
    jimrok   36 天前
    不用换语言,收效不大。优化你的数据,尽量让热点数据能分散开。cpu 峰值长期不要超过 60%,经常 80%已经明显有风险了。
        25
    dabaibai   36 天前
    换 go
        26
    void1900   36 天前
    @gz911122
    我猜是因为一般 phper 每个项目人都少,如果

    换 java (会的前提下),人手不够,需要时间太久了
    换 python,性能好像不会得到多大提示
    换 go 开发效率还可以,性能也还可以
        27
    void1900   36 天前
    @jimrok
    确实我也在想这个,现在是按特定次写入数据的。

    但是一些数据少的只能按时写,可是是这部分数据太多了堆积很多,队列会满。

    目前针对一些特定的维度 降低了写入条件,

    是要想下怎么优化这个。 有什么好的方案吗
        28
    hlwjia   36 天前
    换 Go 难道没有成本吗?现在的工程师直接就能写上高质量的 Go 代码?
        29
    sagaxu   36 天前 via Android
    @void1900 50W 个 key 并不大,累加后定时刷入 redis,重启或者退出前强刷一遍。从 redis 到 db,可以按日刷或者按小时刷。
        30
    mscb   36 天前 via Android
    @hlwjia 会 PHP 的人很多也会写 go,如果不会写 go,那楼主就不会考虑 go 语言了😂
        31
    fcten   36 天前
    应该会有一些提升,不过差距不会很大。其实单机能有 3000qps 已经完全可以了,还是加机器吧……
        32
    idblife   36 天前
    什么应用有那么高的 pv ?
    这 pv 每天收入得好几万美金了啊。。。
        33
    void1900   36 天前
    @sagaxu

    没法累加 我说的 50w 是统计维度,简单的说下吧:

    假设我要统计 系统+地域+事件的 IP uv pv,那就是:

    系统(假设只有 5 种系统)*地域(假活跃的只有 100 个市)*事件(假设有 50 种)

    5*300*50=75000

    数据报表里是要能看到:不同系统,不同市,不同事件的数据量的,

    意思就是数据库里面每一行会有 三列(系统,市,事件)+三列( IP,UV,PV )

    还有分时和其他统计自动没写,这只是个例子……
        34
    void1900   36 天前
    @fcten 比较想知道 一般正常业务单机 qps 大概是多少,好有个底看优化空间大不大
        35
    blless   36 天前 via Android
    那个测试 go 1.6 版本… nginx1.4 … php7
        36
    qq976739120   36 天前   ♥ 1
    加几台机器一年才多少钱.....成本最低了吧
        37
    void1900   36 天前
    @qq976739120 哈哈哈 确实是成本最低的方法,主要是想挑战一下,还可以提升下自己
        38
    iyaozhen   36 天前 via Android
    这个吧,你自己可以线下压测一把吧,看看单机最高能多少。说不定现在翻几倍流量也没事
        39
    laogui   36 天前 via Android   ♥ 1
    每天 2 亿 pv 才三台服务器?这是我见过最牛逼的服务了。这样的用户级别每月收入也有上千万了。
        40
    void1900   36 天前
    @laogui 并没有……
        41
    tiaod   36 天前   ♥ 3
    2 亿 pv 你来这破站问?
        42
    kevinlm   36 天前 via iPhone
    什么站,这么强👍
        43
    jimrok   36 天前
    我觉得你想要减少 redis 的写入量的话,加一套 kafuka,让数据先落盘,然后再用流处理,合并一些统计,减少写入的次数。
        44
    void1900   36 天前
    @jimrok 我研究下,redis 这 ops 确实有点台高! 谢谢大神!
        45
    opengps   36 天前
    只看峰值压力,多层服务配合起来( cdn+缓存+负载均衡等等),最终的机器数才能确定出来
        46
    allenhu   36 天前
    加机器吧, 之前的项目,1000w 日 pv 配了 4 台机器
        47
    lsylsy2   36 天前
    三台机器,其中两台放着 redis+跑 swoole 服务,mysql 是云上的 1H1G 50G...
    假如 2 亿 PV 还只能养得起这种配置的成本,那要考虑下商业模式了
        48
    agdhole   36 天前
    换 rust 会有提升(成本巨大
    还是加机器 8
        49
    sagaxu   36 天前 via Android
    @void1900 50w 纬度,不就是 50w 个 key 嘛,每个 key 对应一个 int,每次事件过来,自增几个 int。redis 里能放得下的,进程里面也能放得下。

    这种纯统计的业务,我这边单机可以 10 亿日请求,12 核 32g 内存
        50
    void1900   36 天前
    @sagaxu 什么语言?单进程?
        51
    sagaxu   36 天前 via Android
    @void1900 JVM + Vertx
        52
    sujin190   36 天前
    看业务复杂度吧,如果只是简单的 redis inc,那么一台都绰绰有余
    一般来说,只是 redis inc,每个请求时间顶多 1ms,一个进程每秒 800 到 900 完全可以吧,swoole 8 核 cpu8 进程不要太轻松
        53
    zong400   36 天前
    hadoop+spark 怎样
        54
    utfqvfhpyygy   36 天前
    这里全部是动态请求,还是包含了静态资源? 2 亿 一天,3 台机器,而且 4 核 8G 真想看看是什么应用
        55
    loveCoding   36 天前
    网站发出来看看 , 这么猛的站点
        56
    terranboy   36 天前
    这么多的流量 只舍得 3 台机器吗
        57
    picone   36 天前
    对实时要求不高,可以加个队列感觉会更好,把波峰削平了。
    而且,这种日志分析的,应该算是离线业务,不应该用 streaming,storm 啥的做吗,前端过来直接全部塞进 kafka 就行了。
        58
    luw2007   36 天前   ♥ 1
    基于 redis 做 uv 一般是 hyperLogLog。
    建议可以在程序内缓存一分钟数据,然后通过 pipeline 批量导入 redis。
    做好信号处理,监听退出信号,退出前停止接收数据,并强制落盘到 redis。
    压力在 redis 上,换 go 不换逻辑提升不明显。
        59
    atpking   36 天前
    我司有个 admqr.com 2 亿没试验过 2kw 的 pv 倒是跑过
        60
    joesonw   36 天前
    瓶颈肯定不在 swoole 这里吧. 看 IO, 和其他的 overhead (例如楼上说的 nginx 那)
        61
    void1900   36 天前
    @luw2007 hyperLogLog 这个很有用之前没看到 感谢感谢!
        62
    sampeng   35 天前 via iPhone
    直接扩容。不要想换语言什么的。机器一年的钱还没你一个月工资多。
        63
    dingyaguang117   35 天前
    redis key 自增 4000QPS 撑不住?好歹也是 C 写的,不太可能吧 建议楼主分析下瓶颈在哪儿
        64
    winglight2016   35 天前
    换语言不如加机器,或者试试 ELK
        65
    lshero   35 天前
    redis 的连接数有多少啊?
        66
    luw2007   35 天前
    @void1900 增加个批量操作。基本 qps 和 cpu 都降下去了,统计业务没必要实时计算。 不丢就行了。
        67
    romeo0   35 天前 via Android
    @sagaxu vertx 稳稳的扛,就是感觉国内知名度太低,招人和找工作多都不方便。
        68
    yufpga   35 天前
    instantaneous_ops_per_sec:62207, 单个 redis 实例这种程度的话,快要跑满了(redis 官方号称 90000-100000,但生产环境复杂,基本达不到的,得看具体的操作)。两台服务器上的 6 个 redis 进程基本上都达到这种程度了么?先确定一下 redis 进程是不是基本上都跑满了,如果 redis 基本上都跑满了,你换什么语言都不管用,直接给 redis 加服吧。
        69
    void1900   35 天前
    @yufpga 这是负载比较高的那台,不过确实 redis 操作有点太频繁,应该有不少优化空间
        70
    rickzuo   35 天前 via Android
    只有我只关心是什么应用吗-_-||
        71
    yufpga   35 天前
    @void1900 如果是这样的话,尽量让负载均衡一些,打个比方, 比如在城市维度上,让热门城市数据均匀落地,不至于将热门数据集中堆积在某个或某几个 redis 实例上。swool 上的瓶颈和具体业务以及代码有关,没办法给出什么实质建议。
        72
    jorneyr   35 天前
    中国每天有七分之一的人都在用你的网站服务么,3 台机器支持这么大量的服务,赚了这么多钱就花这么点,不科学。
        73
    codesaler   35 天前
    2 亿 pv 的应用,国内互联网前 500 有吧
        74
    unclemcz   35 天前
    日均 pv2 亿的服务,不断加服务器就好啦,又不贵。
        75
    keikeizhang   35 天前
    喜欢这样的帖子
        76
    tjsdtc   35 天前
    @jorneyr 2 亿 pv 不是 uv,不过也已经很可怕了
        77
    tailf   35 天前
    两亿 PV 你用了三台机器抗住已经是奇迹了。。。。
        78
    amon   35 天前
    2 亿 pv,uv 多少呢?
        79
    Seney   35 天前
    2 亿 pv, 怎么才能做到??
        80
    lovezww2011   35 天前
    换 python 吧,用 django
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2747 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 10:52 · PVG 18:52 · LAX 03:52 · JFK 06:52
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1