Redian新闻
>
高性能系统设计:互联网短链接服务

高性能系统设计:互联网短链接服务

公众号新闻

什么是短链接服务

短链接服务将原本较长的网址转化成较短的网址,从而便于用户的记忆与社交软件上的传播。

假设,我们要做一次简单的营销活动,活动流程大体如下:

  • 首先,将营销落地页,一个较长的 URL ( https://www.glo.com/2021/09/15/ddd/tactics/introduction/#more ) 通过短链接服务转化为一个比较短的 URL( http://glo.com/s );

  • 然后,通过营销渠道将短链接发送给目标用户(比如短信);

  • 在用户获得短链接后,通过链接访问短链接服务。系统接受请求并将请求重定向到原始的长链地址;

  • 最后,用户使用长链地址直接访问目标网站,从而获得最终响应结果。

整体流程如下:

短链接服务的核心流程主要包括 创建短链接 和 访问短链接 。

系统设计要点

短链接服务的核心流程主要围绕 Key 和 Map 进行构建的,如:

  • 创建短链接。首先,生成一个 Key,将长链地址作为 value 保存到 Map 中,然后将短链域名和 key 拼接成短链接,返回给调用方;

  • 访问短链接。服务从 URL 中提取 key,然后在 Map 中查找目标链接,对目标地址做重定向处理。

Map 结构我们可以基于 MySQL 和 Cache 进行构建,那就剩下如下问题了:

  • Key 怎么来,又是怎么维护的?

  • 如何通过 Http 协议进行请求重定向?

2.1 Key 生成

通常情况下,Key 的生成方式由很多。但对于短链接服务来说,生成 Key 的长度是一个非常重要的指标。

首先,生成的 Key 不能重复;其次,Key 要尽可能短。这样才能使最终短链长度尽可能的小。

基于此,我们无法使用分布式 Key 生成算法,如 UUID。最佳的生成策略应该是基于 Number 自增的方案。

结论:我们需要一个基于 Number 自增的 Key 生成器。

2.2 Key 编解码

如果我们使用 Number 作为 Key,那么还有没有方案进一步压缩 Number 长度呢?

对于数字来说:

  • 8 进制比 2 进制短;

  • 10 进制比 8 进制短;

  • 16 进制比 10 进制短;

  • ......

因此,我们可以使用高进制对数字 Key 进行编解码,从而进一步压缩 Key 的长度。

2.3 请求重定向

请求重定向是 HTTP 协议的一部分,JEE 的 HttpServletResponse 就提供重定向接口,同时 Spring MVC 对其也提供了支持。

基于 HttpServletResponse 的重定向:

public void redirect(@PathVariable String code, HttpServletResponse response) throws IOException {    String url = getTargetUrl(code);    // 调用 sendRedirect 方法,进行请求重定向    response.sendRedirect(url);}

基于 Spring MVC 的重定向:

public ModelAndView redirect(@PathVariable String code){    String url = getTargetUrl(code);    // 使用 RedirectView,进行请求重定向    RedirectView redirectView = new RedirectView();    redirectView.setUrl(url);    return new ModelAndView(redirectView);}


要点分析完成后,让我们先把 maven 项目搭建起来。

项目搭建

该项目使用 Spring Boot 作为主要开发框架。

项目依赖组件:

组件含义
spring-boot-starter-webWeb
flyway数据库管理
Junit测试
lombok自动生成getter、setter

随着功能的增加,将为项目添加更多依赖。

3.1. 项目生成

浏览器中输入 https://start.spring.io/ ,打开 spring-boot 项目生成器,按照下列配置生成项目:

名称
项目类型maven
语言java
Boot版本2.1.1
groupcom.geekhalo
artifacttinyurl
dependencyweb、flyway、lombok

点击“Generate Project”,生成并下载项目。将下载的项目解压,得到一个完整的 maven 项目,打开熟悉的 IDE,将项目导入到 IDE 中。

我们生成了一个空的 Spring Boot 项目,稍后的所有操作都会基于这个项目完成。

项目成功生成后,让我们对系统进行进一步分析。首先,需要对系统中的核心组件进行梳理。

核心组件

基于设计分析,我们可以整理出系统所需的核心组件。

4.1 NumberGenerator

通过自增方式生成 Number 类型的 Key。

其接口签名如下:

public interface NumberGenerator {    /**     * 生成自增 Key     * @return     */    Long nextNumber(NumberType type);}


4.2 NumberEncoder

对 Number 进行编解码操作,以进一步减少 Key 的长度。

其接口签名如下:

public interface NumberEncoder {    /**     * 对 Number 进行编码     * @param id     * @return     */    String encode(Long id);
/** * 对 Number 进行解密 * @param str * @return */ Long decode(String str);}


4.3 TargetUrlRepository

用于处理目标 URL 的持久化。

其接口定义如下:

public interface TargetUrlRepository {    /**     * 添加链接     * @param targetUrl     */    void save(TargetUrl targetUrl);
/** * 获取连接 * @param id * @return */ TargetUrl getById(Long id);}

至此,系统核心组件就分析完了。接下来,让我们看下核心流程。

核心流程

核心流程主要包括创建短链接和访问短链接。

5.1 创建短链接

创建短链接,主要服务于内部系统,将较长的 URL 地址提交到短链接服务,并获取与之对应的较短的 URL 地址。

创建短链接流程大体如下:

(版权归原作者所有,侵删)


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
实战总结|复杂系统设计原则与案例求职干货 | Apple 2024暑期实习项目已开!海外求职:互联网(Tech、运营、产品、战投)Lisa疯马秀“背刺女粉”:互联网“审判”下的“女性困境”前远景能源高管再度下场创业,中宏科创储能系统战略储备订单超2.2GWh|数字能源 TECH 36天涯不再是天涯,互联网也不再是互联网宇宙人(1343期)300亿元5G大单:5家中标;被爆料后,马斯克回应了;铱星为徐工重型设备挖掘机提供连接服务量化联赛 | 第二期订单撮合系统设计大赛,诚邀各位Quant挑战卫网君:央视解读华为新手机拆解;马斯克的星舰与猎鹰9号;铱星为徐工重型设备挖掘机提供连接服务;日本发射 SLIM月球着陆器午间小憩可减缓脑萎缩Prompt 驱动架构设计:探索复杂 AIGC 应用的设计之道?「健网科技」获近亿元A轮融资,打造新一代工商业储能系统和充电桩产品|36氪首发阿里研究院:互联网+中国传统文化大数据解读报告巴以冲突再次撕裂人心,现实急需多些“短链条文明”10月开课|为期6个月的正念冥想带领技能系统培训课程学员招募学员招募中|为期6个月的正念冥想带领技能系统培训证书课高性能Wi-Fi6/BT射频IP验证系统如何加速芯片设计?举报新东方:互联网机会主义者的狂欢玻璃缸里的孙凤 (19)斯德哥尔摩综合症患者痛苦的整改:互联网贷款新规冲击波Department of Justice, a Farce求职干货 | Amazon 2024秋招已开!海外求职:互联网(Tech、运营、产品、战投)单向树洞:互联网入侵之后华为全联接大会首设互联网产业峰会,携手共拓产业互联网新蓝海打造产业互联网高地 | 2023年琶洲产业互联网峰会圆满落幕求职干货 | 阿里巴巴、腾讯 2024秋招已开启!海归求职:互联网(Tech、运营、产品、战投)进迭时空CPU设计总监费晓龙:高性能RISC-V核X100的架构设计与虚拟化实现|公开课预告卫网君:工信部:推进卫星互联网准入制度改革;马斯克:星舰未来四年去火星;亚马逊发射首批两颗太空互联网原型卫星......脉脉高聘:互联网人平均工资3年连降 人工智能工程师平均薪资近6万奎芯科技副总裁王晓阳:驱动云/边缘侧算力建设的高性能互联接口方案| 2023全球AI芯片峰会演讲预告求职干货 | 小红书 2024秋招已开启!海归求职:互联网(Tech、运营、产品、战投)今日最佳:互联网最火热的一对。电影:Pulp Fiction(1994)年薪 80W,懂AI大模型系统设计真香!| 极客时间聚焦新模式:互联网平台付费会员商业化探索
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。