分布式编程(一)分布式缓存和存储

分布式存储
分布式存储引擎很多,这类存储引擎的特性主要在于数据、状态信息的持久化,数据均衡散列,要求自动迁移、自动容错、
并发读写过程保证数据的一致性,吞吐能力大并可线性扩展。
 
数据分布
数据散列:通常使用对key哈希取模,映射至存储节点或者数据分片上。
动态扩容:举个简单的例子,2个节点的时候对2取模等于0的数据在节点1,4个节点时对4取模等于0的在节点3;
这种情况下,如果是动态扩容,相当于只需移动节点1中对4取模=0的数据到新增的节点三即可。
如果需要在这一部分详细了解,可以去搜索hash一致性算法相关文章。
大部分分布式数据库,其实不用关心这方面的细节,我们更多的关系应该是数据怎么用。
  分布式编程(一)分布式缓存和存储_第1张图片
 
分布式缓存
开始前先不考虑存储引擎可能本身开辟的缓存,想一想;你的数据是读多,还是写多?你有两种选择!
1、客户端缓存
高密集运算、定时存储、
如:这类业务普遍由应用层开发,框架类的HadDoop有类似机制
2、存储端缓存
如:Redis、Mnesia等都可以配置缓存
3、中间件缓存
如:MemCache
1、在 Memcached中可以保存的item数据量是没有限制的,只要内存足够 。
2、Memcached单进程在32位系统中最大使用内存为2G,若在64位系统则没有限制。
3、最大30天的数据过期时间,设置为永久的也会在这个时间过期,常量REALTIME_MAXDELTA 60*60*24*30控制
4、最大键长为250字节,大于该长度无法存储,常量KEY_MAX_LENGTH 250控制 
5、单个item最大数据是1MB,超过1MB数据不予存储,常量POWER_BLOCK 1048576进行控制
6、memcached是一种无阻塞的socket通信方式服务,基于libevent库,由于无阻塞通信,对内存读写速度非常之快
7、memcached支持C/C++、Perl、PHP、Python、Ruby、Java、C#、Postgres、Chicken Scheme、Lua、MySQL和Protocol等语言
  分布式编程(一)分布式缓存和存储_第2张图片

 

存储引擎
1、分布式文件系统
功能:提供存储文档、图片、音频Blob类数据;另外就是作为分布式表格系统的持久化层。
2、分布式键值系统
功能:提供key-value的形式散列存储,这种存储器没有表概念(可以在key上组合标记区分数据类型)
3、分布式表格系统
功能:提供表格存储模型,通过表格中制定的唯一标识列进行数据访问,整个表格在系统中有序存放
 
环境说明
1、阿里云高效云盘,实际运用中1W IOPS,游戏等数据改动频繁的应用可采用SSD云盘;
2、自研数据库,可能会遇到Linux系统文件句柄数的限制,需要自行修改;

应用实例
假设,网关节点和业务节点所操作的数据均来自于memcached,它们的状态将更少,我们期望如此。
分布式编程(一)分布式缓存和存储_第3张图片

1、实例一:
玩家装备强化->任务/成就达成->战力改变->场景广播效果->排行榜数据改变->数据落地;
网关节点投递消息至业务节点用户进程,用户进程获取MemCached装备数据,操作改变。
通知场景进程,和排行榜进程,以及任务触发观察者。
a、其中任务系统解耦设计可能致使再次从MemCached中读写一次任务进度。
b、存储系统会定时从MemCached中将数据持久化。

2、实例二:
玩家提交活动道具->包裹中消耗道具->活动系统验收->活动系统发奖->数据落地;
玩家节点投递消息至业务节点用户进程,用户进程获取MemCached包裹数据,操作改变。
MemCached读写活动数据,操作改变,活动系统定时持久化活动数据。

3、实例三:
活动结束->活动结算参与奖励->向玩家发奖->活动状态清理。
活动进程从MemCached中获取活动数据,结算奖励,改变用户的MemCached数据,
并清理MemCached中的用户状态。

你可能感兴趣的:(Erlang)