短链
短链优点:
1、短,对文本限制类(如短信)有实用价值
2、不直接暴露请求参数
缺点就是要经过一次重定向,略耗时。
-----------------------------------------------------------
过程:获得真正地址的过程
请求---》短链服务器(302重定向)---》真正的服务
301是永久重定向,302是临时,选择302的原因是没有访问都先重定向一次方便统计请求次数。
301处理完浏览器会记住重定向地址,下次直接访问服务,不走短链
----------------------------------------------------------------
实现:
以短长方式对应(kv)的存放数据库,再拉到缓存。或者做缓存的持久化(不丢失)
1、采取服务url做hash,使用非加密hash算法,非加密性能会高出加密十倍以上,而且还要求冲突率低,如常用的murmur算法,https://baike.baidu.com/item/Murmur%E5%93%88%E5%B8%8C/22689658?fr=aladdin
如果出现冲突,需要把长链加一个自定义的字符串再次hash解决,直至不冲突。
kv数据量大可以采用布隆过滤器【占用空间小处理量极大,125M存10亿长度】提高性能。
2、采用全局ID做短链接,依赖唯一ID生成算法
---------雪花【唯一缺点受系统时钟影响】
---------UUID[长度有点长,无序,插入数据可能导致页分裂]
---------redis发号,多台redis发一个尾号【需要持久化,实现成本高】
--------mysql自增主建【发号表预留字段块】
id做短链,可以优化成64进制把id做的更短。
---------------------------------------------------------------------------------------------------------
openresty
一个高性能框架(nginx+lua),自带redis,据说单台可撑100w+,可以做双备