Cassandra的一致性

Download Report

Transcript Cassandra的一致性

Cassandra应用案例与模型设计
张月@ChinaCache
今天分享内容
数据模型
Cassandra
现状
案例
Cassandra
架构
一句话描述Cassandra
“它是一个开源的、分布式、无中心、支持水平
扩展、高可用的key-value类型NoSQL数据库”
Cassandra vs 关系型数据库
Cassandra
关系型数据库
节点水平扩展
Yes
No
高可用性
Yes
No
查询方式
1. CQL(类SQL语言)
2. API,或第三方上层类库
SQL
一致性
可调节一致性
强一致性
事务支持
1.X 支持行级别事务
2.X 支持轻量级事务处理机制
Yes
Cassandra vs Hbase
Cassandra
Hbase
节点水平扩展
Yes
Yes
高可用性
Yes
No
文件系统
本地磁盘系统
HDFS
一致性
可调节一致性
强一致性
事务支持
1.X 支持行级别事务
0.94之前行级事务
2.X 支持轻量级事务处理机制 0.94(含)之后完整事务支持
运维开发成本
低
高
设备投入
低
高
读写性能(详见后)
很好
好
MapReduce
并行计算
Yes
Yes
Cassandra开发者与Hbase开发者
谁在使用Cassandra?
数据库排名(来自国外权威机构DBEngine发布)
Cassandra的开源与商业
DevCenter
OpsCenter
DataStax Enterprise
Cassandra版本选择
 Apache Cassandra,目前最新版2.0
 DataStax Community Edition(基于Apache Cassandra,推荐使用)
