如何应对系统设计的面试2

https://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview

Part 2: 三个公共主题

有三个公共主题适用于所有的系统设计题目,具体是通讯,存储和CAP;

1. 通讯

组件通讯,涉及到的通讯协议如下:
协议工作层特点备注
UDP传输层无连接,不可靠
TCP传输层连接,可靠协议
HTTP应用层基于TCP,可靠
RPC应用层进程间的通讯,可基于http/tcp,为使用者屏蔽了协议细节难以调试,公共api使用http

RPC进一步讨论:
rpc工作原理
打桩过程: 负责序列化进程标示以及参数为请求;然后通过通讯模块发送序列化之后的消息;接受请求消息时,会反序列化。

  • 谷歌protobuf:只有api没有rpc实现;文档齐全。
  • facebook thrift:多语言,多数据结构,文档少。

2. 存储

关系型存储

默认存储,主要因为ACID特性,这里的一致性C是指事物transaction一定会让数据库发生状态转移。不同于CAP中的一致性。

a. 减少冗余以及提高数据一致性,设计数据库需要遵循以下原则:

  • 扁平化,行列交叉口只有一个数值
  • 仅主键能决定所有属性
  • 从键决定所有属性?
DB代理

代理解决两个问题:单点故障和海量数据存储

  • clustering:去中心化,数据自动分布,移动和自平衡;节点之间互相通信;
  • sharding:中心化方案,数据手动分布,不会自动迁移,节点之间不通信。

NOSQL

常规的互联网服务都是读写比例100:1,甚至1000:1;解决关系型存储的读性能问题,join操作昂贵,大量时间花费在磁盘seek;更不要说分布式join操作的网络开销了。

解决读性能的方法论:增加冗余或者数据分组;

KV存储

why KV存储?

  • 降低读取热点数据的时延:O(1)读写更快的存储媒介(内存/SSD),而不是传统的O(logn)读写HD。

设计cache的三个标准

  • pattern:HOW to cache,read-through/write-through/wirte-around/write-back/cache-aside
  • placement: WHERE to cache,client-side/distinct-side/server-side
  • replacement: WHEN to expire/replace cache,LRU/LFU/ARC
Document 存储

why?

  • value是一个XML/JSON,更加灵活,迭代更快,不用每次都改KV;性能更好,读取次数少了。
Column-oriented 存储
  • 嵌套map,ColumnFamily<RowKey, Columns<Name, Value, Timestamp>>
  • 分布式,高可用,写优化
  • Hbase,Amazon simpleDB
Graph 存储
  • 实现类似关系型数据库的关系

3. CAP

  • 一致性C:所有节点在同一时刻的数据相同
  • 可用性A:所有请求都会得倒失败/成功的响应
  • 分区容忍P:系统部分的消息丢失,仍可以正常运行

一致性保障:协议,2PC/最终一致性(vector clock + RWN)/Paxos/
可用性保证:数据副本,cold standby/warn standby/hot standby/active-active保证高可用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值