短域名系统设计详解(全)
目录
- 前言
- 1. 背景
- 2. 设计
- 2.1 过期时间
- 2.2 域名唯一
- 3. 优化
前言
某些输入框的限制,导致域名本身不需要那么冗余等,短域名的可观性非常好
在设计这种系统的时候,需要明白输入输出是什么,以及限制条件如何调优等
以下的文章知识点主要来源于:短网址系统设计
记笔记的同时融入了一些自已的见解和拓展
1. 背景
设计方案同时,需要明白整体业务的流程,防止设计完之后不符合
输入?
输入一个冗长的域名以及过期时间(如果没有过期时间则给默认)
或者是一个自定义域名
输出?
自定义的别名域名返回短域名,通过点击短域名会重定向网页
约束?
- 过期时间到了会失效(类似网盘的分享链接)
- 短域名唯一不重复
- 自定义的域名需要的长度以及什么字符生成
- QPS(系统阈值),读写接口的QPS是多少,对应QPS可看我之前的文章:QPS常用的测试以及优化方法
- 延迟
- 存储空间的大小(估算域名访问条数)
- 可靠性
- 安全性(防止爬虫爬取)
2. 设计
针对以上提出的需求对应解决相关的问题
2.1 过期时间
过期时间的处理策略,学过Redis的应该知道Redis的过期处理策略:
- Redis框架从入门到学精(全)
- Redis的常见面试题(全)
- Python操作Redis从入门到精通附代码(全)
大致Redis的删除策略如下:
(1) 定时删除:在设置键的过期时间的同时,创建一个定时器 timer). 让定时器在键的过期时间来临时,立即执行对键的删除操作。
(2) 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
(3) 定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。
可以借鉴该过期策略
策略 | 逻辑 | 优缺点 |
---|---|---|
延迟删除 | 用户读取判断当前时间,如果大于过期时间,则将其删除 | 存储空间利用率低 |
定时删除 | 定时调用删除函数 | 空间利用率高,但是回调触发占用CPU,导致性能差 |
轮询删除 | 周期扫描全表 | 空间与性能的折中 |
如果延迟时间比较高能接受,可以采用延迟删除
2.2 域名唯一
读写接口大致逻辑如下:
写接口:输入长域名,如果存储过则不需要进一步存储,没存储过则生成短域名,并将其两者映射存储在DB中
读接口:获取短域名判断是否有效,没有存储或者无效直接返回,如果有效,通过映射关系查询长域名,并且对其重定向
- 读时消重:返回数据的时候判断重复(feed流,count一次,不用count第二次)
- 写时消重:写数据的时候判断(推荐)
对应的ID唯一不重复,可参考这篇文章:分布式ID生成方法的超详细分析(全)
参考分布式ID的生成方法:数据库自增、时间戳、Redis的incr命令自增、雪花算法(融入机器ID以及时间戳)
此处的域名生成:
生成方法 | 大致情况 |
---|---|
UUID | 7位数字,长度要截取,不可保证 |
哈希 | 长度需要截取,同样也不可保证 |
数据库自增ID | 7位62进制(维护一个已被使用,即使过期了也不会被服用)(推荐) |
3. 优化
优化可以从吞吐量、延迟、可靠性、迭代的速率、安全性等
吞吐量:
大的QPS通过水平扩展,使用Nginx做负载均衡
通过分片、副本扩容缩容平衡QPS
延迟:
Redis和Mysql交互的时候需要延迟,延迟还得算上跨机房
存储层:
1.为了降低这种延迟,如果业务比较简单,可以通过rocksDB数据库存储(持久化key 、value),如果业务比较复杂,可以使用关系型数据存储,而不是用mysql。数据的分析需求后期如果还要用上,可以将kafka消息写入到ELK中
2.构建索引也不可使用mysql数据库,不好维护,本身长域名与短域名要相互映射,此处可使用倒排索引(类似elasticsearch):Elasticsearch从入门到精通超详细版本(全)
3.写时分片(类似mycat框架):Mycat的常见面试题(全)。主要通过一致性哈希(一致性哈希算法的原理与应用剖析),写入分片位置,读数据的时候也用相同的哈希。缓存层:
可通过本地、Redis等缓存(延迟比较苛刻,可使用本地缓存,用本地的LRU进行维护)
查询长域名是否存储,短域名是否被分配,可使用布隆过滤器(不过有假的,准确率一般):布隆过滤器的原理和实现详细分析(全)业务层:
1.基于预处理缓存一部分的数据,只对尾号进行分布式ID生成(只保证唯一性,但可能不保连续单调,但也足够)
2.分布式ID可采用zookeeper等组件处理数据一致性:Zookeeper从入门到精通(全)
3.可使用lua脚本降低对Redis的调用次数,也可配置Openresty:Openresty框架入门详解拓扑层:
利用地理位置,同一地区的请求路由分发到最近的机房
可靠性:
冗余副本、存储多份可保证可用性
- Redis以及mq系列:一方面分组读写、一方面提供备份
- 监控阈值,实现系统熔断、限流、扩容缩容
可参考如下框架文章:
kafka框架从入门到精通(全)
迭代效率:
- 监控缓存的命中率,是否会让Redis击穿崩盘(增加热点数据等)
- 监控qos阈值进行扩容缩容,节省成本
可参考如下文章:
云服务器安装elasticsearch 以及 kibana 附详细图文(全)
安全性:
- 自增ID,可能会被他人爬虫
- 使用哈希,可能会存在冲突,但解决安全性
- 防止DOS攻击,可通过IP限流或者黑名单拉黑
短域名系统设计详解(全)相关推荐
- UICC 之 USIM 详解全系列——UICC基础知识介绍
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--UICC(TS102 ...
- rust机枪塔攻击模式_《辐射4》机枪塔类型及使用心得图文详解 全类型机枪塔伤害介绍...
今天小编给大家分享的是玩家"影与静"总结的<辐射4>机枪塔类型及使用心得图文详解 全类型机枪塔伤害介绍,一起来看下吧. 查过相关攻略,内容也就是在庇护山庄和星光做的攻速 ...
- android-短信验证功能,Android实现获取短信验证码的功能以及自定义GUI短信验证详解...
<Android实现获取短信验证码的功能以及自定义GUI短信验证详解>由会员分享,可在线阅读,更多相关<Android实现获取短信验证码的功能以及自定义GUI短信验证详解(8页珍藏版 ...
- 短视频运营详解:抖音变现目前流行的是七种方式之一电商卖货
短视频运营详解:抖音变现目前流行的是七种方式之电商卖货 抖音变现目前流行的是七种方式,电商卖货.广告营销.内容付费.品牌导流.直播变现.IP变现.社群营销. 我们分别来说一下:权威的三方报告提到过,抖 ...
- java对接阿里云短信服务详解(验证码,推广短信,通知短信)
前言 小前提: - java:springboot框架,maven版本管理. - 阿里云:有账号,已经进行实名认证. java对接阿里云短信服务详解(验证码,推广短信,通知短信) 前言 1. 登录阿里 ...
- UICC 之 USIM 详解全系列——UICC协议层结构
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--UICC协议层结构 ...
- UICC 之 USIM 详解全系列——背景与系列介绍
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--背景与系列介绍 文章 ...
- 屏幕小于6英寸的手机_6英寸屏幕真的大么?你可能对“全面屏”有什么误解!详解全面屏手机那些事...
6英寸屏幕真的大么?你可能对"全面屏"有什么误解!详解全面屏手机那些事 2018-05-15 10:31:35 225点赞 278收藏 118评论 小编注:想获得更多专属福利吗?金 ...
- 对账系统设计详解(下)
本文由作者 陈天宇宙 发布于社区,业务图较多,建议PC端阅读 上篇指路:对账系统设计详解(上) 07 资金对账项目配置设计完成线上支付交易以后,虽然通道方告知支付成功,但是钱是不是真的能给,还需要打一 ...
最新文章
- Rocksdb 获取当前db内部的有效key个数 (估值)
- Tomcat7目录结构详解(非常详细)
- DL之LSTM之MvP:基于TF利用LSTM基于DIY时间训练csv文件数据预测后100个数据(多值预测)状态
- mysql分页的高效算法_mysql_海量数据库的查询优化及分页算法方案
- c语言标量变量是什么,C语言中的结构和联合之间的区别
- 《使用云计算和大数据进行性能测试》
- 一步一步搭建ELK日志处理集群(自己做过测试)
- php中一级标题和二级标题,什么是一级标题,一二三标题格式举例
- java加载jdbc驱动,加载JDBC驱动
- 23. 生成 core dump
- promise.prototype.catch()
- ZYNQ7020 Soc最小系统创建及测试
- cdr添加节点快捷键_cdr怎么添加节点 在CDR X8怎么给曲线添加节点图文教程
- 2019 年中国搜索引擎市场份额排行榜
- 鸿蒙系统手机电脑互传文件,【手机篇】巧借局域网,便捷实现手机电脑间的文件传输...
- 解析不见了。 怎么办?
- 双端口USB Type-C控制器 CYPD6227 (CYPD6227-96BZXI)
- [SP]梦网masterSP模式下的sp生存
- 基于大数据的模型预测用户是否会进行交易 文档+答辩PPT+Python源码及数据
- 快速掌握数据分析思路