0.设计news feed的api

选择返回协议

一般是使用json来进行返回

设计翻页

选择第二种,因为第一种,万一有插入,再次下滑就会看到已经看过了的内容

如何判断没有下一页的内容

就是多取一个值,去得到就进行返回,作为next,不然就是null,没有下一个

如何设计@提及到其他人

直接使用http抄连接

缺点

  1. js跨域攻击
  2. url进行修改,从at name变成at uid,就要全部进行重写

设计短连接

分析

4s分析法

场景

  1. 计算qps,思考需要的容量,计算顶峰对多的qps,然后计算一年的就可以得到容量

主要功能

  1. 把长链接转换为短连接
  2. 短连接恢复为长连接 ,并且使用301重定向跳转

询问

  1. 长链接和短连接是不是11对应
  2. 是不是太久就要释放

需要设计什么

qps

  1. 日活100M,平均1天可以求出0.1条
  2. 计算写入w,1100*0.1/86400 =100
  3. 计算读取,一天读取一条,那就是2k
  4. 计算一年存放的大小1000.11100 =1G

Service

服务只需要一个短连接服务

主要是设计接口的api,还有返回方式

需要两个api,讴歌encoder,一个decoded

使用的发送方式get,返回一个重定向,还有post,post发送长链接,返回短连接

Storage

选择存放的结构,sql还是nosql,之后是存放使用的scheme

Sql vs nosql

  1. 是否需要事务-不用
  2. 是否需要丰富的sql语句-不用

因此选择nosql

encoder算法

  1. 直接hash(冲突)
  2. hash+set(生成过慢)
  3. base62,将

构建索引对长链接还有短链接

整体流程

  1. 如果不存在这个长链接
  2. 就进行插入,并且返回短连接

Scale

如何提高响应速度

使用缓存—存放shoirt到长的连接

基于位置的提速

  1. Cdn
  2. 使用dns找最近的解析器
  3. 中心化的sql+分布式的redis

接着扩展mysql集群

解决写不过来的问题,读取瓶颈问题

此时此刻需要分库分表

水平分库还有垂直分库

只有水平分库,需要选取分片键这时候就是需要全局自增id

  1. 使用一个服务器来实现这个歌功能(缺点,单点失效)
  2. 使用zooker来进行实现自增

分片策略:

得到的hash+原始段链接

多地区优化

根据地区分片,然后us的走us,cn走cn的