V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
FrankAdler
V2EX  ›  分享创造

分享一个基于文本的短网址,性能应该不错。

  •  
  •   FrankAdler · 2022-01-08 12:04:53 +08:00 · 3282 次点击
    这是一个创建于 811 天前的主题,其中的信息可能已经有所发展或是发生改变。
    项目主页: https://github.com/fengqi/text-short-url
    base66 算法: https://github.com/fengqi/base66
    演示: https://fengqi.tk

    灵感来源是很多年前的一个公司同事,当时还是 PHP ,我自己私下用了很久,就是那个演示站,用到的算法也整理成类库了,今天闲来无事用 Go 实现了一遍,在 SSD 上随便测了测几万的 QPS 还是没问题的。
    26 条回复    2022-01-12 14:23:09 +08:00
    Showfom
        1
    Showfom  
       2022-01-08 12:17:20 +08:00
    按照我们做短网址多年的经验,这种不做统计的短网址程序谈不上性能

    你试着把访客统计都写进去以后再来攻破性能的问题

    而且楼主的演示站已经被 Google Safe Browsing 拉黑了
    eason1874
        2
    eason1874  
       2022-01-08 12:22:36 +08:00
    记得 .tk 域名以前是免费的,垃圾站太多,百度一度都不收录

    不如几块钱注册个 .xyz
    villivateur
        3
    villivateur  
       2022-01-08 12:49:54 +08:00 via Android
    演示站点被 Firefox 自动拦截了
    FrankAdler
        4
    FrankAdler  
    OP
       2022-01-08 13:14:05 +08:00
    @villivateur #3
    @Showfom #1
    演示站点我自己打开是可以的,为啥你们都提示 block
    Showfom
        5
    Showfom  
       2022-01-08 13:19:18 +08:00
    @FrankAdler #4 因为你可能用的国产浏览器?
    darkengine
        6
    darkengine  
       2022-01-08 13:55:04 +08:00
    "Google Safe Browsing recently detected phishing on fengqi.tk. Phishing sites pretend to be other websites to trick you."

    Chrome 给的警告信息。
    icyalala
        7
    icyalala  
       2022-01-08 16:26:38 +08:00
    输入 https://fengqi.tk 转换
    网址格式错误
    FrankAdler
        8
    FrankAdler  
    OP
       2022-01-08 16:55:47 +08:00
    @Showfom #5 哪来的优越感,我用的 edge
    FrankAdler
        9
    FrankAdler  
    OP
       2022-01-08 16:56:01 +08:00
    @icyalala #7 故意屏蔽了我自己的域名
    Linon
        10
    Linon  
       2022-01-08 18:26:58 +08:00
    Chrome 拦截了
    Linon
        11
    Linon  
       2022-01-08 18:27:33 +08:00
    Attackers on fengqi.tk may trick you into doing something dangerous like installing software or revealing your personal information (for example, passwords, phone numbers, or credit cards). Learn more
    muzihuaner
        12
    muzihuaner  
       2022-01-08 18:53:26 +08:00 via Android
    支持楼主,希望写一个部署教程,如果没有后台希望加个,加个统计的功能,还有腾讯系产品跳转功能(防红),感谢🙈
    muzihuaner
        13
    muzihuaner  
       2022-01-08 18:56:24 +08:00 via Android
    手机浏览器没问题,加个复制按钮+网址二维码生成,字体布局再修改一哈👍
    keith1126
        14
    keith1126  
       2022-01-08 22:37:44 +08:00   ❤️ 1
    你对高性能是不是有什么误解……每次 URL 转换都需要做磁盘 IO ,而且每次重新打开文件然后 Seek ,这恐怕快不起来。

    https://github.com/fengqi/text-short-url/blob/master/main.go#L140
    FrankAdler
        15
    FrankAdler  
    OP
       2022-01-09 01:33:24 +08:00
    @keith1126 #12 有磁盘 io 怎么了,我就是存磁盘,为什么不能有 io ,怎么都比数据库快,dat 文件提前生成可以不用每次 open ,我没做而已。
    我 wrk 随便压了下,一个正常的谷歌搜索的链接,3wqps ,有优化空间不代表现在的就很拉跨。
    greatghoul
        16
    greatghoul  
       2022-01-09 10:08:12 +08:00
    怎 么 都 比 数 据 库 快 !

    XD
    keith1126
        17
    keith1126  
       2022-01-09 11:29:34 +08:00
    @FrankAdler #15

    磁盘 IO 肯定是必要的,因为你需要持久化数据,但问题是,你现在的实现是不是有太多「冗余」的磁盘 IO ?

    我不负责任的猜测,套个持久化的 Redis 绝对比你这个快多了,毕竟可以做到大部分内存 IO 。
    deplivesb
        18
    deplivesb  
       2022-01-09 12:15:35 +08:00   ❤️ 2
    @FrankAdler 我想知道你是怎么到 3wqps 的,我刚试了下压到 1w 的时候就已经开始 20%fail 了
    FrankAdler
        19
    FrankAdler  
    OP
       2022-01-09 12:58:26 +08:00
    @greatghoul #14
    @keith1126 #15
    @deplivesb #16

    我感觉评论的以及我的回复都不是我发这个贴子的本意了。
    我本意是觉得用纯文件寻址的方式做短链接是一种挺新颖实惠的方式,只要磁盘足够快就可以获得不错的性能,会比内存实惠,比网络调用开销小,几十亿的网址也不会导致链接很长或者占用很多资源或者性能下降。
    为什么大家一看到别人说什么高性能就一定要挑点什么,况且我也只是说性能还不错,这里面可优化的地方是多,频繁打开文件,缓存,映射什么优化都没做,但是我这个 demo 的想要传达的意思已经在 main.go 里表达出来了。
    eason1874
        20
    eason1874  
       2022-01-09 14:49:57 +08:00
    @FrankAdler #15 “怎么都比数据库快” #19 “只要磁盘足够快就可以获得不错的性能,会比内存实惠”

    槽点确实多。建议去了解硬盘的两个性能指标,顺序读写和随机读写,你就知道单独读写 kv 文件不可能比 kv 数据库快

    你说还没优化,那么你可以试着去优化,等你优化到一定程度你就会发现自己在重新造 kv 数据库这个轮子
    icyalala
        21
    icyalala  
       2022-01-09 18:16:18 +08:00
    @FrankAdler 自举不能~~
    FrankAdler
        22
    FrankAdler  
    OP
       2022-01-10 10:33:48 +08:00 via iPhone
    @eason1874 不知掉你看了源码没有,我这个不是 kv 的方式!
    eason1874
        23
    eason1874  
       2022-01-10 13:39:49 +08:00
    @FrankAdler 看过了,我知道你的 key 是自动生成的,数据按字母分文件

    我是说,你这样直接读写数据文件是常规 IO ,而数据库是做了内存 cache/buffer+优化 IO 的,没得比
    yxisenx
        24
    yxisenx  
       2022-01-11 09:08:50 +08:00
    您要访问的是诈骗网站
    fengqi.tk 上的攻击者可能会诱骗您做一些危险的事情,例如安装软件或泄露您的个人信息(如密码、电话号码或信用卡信息)。了解详情
    275761919
        25
    275761919  
       2022-01-11 15:40:30 +08:00
    #15 “怎么都比数据库快” #19 “只要磁盘足够快就可以获得不错的性能,会比内存实惠”

    我们受过训练轻易不会发笑,除非忍不住。

    😂
    FrankAdler
        26
    FrankAdler  
    OP
       2022-01-12 14:23:09 +08:00
    闭源了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3233 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 10:49 · PVG 18:49 · LAX 03:49 · JFK 06:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.