短链接服务设计思考
什么是短链接?
我们经常会收到一些平台推送的短信,短信中经常会看到 a.cn/v/xxoo 等类似的链接信息,然后点击后就会跳到真实的网页地址。
比如你经常会收到【某东超市】的短链接地址,基本就是 3.cn/v/xxxoo 这种,点击会跳转某东。还有阿里的t.tb、t.aliyun等开头的短链接地址,都是一个用途
短链接有什么好处
节省空间:短信通常有字符限制,短链接能够有效节省字符数量,使得信息更为紧凑,能够在有限的空间内传达更多的内容或指令,同时也符合短信、社交媒体和其他即时通讯平台的字数限制要求。
提升用户体验:短链接就是简洁,人看着也舒服,而且既然比较短,一般也不会被一些软件识别为垃圾信息而屏蔽掉。
提升安全性和稳定性:有些时候需要隐藏原始的请求链接,只需要让用户关注结果即可。另外对于短链接背后的真实链接比如不可用,需要映射到其他链接的情况,只要短链接可用,用户端并不会感知发生什么变化
生成短链接的要求
如果,我是说如果你是外网的访问诉求。那么首先必须有域名
因为你是自己搭建短链路服务嘛,当然得有自己的域名、服务器、生成算法、映射存储。
关键点是:对于短链路中key的生成规则,如果用户可以不登录就能生成、登录也能生成,相同的真实链接地址,可能不同的人每一次都会要求生成不一样的地址,要考虑如何实现唯一性。
另外必要时还要考虑到安全性,就不能只是生成一个全局唯一的短码作为key,因为这样会很容易被”碰撞“出来,比如你的域名是xo.c.com。然后你每次的短链接(不管地址是否相同)都自动生成一个8位左右的唯一编码,那我就可以一直请求这个地址,穷举所有可能的编码,探测背后的地址。这时候可能需要加入其他的规则和路径等来稍作混淆。(这种诉求极少)
有时候一套内部使用的系统,也有可能由此诉求,可以简单实现并部署一个单独的短链路解析服务,使用缓存存储,后端URL重定向请求获取数据并返回((有没有什么感觉,🤔像不像nginx的反向代理啊😄,是的,简单的确实可以在NG中直接配置即可))。隐藏真实接口地址,给出虚拟的地址调用和获取数据即可。
其他必要的考虑
- 生成key的并发考虑
- 估算容量、内存的容量(2/8原则,讲2%的URL作为热点考虑直接放入内存)、磁盘容量
- 使用NOSQL存储
- 过期删除策略等
哪些地方可以生成公网的短链接
google、bing上去搜,一大把的。有的免费体验,有的需要注册登陆会员等提供服务。