3.设计短连接系统
0.设计news feed的api
选择返回协议
一般是使用json来进行返回
设计翻页

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

就是多取一个值,去得到就进行返回,作为next,不然就是null,没有下一个
如何设计@提及到其他人
直接使用http抄连接
缺点
- js跨域攻击
- url进行修改,从at name变成at uid,就要全部进行重写
设计短连接
分析
4s分析法

场景
- 计算qps,思考需要的容量,计算顶峰对多的qps,然后计算一年的就可以得到容量
主要功能
- 把长链接转换为短连接
- 短连接恢复为长连接 ,并且使用301重定向跳转
询问
- 长链接和短连接是不是11对应
- 是不是太久就要释放
需要设计什么
需求
qps
- 日活100M,平均1天可以求出0.1条
- 计算写入w,1100*0.1/86400 =100
- 计算读取,一天读取一条,那就是2k
- 计算一年存放的大小1000.11100 =1G
Service
服务只需要一个短连接服务
主要是设计接口的api,还有返回方式
需要两个api,讴歌encoder,一个decoded
使用的发送方式get,返回一个重定向,还有post,post发送长链接,返回短连接

Storage
选择存放的结构,sql还是nosql,之后是存放使用的scheme
Sql vs nosql
- 是否需要事务-不用
- 是否需要丰富的sql语句-不用
因此选择nosql
encoder算法
- 直接hash(冲突)
- hash+set(生成过慢)
- base62,将


构建索引对长链接还有短链接
整体流程

- 如果不存在这个长链接
- 就进行插入,并且返回短连接
Scale
如何提高响应速度
使用缓存—存放shoirt到长的连接
基于位置的提速
- Cdn
- 使用dns找最近的解析器
- 中心化的sql+分布式的redis

接着扩展mysql集群
解决写不过来的问题,读取瓶颈问题

此时此刻需要分库分表
水平分库还有垂直分库
只有水平分库,需要选取分片键这时候就是需要全局自增id
- 使用一个服务器来实现这个歌功能(缺点,单点失效)
- 使用zooker来进行实现自增
分片策略:
得到的hash+原始段链接


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

All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.


