1 背景介绍

转转是我国抢先的二手交易渠道,链接作为用户在渠道上进行交互和信息传递的重要前言,扮演着不可或缺的人物。

转转短链平台设计与实现

传统长链接通常包括很多字符和特殊符号,不易记忆和传播。由于字数的原因,长链接在发送短信,生成二维码和社交渠道发布等场合下会也有必定的局限性。

2 作业原理

转转短链平台设计与实现

2.1 短链接生成与存储

短链渠道接收到事务方供给的长链接后,先经过哈希算法(MD5)检查是否已存在短链接映射联系,存在即返回,不存在则生成仅有 ID 标识(号段形式),再挑选适当的短链接生成算法(Base62),将该仅有 ID 转换为短链接。生成的短链接与原始长链接之间的映射联系需求被持久化,以便在用户拜访时能够快速地查找并定位到原始长链接。

2.2 短链接返回与传播

一旦短链接生成成功,短链渠道将返回这个短链接给事务方。事务方能够经过多种办法将短链接传播给用户,如将其嵌入到网页中、发送短信、共享到社交媒体等。用户取得这个短链接后,就能够点击拜访相应的资源。

2.3 用户点击与跳转

当用户点击短链接时,浏览器向短链渠道发送恳求。短链渠道需求依据短链接查找映射联系,然后将用户正确引导到原始长链接的事务体系。这一步骤需求高效的数据检索和跳转机制。

HTTP 状况码 301 和 302 都能代表重定向,301 永久重定向会运用浏览器缓存导致计算短链拜访次数不正确,302 暂时重定向会每次都拜访到短链渠道然后添加服务压力。

3 中心算法

长链接到短链接的转换是短链渠道的中心功用,这需求一个高效且仅有的算法来保证每个长链接都能够映射到一个对应的短链接。

3.1 哈希算法

3.1.1 MD5

MD5 是一种广泛应用的哈希算法,将输入数据转换为 128 位的哈希值,在短链渠道中能够用于生成短链接的基础哈希值。

3.1.2 SHA-256

SHA-256 是一种更安全的哈希算法,它生成256位的哈希值。虽然相对于MD5,SHA-256更安全,但一起也会更长,影响了短链接的长度

3.2 分布式 ID

直接运用哈希结果作为短链接时,哈希磕碰和链接长度都是需求考虑的问题。在短链渠道中,需求采取办法来防止哈希磕碰,例如运用仅有性标识符。

3.2.1 大局递加

自增 ID 是另一种常见的分布式仅有 ID 生成办法,经过一个自增的计数器来生成仅有 ID。例如 MySQL 的自增主键,或许 Redis 的 incr 指令。这种办法简单且高效,适用于许多场景。

3.2.2 号段形式

号段形式会为不同的节点分配不同的号段范围,每个节点内部自增生成仅有的 ID,用完后再重新分配,然后保证大局仅有性。

转转短链平台设计与实现

3.2.3 SnowFlake

SnowFlake(雪花算法)是一种常用的分布式仅有 ID 生成算法,它将一个大整数 ID 拆分红多个部分,包括时间戳、机器 ID、数据中心 ID 和序列号等,然后保证了生成的 ID 是仅有且递加的。

转转短链平台设计与实现

然而,虽然雪花算法在分布式环境中生成仅有 ID 方面表现出色,但它并不免疫于时钟回拨问题。如果发生时钟回拨,或许会导致生成的 ID 在时间上发生逆序。

3.3 Base62 编码

Base62 编码是将数据转换为只包括数字和字母的一种办法。它运用了 62 个字符,分别是 0-9、a-z、A-Z,能够作为 URL 短链接、文件名等场景的字符串表明,相对于16进制或64进制等其他编码,Base62 具有更高的可读性和安稳性。

import java.util.ArrayList;
import java.util.List;
public class Base62Encoder {
    private static final String BASE62_CHARACTERS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    public static String encode(long num) {
        StringBuilder sb = new StringBuilder();
        do {
            int remainder = (int) (num % 62);
            sb.insert(0, BASE62_CHARACTERS.charAt(remainder));
            num /= 62;
        } while (num != 0);
        return sb.toString();
    }
}

仅 6 位的 Base62 编码,能表明约 568 亿(62 的 6 次方)的数。

