routeAlias: algo-shortlink layout: two-cols

短链系统设计

  • 功能性需求
    • 指定一个url能够生成一个短链接
    • 当用户点击短链接的时候会跳转到原始链接
    • 用户可以定义短链接格式
    • 用户可以设置链接的过期时间
  • 非功能性需求
    • 系统必须保证高可用,否则如果服务挂了,所有的链接跳转将会失败
    • 链接跳转延迟须尽可能低
    • 短链接内容不能被预测到

::right::

  • 多个用户是否可以发布同一个长链接,可以,因为用户可以有自己不同的短链格式,支持多次短链生成
  • 用户是否可以访问其他人的链接,可以,目前这个短链生成器是所有用户通用
ShortLink sl

sl.newlink(string url, string format, time duration) // 获取短链接,生成的短链接不能重复 如果已经映射过直接返回
sl.visit(string url) // 可以使用短链也可以使用长链访问到原始链接

layout: two-cols

短链类

@startuml

class LinkMap {
  -shortlinks: set[string] 用于判断一个短链是否已经存在
  -links :map[string]string 长链向短链的映射
  +register(string link, string format)
  +visit(string link)
}

@enduml

layout: two-cols

用户类

@startuml

class User {
  -id :int 用户的id
  -links :int[] 用户的链接id
  +register(string link)
  +visit(string link)
}

@enduml