Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
VinyStorage
周迁@葡萄藤
网络游戏数据存储的终极解决方案
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
VinyStorage的 高性能极
高性能
•比 Memcached 快上千倍
•比 MySQL 快十万倍
• 数据 份实时 热备
•每服 器支持十万务 IOPS
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
网游来 ,好的存 怎 ?对 说 储层应该 样
• 数据实时 访问
• 安全性( safety)
• 健壮性
• 分布式
• API易用性
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
网游来 ,好的存 怎 ?对 说 储层应该 样
• 数据 ? 实时 访问 差
• 安全性? 好
• 健壮性? 差
• 分布式? 复杂 (分 分表)库
• API易用性? 差
网页架构MYSQL/CDB
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
网游来 ,好的存 怎 ?对 说 储层应该 样
• 数据 ? 实时 访问 以内存 代价为
• 安全性? 一般 (双机热备 )
• 健壮性? 好
• 分布式? 复杂 (需 移数据迁 )
• API易用性? 一般
网页架构REDIS/CMEM
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
网游来 ,好的存 怎 ?对 说 储层应该 样
• 数据 ? 实时 访问 好
• 安全性? 差
• 健壮性? 一般
• 分布式? 不支持
• API 易用性? 一般
网游架构梦幻西游
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
网游来 ,好的存 怎 ?对 说 储层应该 样
• 数据 ? 实时 访问
• 安全性?
• 健壮性?
• 分布式?
• API 易用性?
viny-storge
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
viny-storage
• key-value
• 持久化• 游 定制为 戏
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
viny-storage
底 技 层 术ScalaJava NIO.2Commons-continuations https://github.com/Atry/commons-continuations
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
viny-storage
数据实时 访问区分冷 数据热数据以内存 中心 以持久化的日志为 辅 不是持久化的数据 以内存 存库辅 缓
与 同 程业务逻辑 进 90% 以上数据 操作是同 程的内存操作库 进
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
viny-storage
健壮性KEY,VALUE 均静态检查
KEYtrait Accessor[Value] extends Serializable { def read(inputStream: InputStream): Value def newInstance: Value def write(outputStream: OutputStream, value: Value); def key: Array[Byte]}
VALUEmessage Player { required string nickname = 1; required bool is_male = 2 [default = false];}
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
viny-storage
API 易用性 Accessor final case class Player(id: UserId) extends BuilderAccessor[
Storage.Player, Storage.Player.Builder] {
override final def key: Array[Byte] = {
(id.toHexString + ".Player").getBytes
}
}
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
viny-storage
API 易用性Command final case object GetPlayerCommand extends Command[Storage.Player.Builder, Storage.Player] { def apply(origin: Storage.Player.Builder): Storage.Player = { origin.clone.build } }
final case class UpdateSleepTimeCommand(sleepTime: Long) extends Command[Storage.Player.Builder, Unit] { override def apply(origin: Storage.Player.Builder): Unit = { origin.setSleepTime(sleepTime) } }
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
viny-storage
API 易用性API
open,release,add,delete,touch,read,update
flushAll
合操作组 (otrr,atur,otur)
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
viny-storage
安全性 写日志实时 ( 不包含 操作读 )
日志内容为 command, 可根据 command 恢 数复据
独 程, 序写单 线 顺提供日志 看和数据恢 工具查 复
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
viny-storage
分布式LocalStorageVspServerVspClient
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
网游来 ,好的存 怎 ?对 说 储层应该 样
viny-storage
• 数据 ?实时 访问
• 安全性?
• 健壮性?
• 分布式?
• API易用性?
Copyright © 2013 深圳市葡萄藤网络科技有限公司 版权所有
Thanks!