分布式模型
切片(把不同的数据放入不同的数据库实例中)
垂直切分(按功能模块划分)
水平切分(把不同的记录按一个标准进行拆分)
复制(不同的数据库实例当中,数据是相同的)
主从复制
对等复制
-------------------------------------------------------------------------
读写规划和一致性
N ---- 数据复制的份数
W ----更新数据时需要保证写完成的节点
R ----读取数据的时候需要读取的节点数
如果W+R>N 写的节点和读的节点重叠,则是强一致性 典型 一主一备的同步
如: N=2,W=2,R=1 不管读的是主库还是备库的数据,都是一致的。
如果W+R<N ,则是弱一致性 如典型一主一备异步复制的关系型数据库
如:N=2,W=1,R=1 如果是读是备库,无法读取主库更新的内容,弱一致性
对于分布式系统,为了保证高可用性一般设置N>=3,不同的N,W,R组合,在
可用性和一致性之间取个平衡
如果N=W,R=1 ?---->可用性就降低 强一致性
如果N=R,W=1 ?--->一个写入成功即可,写性能和可用性高,弱一致性
---------------------------------------------------------------------------------------
Memcached--->分布式的缓存服务器
1.特点
a.内存存储
速度快,内存要求高,cpu要求低
部署Memcached服务端的时候往往会和内存要求低(内存低消耗),cpu要求高的应用部署在一起
b.集中式的缓存
Memcached必须把客户端包含在一起,我们才认为是分布式的。
对于每个Memcached实例都是独立的,集中式缓存,
存在单点问题 (实际应用中我们可能需要自己去解决单点问题)
c.分布式扩展
注意的问题:一致性hash问题,在搭建集群的时候我们去解决这个问题
d.Socket通讯
需要注意传输内容大小和序列化的问题。
底层做的是NIO(多路复用的IO)
序列化的性能问题
e.特殊的内存分配机制
支持的最大对象是1M(关于内存到底如何分配,在后续章节会详细讲解)
f.缓存机制比较简单
两次hash算法,第一次定位实例(机器down了,扩展机器时防止数据丢失),第二次进行hashMap操作
g.客户端非常重要
客户端包含在一起才是分布式的
客户端只要支持socket通讯即可
h.一些应用点
小对象的缓存、小的静态资源的缓存、sql结果的缓存(数据库的前端缓存)
session的缓存(msm--->memcached session manage)
ESB的消息缓存 等等
安装、启动
1.tar -xzvf 文件.tar.gz
2.安装libevent
进入目录
./configure
make
make install
3.安装Memcached
加压 进入目录
./configure
make
make install
4.测试是否安装成功
./memcached -h
5.启动服务和连接
./memcached -d -m512 -p11211 -uroot
telnet localhost 11211
启动参数
启动方式
-d ---->以守护程序方式运行
-uroot 指定用户
内存设置
-m 1024
-M 内存不够禁止LRU
-------------------------------------------
-n
-f 1.25 增长因子
-l 这三个启动参数将来在内存分配内存优化等方面有重要作用,讲内存分配的时候会详细的讲解
-------------------------------------
连接设置
-p TCP端口
-U UDP端口
并发设置参数
-c 1024 最大并发连接数
-t 4 线程数
将来这些选项都可以放入到启动参数中。
常用的一些命令
set liu 32 0 4 长度一定要正确
java
STORED
add 只能添加不存在的key
replace只能替换已经存在的key
get/gets
gets会带有版本
切片(把不同的数据放入不同的数据库实例中)
垂直切分(按功能模块划分)
水平切分(把不同的记录按一个标准进行拆分)
复制(不同的数据库实例当中,数据是相同的)
主从复制
对等复制
-------------------------------------------------------------------------
读写规划和一致性
N ---- 数据复制的份数
W ----更新数据时需要保证写完成的节点
R ----读取数据的时候需要读取的节点数
如果W+R>N 写的节点和读的节点重叠,则是强一致性 典型 一主一备的同步
如: N=2,W=2,R=1 不管读的是主库还是备库的数据,都是一致的。
如果W+R<N ,则是弱一致性 如典型一主一备异步复制的关系型数据库
如:N=2,W=1,R=1 如果是读是备库,无法读取主库更新的内容,弱一致性
对于分布式系统,为了保证高可用性一般设置N>=3,不同的N,W,R组合,在
可用性和一致性之间取个平衡
如果N=W,R=1 ?---->可用性就降低 强一致性
如果N=R,W=1 ?--->一个写入成功即可,写性能和可用性高,弱一致性
---------------------------------------------------------------------------------------
Memcached--->分布式的缓存服务器
1.特点
a.内存存储
速度快,内存要求高,cpu要求低
部署Memcached服务端的时候往往会和内存要求低(内存低消耗),cpu要求高的应用部署在一起
b.集中式的缓存
Memcached必须把客户端包含在一起,我们才认为是分布式的。
对于每个Memcached实例都是独立的,集中式缓存,
存在单点问题 (实际应用中我们可能需要自己去解决单点问题)
c.分布式扩展
注意的问题:一致性hash问题,在搭建集群的时候我们去解决这个问题
d.Socket通讯
需要注意传输内容大小和序列化的问题。
底层做的是NIO(多路复用的IO)
序列化的性能问题
e.特殊的内存分配机制
支持的最大对象是1M(关于内存到底如何分配,在后续章节会详细讲解)
f.缓存机制比较简单
两次hash算法,第一次定位实例(机器down了,扩展机器时防止数据丢失),第二次进行hashMap操作
g.客户端非常重要
客户端包含在一起才是分布式的
客户端只要支持socket通讯即可
h.一些应用点
小对象的缓存、小的静态资源的缓存、sql结果的缓存(数据库的前端缓存)
session的缓存(msm--->memcached session manage)
ESB的消息缓存 等等
安装、启动
1.tar -xzvf 文件.tar.gz
2.安装libevent
进入目录
./configure
make
make install
3.安装Memcached
加压 进入目录
./configure
make
make install
4.测试是否安装成功
./memcached -h
5.启动服务和连接
./memcached -d -m512 -p11211 -uroot
telnet localhost 11211
启动参数
启动方式
-d ---->以守护程序方式运行
-uroot 指定用户
内存设置
-m 1024
-M 内存不够禁止LRU
-------------------------------------------
-n
-f 1.25 增长因子
-l 这三个启动参数将来在内存分配内存优化等方面有重要作用,讲内存分配的时候会详细的讲解
-------------------------------------
连接设置
-p TCP端口
-U UDP端口
并发设置参数
-c 1024 最大并发连接数
-t 4 线程数
将来这些选项都可以放入到启动参数中。
常用的一些命令
set liu 32 0 4 长度一定要正确
java
STORED
add 只能添加不存在的key
replace只能替换已经存在的key
get/gets
gets会带有版本