背景 今天看到了云版本的 HBase2.0 上线了,其中使用了计算存储分离。 这里的计算存储分离只是云 Hbase 2.0 中不起眼的一个小细节,但是其做为一种思想,已经用在了绝大多数的云服务中。 这里简单记录一下计算存储分享的实践过程。 发展过程 网络 IO 瓶颈阶段 以前,计算和存储是放在同一台机器上的,计算直接操 ..

聊聊计算存储分离

本贴最后更新于 495 天前,其中的信息可能已经时移世改

背景

今天看到了云版本的 HBase2.0 上线了,其中使用了计算存储分离。

这里的计算存储分离只是云 Hbase 2.0 中不起眼的一个小细节,但是其做为一种思想,已经用在了绝大多数的云服务中。

这里简单记录一下计算存储分享的实践过程。

发展过程

网络 IO 瓶颈阶段

以前,计算和存储是放在同一台机器上的,计算直接操作本机的存储,来避免网络 IO 对性能的影响。

然后,随着数据量的增加,单机无法提供横向扩展性,因此有了分布式的应用,引入了跨机器复制数据的操作。但是这里的操作原则依然是尽量的本地化,来避免跨节点网络 IO 对性能的影响。

资源使用率瓶颈阶段

当前,数据中心已经有了 25G, 50G 和 100G 的网络,网络 IO 已经不再是瓶颈了。

此时,关注点变为了减少低资源使用率的机器,同时服务可以云化。最终实现初期流量低时,使用少量资源,流量上升后,可以动态增加机器,来扩充服务能力的目标。

怎么实现这个目标呢?即计算存储分离,按需使用资源。

实现方式

通过学习 HBase 2.0 的架构图,来学习一般的实现方式。

计算存储分离

第一步是实现计算层和存储层的分离。如图所示:

png

通过这种方式,实现了按需使用,弹性扩充。

冷热数据分离

第二步是冷热数据分离,分级存储。

这个通常是在实现了第一步的基础上进行的。

即把不常访问的数据放在成本较低的存储上,被访问时延时会稍微高一些,但是也能满足业务需求。

这种方式,最重要是可以实现把读写较快的存储,用来存放对于实时性要求高的数据,来提高性能,同时降低成本。

png

技术难点

计算存储分离中,有状态的数据均放在了存储层。因此难点都落在了存储层上。

下面是几个常见的方面:

单机 failover

如何保证存储层的高可用性和数据一致性呢?

目前互联网中通用的解决方案是使用 Paxos/raft 强一致性协议,来实现 5 秒级别的 failover 自动恢复。

与一般方案不同的是 Cassandra,其使用的是 gossip 协议来进行节点发现,用户来配置读和写的一致性级别[4]。

毛刺优化

在读写中,常常会遇到毛刺现象,即部分长尾请求的响应时间偏长。一般是网络抖动、磁盘抖动、负载、GC 等原因。

这种情况的解决方法,也是上面提到的解决方法,即使用多数节点读取写入成功时即认为成功的策略(commit majority feature)。

流控

在负载高时,适应降低后台同步服务的资源占用,来降低读写的毛刺。

当然更好的解决方法是,优化后台同步逻辑,来进一步资源占用。

高可用部署

数据至少部署在两个 DC,Zookeeper 类似的服务部署在三个 DC。

参考

  1. 八年磨一剑,阿里云ApsaraDB for HBase2.0正式上线
  2. 容器化RDS|计算存储分离架构下的 IO 优化
  3. 2017双11技术揭秘—阿里数据库计算存储分离与离在线混布
  4. How is the consistency level configured?
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    652 引用 • 836 回帖 • 680 关注
  • 存储
    20 引用 • 34 回帖 • 1 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2351 引用 • 7816 回帖 • 891 关注
回帖
请输入回帖内容...