– 支持yum、rpm快速安装
– yum安装升级方便
– 目录环境自动配置
– 方便与OpsCenter结合
CQL开发工具——DevCenter
运维工具——OpsCenter
系统架构
BigTable
Dynamo['daɪnəmo]
+
关于Dynamo结构
 无中心,所以无单点问题
 P2P协议 Gossip
Cassandra副本策略
SimpleStrategy:单数据中心
NetworkTopologyStrategy:多数据中心
Cassandra的一致性
 什么叫数据库一致性?读操作一定会返回最新写入的结果。
 Cassandra是最终一致性(弱一致性):成功写入后,读取的并不一定是最
新数据,但过一段时间(毫秒级别,跨机房时间会更长)所有副本才会达
成一致。
 Cassandra最终一致性原因:优化写入性能,支持ONE、Qurum、ALL等
 Cassandra支持一致性调节:当要求成功写入节点数与副本数一致时,即
ALL时,认为是强一致性
CAP理论
 CAP理论指出在一个分布式系统中,你只能强化其中两个方面
– Consistent:一致性,每次读取都是最新的数据
– Available:可用性,客户端总是可以读写数据
– Partition Tolerant:分区耐受性,数据库分散到多台机器,即使某台机器故
障,也可以提供服务
Cassandra看起来不错,但国内为什么很少人使用?
国内缺少大公司推广
Facebook创作了cassandra,而后又放弃了它
Digg 技术VP因为使用cassandra导致新系统不稳定而离职
Twitter放弃使用Cassandra存储tweet
So What?
2010年的事儿过去了,Cassandra的今天几何?!
应用案例
Cassandra在国内使用情况
奇虎360
– 360云盘、在线收藏夹、手机号码、短信备份、图片存储
– 应用规模:2012年底cassandra节点超1500台,单集群最大150台
新蛋
– 商品数据、推荐数据
– 拥有几百台个节点,跨机房部署
Facebook移动开发后端服务——Parse
简介:Parse为移动应用开发者提供后端服务,它
让开发人员只关注应用本身,而非数据存储,服
务器管理等其它事情
Parse目前有12个Cassandra节点,用于其数据分
析产品,Parse看中Cassandra提供的高效写入与
高可用能力。
参考: http://tinyurl.com/ne9su3p
Amazon最大云服务客户——Netflix
简介:Netflix是在线DVD和蓝光电影服务商,是
Amazon云计算服务最大的客户
Netflix的Cassandra节点部署在Amazon EC2上。
因为Neflix是一家国际化公司,所以它很注重
Cassandra提供的多机房功能。Cassandra为其提
供:客户信息、订阅信息、影片信息、监控统计
等全站数据存储服务。同时其BI部门通过Hadoop
进行数据挖掘来提升用户体验。
2012年3月,官方数据:30个集群,472个节点
参考: http://tinyurl.com/prcewg6
Facebook Instagram
简介:Instagram被Facebook以10亿美元收购,
它是一个免费提供在线图片及短视频分享的社交
应用。 Instagram目前拥有1.5亿用户
案例:其应用Cassandra存储安全审计信息、对抗
垃圾邮件、寻找滥用用户等。这些服务之前由
redis提供。
规模:redis集群从32个节点迁移到12节点
Cassandra集群,节省2/3硬件成本,运维成本更
低了,而且不必受制于内存
参考: http://tinyurl.com/ku2jnyy
全球时尚分享网站 —— Fashiolista
Fashiolista通过比较HBase、DynamoDB,最终选用
Cassandra2.0替换原有redis架构
参考: 2013年11月 http://tinyurl.com/ks38ek7
俄国最大社交网站 Ok.ru 选取Cassandra作为主要存储
Like! Button
48 nodes with over 70 Billion likes
1 Million ops/sec.
每秒100万次请求
23个集群、370个节点
社交图
70 nodes
Message
96 nodes
>200 Billion messages
参考: 2013年11月 http://tinyurl.com/ks38ek7
Cassandra不适合干什么?
 复杂关系模型
 对事务有严格要求(2.0才提供简单的事务支持,解决Race Condition)
 单次请求需求扫描大量column,而且跨多个rowkey
 消息队列系统
性能评测
一份NoSQL性能测试报告
 2013年2月,DataStax公司委托开源数据库咨询公司End Point Corporation
公司评测Cassandra、MongoDB、Hbase
 实验基于Amazon Web Services(AWS) EC2
 软件版本:
– Cassandra版本1.1.6
– Hadoop版本1.1.1
– Hbase版本0.94.3
 测试单元:每行20个column
 其它详见测试白皮书:
– http://blog.endpoint.com/2013/03/nosql-benchmark-of-cassandrahbase.html
OPS
写多场景测试
节点数
OPS
读多场景测试
节点数
Netflix云测试(2011年11月)
 基于AWS
 结果显示性能与节点数呈线性增长
参考:http://tinyurl.com/3ogo79c
Data Model
数据建模
 rowkey可以使用一致性Hash和全局有序两种分布方式,默认为一致性Hash
 一个rowkey的数据会完整存储在一个节点
 rowkey关联的column(其它NoSQL也叫cell、field)是根据column name
有序存储的,所以可以有序读取
 一个rowkey可以最多拥有20亿个column
 rowkey对应的column是可以动态添加的
 column value 可以为空
 大量反范式设计(优化读)
 Cassandra的SQL叫CQL
常用设计——简单wide row模型
模型描述:在社交网站中通过用户名查看该用户所有朋友
CREATE TABLE friends (
user_name text ,
friend_name text,
PRIMARY KEY (user_name ,friend_name)
);
insert into friends (user_name, friend_name) values('涡旋鸣人','小樱');
insert into friends (user_name, friend_name) values('涡旋鸣人','凯老师');
……
insert into friends (user_name, friend_name) values('卡卡西','带土');
insert into friends (user_name, friend_name) values('卡卡西','琳');
insert into friends (user_name, friend_name) values('卡卡西','涡旋鸣人');
存储结构比较
RDBMS(通过Many-To-Many关系表实现)
user_name
friend_name
涡旋鸣人
小樱
涡旋鸣人
凯老师
卡卡西
涡旋鸣人
卡卡西
琳
……
…..
Cassandra(通过wide row 实现)
常用设计——时间序列( time series )实现
功能描述:存储、查询前端Web服务器每个五分钟点流量信息
CREATE TABLE device_traffic (
access_date text,
device_id text,
hour_min text,
复合主键
traffice bigint,
PRIMARY KEY ((access_date, device_id ), hour_min )
);
Insert ('20131122','CNC-BJ-4577', '05:10', 14124444)
Insert ('20131122','CNC-BJ-4577', '01:55', 444555666)
Insert ('20131122','CNC-BJ-4577', '11:45', 333552455523)
Insert ('20131122','CNC-BJ-4577', '20:37', 9967677)
Insert ('20131122','TEL-SH-8888', '12:58', 234233)
………
 hour_min为column字段,其将按照自然排序存储到磁盘,方便按顺序(支
持反向)查找
常用设计——利用数据反范式化优化读
 基本信息表:用户表、商品表
 业务要求:查询用户喜爱的商品和商品被哪些用户喜爱
 User_by_item中的user name信息和item_by_user中的商品名称都是反范
式化的(De-normalize)
其它资料
 Cassandra数据模型设计最佳实践(上部)
www.infoq.com/cn/articles/best-practice-of-cassandra-data-model-design
 Cassandra数据模型设计最佳实践(下部)
www.infoq.com/cn/articles/best-practices-cassandra-data-model-design-part2
 Cassandra学习指南(资料整理汇总)
http://heipark.iteye.com/blog/1902918
 planet cassandra官方博客(大量应用案例)
http://planetcassandra.org/blog
Q&A
我的技术博客
heipark.iteye.com