Archives

  • 利用Arena Allocation避免HBase触发Full GC

    Arena Allocation,是一种GC优化技术,它可以有效地减少因内存碎片导致的Full GC,从而提高系统的整体性能。本文介绍Arena Allocation的原理及其在Hbase中的应用-MSLAB。

    背景

    假设有1G内存,我顺序创建了1百万个对象,每个对象大小1K,Heap会被渐渐充满且每个对象以创建顺序相邻。此时,如果我释放50万个奇数对象,即 1 3 5 7后,剩余空间会多出500M,而这段内存空间就不再连续了。问题出现?
    如果我打算new一个2K大小的对象,JVM将无从分配它,因为找不到连续可用的内存空间来容纳这个对象,就算Heap当时还有500M的剩余空间,也无能为力。最终,JVM会选择触发Full GC重新压缩内存使之连续,然后再分配。

    结论:触发Full GC,并不只有在内存满或达到触发比例的时候,还有可能是因为内存碎片。

    产生内存碎片的主要原因是:

    • 分配的大小不一。
    • 分配的空间不连续。

    Read more…

    2011/06/21 | Posted in NOSQL
  • HBase性能调优

    官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果。所以我以配置项驱动,重新整理了原文,并补充一些自己的理解,如有错误,欢迎指正。

    配置优化

    zookeeper.session.timeout
    默认值:3分钟(180000ms)
    说明:RegionServer与Zookeeper间的连接超时时间。当超时时间到后,ReigonServer会被Zookeeper从RS集群清单中移除,HMaster收到移除通知后,会对这台server负责的regions重新balance,让其他存活的RegionServer接管.
    调优
    这个timeout决定了RegionServer是否能够及时的failover。设置成1分钟或更低,可以减少因等待超时而被延长的failover时间。
    不过需要注意的是,对于一些Online应用,RegionServer从宕机到恢复时间本身就很短的(网络闪断,crash等故障,运维可快速介入),如果调低timeout时间,反而会得不偿失。因为当ReigonServer被正式从RS集群中移除时,HMaster就开始做balance了(让其他RS根据故障机器记录的WAL日志进行恢复)。当故障的RS在人工介入恢复后,这个balance动作是毫无意义的,反而会使负载不均匀,给RS带来更多负担。特别是那些固定分配regions的场景。

    Read more…

    2011/06/14 | Posted in NOSQL, Performance Tuning
  • HBase二级索引与Join

    二级索引与索引Join是Online业务系统要求存储引擎提供的基本特性。RDBMS支持得比较好,NOSQL阵营也在摸索着符合自身特点的最佳解决方案。
    这篇文章会以HBase做为对象来探讨如何基于Hbase构建二级索引与实现索引join。文末同时会列出目前已知的包括0.19.3版secondary index,?ITHbase, Facebook和官方Coprocessor方案的介绍。

    理论目标
    在HBase中实现二级索引与索引Join需要考虑三个目标:
    1,高性能的范围检索。
    2,数据的低冗余(存储所占的数据量)。
    3,数据的一致性。

    性能与数据冗余,一致性是相互制约的关系。
    如果想实现了高性能地范围检索,必然需要依赖冗余索引数据来提升性能,而数据冗余会导致更新数据时难以实现一致性,特别是分布式场景下。
    如果对范围检索的性能要求不高,那么可以不考虑冗余数据,一致性问题也可以间接避免,毕竟share nothing是公认的最简单有效的解决方案。

    理论结合实际,下文会以实例的方式来阐述各个方案是如何选择偏重点。
    这些方案是经过笔者资料查阅和同事的不断交流后得出的结论,如有错误,欢迎指正:

    Read more…

    2011/05/27 | Posted in NOSQL
  • Cassandra和HBase主要设计思路对比

    Cassandra HBase
    一致性 Quorum NRW策略

    通过Gossip协议同步Merkle Tree,维护集群节点间的数据一致性

    单节点,无复制,强一致性
    可用性 1,基于Consistent Hash相邻节点复制数据,数据存在于多个节点,无单点故障。

    2,某节点宕机,hash到该节点的新数据自动路由到下一节点做 hinted handoff,源节点恢复后,推送回源节点。

    3,通过Gossip协议维护集群所有节点的健康状态,并发送同步请求,维护数据一致性。

    4,SSTable,纯文件,单机可靠性一般。

    1,存在单点故障,Region Server宕机后,短时间内该server维护的region无法访问,等待failover生效。

    2,通过Master维护各Region Server健康状况和Region分布。

    3,多个Master,Master宕机有zookeeper的paxos投票机制选取下一任Master。Master就算全宕机,也不影响Region读写。Master仅充当一个自动运维角色。

    4,HDFS为分布式存储引擎,一备三,高可靠,0数据丢失。

    5,HDFS的namenode是一个SPOF。

    伸缩性 1,Consistent Hash,快速定位数据所在节点。

    2,扩容需在Hash Ring上多个节点间调整数据分布。

    1,通过Zookeeper定位目标Region Server,最后定位Region。

    2,Region Server扩容,通过将自身发布到Master,Master均匀分布。

    负载均

    请求Zookeeper取得整个集群地址,然后根据Consistent Hash选择合适的节点。client会缓存集群地址。 请求Zookeeper取读写数据路由表定位Region Server,Master会修改这个路由表。Client自身也会缓存一部分路由信息。

    如果Key的第一部分是时间或者序列数,所有新的Key都会被插入同一个区域,一直到此区域被塞满。此处存在热点问题。

    数据差异比较算法 Merkle Tree , Bloom Filter Bloom Filter
    锁与事务 Client Timestap(Dynamo使用vector lock) Optimistic Concurrency Control
    读写性能 数据读写定位非常快。 数据读写定位可能要通过最多6次的网络RPC,性能较低。
    可维护性 架构无中心化,维护成本低。

    新增keyspace需要重启整个集群。

    组件过多,架构复杂,维护成本较高。

    删除表非常方便。

    列排序 支持 不支持
    map/reduce 支持不是很好 源生支持
    访问接口 Thrift 多种,包括Thrift
    点评 1,弱一致性,数据可能丢失。

    2,可用性高。

    3,扩容方便。

    4,如果不需要map/reduce的话,维护相当简单。

    1,强一致性,0数据丢失。

    2,可用性低。

    3,扩容方便。

    4,组件过多,架构复杂,维护成本较高。

    参考资料
    Dynamo: Amazon’s Highly Available Key-value Store
    HBase Reference
    NoSQL Databases: Why, what and when
    解读NoSQL技术代表之作Dynamo
    NOSQL数据库笔谈
    Dynamo学习

    2011/04/13 | Posted in NOSQL
Archive for the ‘NOSQL’ Category