V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TheZihanGu
V2EX  ›  Node.js

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

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

    基础构思基于 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  
       2020-12-06 12:57:00 +08:00
    短链需求是打开短链跳转到长链,最重要的指标就是跳转速度,所以如果为了追求最快速度,最好不要用数据库
    qiayue
        3
    qiayue  
       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  
       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

    现成的手把手全套教学
    pytth
        19
    pytth  
       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   ·   实用小工具   ·   5306 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 09:02 · PVG 17:02 · LAX 01:02 · JFK 04:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.