1. 目标是找到一种如下的key-value数据库集群方案:
- 具备高性能的读写,支持亿级PV
- 具备灵活的可扩展性,同时也是支持上一条的基础
- 数据自动切分,即不依赖于业务逻辑
- 具备分布式事务功能以及不同隔离级别
- 具备数据的一致性或局部一致,最终全部一致
- 可独立提供网络层服务,以支持N(数据库集群)*M(WEB集群)结构,并支持二进制的网络协议
- 方便的客户端API
2. 我最初的思路
- 使用Memcachedb,由客户端API(改造spymemcached)实现分布式事务和隔离
- 由客户端API使用Consistent Hashing进行数据切分
3. 关于自己思路的发现
- 读写性能不错
- 不具备良好的可扩展性,由于Consistent Hashing,由于负载过高需要增加一倍的节点时,数据转移量是巨大的(5星级问题)
- 数据可以自动切分
- 分布式事务和隔离的实现只交由客户端API非常困难(5星级问题)
- 一致性满足
- 有独立的网络层服务,可以实现N*M架构,但不支持二进制协议(2星级问题)
- 客户端API相对方便,如spymemcached
4. 继续发现
由于自己是初学者,在这方面没有太多的经验,无法想出一个解决方案。于是我首先做的是去找其他已有的框架,并做粗浅的了解。
根据"菜鸟"和Robbin以及Google的提示,做了下大概的了解,除了上述提到的Memcachedb外,还包括:
- Cassandra,看看它能否解决我3中出现的三个问题,通过了解发现,它的扩展性是很好的,但没有分布式事务处理。
- Voldemort,面临跟Cassandra一样的问题,所以也让人纠结。
- Redis,主张以内存为主的存储,感觉用于生产会有问题。同时也不能解决分布式事务。
- JBossCache,提供了BDB Loader,但没有独立的网络层,需要与APP SERVER(如JBoss等)配合提供服务,有锁机制,由于配置复杂,也因为下面的Scalaris,我没有做进一步的了解。
- Scalaris,让我激动的框架,因为它支持分布式事务和隔离级别,并且以TC作为底层存储,目前正在研究它的扩展性和使用。由于不懂Erlang,这个过程比较费劲,但我仿佛看到一点光亮……
由于是这方面的初学者,加上基础不足,有些见解可能是错误的或不足的,敬请各位大侠指正,谢谢!
- 具备高性能的读写,支持亿级PV
- 具备灵活的可扩展性,同时也是支持上一条的基础
- 数据自动切分,即不依赖于业务逻辑
- 具备分布式事务功能以及不同隔离级别
- 具备数据的一致性或局部一致,最终全部一致
- 可独立提供网络层服务,以支持N(数据库集群)*M(WEB集群)结构,并支持二进制的网络协议
- 方便的客户端API
2. 我最初的思路
- 使用Memcachedb,由客户端API(改造spymemcached)实现分布式事务和隔离
- 由客户端API使用Consistent Hashing进行数据切分
3. 关于自己思路的发现
- 读写性能不错
- 不具备良好的可扩展性,由于Consistent Hashing,由于负载过高需要增加一倍的节点时,数据转移量是巨大的(5星级问题)
- 数据可以自动切分
- 分布式事务和隔离的实现只交由客户端API非常困难(5星级问题)
- 一致性满足
- 有独立的网络层服务,可以实现N*M架构,但不支持二进制协议(2星级问题)
- 客户端API相对方便,如spymemcached
4. 继续发现
由于自己是初学者,在这方面没有太多的经验,无法想出一个解决方案。于是我首先做的是去找其他已有的框架,并做粗浅的了解。
根据"菜鸟"和Robbin以及Google的提示,做了下大概的了解,除了上述提到的Memcachedb外,还包括:
- Cassandra,看看它能否解决我3中出现的三个问题,通过了解发现,它的扩展性是很好的,但没有分布式事务处理。
- Voldemort,面临跟Cassandra一样的问题,所以也让人纠结。
- Redis,主张以内存为主的存储,感觉用于生产会有问题。同时也不能解决分布式事务。
- JBossCache,提供了BDB Loader,但没有独立的网络层,需要与APP SERVER(如JBoss等)配合提供服务,有锁机制,由于配置复杂,也因为下面的Scalaris,我没有做进一步的了解。
- Scalaris,让我激动的框架,因为它支持分布式事务和隔离级别,并且以TC作为底层存储,目前正在研究它的扩展性和使用。由于不懂Erlang,这个过程比较费劲,但我仿佛看到一点光亮……
由于是这方面的初学者,加上基础不足,有些见解可能是错误的或不足的,敬请各位大侠指正,谢谢!