api 接口如何做到毫秒级响应? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
shuAS
V2EX    程序员

api 接口如何做到毫秒级响应?

  •  
  •   shuAS 2019-07-09 16:02:24 +08:00 11104 次点击
    这是一创建于 2291 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,向各位前辈咨询一下

    41 条回复    2019-07-10 10:00:18 +08:00
    dongrenwen
        1
    dongrenwen  
       2019-07-09 16:07:55 +08:00
    可以用钱解决,顶级的服务器和网络线路,高度优化的代码
    shawndev
        2
    shawndev  
       2019-07-09 16:10:40 +08:00   1
    localhost
    dobelee
        3
    dobelee  
       2019-07-09 16:11:08 +08:00 via Android
    网络质量
    服务器性能
    业务逻辑
    框架复杂度
    依赖外部资源的服务质量
    一个一个解决。
    guokeke
        4
    guokeke  
       2019-07-09 16:11:30 +08:00   11
    设置 timeout=1ms 毫秒级超时响应。
    learningman
        5
    learningman  
       2019-07-09 16:11:54 +08:00
    用低级语言写,比如用汇编写 qwq
    ys1992
        6
    ys1992  
       2019-07-09 16:14:59 +08:00 via Android
    别想了,除非接口数据不经过 MySQL 这种数据库,不然数据量大一点光 SQL 查询就得几十上百毫秒了
    liuzhedash
        7
    liuzhedash  
       2019-07-09 16:16:59 +08:00   1
    公网上个位数毫秒不太可能。几个优化建议:
    1、dns 查询的时间是不稳定的,有时候至可能根本查不到,所以一定要做 dns 预解析
    2、任何系统部署在 ssd 上都会有直接的性能提升
    剩下就是网络、代码逻辑、数据库层面的优化了,这个没什么通用方案。
    silencefent
        8
    silencefent  
       2019-07-09 16:17:17 +08:00   1
    hello word
    lzxz1234
        9
    lzxz1234  
       2019-07-09 16:21:24 +08:00
    分场景,如果是查询接口,数据异步扔缓存,接口只查缓存,毫秒级压力不大
    xiaopengzi
        10
    xiaopengzi  
       2019-07-09 16:26:16 +08:00
    楼上老哥 设置 1ms 超时响应确实是个好主意。。100%空手接白 ~额不对 100%毫秒级响应
    ---
    响应时间越低,需要付出得人力和资源成本增长越陡
    azh7138m
        11
    azh7138m  
       2019-07-09 16:26:33 +08:00
    @liuzhedash 每个市一个机房勉强可以个位数毫秒,这就要求钱加足了(
    不过楼主应该指 1s 以内的意思吧
    不过没有场景也没有 mvp 也没有数据量
    这种就叫开放式吹*吧
    knightgao2
        12
    knightgao2  
       2019-07-09 16:35:52 +08:00
    做缓存
    yulitian888
        13
    yulitian888  
       2019-07-09 16:36:09 +08:00   2
    什么用途 /性质 /功能的 API ?
    一个请求的毫秒级响应还是并发请求的毫秒级响应?
    嘛都不说,没头没脑的问题,没法答
    影响程序相应的最大瓶颈一般都是 IO。一般而言 IO 速度最慢的顺序是:网络>HDD>SSD>RAM>寄存器,自己分析哪块是你的 API 瓶颈,再具体想办法优化就是了。

    不过我也见过有些啼笑皆非的负优化。
    某人企图用 Redis 提升查询性能,但是把 Redis 部署在局域网另一台机器上。好巧不巧的是,路由器上被人插了一个百兆设备(路由器自适应降速到百兆了),然后在这个“百兆局域网”里的 Redis 不光没能提速,反而降速了。
    rb6221
        14
    rb6221  
       2019-07-09 16:40:53 +08:00   2
    那位大人呢,还没来吗
    lihongjie0209
        15
    lihongjie0209  
       2019-07-09 16:45:02 +08:00
    1. 把数据库打包发送给客户
    2. 把数据库的数据都加载到内存
    3. 起一个本地服务器
    4. 访问接口
    Tomorrowxxy
        16
    Tomorrowxxy  
       2019-07-09 16:58:38 +08:00
    花钱
    Tomorrowxxy
        17
    Tomorrowxxy  
       2019-07-09 16:58:46 +08:00
    花大钱
    Windelight
        18
    Windelight  
       2019-07-09 17:05:34 +08:00 via Android   1
    一,网络延迟,加钱整买网、买 DNS 解决
    二,硬件反应,加钱买服务器、买 SSD、买交换机解决
    三,软件逻辑,加钱买程序员、少查询、多缓存解决
    starsriver
        19
    starsriver  
       2019-07-09 17:08:04 +08:00 via Android
    毫秒是不可能的,延迟主要发生在网络上面。就算计算机一毫秒处理完了数据,但是传输是个问题:等待、接收报文、应答都需要时间。

    目前能够实现低延迟的只有硬件级别的 api,比如 gpu 和 fpga。
    starsriver
        20
    starsriver  
       2019-07-09 17:09:32 +08:00 via Android
    接上 fpga 的延迟是皮秒级别的。
    pifuant
        21
    pifuant  
       2019-07-09 17:11:03 +08:00
    我去问下我同事, 他号称他前公司的接口效应时间为 0.1 毫秒级
    maichael
        22
    maichael  
       2019-07-09 17:14:30 +08:00
    @ys1992 #6 只要不超过秒就算毫秒级吧,几百毫秒也算毫秒吧。
    arrow8899
        23
    arrow8899  
       2019-07-09 17:17:54 +08:00   1
    只要经过公网,基本上不可能,这个是物理定律决定的,1ms * 光速 = 300km,随便跨个城就不行了。
    undefinedList
        24
    undefinedList  
       2019-07-09 18:24:01 +08:00
    排除代码问题,同意楼上的问题:世界加钱可及!
    x86
        25
    x86  
       2019-07-09 18:24:58 +08:00 via iPhone
    最好的优化就是钱
    janxin
        26
    janxin  
       2019-07-09 18:33:12 +08:00
    先说一下几百毫秒算不算呗
    npe
        27
    npe  
       2019-07-09 18:37:06 +08:00 via Android
    e.g. 清除缓存
    alert (清除成功)
    wenzhoou
        28
    wenzhoou  
       2019-07-09 18:38:30 +08:00 via Android
    @janus77 笑死了
    m9rco
        29
    m9rco  
       2019-07-09 18:38:52 +08:00
    哈哈哈哈哈 笑死
    pinews
        30
    pinews  
       2019-07-09 18:41:49 +08:00
    大客户,花钱
    imycc
        31
    imycc  
       2019-07-09 18:48:17 +08:00 via iPhone
    内部服务,走自建的内网,优化好,业务不复杂的情况,请求耗时在 1s 内是可以的。

    普通用户访问的话,分业务本身的耗时跟 IO 的耗时去优化吧,你场景都不说清楚,是要我们自由发挥吗
    tomczhen
        32
    tomczhen  
       2019-07-09 18:52:43 +08:00
    AI+大数据,在客户端发出请求之前就先返回不就可以把响应变成毫秒级了么 :doge:
    xhinliang
        33
    xhinliang  
       2019-07-09 18:52:54 +08:00
    秒杀接口,10ms 内响应没有问题(只有 Redis 访问)。
    但到客户端那边可能就需要多些时间了,毕竟网络延时也是十位数毫秒级的。
    way2create
        34
    way2create  
       2019-07-09 18:53:05 +08:00
    10000ms 就不是 ms 了吗
    blless
        35
    blless  
       2019-07-09 18:56:01 +08:00 via Android
    https 握手就得几百 ms 了…
    salmon5
        36
    salmon5  
       2019-07-09 20:53:12 +08:00
    返回“毫秒级”
    lqzhgood
        37
    lqzhgood  
       2019-07-09 20:55:36 +08:00 via Android
    显示器响应时间不都要几 ms~十几 ms 么
    kizunaai
        38
    kizunaai  
       2019-07-10 02:06:58 +08:00 via iPhone
    如果 1ms 以内的话,就别能走网线光纤了,短波欢迎你。
    如果 10ms 以内的话根据客户端定制线路,(极端例子把服务器放到客户的局域网里)这个只要花钱就行。
    如果 20ms 左右的话只要给机房塞够钱(多地机房多线路),客户端做好线路选择就行。
    xiaobai987
        39
    xiaobai987  
       2019-07-10 08:41:34 +08:00
    @yulitian888 这个百兆路由和响应速度没什么关系吧 难道说换成千兆就有质的飞跃吗 关键看响应速度 不能看带宽吧
    yulitian888
        40
    yulitian888  
       2019-07-10 08:51:11 +08:00
    @xiaobai987 百兆的效果属于肉眼可见差异水平,千兆就属于肉眼不可见了
    wuchujie
        41
    wuchujie  
       2019-07-10 10:00:18 +08:00
    @guokeke 优秀啊 兄 dei
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5625 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 06:38 PVG 14:38 LAX 23:38 JFK 02:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86