TheZihanGu
V2EX  ›  Node.js

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

  •  
  •   TheZihanGu · Dec 6, 2020 · 6615 views
    This topic created in 2161 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    @Junzhou @xcstream 感谢提供思路

    @imdong @kingfalse Lua 没撸过,太菜了...不会整🤔
    datou
    datou
    Dec 6, 2020
    18

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

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

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

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

    是自动创建跳转的 index.html 页面吗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   890 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 20:46 · PVG 04:46 · LAX 12:46 · JFK 15:46
    ♥ Do have faith in what you're doing.