短链服务方案

短链技术方案

一、需求评估

1.1短链使用范围

1) 站内链接。

2)  站外链接。

1.2数据量评估

1)  短链数量,预估一年内500万,两年2000万,并且可扩展至百亿级别。

2)  短链点击流量,预估30000K每天,高峰300K每分钟.

二、方案选择

目前短链生成算法主流有两种:

1)  基于运算的短链生成:使用算法进行字符压缩。优点是不需要通过存储,响应快、使用方便。缺点是很难支持大数据量的短链生成,而且有可能会重复。

2)  基于存储的长短链对应:将所有需要转换的长链接进行存储,然后将数据的id进行转换,作为短链地址。优点是支持大量的长短链接转换,并且不会出现重复的数据。缺点是需要消耗一定的存储和获取时间。

    这次的需求,因为要支撑的短链数量会很大,而且要支持以后的无限制扩展,此次ADP短链方案采用第二种,基于存储的长短链对应转换。存储方式的时间和性能消耗可以使用MC缓存来解决。

 

三、详细设计

3.1 系统架构设计

采用服务化的方式,构建短链服务中心,负责长短链的转换,缓存的管理等功能。其它系统需要使用相关功能时,统一调用短链服务。

182107_C4JI_2485991.png

 

3.2 短链跳转时序图:

182144_U9Bo_2485991.png

3.3 缓存设计:

1)因为缓存只用来查询,而且需要满足高流量要求,所以采用MC来存储数据

2)数据结构:key=前缀_短链码  value=原始链接

3)因为长短链对照数据不存在修改,所以正常数据有效期设置为永久存在。

4)缓存更新模式使用主动推送,在数据新增的时候直接推送到MC集群;同时提供数据全量更新的接口,以供手动推送缓存数据或者每天自动更新。

 

3.4 数据库设计

主键id

短链码

特征码

长链码

3.5 短链生成方式:

 1)将长链进行MD5获取特征码,传入数据库进行查询,如果存在则直接返回对应的记录,再进行长链匹配。

2)如果不存在,则将长链直接insert到数据库中,同时返回主键id。长链信息在存储和获取的过程中需要做防SQL注入转码。

3)将主键id加密成密文,密文作为短链码写入数据库,并且拼接为短链链接返回给用户。

4)短链信息推送到Redis中,永久存在。

5)流程图如下:

182549_5NiI_2485991.png

3.5 短链码加密方式:

1)将主键id进行Feistel数字变换,变换后可以实现隐藏数字递增的效果。再使用多进制转换的方式进行长度压缩。(具体的代码实现请见我的另一篇文章《另辟蹊径-自增短链id设计》)

2)压缩后的多进制对象再进行多维矩阵加密,得到密文。

3)在密文里加入随机字符进行第二次非对称加密,最终得到的密文,作为短链码来使用。

4)此方法生成的密文一般请况不可破解,保证了主键id不被暴露出去,同时因为是采用顺序id的方式作为短链,所以支持的链接数量非常大。

 

 

转载于:https://my.oschina.net/u/2485991/blog/546946

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值