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并不是一定 ...
随机推荐
- Kubernetes官方java客户端之七:patch操作
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Linux下Oracle 11G XE 安装笔记
操作系统 [oracle@RAC02 ~]$ lsb_release -aLSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:cor ...
- Petalinux和Vivado的安装
Petalinux和Vivado的安装 背景 我是搞软件的, FPGA这块不太了解.由于机缘巧合,最近有接触到这块的开发.所以先挖一坑. 先声明我不是专业搞这块的,所以对这块的内容理解可能会有偏差,以 ...
- uber_go_guide解析(三)(规范)
前言 一主要讲的是容易忽略的错误,可能在build时都不会体现出来但是在使用时出现问题 二主要讲的是一些可以提高代码效率的用法 本篇则讲解一些规范,不是强制的但是根据规范会提高代码的可读性, 减少BU ...
- MongoDB Sharding(二) -- 搭建分片集群
在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...
- wpf 中 Ellipse 对象对动画性能的影响
vs2019 .NetFramework 4.8 win10-64 1909 接手一个wpf项目,某窗口中包含大量的 Shape 对象(线,矩形,圆形等). 这些内容要匀速的向左平移,类似于游戏&qu ...
- linux最大打开文件句柄数
linux最大打开文件句柄数,即打开文件数最大限制,就是规定的单个进程能够打开的最大文件句柄数量(Socket连接也算在里面,默认大小1024) liunx中文件句柄有两个限制,一种是用户级的,一种是 ...
- ECC 6 debuging中create points
2013-12-07 今天无意中,发现,在ECC6中debug的时候,创建动态断点,对于command中的delete from语句居然无效,唉 虽然设置了DELETE 和DELETE FROM两个动 ...
- [java]文件上传下载删除与图片预览
图片预览 @GetMapping("/image") @ResponseBody public Result image(@RequestParam("imageName ...
- USB充电限流芯片,输出短路关闭,过压关闭
PW1503,PW1502是超低RDS(ON)开关,具有可编程的电流限制,以保护电源源于过电流和短路保护.它具有超温保护以及反向闭锁功能. PW1503,PW1502采用薄型(1毫米)5针薄型SOT2 ...