Caching(二)|学习笔记

简介: 快速学习 Caching(二)

开发者学堂课程【高校精品课-上海交通大学-企业级应用体系架构:Caching】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/75/detail/15833


Caching (二)

 

内容介绍

Memcached

MemCached - Storage Commands

、MemCached - Memory Management

Redis

、Clusterina

 

三、MemCached - Memory Management

image.png

memcached 里面放的是 vlume就是对象对象有大有小,如何充分高效的利用内存在内存里面把所有的对象分成不同的 chunks再分成小的放对象的块有的放88个字节,有分成112字节有分成114的以此类推有比较大的柜分成一堆小抽屉一堆中等抽屉,一堆大抽屉,一堆更大的抽屉排列在柜子里戒指或者耳环小东西找最小的柜给塞进当要放一本书或者是一手机一个相机的时候就找比较大的柜子塞进去比如放枕头,放被,找个更大的地方塞进总是在找能放得下东西的最小的柜找最贴近的放最节约内存memcached 就是这个道理person 类对象的时候要看一个 person 要多少个字节比如有100个字节会找到比100个大的最小的 chunks比如112个字节在 chunks 里找空位把东西扔进从处理规则可以看到使用内存的方式非常节约

image.png

memcached 在部署时可以有多个节点可以起三个节点端口号不一样或者在三台机器上跑有一个数据设置tokyo塞进节点里面的哪个一个才能把它读出来这件事情不需要 memcached 自己进行处理,memcached 三个节点彼此之间不需要做任何的通信三个彼此可以独立的存在找到 tokyo 存放的地址取决于客户端的程序memcached 可以提供算法只要用算法就可以memcached 要求客户端在启动的时候要配当前有多少台服务器所以可以看到只配了一个11211端口上,提供算法库里面选算法比如在三个节点之间做 hash把存到哪个节点,服务器三个之间不需要通信选中一种算法告诉有多少个节点拿着键做 hash 就得到应该在哪个上面存所以在获取 tokyo 对象的时候只要算法没变仍然是在列表上做 hash 就能在节点上找到数据所以在集群里面可以看到memcached 采用一种比较简单的方式但是效率比较高,节点之间不需要通信一个数据一定会存在节点当中的某一个上服务器端自己通过 hash 确定位置在哪里,不需要控制节点所有的请求必须转发给控制节点控制节点再决定后台到哪里拿把位置变得透明,让客户端直接清楚服务器有哪一些方法可以看到 memcached 的实现比较简单,比较灵活效率比较高,但是有致命缺陷如果在运行过程中,节点崩了算法正好在 node1,拿不到就要自己维护,而且需要把列表重新更新,再完全靠客户端的程序,看将数据应该往哪里更合适如果有管理节点在屏蔽事情到底有多少个节点以及用什么算法完全靠管理点屏蔽客户端只把 P 交给管理节点让它决定到哪里存储避免节点直接被客户端给看到直接对客户端产生影响问题但是一旦这样做 memcached 管理节点就会变得非常重有可能成为系统的瓶颈本来大量的客户端直接就算出在哪里直接访问三点节点现在要把大量的客户端的请求全部发到管理节点管理节点再处理就有可能成为瓶颈而且还可能成为单一故障节点所以基于考虑memcached 不要这也是设计的原则需要节是屏蔽后台的差异还是消除系统当中单一故障节点,即使是崩的节点另外两个节点上的数据也用,哪方式好需要做权衡

image.png

如果数据在进行存储中内存不够需要增加节点在 hash 有三个节点除以三得到余数余数零一二三个当中的一个三个节点存储节点的标志零一二把的键拿出累加以后除以三得到结果就知道在三个节点里哪一个但是如果内存不够,增加一个如果除以四类之前已经存储的节点就找不到避免这样的情况memcached 用一致性 hash 算法算法也被称为 chord节点不光是数据节点本身也参与到 hash 算法里所有的数据以及节点都给不同的 idhash 算完之后零,比如用四个字节的数值表示数据的 id算完之后就会有零到二的32次方减一空位取值范围在范围内针对每一个节点,大于零小于第一个节点的 hash 值对应的数据存到节点上把所有的节点所有的数据的 hash 值排序大于节点的 hash 值小于节点的 hash 的时候把两个数据存到节点上所有的数据都存在大于最小的节点的上面hash 值大于自身的 hash 所有的节点里面最小的节点大的有三个节点但是存储存离最近的大的节点存储节点和数据一起在参与 hash整个四个字节存储所有的数据所以最多零到32次减一,再往外就溢出,所以最后可以看到像环一样溢出回到零

image.png

当增加节点的时候放到第五个节点只要把 node5的数据存在 node4节点上当插入一个节点,计算hashhash 值比新插入的节点小的一部数据,从原节点上删除,存到新的节点上就可以只移动几个数据的数据都不动,保证原存储的位置不动,发现增加一个节点不会带太大的麻烦原来的节点上面存储的那些数据不受任何影响在哪找,还是在哪找只有一部分数据发生变化做修改的时候查找的时候,大部分的数据是不动的也不会受影响,小部分的数据要挪动一下,但是查找的算法不动还是在找比节点最小的比数据 hash 值大的最小的节点可以看到使用 hash 可以任意的添加新节点节点数量增加有一部分数据会发生变化,后续新加的数据也不受影响可以随意的增加节点数量移出节点,节点浪费,所有的内存都没有被利用把原的数据挪到的下一个存储节点上就可以删掉,增加和删除都变得非常简单于是两个东西和前面客户端通过 hash 的方式确定数据存储的位置一起组合使用会发现 memcached 实践方式非常的灵活就是想要的的东西一致性 hash算法里面有很多地方都会利用存储节点和所有的单个的数据全部参与 hash 计算得到固定长度可以是四个字节,也可以是16个字节,看数据的量固定长度的hash值,因为 hash 是固定长度,所以02的32次方在节点上就是02的32次方,溢出了,所以在环里于是有数据存储分布的协议。

相关文章
|
存储 缓存 JSON
Caching(三)|学习笔记
快速学习 Caching(三)
153 0
Caching(三)|学习笔记
|
存储 缓存 NoSQL
Caching(一)|学习笔记
快速学习 Caching(一)
142 0
Caching(一)|学习笔记
|
安全 Java 数据安全/隐私保护
Security1 1(三)|学习笔记
快速学习 Security1 1(三)
101 0
Security1 1(三)|学习笔记
|
安全 Java 编译器
Security1 1(二)|学习笔记
快速学习 Security1 1(二)
Security1 1(二)|学习笔记
|
安全 小程序 Java
Security1 1(一)|学习笔记
快速学习 Security1 1(一)
Security1 1(一)|学习笔记
|
存储 安全 文件存储
Searching(二)|学习笔记
快速学习 Searching(二)
243 0
Searching(二)|学习笔记
|
算法 搜索推荐 数据库
Searching(三)|学习笔记
快速学习 Searching(三)
212 0
Searching(三)|学习笔记
|
JSON Apache 数据库
Searching(一)|学习笔记
快速学习 Searching(一)
140 0
Searching(一)|学习笔记
|
存储 缓存 负载均衡
Clustering(二)|学习笔记
快速学习 Clustering(二)
137 0
Clustering(二)|学习笔记
|
安全 Java 应用服务中间件
Distributed Object 2(三)|学习笔记
快速学习 Distributed Object 2(三)
131 0
Distributed Object 2(三)|学习笔记