短链接系统设计方案

news2024/9/20 14:33:49

背景

需要设计一个短链接系统,主要功能主要有如下几点:

ToB:

  1. 输入一个长链接,转换成短链接。
  2. 这个短链接有时效性,可以设定指定过期时间。
  3. 这个系统的每天会生成千万级别的短链接。
  4. 数据具备可分析功能。

ToC:

  1. 用户可以通过短链接访问到长链接。
  2. 系统每天访问链接的流量在10亿QPS。

问题

通过上述背景,我们可以分析出以下几个问题:

  1. 长链接如何转化成短链接,短链接又如何映射成长链接?
  2. 短链接的时效性如何保证?
  3. 系统每天的读写很高,怎么保证系统的稳定性和可用性?
  4. 数据可分析,数据就要持久化,用什么样的数据库?

方案

针对上述提到的问题,我们来逐一分析。

在这里插入图片描述

链接转化

如何将长链接转换成短链接,目前已经有很多开源工具都可以支持。

  1. C1N短网址(c1n.cn)

  2. Bitly

  3. TinyURL

  4. Rebrandly

  5. Shorte.st

  6. T2M

  7. ClickMeter

  8. Ow.ly

在这里插入图片描述

如上图,我们将长链接转换成了短链接,整个URL都变了,域名也变了,所以我们需要有自己的独立域名,根据后面的k5C6M找到原始的长链接,进行重定向即可。

我们可以为每一个长链接生成一个全局唯一ID,通过ID可以定位到具体的链接,此时我们只需要根据ID,就可以找到原始长链接,然后将流量重定向即可。

每天庞大的数据生成,需要考虑到ID的生成策略,和数据量的支持,以及短链接的不可预测功能。

这里给出一种策略,可以基于TDDL的全局唯一序列思想生成ID,比如,我们设定全局唯一ID的长度为19位,组成方式为2+13+4;前两位短链接标识符,中间13位为全局唯一序列,后4位为随机数,保证ID的不可预测。

虽然这样很好了,但是19位数字也有点太长了,我们将这19位数字转换成64进制,这样就短了一些。

在这里插入图片描述
这样我们就完成了链接转化。

链接时效

链接时效,我们很容易想到使用Redis,同时Redis也可以保证系统的读写性能,Redis单机的读写QPS能到10万级。

我们系统每天的QPS有10亿,每天10亿流量,是在一段时间内集中?还是全天比较平均?假设一天在4小时内流量比较聚集,平均每秒的QPS有6万。

做好Redis的高可用主从架构,抗住这些流量问题不大,但是Redis里的数据是会过期的,
我们的数据该如何分析呢?

数据分析

数据的持久化,我们有很多方式:Redis、MySQL、离线表等。

Redis虽然有持久化机制,但是数据具有时效性,随时会过期。

MySQL可以,但是数据量这么庞大,并且我们只是为了做数据分析,对数据的实时性要求并不高,所以MySQL也不考虑。

离线表非常适合我们的诉求,成本又低,又可以存大量数据。但是我们在什么时候存进去呢?

我们可以在缓存失效的节点将数据存进去,具体方案:

  1. 监听Redis缓存失效事件
  2. 考虑到流量突增的情况,应用层通过MQ处理该事件
  3. 监听MQ,将数据写入离线表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2052082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xss.function靶场(hard)

文章目录 WW3源码分析源码 DOMPpurify框架绕过覆盖变量notifyjs作用域和作用链域构建payload WW3 源码 <!-- Challenge --> <div><h4>Meme Code</h4><textarea class"form-control" id"meme-code" rows"4"><…

MySQL实现SQL Server中UPDLOCK与READPAST组合功能

碰到一位同事求助解决消息中台一个线上的bug&#xff0c;具体描述如下&#xff1a; 首先有一张主表记录消息待发送的内容&#xff0c;一张子表记录本条消息的发送状态。若发送成功则将此条消息的发送状态修改为已发送并做逻辑删除。代码通过定时任务每2s轮询子表&#xff0c;如…

开源AI智能名片O2O商城小程序在社群团购中的创新应用与策略

摘要&#xff1a;随着移动互联网和社交电商的快速发展&#xff0c;传统企业纷纷寻求数字化转型以应对市场变化。然而&#xff0c;许多企业在转型过程中存在误区&#xff0c;认为仅仅是销售渠道的变更&#xff0c;而忽视了针对不同消费群体提供差异化产品和服务的重要性。本文旨…

MSO和WPS文档图标那些事儿

你以为这是MSO的文件图标吗&#xff1f;其实不然 以上图标才是出自MSO&#xff0c;但如果在电脑上安装WPS时勾选了关联文件类型&#xff0c;你的图标可能变成 2019WPS 新版WPS 即使你更改了默认打开方式&#xff0c;文件图标也还可能是WPS的 有一说一。MSO的设计尖锐感太强&a…

从零开始学cv-8:直方图操作进阶

文章目录 一&#xff0c;简介二、直方图匹配三、局部直方图均衡化四、彩色直方图均衡化4.1 rgb彩色直方图均衡化4.2 ycrb 彩色直方图均衡化 一&#xff0c;简介 在上一篇文章中&#xff0c;我们探讨了直方图的基本概念&#xff0c;并详细讲解了如何利用OpenCV来查看图像直方图…