4 安全与防护

在转转短链渠道的规划与完成过程中,保证用户数据的安全性和渠道的安稳性是首要任务。为此,咱们选用了一系列安全与防护战略,以应对潜在的危险和威胁,保障用户隐私和体系的正常运行。

4.1 长链接合法性校验

在生成短链接之前,首先需求对用户供给的原始长链接进行验证,以保证链接指向的是合法且可信任的方针资源。

合法性校验通常涵盖以下几个方面:

  1. 主域名合法性: 首先,渠道会解析原始长链接,提取其间的域名信息。然后,这个域名会与预先界说的合法域名列表进行比对,以承认链接是否指向了预期的域名。这样做能够有用地防止恶意链接或指向不安全网站的状况。
  2. 查询参数域名合法性: 链接中的查询参数域名也或许影响到用户安全。渠道也需求验证这些域名是否合法,防止引发潜在的安全危险。

4.2 重复生成短链接防护战略

重复生成短链接的防护战略在短链渠道的规划中具有重要意义。它旨在防止因重复生成相同的短链接而造成的资源浪费和体系紊乱。

短链渠道能够根据长链接的 MD5 值选用幂等性规划,保证屡次相同恳求的处理结果是一致的,不会发生额定的短链接。

4.3 短链接有用性验证

在用户点击或输入短链接后,短链渠道需求快速准确地判别该链接是否有用,然后决议是否将用户重定向到原始长链接或供给相应的错误信息。

短链渠道会经过查询数据库来验证短链接的有用性。如果短链接与有用的映射联系存在,渠道将承认链接有用,否则将断定链接无效。

5 体系功能优化

体系功能的优化是保证转转短链渠道高效、安稳运行的要害。经过选用一系列战略和技能,咱们不断提升渠道的响应速度、并发处理才能和资源运用功率,以满意用户的需求并供给杰出的用户体验。

5.1 数据库索引

数据库是短链渠道的中心数据存储组件,因此优化数据库的规划和拜访非常重要。将长链接的仅有标识 ID 作为主键索引,长链接的 MD5 值作为普通索引,以支持快速的链接有用性验证和重定向操作。

5.2 缓存应用

运用缓存技能能够显著削减数据库拜访次数,然后进步体系的响应速度。咱们选用了分布式缓存 Redis,将短链接映射联系异步存储在缓存中,减轻数据库的压力。这样能够在高并发状况下,快速地获取链接映射信息,提升用户拜访的功率。

5.3 号段形式优化

传统号段形式在节点消耗完所有号段时才会向发号器恳求分配新的号段,这或许会引起短时间内的功能瓶颈。咱们引入独立的监控线程定时检查号段的运用状况,一旦运用 ID 数量超越阈值时就恳求分配新的号段。新的号段形式能够在高并发状况下平稳地切换号段,经过预先分配号段以防止阻塞事务流程,然后进步体系的功能和安稳性。

转转短链平台设计与实现

5.4 分表战略

随着用户数量和链接数据的增加,单一数据库表或许会面临功能瓶颈。为了应对这个问题,咱们选用了分表战略。将链接数据依照仅有性 ID 对 64 取余的规矩均匀拆分到 64 张表中,能够有用减轻单一表的压力,进步数据库的扩展性和功能。

5.5 事务监控

事务监控是体系要害环节之一,旨在实时追踪体系的功能和运行状况,以保证高可用性和高功能。凭借转转监控体系 Prometheus,咱们能够收集和展示要害的功能指标,如生成短链链接和获取长链接的恳求频率,链接的安全性校验状况等等,使能够一目了然地检查体系运行状况,然后更好地进行决议计划和优化。

转转短链平台设计与实现

6 总结

经过深化的研究和实践,转转的短链渠道为用户供给了高效、安全的链接服务。在不断发展的互联网环境下,短链渠道将继续创新,满意用户不断变化的需求。

关于作者:

曹建涛,转转C2C&寄卖事务研制工程师

> 转转研制中心及业界小伙伴们的技能学习沟通渠道,定时共享一线的实战经验及业界前沿的技能论题。 关注大众号「转转技能」(综合性)、「大转转FE」(专心于FE)、「转转QA」(专心于QA),更多干货实践,欢迎沟通共享~