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

2022-01-08 12:04:53 +08:00
 FrankAdler
项目主页: https://github.com/fengqi/text-short-url
base66 算法: https://github.com/fengqi/base66
演示: https://fengqi.tk

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

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

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

不如几块钱注册个 .xyz
villivateur
2022-01-08 12:49:54 +08:00
演示站点被 Firefox 自动拦截了
FrankAdler
2022-01-08 13:14:05 +08:00
@villivateur #3
@Showfom #1
演示站点我自己打开是可以的,为啥你们都提示 block
Showfom
2022-01-08 13:19:18 +08:00
@FrankAdler #4 因为你可能用的国产浏览器?
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
2022-01-08 16:26:38 +08:00
输入 https://fengqi.tk 转换
网址格式错误
FrankAdler
2022-01-08 16:55:47 +08:00
@Showfom #5 哪来的优越感,我用的 edge
FrankAdler
2022-01-08 16:56:01 +08:00
@icyalala #7 故意屏蔽了我自己的域名
Linon
2022-01-08 18:26:58 +08:00
Chrome 拦截了
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
2022-01-08 18:53:26 +08:00
支持楼主,希望写一个部署教程,如果没有后台希望加个,加个统计的功能,还有腾讯系产品跳转功能(防红),感谢🙈
muzihuaner
2022-01-08 18:56:24 +08:00
手机浏览器没问题,加个复制按钮+网址二维码生成,字体布局再修改一哈👍
keith1126
2022-01-08 22:37:44 +08:00
你对高性能是不是有什么误解……每次 URL 转换都需要做磁盘 IO ,而且每次重新打开文件然后 Seek ,这恐怕快不起来。

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

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

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

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

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

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

你说还没优化,那么你可以试着去优化,等你优化到一定程度你就会发现自己在重新造 kv 数据库这个轮子

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/826975

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX