cassandra权威指南读书笔记--Cassandra架构(3)
分阶段事件驱动架构 SEDA
SEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stage,不同资源消耗的Stage使用不同数量的线程来处理,Stage间使用事件驱动的异步通信模式。
更进一步,在每个Stage中可以动态配置自己的线程数,在超载时降级运行(如输出纯文字页面)或拒绝服务。(参考百度百科)
一般一些工作单元会在一个线程池中完成。不过cassandra使用SEDA,所以一个操作可能在一个线程池开始,然后把工作移交给别的线程池。移交给哪个线程是由阶段关联的线程池(实际上就是一个java.util.concurrent.Executor)来确定执行的,不是当前线程决定。
阶段是一个基本工作单元。每个阶段由不同的线程池处理,所以cassandra可以提供很大性能提升(独立线程池),更好的管理资源,不同操作可能是需要不同的资源(IO,CPU,网络IO等),所以线程池可以根据不同资源的可用性管理。
一个阶段包含:事件队列,事件处理器,关联的线程池。
阶段由控制器管理,确定如何调度分配线程。cassandra使用java.util.concurrent.ExecutorService实现这种并发模型。可以看org.apache.cassandra.concurrent.StageManager。常见阶段有:gossip,request,repair等等,nodetool tpstats都可以看到。
cassandra放宽了严格的SDEA,允许将多个阶段合到同一个线程池来提高吞吐量(因为有些阶段很短,不需要单独的线程池和事件队列。
管理器和服务
cassandra内部控制机制由一些类组成,很多都通过java管理扩展(JMX)提供的MBean来报告状态和指标,甚至可以配置和控制活动。
cassandra守护进程
org.apache.cassandra.service.CassandraDaemon接口表示在一个节点上运行的cassandra服务的生命周期,典型的生命周期操作:start,stop,activate,deactivate,destroy.
可以使用类org.apache.cassandra.service.EmbeddedCasssandraService通过程序创建一个内存cassandra实例。创建嵌入式实例可能对使用cassandra单元测试很有帮助。
存储引擎
主要由org.apache.cassandra.db包中的类组成。主入口是ColumnFamilyStore,管理表存储的所有方面,包括commitlog,memtable,SSTable和索引。3.0重写存储引擎,使得cassandra内存和磁盘上的数据表示和cql一致。还有对物化视图的支持。
存储服务
cassandra用一个服务包装了存储引擎,org.apache.cassandra.service.StorageService。包含节点的token,服务器由这个类的initServer方法调用启动,此时服务器会注册SDEA verbHandler,加载配置,向JMX服务器注册MBean。
存储代理
org.apache.cassandra.service.StorageProxy处理响应客户端请求。协调节点来存储获取数据,还有hint,还可以帮助管理轻量级事务。
消息服务
org.apache.cassandra.net.MessagingService的作用是创建socket listener来完成消息交换。这个节点的入站和出站消息都会通过这个服务。MessagingService.listen方法会创建一个线程,每个进入的连接都会使用org.apache.cassandra.net.IncomingTcpConnection进入ExecutorService线程池进行对消息反序列化,消息验证后在路由到合适的处理器处理。这个服务大量使用阶段,维护的线程池用MBean包装。
流管理器
Streaming是cassandra通过一个持久的TCP连接将SSTable文件的各部分从一个节点到另外一个节点的优化。只有SSTable传输(SSTable loader)的时候用这个流管理器。其他节点间的通信都是通过序列化消息实现的。org.apache.cassandra.streaming.StreamManager
CQL原生传输服务器
org.apache.cassandra.transport包中包含了cql Native Protocol(客户端用来与cassandra通信的二进制协议)的一些类,包括Server。会管理客户端到来的请求,将查询工作委托给StorageProxy.
system键空间不能修改。
cassandra权威指南读书笔记--Cassandra架构(3)的更多相关文章
- cassandra权威指南读书笔记--Cassandra架构(2)
环和令牌cassandra的数据管理是用一个环来表示.为环中的每个节点分配一or多个数据范围,用token描述.token由64位整数ID表示,范围-2^(63)~2^(63)-1.使用对分区键进行一 ...
- cassandra权威指南读书笔记--Cassandra架构(1)
结构 集群-->数据中心-->机架-->节点. cassandra尽可能将数据副本存在多个数据中心,然后读取(查询路由到)尽可能在本地数据中心. 为了去中心化和分区容错性,使用gos ...
- cassandra权威指南读书笔记--cassandra查询语言
cassandra使用一个特殊主键(复合键)表示宽行,宽行也叫分区.复合键由一个分区键和一组可选的集群列组成.分区键用于确定存储行的节点,分区键也可以包含多个列.集群键用于控制数据如何排序以及在分区中 ...
- cassandra权威指南读书笔记--cassandra概述
cassandra是一个开源的.分布式.去中心化.弹性可扩展.高可用.容错.可调一致性.面向行数据库,分布式设计基于Amazon Dynamo,数据模型基于Google BigTable.cassan ...
- cassandra权威指南读书笔记--安全
认证和授权driver,JMX和cassandra服务器支持SSL/TLS,cassandra节点间也支持SSL/TLS.密码认证器cassandra还支持自定义,可插拔的认证机制.默认的认证器:or ...
- cassandra权威指南读书笔记--客户端
DataStax驱动最成熟.默认,驱动程序会使用第一个连接的节点作为支持的版本协议.如果集群存在高低版本的节点(比如升级场景),如果驱动先连接不同不同版本的节点,可能会出现不兼容.驱动支持压缩客户端和 ...
- cassandra权威指南读书笔记--性能调优
cassandra自带测试工具cassandra-stress.nodetool proxyhistograms可以在多个节点运行,发现最慢的协调节点.nodetool tablehistograms ...
- cassandra权威指南读书笔记--监控&维护
cassandra SLF4J API记录日志,具体采用Logback实现.在终端启动cassandra时,可以向程序输入-f,就能在终端看到这个输出.Java Mangement Extension ...
- cassandra权威指南读书笔记--读写数据
写cassandra除了轻量级事务,不支持别的事务.cassandra是追加写,写的速度非常快.cassandra还有hint日志,这个数据库总是可写的,而且单个列的写操作是原子的.hint并不是一定 ...
随机推荐
- git基础-远程仓库的使用
远程仓库的使用 为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库. 远程仓库是指托管在因特网或其他网络中的你的项目的版本库. 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以 ...
- 感谢 Gridea,让我有动力写作
1. 真的要感谢 Gridea,让我对写作产生热忱.一直有在各大博客平台输出的习惯,但是都没有持续更新.有的平台广告太多,写不下去.有的平台排版复杂,写文章1个小时,排版要2个小时.所以后面换成了静态 ...
- 【项目实践】一文带你搞定Spring Security + JWT
以项目驱动学习,以实践检验真知 前言 关于认证和授权,R之前已经写了两篇文章: [项目实践]在用安全框架前,我想先让你手撸一个登陆认证 [项目实践]一文带你搞定页面权限.按钮权限以及数据权限 在这两篇 ...
- 关于.NET中的控制反转(三)- 依赖注入之 Autofac
一.Autofac简介 Autofac和其他容器的不同之处是它和C#语言的结合非常紧密,在使用过程中对你的应用的侵入性几乎为零,更容易与第三方的组件集成.Autofac的主要特性如下: 组件侵入性为零 ...
- 【JDBC核心】commons-dbutils
commons-dbutils 简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC 工具类库,它是对 JDBC 的简单封装,学习成本极低,并且使用 commons-d ...
- 【环境搭建】SSM 整合使用
SSM 整合使用 文章源码 搭建整合环境 整合说明 SSM 整合可以使用多种方式,但是选择 XML + 注解 的方式最为合适. 整合思路 搭建整合环境 Spring 环境搭建并测试 Spring 整合 ...
- 我们NetCore下日志存储设计
日志的分类 首先往大的来说,日志分2种 ①业务日志: 即业务系统需要查看的日志, 常见的比如谁什么时候修改了什么. ②参数日志: 一般是开发人员遇到问题的时候定位用的, 一般不需要再业务系统里展示. ...
- 一道有趣的golang排错题
很久没写博客了,不得不说go语言爱好者周刊是个宝贝,本来想随便看看打发时间的,没想到一下子给了我久违的灵感. go语言爱好者周刊78期出了一道非常有意思的题目. 我们来看看题目.先给出如下的代码: p ...
- 【高级排序算法】1、归并排序法 - Merge Sort
归并排序法 - Merge Sort 文章目录 归并排序法 - Merge Sort nlogn 比 n^2 快多少? 归并排序设计思想 时间.空间复杂度 归并排序图解 归并排序描述 归并排序小结 参 ...
- 【Docker】Failed to get D-Bus connection: Operation not permitted解决
------------------------------------------------------------------------------------------------- | ...