想基于 Node 撸一个短链接,各位大佬有什么建议么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TheZihanGu
V2EX    Node.js

想基于 Node 撸一个短链接,各位大佬有什么建议么

  •  
  •   TheZihanGu 2020-12-06 12:50:44 +08:00 5749 次点击
    这是一个创建于 1773 天前的主题,其中的信息可能已经有所发展或是发生改变。

    基础构思基于 Node + MongoDB 或 Redis,Nginx 反代 Express 。
    项目主要是自用,可能会加 Token 鉴权,因此可能不用关心 URL 审核的问题。
    目前生成短链部分没有问题...主要是关于跳转的逻辑。有两种思路,一是伪静态到页面然后请求后端接口返回长链接在进行跳转,另外一种是直接 Node 从数据库取到长链接然后 Express 重定向跳转。
    各位大佬能否给一些建议

    29 条回复    2021-12-29 16:04:07 +08:00
    learningman
        1
    learningman  
       2020-12-06 12:55:24 +08:00
    说白了就是一个 js 跳转一个 302 呗,我个人觉得 302 好一点
    qiayue
        2
    qiayue  
    PRO
       2020-12-06 12:57:00 +08:00
    短链需求是打开短链跳转到长链,最重要的指标就是跳转速度,所以如果为了追求最快速度,最好不要用数据库
    qiayue
        3
    qiayue  
    PRO
       2020-12-06 12:57:58 +08:00
    上条没打完
    不仅不要用数据库,更不要用前端 js 跳转,直接后端返回 302 给浏览器即可
    yazoox
        4
    yazoox  
       2020-12-06 13:23:54 +08:00
    @qiayue #3 不用数据库的话呢,那用什么来存储短链接和实际长链接之间的关系呢?
    zhengxiaowai
        5
    zhengxiaowai  
       2020-12-06 13:58:19 +08:00   1
    先注册一个短的域名。。
    qiayue
        6
    qiayue  
    PRO
       2020-12-06 14:10:55 +08:00
    @yazoox 用程序能够最快读取的方式
    Junzhou
        7
    Junzhou  
       2020-12-06 14:12:32 +08:00 via iPhone
    既然生成和解析短链接没问题,那直接 302 就可以了。
    opengps
        8
    opengps  
       2020-12-06 14:20:40 +08:00
    我已经自用好几年了,挺稳的,不过自己域名有一点不太好的就是,总有那么些地域的局部 dns 不能正常解析
    opengps
        9
    opengps  
       2020-12-06 14:22:02 +08:00
    看到有人提醒不要用数据库,补充下,数据库当然得用,不然咋存,只是作为很少变更的用途,用缓存多挡一层为佳。试试证明短链接压力再大,也比一个页面处理上百 k 轻松,单服务器可以轻松承载很大的并发访问量
    xcstream
        10
    xcstream  
       2020-12-06 14:23:13 +08:00
    直接 302
    jiangzm
        11
    jiangzm  
       2020-12-06 14:43:32 +08:00
    需求太简单了,而且要求跳转速度,所以最好不要用 node 层,直接 nginx+redis 模块干就完事,如果一定要用 node 也不要 Express 原生的 node 就好了。
    jiangzm
        12
    jiangzm  
       2020-12-06 14:46:34 +08:00
    写入肯定要用数据库,读取可以不用数据库,同步也不要放在读取端。
    huayumo
        13
    huayumo  
       2020-12-06 14:52:46 +08:00
    如果是我的话,也没有特殊需求的话,我就数据库直接搞了
    imdong
        14
    imdong  
       2020-12-06 15:01:40 +08:00
    短网址,特别是自己用的,太容易了,怎么简单怎么快就怎么来。

    这个随便搞一搞都不会太差,核心代码无非取出 ID,连接数据库,查出结果,header 302 搞定。

    想速度快,就加一层 Redis 缓存就好了,如果是 node,都不用存 redis,取出来直接放数组就好了,没有就去查数据库。

    连 Redis 都没必要,直接存内存不香么。
    forgottencoast
        15
    forgottencoast  
       2020-12-06 16:05:49 +08:00
    速度快、速度快,是不是 1 秒钟上百亿的资金流动?
    能到这里来问问题的,数据库就够了,简单好用,先解决业务问题。
    node 进程内加个内存缓存针对高命中的短链就可以了。
    kingfalse
        16
    kingfalse  
       2020-12-06 16:11:34 +08:00   1
    直接 nginx lua redis 比较好吧
    TheZihanGu
        17
    TheZihanGu  
    OP
       2020-12-06 16:29:14 +08:00
    @zhengxiaowai 已经整了一个四位已备域名了,就是备案翻了就不好了♂

    @Junzhou @xcstream 感谢提供思路

    @imdong @kingfalse Lua 没撸过,太菜了...不会整
    datou
        18
    datou  
       2020-12-06 20:45:36 +08:00

    现成的手把手全套教学
    liKeYunKeji
        19
    liKeYunKeji  
       2020-12-06 23:03:47 +08:00 via Android
    我这个,没有存数据库,直接就是存本地数组。http://o1o.run
    lihongming
        20
    lihongming  
       2020-12-07 02:11:08 +08:00 via iPhone
    哈哈,这是老外最喜欢考的面试题假设你是 Twitter 的短网址开发者,你要怎么设计你的系统?

    主要考点是数据库的选型、分区、分片、缓存、扩展、容量估算等。考得确实是数据库,楼主不要灰心。

    YouTube 上有很多这种题的面试经,基本也是围绕数据库问题在讨论。
    netnr
        21
    netnr  
       2020-12-07 09:03:58 +08:00 via Android
    一个 id 生成一个文件,内容写入链接,不知道相比数据库咋么样
    securityCoding
        22
    securityCoding  
       2020-12-07 09:59:44 +08:00
    @netnr 肯定慢很多啊
    chogath
        23
    chogath  
       2020-12-07 10:13:07 +08:00
    关键词: 数据库、唯一索引(通常是自增主机 ID )、缓存层( Redis )
    qwerthhusn
        24
    qwerthhusn  
       2020-12-07 11:44:04 +08:00
    如果会 LUA 的话最好,直接 Nginx 撸一个
    libook
        25
    libook  
       2020-12-07 14:06:38 +08:00
    直接返回 302 最简单。

    先做个 MVP 方案出来,根据实际使用中遇到的问题再做优化就好。
    simon3000
        26
    simon3000  
       2020-12-07 17:48:32 +08:00
    数据库方面推荐一个 kv 的:LevelDB
    TheZihanGu
        27
    TheZihanGu  
    OP
       2020-12-07 20:00:00 +08:00
    @qwerthhusn 问题太菜了,不会撸
    @libook 感谢建议,已经写出来 302 跳转了。
    @netnr 你别说,最近我还真看到一个类似的。每生成一个短链接都生成目录+ HTML 文件然后 Javascript 跳转...
    atian25
        28
    atian25  
       2020-12-18 16:54:39 +08:00
    我们这边支撑了蚂蚁的短链服务,具体的方案里面,mongodb 、redis 这些都没用,直接用 oss 就可以了。
    xmsz
        29
    xmsz  
       2021-12-29 16:04:07 +08:00
    @atian25 怎么实现的

    是自动创建跳转的 index.html 页面吗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5494 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:25 PVG 15:25 LAX 00:25 JFK 03:25
    Do have faith in what you're doing.
    ubao 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