cassandra 学习笔记(2)
为什么80%的码农都做不了架构师?>>>
源码中对节点的如下称呼应该是等价的: end point , node , machine , datacenter , host。
cassandra节点的启动main()在类org.apache.cassandra.service.CassandraDaemon中,细节在 setup()中。过程中会start一个CassandraServer的实例peerStorageServer。 peerStorageServer在建立的时候,内部会实例化一个 StorageService实例,在该StorageService实例初始化的过程中,该节点的所有功能服务会被配置激活,这些操作是在 StorageService的默认构造器中完成的。
StorageService的构造器中大致做了如下几件事情:
1)生成一个storageLoadBalancer_s实例负责负载均衡,现在还没有明白原理。
2)生成一个endPointSnitch_实例,这个提供了对两个end_point进行比较的一个途径,基本上是判断两个end_point是不是同一个ip等
3)启动了MessagingService,并且注册了一些handler实例。MessagingService是负责该end_point与其他end_point进行通信的。两个节点间通信的内容被封装在一个Message的实例里面。
比如,如果节点A想向节点B获得一定的数据,那么A需要通过自己的MessageService向节点B发送一个Message实例,这个实例里面包含了如下信息:这个请求的类型(属于什么stage) ,这个请求要调用的B的哪个handler来处理,以及这个请求的其他具体内容。当节点B接收到节点A发送过来的Message实例后,会将根据这个 Message实例内部指定的handler信息,将该实例转发相应的handler去处理。当然这样做的前提是这个指定的handler已经在B节点注册了,而这个注册过程就是在StorageService启动的时候完成的。
4)consistencyManager_:还没明白什么意思。
5)StageManager的配置:
这个stage的概念来自于“SEDA“( staged event driven architecture)中的”S”,参考http://www.eecs.harvard.edu/~mdw/papers/seda-sosp01.pdf。
大致意思好像是可以将一个工作流程分为若干个阶段(stage),然后给各个stage动态的分配线程资源来处理stage内定义的逻辑。stage和 stage之间的通信是通过任务队列完成的,当一个stage的逻辑执行完后,如果需要调用下一个stage来继续执行,那么就往下一个stage保有的任务队列中写入必要的任务信息。
这样的SEDA结构的好处是:在实际的运行当中各个stage的忙闲程度是不一样的,可以通过将比较闲的stage上的线程资源分配给同期比较忙的stage来实现效率上的提高。
在cassandra中,还是以3)中例子说明,在A节点发往B节点的Message实例中有一个“这个请求的类型”的信息,这个信息保存在 Message实例内header实例的type_上,是一个字符串。这个字符串标明了当MessageService获取了Message实例后究竟由那个 stage来负责执行指定的handler对象。因为handler对象只是定义了对Message的处理逻辑,所以需要stage里面的线程来对其进行执行。
当前的stage只有4种,依次在StroageService的 /* All stage identifiers */标注下被定义,分别负责不同的任务,“ROW-READ-STAGE”是负责读取的,其他的含义还没有完全搞清楚,大概是负责修改,数据压缩和 http后台页面信息接收的。
StageManager部分的源码还没哟看到,可能是负责各个stage间线程调度的吧。
6)设置nodepicker_定义了当前节点对周围节点的查询策略,具体的还不清楚
转:http://blog.csdn.net/pakly_9527/archive/2009/08/13/4441540.aspx
转载于:https://my.oschina.net/javagg/blog/3232
cassandra 学习笔记(2)相关推荐
- cassandra学习笔记四
现在开始深入了解一下cassandra的数据模型.cassandra是一种NoSQL数据库,NoSQL并不是指没有SQL语句,而是指NoRelational.cassandra的数据模型结合了Dyna ...
- cassandra学习笔记五
Cassandra集群没有中心节点,各个节点的地位完全相同,它们通过一种叫做gossip的协议维护集群的状态.通过gossip,每个节点都能知道集群中包含哪些节点,以及这些节点的状态,这使得Cassa ...
- cassandra学习笔记三
这里我们开始使用JAVA来操作cassandra数据库,而不仅限于客户端操作.关于客户端cassandra-cli和nodetool的操作,在命令行使用help命令可以获取很多帮助. 我使用的是thr ...
- cassandra学习笔记二
这里,我们开始搭建一个cassandra集群. 一.了解token token是cassandra里相当重要的一个概念,它是cassandra用来平衡集群内各节点负载的一个属性.cassandra里有 ...
- cassandra学习笔记一
最近尝试搭建一个云存储平台,在不断的对比之后,决定采用cassandra作为底层数据库.这里记录cassandra的学习过程. Cassandra是一个混合型的非关系的数据库,主要特性是分布式.基于C ...
- cassandra 学习笔记
1). cassandra任何一个节点都可以被客户端访问. 2). 对cassandra某个节点的访问是通过调用org.apache.cassandra.service.Cassandra的内部类Cl ...
- Spring Boot学习笔记-基础(2)
Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...
- Kafka学习笔记(3)----Kafka的数据复制(Replica)与Failover
1. CAP理论 1.1 Cosistency(一致性) 通过某个节点的写操作结果对后面通过其他节点的读操作可见. 如果更新数据后,并发访问的情况下可立即感知该更新,称为强一致性 如果允许之后部分或全 ...
- Python3 爬虫学习笔记 C11【数据储存系列 — MongoDB】
Python3 爬虫学习笔记第十一章 -- [数据储存系列 - MongoDB] 文章目录 [11.1]关于 MongoDB [11.2]MongoDB 基本操作语句 [11.3]连接 MongoDB ...
- 大数据学习笔记:Hadoop生态系统
文章目录 一.Hadoop是什么 二.Hadoop生态系统图 三.Hadoop生态圈常用组件 (一)Hadoop (二)HDFS (三)MapReduce (四)Hive (五)Hbase (六)Zo ...
最新文章
- CentOS 8中安装Docker出现和Podman冲突
- 下列哪个不是目前python里的内置模块-不吹不擂,你想要的Python面试都在这里了【315+道题】...
- hdu 4607 Park Visit 求树的直径
- Python之超级好用的8个VS Code扩展
- 【坐在马桶上看算法】算法10:二叉树
- SmartSql 动态代理仓储
- [jQuery] jQuery是如何链式调用的?
- input中radio对象的使用、获取方法
- C++编译器默默编写并调用哪些函数
- mongoose实现批量删除和多id查询的api/方法
- .Net Core之MVC项目的简单应用
- 完全卸载mysql数据库
- Visio绘图怎么对齐连接点
- Ubuntu ADB 环境变量配置
- QQ伤感日志_你教会了我爱,让我懂得了爱
- android-自定义ImageView-圆形图片绘制代码详解
- 【跨域】Access-Control-Allow-Origin 简单介绍
- 企业招聘UI设计常见面试题分享
- 苹果手机投影_手机和投影同时用流量能否投屏
- 跳跳虎辅助免费体验版