当Facebook创造的cassandra遇上饿了么

摘要

1、饿了么大数据为什么选择cassandra

2、 Cassandra的基本原理

3、饿了么cassandra实践

4、 Cassandra和大数据离线平台的结合

视频内容

Cassandra历史

Google的三大论文其中有一个叫BigTable,Amazon有一个kv存储叫Dynamo。Facebook根据Google和Amazon的这两个自己创造出了Cassandra。2008年,Facebook放弃了Cassandra,把它交给了Apache。

Cassandra概述

Cassandra最初源自Facebook,集合了Google BigTable面向列的特性和Amazon Dynamo分布式哈希(DHT)的P2P特性于一身,具有很高的性能、可扩展性、容错、部署简单等特点。

Cassandra架构关键字

1、Gossip 点对点通信协议,用于集群之间节点交换位置和状态信息。

2、Partitioner 决定如何在集群中的节点间分发数据,也就是哪个节点放止数据的第一个replica。

3、Replica Strategy 决定在哪些节点放置数据的其他replica。

4、Snitch 定义了复制策略用来放置replicas和路由请求所使用的拓扑信息。

Gossip-节点的通信

Cassandra使用点对点通信协议Gossip在集群中的节点间交换位置和状态信息。Gossip进程每秒运行一次,与最多3个其他节点交换信息,这样所有的节点可很快的了解集群中其他节点信息。

1、种子节点。它的作用就是让其它节点来认识到这个集群在哪里,如何与集群连上关系。

2、Cassandra故障探测。Cassandra协议就是每个进程每秒最多会和三个其它节点做交互,判断它是否存活。

3、Cassandra故障修复。当一个节点挂了,但不代表它从这个集群中移走了,而只是暂时offline。当它再拉起来的时候,Gossip系统也能探测到它活了,并加入到集群中去。

Partitioner

Partitioner定义了数据如何在集群中的节点分布,哪个节点应该存放数据的第一份拷贝。基本上,Partitioner就是一个计算分区键token的哈希函数。

Partitioner中分为三大类。Partition Key 决定数据在Cassandra哪个节点上,Clustering Key 用于在各个分区内的排序,Primary Key 主键决定数据行的唯一性。

Replica Strategy

Cassandra在多个节点中存放replicas以保证可靠性和容错性。Replica Strategy决定放置replicas的节点,replicas的数目由复制因子确定,比如通常设置3表示每行数据有三份拷贝,每份数据存储在不同的节点。

当前可用的两种复制策略:

1、SimpleStrategy 仅用于但数据中心

