淘宝tair的学习心得相关记录

淘宝tair的学习心得相关记录

晚上回家,想起前一阵子看淘宝Tair相关资料,其实去年tair开源时就有相关关注,但是印象不多,最近重新翻阅了相关资料,感觉很详细,受益非浅,表示感谢,小记了一下,供学习与参考:(http://www.oschina.net/p/tair)

一.Tair的介绍

Tair是由淘宝网自主开发的Key/Value结构数据存储系统.它默认支持基于内存和文件的两种存储方式,分别和我们通常所说的缓存和持久化存 储对应。Tair除了普通Key/Value系统提供的功能,比如get、put、delete以及批量接口外,还有一些附加的实用功能,使得其有更广的 适用场景,包括:

1.Version支持:Tair中的每个数据都包含版本号,版本号在每次更新后都会递增。这个特性有助于防止由于数据的并发更新导致的问题。

注:对于版本号的支持,每个数据都包含版本号是不是有必要,毕竟大部分数据更新是不需要的,增加了存储!其实tair这样是变相的 想实现事物操作,保证数据更新成功。在redis里面采用的是乐观锁的实现,通过watch key,当多线程操作时,如果在watch key以后其它线程优先操作,会执行失败。对于版本号引入,tair应该有它使用场景的考虑,我们的项目中相关数据有自定义Version来保证数据的一 致性。

2.原子计数器:Tair从服务器端支持原子的计数器操作,这使得Tair成为一个简单易用的分布式计数器。

3.Item支持:Tair还支持将value视为一个item数组,对value中的部分item进行操作。比如有个key的value为 [1,2,3,4,5],我们可以只获取前两个item,返回[1,2],也可以删除第一个item,还支持将数据删除,并返回被删除的数据,通过这个接 口可以实现一个原子的分布式FIFO的队列。

注:对于原子计数器,以及item的支持,都实现了原子操作,这些在实际使用场景中很有作用吧。淘宝在实现这些功能时应该是考虑到项目中的应用场景了。对于其实现方式(在做分布式处理时,这些数据映射到同一结点,相关key增加通过版本号应该就可以很好的实现了)

二.Tair内部结构

如上图所示,为Tair的基本框架。

从上图看简单的理解ConfigServer是中心结点,其中此server支持主从备份。DataServer为数据存储结点, 并与ConfigServer通过心跳机制保持连接。Client为淘宝相关项目中需要使用Tair的应用,通过ConfigServer可以获取数据 (Key-hash)值对应的DataServer结点信息,然后与相应的DataServer完成交互。

以上为个人理解

1.      Tair架构介绍:

一个Tair集群主要包括client、configserver和dataserver 3个模块。Configserver通过和dataserver的心跳(HeartBeat)维护集群中可用的节点,并根据可用的节点,构建数据的在集群 中的分布信息(见下文的对照表)。Client在初始化时,从configserver处获取数据的分布信息,根据分布信息和相应的dataserver 交互完成用户的请求。Dataserver负责数据的存储,并按照configserver的指示完成数据的复制和迁移工作。

2.      数据分布

分布式系统需要解决的一个重要问题便是决定数据在集群中的分布策略,好的分布策略应该能将数据均衡地分布到所有节点上,并且还应该能适应集群节点的 变化。Tair采用的对照表方式较好地满足了这两点。对照表的行数是一个固定值,这个固定值应该远大于一个集群的物理机器数,由于对照表是需要和每个使用 Tair的客户端同步的,所以不能太大,不然同步将带来较大的开销。生产环境中的行数一般为1023 。

对照表简介下面看对照表是怎么完成数据的分布功能的,为了方便,这里假设对照表的行数为6。最简单的对照表包含两列,第一列为hash值,第二列为负责该hash值对应数据的dataserver节点信息。比如有两个节点192.168.10.1和

192.168.10.2,那么对照表类似:

0       192.168.10.1

1       192.168.10.2

2       192.168.10.1

3       192.168.10.2

4       192.168.10.1

5       192.168.10.2

当客户端接收到请求后,将key的hash值和6取模,然后根据取模后的结果查找对照表。比如取模后的值为3,客户端将和192.168.10.2通信。

注:tair的分布式策略是通过对照表的方式,hash对应server的结点信息,然后key,hash后取模,以上方式可以很 好的增加与删除结点,以及后面所涉及的备份等,考虑的比较全面。我们项目中在实现redis分布式缓存处理时,服务器结点信息做一致性哈希,然后数据 key做hash选取对应的结点信息实现,此方式实现,数据能够均均分布,在增加与删除结点时,需要重新init hash的TreeMap,总体来说还是比较平滑。

三.ConfigServer介绍

Tair的configserver是一个轻量级的中心节点,在大部分时候,configserver不可用对集群的服务是不造成影响的。Tair 用户和configserver的交互主要是为了获取数据分布的对照表,当client获取到对照表后,会cache这张表,然后通过查这张表决定数据存 储的节点,所以请求不需要和configserver交互,这使得Tair对外的服务不依赖configserver,所以它不是传统意义上的中心节点。 configserver维护的对照表有一个版本号,每次新生成表,该版本号都会增加。当有数据节点状态发生变化(比如新增节点或者有节点不可用了) 时,configserver会根据当前可用的节点重新生成对照表,并通过数据节点的心跳,将新表同步给数据节点。当客户端请求数据节点时,数据节点每次 都会将自己的对照表的版本号放入response中返回给客户端,客户端接收到response后,会将数据节点返回的版本号和自己的版本号比较,如果不 相同,则主动和configserver通信,请求新的对照表。所以客户端也不需要和configserver保持心跳,以便及时地更新对照表。这使得在 正常的情况下,客户端不需要和configserver通信,即使configserver不可用了,也不会对整个集群的服务造成大的影响。有当 configserver不可用,此时有客户端需要初始化,那么客户端将取不到对照表信息,这将使得客户端无法正常工作。

注:以上为configserver的工作的介绍,其实简单来说configserver维护分布式对照表,此表有一个 version,当有dataserver删除与增加时,configserver会重新生成对照表,并同步给所有的dataserver,而客户端第一 次访问时会从configserver中坊取对应的对象表信息并缓存,然后数据key与对应的dataserver通信,每次跟dataserver交互 时,会比较对照表的版本号,如果有更新,则会重新请求configserver读取对应的对照表。

总体上来说此ConfigServer很轻量级。

 

四.DataServer的实现

Tair抽象了存储引擎,底层可以基于LevelDb,redis等各种存储引擎,表示很赞。

 总的来说,以上是读Tair相关文档时的一些笔记及相关心得,主要对于其框架的实现,有些小体会,结合自身实现过程中的一些想法简单的记录下,对自己知识的扩展有很大的帮助。

 

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值