当前位置: 首页 > news >正文

如何设计短域名系统

输入可能是

一个冗长的域名,过期时间和自定义的别名

输出

自定义别名或者随机生成的短域名,在过期时间到来之前访问都可以被重定向到冗长的域名上

约束条件

1.过期后就失效
2.短域名是唯一的
3.自定义短域名长度在7个字符(不包含域名长度),由[0-9,a-z,A-Z]等字符组成
4,延迟
5.存储

如何增加过期时间处理

	1.延迟惰性删除2,定时删除,维持大量定时器3.轮训删除对延迟要求高,并且存储空间占用少延迟删除在db建的表里加入过期时间的时间戳列,写入时计算读取比较,过期就删除

如何保证短域名的唯一性

写时消重
如何设置唯一id生成算法
1.uuid -》和 murmurhash 哈希以后可能不一样,但是截取的时候不能保证截取的不相同
2.设置自增id,利用数据库自增主键


单机吞吐量扛不住,可以增加负载均衡侧落,分片副本等等

延迟优化,可以在
存储层 
1.存储介质,没必要用关系型,可以用持久形kv,比如rocksdb
2,构建索引,长短域名都要做索引,可以在redis做两份存储,互为kv,类似倒排索引缓存层
1.读多写少,使用缓存可以大大降低延迟,减少网络请求延迟2.对于判断长域名是否存储过,以及短域名是否分配过可以用布隆过滤器3.如果对延迟非常苛刻,可以使用本地缓存,维护一个lru业务层
1.通过尾号分片将id生成器分布式化,基于预处理的思想,给不同的维护不同区间,保证自增,但是不保证连续性
2.分布式id生成算法

可靠性

异地容灾,一主多从

安全性

1.如果自增id可能会人逐个遍历取走
2.使用murmurhash可能有哈希冲突

重定向

301永久重定向会缓存无法统计访问次数,但是会减少服务端压力选用302  因为要统计长域名的访问量

相关文章:

  • V-for中 key 值的作用,如何选择key
  • 《洛谷深入浅出进阶篇》P3397 地毯————二维差分
  • 部署百川大语言模型Baichuan2
  • 经验篇:大数据常用工具集合
  • k8s之HPA
  • 解锁内存之谜:从C到Python、Java和Go的内存管理对比
  • 基于安卓android微信小程序的装修家装小程序
  • pycharm使用
  • requests 在 Python 3.2 中使用 OAuth 导入失败的问题与解决方案
  • Axure9 基本操作(二)
  • centos 6.10 安装 tcmalloc
  • ASP.NET限流器的简单实现
  • TCP连接保活机制
  • 串口通信(11)-CRC校验介绍算法
  • 第 117 场 LeetCode 双周赛题解
  • 《剑指offer》分解让复杂问题更简单
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Javascript 原型链
  • JavaScript新鲜事·第5期
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • React Transition Group -- Transition 组件
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • React组件设计模式(一)
  • Travix是如何部署应用程序到Kubernetes上的
  • Web Storage相关
  • zookeeper系列(七)实战分布式命名服务
  • 马上搞懂 GeoJSON
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 深入浏览器事件循环的本质
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 一个JAVA程序员成长之路分享
  • Nginx实现动静分离
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​configparser --- 配置文件解析器​
  • (1)(1.11) SiK Radio v2(一)
  • (1)Android开发优化---------UI优化
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (力扣题库)跳跃游戏II(c++)
  • (六)vue-router+UI组件库
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (数据结构)顺序表的定义
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)Linux整合apache和tomcat构建Web服务器
  • .NET BackgroundWorker
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .Net 高效开发之不可错过的实用工具
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .net程序集学习心得
  • @RequestParam详解