0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

互联网短链接服务系统设计要点

马哥Linux运维 来源:马哥Linux运维 2023-08-25 10:57 次阅读

什么是短链接服务

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

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

首先,将营销落地页,一个较长的 URL通过短链接服务转化为一个比较短的 URL;

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

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

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

整体流程如下:

cdd20772-4290-11ee-a2ef-92fbcf53809c.jpg

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

系统设计要点

短链接服务的核心流程主要围绕 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-web Web
flyway 数据库管理
Junit 测试
lombok 自动生成getter、setter

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

3.1. 项目生成

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

名称
项目类型 maven
语言 java
Boot版本 2.1.1
group com.geekhalo
artifact tinyurl
dependency web、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 地址。

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

cde8633c-4290-11ee-a2ef-92fbcf53809c.jpg

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 互联网
    +关注

    关注

    54

    文章

    10906

    浏览量

    100755
  • 系统设计
    +关注

    关注

    0

    文章

    144

    浏览量

    21484
  • MySQL
    +关注

    关注

    1

    文章

    775

    浏览量

    26006
  • key
    key
    +关注

    关注

    0

    文章

    45

    浏览量

    12744

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

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    联想将进军互联网

    投资力度将达到数千万元人民币。  基于该协议,联想的互联网电视终端将获得包括SMG来自全球的高清、高质的视听内容,以及多种非视听增值服务。SMG视听资源除了应用于联想的互联网电视终端外,还将应用于联想
    发表于 03-18 10:48

    互联网知识分享交流

    互联网交流,你了解互一起讨论一下吧联网+吗,查看世界工厂网网页,你会了解更hulianwang多的hulian互联网知识哦
    发表于 12-29 15:25

    工业互联网

    工业互联网是全球工业系统与高级计算、分析、感应技术以及互联网连接融合的结果。它通过智能机器 间的连接并最终将人机连接,结合软件和大数据分析,重构全球工业、激发生产力,让世界更美好、更快速、更安全、更
    发表于 01-25 09:29

    工业互联网

    工业互联网是全球工业系统与高级计算、分析、感应技术以及互联网连接融合的结果。它通过智能机器 间的连接并最终将人机连接,结合软件和大数据分析,重构全球工业、激发生产力,让世界更美好、更快速、更安全、更
    发表于 04-17 15:56

    技术与互联网+

    急急急!!!!!!!!!!!请问,如果用单片机做出了一个作品,互联网+可以怎么用的上我的作品?除了用互联网卖出去,还可以怎么办呢
    发表于 07-03 22:53

    智能热潮来袭,净水行业的”互联网+“时代

    智能热潮来袭,净水行业的”互联网+“时代互联网时代的到来,很多销售理念被颠覆!有人说免费才能扩大市场,有人认为产品质量可靠才能站稳阵脚,还有观点认为必须提供完善的售后服务,可对于传统企业——净水行业
    发表于 09-21 21:58

    智能热潮来袭,净水行业的”互联网+“时代

    智能热潮来袭,净水行业的”互联网+“时代互联网时代的到来,很多销售理念被颠覆!有人说免费才能扩大市场,有人认为产品质量可靠才能站稳阵脚,还有观点认为必须提供完善的售后服务,可对于传统企业——净水行业
    发表于 09-22 15:04

    硬件与互联网连接

    请教各位大神我之间是做软件java开发的现在 觉得未来互联网是必然发展趋势,现在 学习了解物联网技术,我想弄一款可穿戴的智能终端设备,通过GPRS实现跟服务器数据传递交互,我现在该怎么做该怎么操作了,该做那些准备看些什么样的书了
    发表于 05-24 15:52

    互联网与工业物联网之间的区别与联系

    了,就先说说互联网吧。现阶段的互联网早已不满足于收发邮件、文件传输、Web服务等功能,而由互联网衍生出来的视频直播、网页游戏、音乐、社交、电子商务等
    发表于 06-14 10:18

    基于“互联网+”与北斗的精准定位智慧停车系统

    停车系统进行集中管理,相信应该会好很多。精准定位智慧停车系统目前,太原市已经开始着手建设“互联网+”与北斗精准定位智慧停车系统,结合车位传感及智能收费管理终端,创新无人值守道路停车管理
    发表于 08-08 17:07

    联网互联网有何关联

    联网其实是互联网的一个延伸,物联网的本质还是互联网互联网的终端是计算机(PC、服务器),而物
    发表于 09-12 15:56

    空间互联网天线设计

    如鸟儿展翅,如飞机翱翔,未来的数据共享方式是如此的快捷、自由。环绕地球运行的卫星有可能彻底地改变人类收集与共享信息的方式。相比于有线或无线数据网络,以卫星系统为基础的空间互联网(Internet of Space,简称 IoS)技术能够向全球各地,甚至是最偏远的地区提供网
    发表于 07-16 07:31

    什么是产业互联网

    2018年10月,腾讯宣传进军产业互联网;2019年9月,腾讯完成了史上最大的组织架构调整,新成立云与智慧产业事业群,正式发力产业互联网;2020年1月,腾讯发布《2020产业安全报告:产业互联网
    发表于 01-18 11:40

    在ARM9上用轻型WEB服务器可以不接入互联网

    arm9linux系统平台:最近查ARM9上可以用的轻型WEB服务器 ,有BOA, HTTPD , THTTPD 等等,支持资源比较好的 是BOA ,但这种实现方式需要接入互联网,而且还可能集成
    发表于 07-22 14:10

    ARM上实现不用接入互联网的WEB服务器可以吗

    arm9linux系统平台:最近查ARM9上可以用的轻型WEB服务器 ,有BOA, HTTPD , THTTPD 等等,支持资源比较好的 是BOA ,但这种实现方式需要接入互联网,而且还可能集成
    发表于 10-28 10:53