王老师 linux c++ 通信架构 笔记(四)继续介绍 nginx 的编译,生成适合本平台的 nginx 可执行程序

&#xff08;16&#xff09; 继续介绍 nginx 的文件夹组成&#xff1a; 接着介绍 conf 目录 &#xff1a; 接着介绍 contrib 文件夹 &#xff1a; 接着介绍 html 文件夹 &#xff1a; 接着介绍 man 文件夹&#xff1a; 更正一下&#xff1a; 下图即为此帮助文件的内容&#…

电子电气架构---主流主机厂电子电气架构华山论剑(下)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

华为AR1220配置GRE隧道

1.GRE隧道的配置 GRE隧道的配置过程,包括设置接口IP地址、配置GRE隧道接口和参数、配置静态路由以及测试隧道连通性。GRE隧道作为一种标准协议,支持多协议传输,但不提供加密,并且可能导致CPU资源消耗大和调试复杂等问题。本文采用华为AR1220路由器来示例说明。 配置…

Dubbo源码深度解析(六)

上一篇博客《Dubbo源码深度解析(五)》主要讲&#xff1a;当服务消费方发起请求时&#xff0c;服务提供方是通过Netty服务接受请求并处理的&#xff0c;涉及到Netty相关使用及部分原理的讲解&#xff0c;以及最后又是如何将Invoker对象的执行结果返回给服务消费方的等。同时也讲…

LMDeploy 量化部署实践闯关任务

一、LMDeploy量化介绍 1.LMDeploy部署模型的优势 LMDeploy实现了高效的推理、可靠的量化、卓越的兼容性、便捷的服务以及有状态的推理。 相比于vllm具有领先的推理性能&#xff1a; LMDeploy也提供了大模型量化能力&#xff1a;主要包括KV Cache量化和模型权重量化。 LMDepl…

0813作业+梳理

一、实现虚拟机械臂控制 #include<myhead.h> #define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.0.126" //服务器ip地址 #define CLI_PORT 5555 //客户端端口号 #define CLI_IP "192.168.0.133" //客户端地址 int main(int argc, …

css - word-spacing 属性(指定段字之间的间距大小)属性定义及使用说明

介绍 CSS word-spacing 属性&#xff0c;用于指定段字之间的空间&#xff0c;例如&#xff1a; p {word-spacing:30px; }word-spacing属性增加或减少字与字之间的空白。 注意&#xff1a; 负值是允许的。 浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号。 属…

sqlserver 消息 9420,级别 16,状态 1,第 7 行

declare TerminalXml xml set TerminalXml(select * from TCK_TerminalInfo(nolock) for xml PATH) 执行时报9420错误,sqlserver 消息 9420,级别 16,状态 1,第 7 行 感觉非常奇怪,这个程序在很多客户多运行.当时以为数据库的配置不对.我重启了数据服务,还是没有解决…

智慧校园信息化服务平台、基于微信小程序的校园服务管理系统

摘 要 本文论述了智慧校园信息化服务平台的设计和实现&#xff0c;该网站从实际运用的角度出发&#xff0c;运用了计算机网站设计、数据库等相关知识&#xff0c;基于 ssm框架和Mysql数据库设计来实现的&#xff0c;网站主要包括用户注册、用户登录、查看教室信息、校园趣事…

mysql聚合函数和分组

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

Java并发类API -- Future和Callable

1.Future和Callable接口 Future 是一个表示异步计算结果的接口&#xff1b; 接口Callable与线程功能密不可分&#xff0c;但和Runnable的主要区别为&#xff1a; 1&#xff09;Callable接口的call&#xff08;&#xff09;方法可以有返回值&#xff0c;而Runnable接口的run&a…

java:IDEA修改java版本的几个不同的地方

文章目录 项目JDK设置&#xff08;Project SDK&#xff09;项目模块级JDK设置&#xff08;Module SDK&#xff09;IDE级别的JDK设置Maven配置文件编译器&#xff08;Java Compiler&#xff09;构建工具配置文件&#xff08;如build.gradle或pom.xml&#xff09;.idea/misc.xml文…

C语言(17)——单链表的应用

目录 1.单链表经典算法OJ题⽬ 1.1单链表相关经典算法OJ题1&#xff1a;移除链表元素 1.2单链表相关经典算法OJ题2&#xff1a;反转链表 1.3 单链表相关经典算法OJ题3&#xff1a;链表的中间节点 1.单链表经典算法OJ题⽬ 1.1单链表相关经典算法OJ题1&#xff1a;移除链表元素…

还有比这java状态压缩更通俗易懂的解释?

前言 Java中的状态压缩&#xff0c;或者说位运算状态压缩&#xff0c;是一种利用位操作&#xff08;如位与&、位或|、位异或^、位非~、左移<<、右移>>等&#xff09;来高效地存储和处理状态信息的技术。这种技术特别适用于那些状态空间不是很大&#xff0c;但…

微服务:网关路由和登录校验

续上篇&#xff1a;微服务&#xff1a;服务的注册与调用和OpenFiegn-CSDN博客 参考&#xff1a;黑马程序员之微服务 &#x1f4a5; 该系列属于【SpringBoot基础】专栏&#xff0c;如您需查看其他SpringBoot相关文章&#xff0c;请您点击左边的连接 目录 一、网关路由 1. 网关…