文章目录

  • 一、需求分析
    • 1.功能性需求
    • 2.非功能性需求
  • 二、API接口
  • 三、high level design
  • 四、细节描述
  • 五、数据库设计

一、需求分析

1.功能性需求

给定一个长链接能够生成一个独特的短链接(写操作)
给定一个短链接能够找到对应的长链接(读操作)
短链接应该包含6个字符(可以改变)
短链接是随机生成的
生成短链接需要提供用户账户
监控/分析系统

2.非功能性需求

容错率,高可用性,最小化读/写延迟,可扩展性,数据一致性(consistency),重复性(dualility),代价最小

二、API接口

登录API,返回user_token
登出API
生成短链接API,createshortURL(user_token, big URL, optional expiration time),返回短链接
获取长链接API, getbigURL(shortURL)

三、high level design


系统的整体设计如上图,用户通过网络连接到服务器,通过负载均衡器来控制不同服务器的状态,系统中还包含一个独立的监控系统用来对系统整体运行状态进行监控。

在单个的服务器中有内部缓存,用来存放长链接和短链接的哈希表示来进行快速查询以减少延迟,全局缓存用来存放链接的状态,用来防止多次请求一个不存在的链接来减少数据库的压力

四、细节描述

在该系统中,比较重要的是给定长链接如何生成短链接。有很多种方法可以用来生成,例如MD5, Zoo-keeper,或者我们可以添加一个生成key的服务,但这些方法都存在各种各样的问题。

一个简单的方法是在数据库中建立一个Counter,每个APP服务可以访问并获取这个指针的值,之后对指针的数加上一个预先定义好的数比如100,这样该APP服务就获得了一个1-100的区间,然后就可以在这个区间生成短链接。对于其他服务器也进行这种操作即可。

另外还存在链接过期的情况,由于数据库的访问压力不大,我们可以在遇到过期的链接直接进行删除。

五、数据库设计

包含两个数据库

  • 用户数据库:存储用户的ID,姓名,Email,用户建立时间,用户上次访问时间,URL的数量
  • URL匹配数据库:存储短链接,长链接,建立时间,过期时间,用户ID

系统设计(二)——TinyURL系统设计相关推荐

  1. 基于协同过滤算法的电影推荐系统设计(二) - ALS算法详解

    0 系列文章目录 0.1 基于协同过滤算法的电影推荐系统设计(一) - 项目简介 0.2 基于协同过滤算法的电影推荐系统设计(二) - 推荐系统介绍 ALS是alternating least squ ...

  2. 模拟模拟交易系统(二)——系统设计

    模拟模拟交易系统(二)--系统设计 本文设计的是一款模拟股票交易系统,它是互联网金融领域的产品.其主要研究基于Windows平台MFC库的设计与实现,主要包含了股票交易.统计.查询.清算等系统功能. ...

  3. 【系统分析师之路】第七章 复盘系统设计(Web系统设计)

    [系统分析师之路]第七章 复盘系统设计(Web系统设计) 复盘系统设计-Web系统设计 [系统分析师之路]第七章 复盘系统设计(Web系统设计) 第一部分 综合知识历年真题 2019上综合知识历年真题 ...

  4. mysql颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量

    继续回到沈老师的MYSQL颠覆实战,首先回顾下上一节课的内容,请大家会看下上节课写的存储过程. 打开prod_clicklog表, 我们只要把日期(不含时分秒)的部分存在数据库中, 如果同一日期有相同 ...

  5. 医院业务系统设计(二) --- 患者管理之MPI系统

    在上篇已经介绍了医院信息系统的大概分类以及各类的系统组成,本篇开始详细地介绍各个系统的用处以及设计. 首先开始从"患者管理"类别进行深入,对于患者的管理最最重要的当然是患者身份的识 ...

  6. 支付路由系统设计二:核心流程

    技术栈:Java+Groovy+Lua+Springboot+Mysql+Redis+Drools+Velocity+RabbitMQ+Spring Data Jpa 目录 一.背景 二.分析 1.命 ...

  7. 【支付系统学习笔记】-二支付系统设计(支付路由设计)

    前言:   本文属于学习笔记,首先感谢原作者:凤凰牌老熊,博客链接:http://blog.lixf.cn/ 作者上来回顾了支付流程, 一 设计目标 支付路由在支付系统中的核心作用,除了本职工作路由外 ...

  8. 老鱼Python数据分析——篇二:系统设计(找代理IP)

    开发环境:win7 x64版本,python 3.6,Anaconda3 (64-bit) 因为频繁访问容易被封IP,所以我们需要使用代理来进行数据的爬取(当然你也可以放慢节奏,比如每5秒爬一条记录) ...

  9. 【支付系统学习笔记】-二支付系统设计(支付产品设计)

    本文属于学习笔记,首先感谢原作者:凤凰牌老熊,博客链接:http://blog.lixf.cn/ 支付产品模块是按照支付场景来为业务方提供支付服务.这个模块一般位于支付网关之后,支付渠道之前. 它根据 ...

最新文章

  1. Binary XML file line #39: 最多只支持3个子View,Most only support three sub vi
  2. JQUERY动态生成当前年份的前5年以及后 2年
  3. 浅谈企业软件架构(5)
  4. python 实现ping测试延迟的两种方法
  5. SAP Spartacus 在 Github 托管虚拟机上执行的 pipeline 明细
  6. mysql dump hbase_mysqldump导出全数据库
  7. 分类决策树 回归决策树_决策树分类器背后的数学
  8. 猎豹浏览器截图在哪 猎豹浏览器如何截图
  9. 联合索引会创建几个索引_【1033期】分别谈谈联合索引生效和失效的条件
  10. 判断numpy的array中是否包含nan,NaN
  11. 【Android Studio安装部署系列】三十一、从Android studio3.0.0升级到Android studio3.0.1
  12. node的里html中写script报错,内置对象 · TypeScript 入门教程
  13. Linux_Tips
  14. 秦九韶算法与霍纳规则
  15. 二叉树的左视图-java
  16. 山东菏泽家乡网页代码 html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计
  17. 【C语言学习笔记】《C程序设计语言》读后感
  18. Python3,20行代码,通过微信电脑版爬取朋友圈数据,老板再也抓不到我上班看手机了!!!
  19. 中国科学院大学计算机考研资料汇总
  20. 计算机d导论,计算机导论 第3章(D).ppt

热门文章

  1. 中电海康建车联网透明路 探索新型智慧城市商机
  2. Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序...
  3. HTTP请求方式: GET和POST的比较
  4. Phenotips 项目源码分析 [0]
  5. 吝啬的国度 ---用vector 来构图
  6. C++类中的main函数
  7. VS解决方案的目录结构设置和管理
  8. Java读写二进制文件示例
  9. windows 2008 R2 如何更新SID
  10. java应用程序打包成可jar执行程序