存储 频道

读后感:分布式对象存储系统案例

  【IT168 案例】Dynamo是面向Amazon自有的电子商务应用的,使用广域分布的大规模集群提供高可靠的对象存储服务,主要存储1M左右甚至更小的内容,如购物车、推荐列表等。由于Dynamo的应用场合,设计上有这么一些“独特”的要求:

  高可靠性与高可伸缩性

  始终可写,写优先于读(保证用户体验——用户添加购物车内容时应尽量避免失败)

  一致性与写入速度的折衷,不要求同步写入所有副本

  对称、务中心架构,支持异构节点

  Dynamo的数据分布方式采用了比较典型的DHT方式,但有一些有意思的策略,比如“虚拟节点”——每个物理节点被当做多个虚拟节点:

  分散节点的加入/删除带来的冲击:节点加入/删除会影响相邻的节点,通过多个虚拟节点,物理节点的加入/删除的影响被平均散播到多个节点上了。

  表征异构节点的能力差异

  此外,Dynamo支持对对象的不同版本进行记录和处理,并且可以将不同版本提供给应用,供应用自己更灵活地进行合并。对象的副本数遵循(N,R,W)的规则,N个副本,如果R个读取的一致则确定读取成功,如果W个写入成功则认为写入成功,不要求全部N个都成功完成,只要 R+W>N,数据的最终一致性就可以得到保障。这里,读取比一次写多次读的系统(如HDFS)麻烦,但写入变简单了,这反映了应用的需求。

  看了这个设计,我大致有这么几个感触

  应用决定设计

  应用规模和应用类型会左右架构设计的原则和方向的采用和“写大于读”的设计都来源于此

  精巧与实用(大巧不工)并重

  如果说 DHT 是精巧的话,多个虚拟节点的设计相对于复杂的负载均衡等机制来说绝对算是“实用”的典范了

  底层与应用的互动

  版本合并的事情,放在底层叫做高效,放在应用叫做灵活,只有合适的选择,没有错误的技术

0
相关文章