通过论坛上大侠们的指点,以及跟“菜鸟”童鞋的交流,发现我原来的有些认识是错误的或有偏差的,如下:
1. 被cache所迷惑,误把distributed cache看成了distributed db,现在的理解是cache只是对db的增强(其实一直是这样,只是加上了个分布式就把我自己搞乱了)
2. 对cache进行事务处理,再由cache与storage同步是对事务的割裂,也就不能再称之为事务了
3. db不一定非得是server mode,一个db server + 一个app server与两个app server with local db是一样的道理
关于一致性哈希的最新认识:当一个节点宕掉时,对应区间的数据将会写到下一节点;因此就涉及到数据复制以及数据版本的问题。追加一句:Master/Slave模式并不是可靠的,呵呵
另一种就是B+树处理方式,需要进一步学习。现在先只看哈希方式。
同时,目前比较倾向于以下这种方案框架(在“菜鸟”的“勾引”和对dynamo的学习下形成的):
1. app server + local storage(可加缓存机制,合称db)作为一个节点
2. 节点间的事务和数据同步由框架来完成,对APP是透明的
3. APP开发者只需要会使用框架的API即可,不需要关注数据存储方式(交由数据管理员配置)
4. 通过框架可进行各db的规则配置,比如A、B节点hash值等
5. N、W、R思想及数据版本处理(原来这才是局部一性,全部一致的问题啊,呵呵)
6. 前端的连接(如HTTP连接)具体到哪个节点由DNS负载均衡处理,分为两种方式:
- 请求A节点时框架判定B节点更合适,那么由B节点提供给A节点数据,由A节点返回
- 请求A节点时框架判定B节点更合适,将连接转交给B节点,由B节点返回
说的还是有些乱,东西太多,自己思路老是跑到如何实现上去了,先这么着吧,能把自己的目标先描述清楚了再说。
分享到:
相关推荐
<name>dfs.ha.fencing.ssh.private-key-file</name> <value>~/.ssh/id_rsa</value> </property> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> ``` 通过以上...
SpringBoot以其轻量级和便捷的特性,使得开发者能快速搭建应用,而Redis作为内存数据库,提供高速的数据读写能力,适合用于实现分布式锁。 首先,我们需要在SpringBoot项目中引入Redis的相关依赖。这通常通过在`pom...
--开启集群--> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 端口 --> <property> <name>hbase.master.port</name> <value>16000</value> </property> <!--...
- `updateBrokerConfig -n <nameserver> -b <broker_name> -k <config_key> -v <config_value>`: 更新Broker配置。 9. **消费进度管理**: - `queryConsumeProgress -n <nameserver> -c <consumer_group> -t ...
标题 "基于HDFS的,分布式的key-value store.zip" 提示我们关注的是一个与Hadoop分布式文件系统(HDFS)相关的key-value存储解决方案。描述中的“人工智能-hdfs”表明这个项目可能是在HDFS基础上构建的人工智能应用...
<artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot Starter Actuator --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-...
### 分布式KEY-VALUE存储设计方案 #### 一、引言 随着互联网技术的迅猛发展,数据量呈现出爆炸性增长的趋势。传统的集中式数据库已经难以满足海量数据存储的需求,因此,分布式Key-Value(KV)存储系统作为一种...
标题中的“spring集成redis,集成redis集群”表明我们要讨论的是如何在Spring框架中整合Redis分布式缓存,并且特别关注如何配置和使用Redis集群。Redis是一种高性能的键值数据存储系统,常用于缓存、消息队列等场景...
Memcached是一种分布式内存缓存系统,常用于减轻数据库的负载,提高应用程序的响应速度。这个优化版客户端尤其适用于Java开发环境,通过改进的算法和优化的通信机制,实现了更高效的缓存操作。 **依赖库** 在使用...
- 插入文档:`db.<collection>.insert({<field1>:<value1>, <field2>:<value2>})` - 查询文档:`db.<collection>.find({<query>)` - 更新文档:`db.<collection>.update({<query>}, {<update>})` - 删除文档:`...
<value>file:///data/hadoop/hdfs/datanode</value> </property> </configuration> ``` 3. `mapred-site.xml` - 配置MapReduce框架: ```xml <configuration> <property> <name>mapreduce.framework.name</...
作为一款Key-Value存储系统,Cassandra在设计时就考虑了大规模数据存储和处理的需求,因此它非常适合那些需要处理PB级别数据、对数据可用性和读写性能有高要求的应用场景。 在Cassandra的设计哲学中,它强调了数据...
<value>/tmp/hadoop-${user.name}</value> </property> </configuration> ``` - **hdfs-site.xml**:配置 HDFS 的数据块副本数量等参数。示例配置如下: ```xml <configuration> <property> <name>dfs....
这样做的好处是可以实现session的分布式共享,对于负载均衡的Web集群,用户在集群中的任意一台服务器上的操作都可以在其他服务器上继续,无需重新登录或丢失状态。 为了在Java项目中集成Memcache,你需要添加对应的...
<value>file:///usr/local/hadoop/data/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///usr/local/hadoop/data/datanode</value> </property> </configuration...
例如,通过集群配置实现缓存的高可用性,或者使用 Terracotta Server 作为分布式缓存解决方案。 **性能优化和最佳实践** 1. 合理设置缓存大小:根据应用的实际情况,调整缓存的最大容量,避免因缓存溢出导致的问题...
Ehcache是一个流行的Java缓存库,用于提高应用程序性能,减少对数据库的访问。当与Terracotta结合使用时,Ehcache可以实现分布式缓存,使得多台服务器上的应用可以共享同一份缓存数据,从而构建高可用的集群环境。在...
<param-value>n1:192.168.1.1:11211,n2:192.168.1.2:11211</param-value> </init-param> <!-- 其他配置参数 --> </filter> <filter-mapping> <filter-name>MemcachedSessionFilter</filter-name> <url-pattern>...
它通过提供强一致性的 Key-Value 存储,实现了对集群状态的高效管理和监控。 **1. etcd 简介** etcd 是一个开源项目,设计目标是提供一个简单、安全、高性能的分布式键值存储系统。它使用 raft 一致性算法来确保...