CREATEKEYSPACE dw WITH replication = {'class':'SimpleStrategy', ‘replication_factor': 3}

2、NetworkTopologyStrategy 用于多IDC场景,可指定每个IDC有多少replicas

CREATEKEYSPACE dw WITH replication = {'class':'NetworkTopologyStrategy', 'DC-SH' : 2,'DC-BG' : 2}

Cassandra主要的数据结构

Memtable:它的本质是java里的跳表。

SSTable:最终存放的数据落地在磁盘的结构。

BloomFilter:高效地用最少的内存来判断数据是否存在。

CQL语言

CQL类似于SQL,支持DDL操作create table,drop table等,也支持DML操作INSERT、UPDATE、DELETE等等,通过select进行数据查询。

Cassandra一致性保障

在Cassandra中,有三重策略来保障Cassandra达到最终的一致性。

HintedHandoff:如果写了三个副本,只要有两个响应就可以。但是假如有一个节点挂了,Cassandra可以把本来要写到这个节点的数据写到另一个节点上。等挂了的节点拉起来之后,再把这个数据写回去,以保证三份数据同时写成功了。

ReadRepair:当一个读的请求发起之后,可以触发后台一个线程检查这三个数据的副本数据是否一致,如果不一致再进行修复。

Anti-EntropyNode Repair:主动把自己节点的key和其它节点的key进行比较,不一致的进行修复。

为什么选择Cassandra

运维成本:部署简单,只需要运维一个组件,监控成本低。

开发成本:类似sql的cql语言,对开发友好,低成本上手;DataStax公司提供的强大的java client;可调节的数据一致性;异步接口。

适用场景:Cassandra自带多idc策略、我们的业务需求。

Cassandra在饿了么的实践

生产应用(用户画像、历时订单、dt.api)、Client选择、运维和监控以及性能调优。

生产应用-用户画像

我们的用户画像用了5 个节点,超过2.6亿的饿了么用户数据,100+的用户属性,每天有5000万+数据更新,Scheme变更频繁(加字段),99%的读延时能控制在3-5ms之内。

生产应用-历史订单

我们采用了Sata盘集群,它对我们的响应时间并不是要求很高,平均响应时间小于80ms。这个集群大概有15个节点。

生产应用-dt.api

Dt.api是一个饿了么大数据平台自助化数据接口平台。用户在这个平台上只要写出一个SQL,它就会自动生成一个HTTP或SOA接口。当前这里有50+ 基于Cassandra的CQL API生成。

运维和监控

ansible自动部署:Cassandra的端口必须绑定到内网IP,用ansible进行自动部署特别方便。

Zabbix监控:饿了么大数据平台的监控主要是Zabbix。

性能调优-集群调优化

集群参数设置

1、memtable_allocation_type

heap_buffers:on heap nio buffer

offheap_buffers:off heap(direct) nio buffers

offheap_objects:native memory

2、concurrent_write和concurrent_read

3、Sstable compression

4、Concurrent compactor

5、memtable_flush_writers

6、Netty io线程数目

JVM调优化

1、堆的大小选择

2、取消偏向锁

Scheme设计优化

1、Primary key设计,避免热点

2、关闭读修复

3、Compaction strategy策略选择

4、Ttl设置

5、Row cache启用

大数据离线平台和Cassandra的整合

两大数据推送Cassandra工具

HiveIntegrate Cassandra Native Protocol:

1.Hive外部表映射到Cassandra表

2.InsertInto HiveTable Select 简单快捷

3.跨机房推送限流/限速

4.异步写

HiveIntegrate Cassandra Bulkload:

1.hive生成Cassandra底层的SSTable文件直接load到Cassandra。

2.适用于数据快速初始化。

3.需要控制生成的SSTable大小避免Compact耗时多久。

我今天的分享就到这里,谢谢大家!

原文发布于微信公众号 - IT大咖说(itdakashuo)

原文发表时间:2017-10-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

一则报警信息所折射出来的诸多问题(r9笔记第14天)

在主备库环境中,如果出现数据文件级的一些不一致,后期修复会很麻烦,所以这种情况可以提前规避,减少后期的隐患,我定制了一个数据库监控选项,即数据文件状态的检查。 ...

3548
来自专栏逸鹏说道

SQL Server安全(3/11):主体和安全对象(Principals and Securables)

在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切。但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念。这篇...

2764
来自专栏微信终端开发团队的专栏

微信 iOS SQLite 源码优化实践

本文将分享在 SQLite 源码上进行的多线程并发、I/O性能优化等,并介绍优化相关的 SQLite 原理。

5170
来自专栏CDN及云技术分享

原来你是这样的http2

目前HTTP/2.0(简称h2)已经在广泛使用(截止2018年8月根据Alexa流行度排名的头部1千万网站中,h2占比约29%,https://w3techs....

72113
来自专栏IT大咖说

Sharding-JDBC:分布式微服务数据库访问框架的设计与实现

摘要 当当架构部总监分享分布式微服务数据库访问框架Sharding-JDBC的设计与实现。 ? 互联网领域数据库面临的问题 我们在互联网领域数据库面临的问题主要...

9457
来自专栏漫漫全栈路

ASP.NET MVC学习笔记01初始

技术栈跳来跳去,最后还是选择回归最初。从Asp.Net的WebFrom到PHP到Python的Django,最后还时回到了最熟悉的.net平台。三层之前只做过...

3706
来自专栏FreeBuf

一则邮件攻击样本分析分享

通过邮件投递病毒文件是网络攻击常用的一种方式,因此防御邮件攻击是每个安全团队都需要重点考虑的内容。中兴通讯每天都会收到数万封外部邮件,为了及时检测每封邮件是否含...

1162
来自专栏CSDN技术头条

【问底】许鹏:使用Spark+Cassandra打造高性能数据分析平台(一)

【导读】笔者(许鹏)看Spark源码的时间不长,记笔记的初衷只是为了不至于日后遗忘。在源码阅读的过程中秉持着一种非常简单的思维模式,就是努力去寻找一条贯穿全局的...

3198
来自专栏北京马哥教育

《大型网站技术架构》读书笔记之六:永无止境之网站的伸缩性架构

一、网站架构的伸缩性设计 01、不同功能进行物理分离实现伸缩 (1)纵向分离:将业务处理流程上得不同部分分离部署,实现系统的伸缩性; ? (2)横向分离:将不同...

3449
来自专栏张善友的专栏

zookeeper 分布式锁服务

分布式锁服务在大家的项目中或许用的不多,因为大家都把排他放在数据库那一层来挡。当大量的行锁、表锁、事务充斥着数据库的时候。一般web应用很多的瓶颈都在数据库上,...

2218

扫码关注云+社区

领取腾讯云代金券