分阶段事件驱动架构 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)的更多相关文章

  1. cassandra权威指南读书笔记--Cassandra架构(2)

    环和令牌cassandra的数据管理是用一个环来表示.为环中的每个节点分配一or多个数据范围,用token描述.token由64位整数ID表示,范围-2^(63)~2^(63)-1.使用对分区键进行一 ...

  2. cassandra权威指南读书笔记--Cassandra架构(1)

    结构 集群-->数据中心-->机架-->节点. cassandra尽可能将数据副本存在多个数据中心,然后读取(查询路由到)尽可能在本地数据中心. 为了去中心化和分区容错性,使用gos ...

  3. cassandra权威指南读书笔记--cassandra查询语言

    cassandra使用一个特殊主键(复合键)表示宽行,宽行也叫分区.复合键由一个分区键和一组可选的集群列组成.分区键用于确定存储行的节点,分区键也可以包含多个列.集群键用于控制数据如何排序以及在分区中 ...

  4. cassandra权威指南读书笔记--cassandra概述

    cassandra是一个开源的.分布式.去中心化.弹性可扩展.高可用.容错.可调一致性.面向行数据库,分布式设计基于Amazon Dynamo,数据模型基于Google BigTable.cassan ...

  5. cassandra权威指南读书笔记--安全

    认证和授权driver,JMX和cassandra服务器支持SSL/TLS,cassandra节点间也支持SSL/TLS.密码认证器cassandra还支持自定义,可插拔的认证机制.默认的认证器:or ...

  6. cassandra权威指南读书笔记--客户端

    DataStax驱动最成熟.默认,驱动程序会使用第一个连接的节点作为支持的版本协议.如果集群存在高低版本的节点(比如升级场景),如果驱动先连接不同不同版本的节点,可能会出现不兼容.驱动支持压缩客户端和 ...

  7. cassandra权威指南读书笔记--性能调优

    cassandra自带测试工具cassandra-stress.nodetool proxyhistograms可以在多个节点运行,发现最慢的协调节点.nodetool tablehistograms ...

  8. cassandra权威指南读书笔记--监控&维护

    cassandra SLF4J API记录日志,具体采用Logback实现.在终端启动cassandra时,可以向程序输入-f,就能在终端看到这个输出.Java Mangement Extension ...

  9. cassandra权威指南读书笔记--读写数据

    写cassandra除了轻量级事务,不支持别的事务.cassandra是追加写,写的速度非常快.cassandra还有hint日志,这个数据库总是可写的,而且单个列的写操作是原子的.hint并不是一定 ...

随机推荐

  1. i5 11300h和R5 5600H 的区别 哪个好

    酷睿i5-11300H配置为4个内核及8个线程,具备8MB的L3缓存和5MB的L2缓存,基础频率3.10GHz最高睿频4.40GHz.Intel的显卡将集成Xe GPU内核.至于TDP,i5-1130 ...

  2. ios iphone 崩溃字符记录

    如题,近日iphone被爆出有一串字符可引发系统错误 (بٍٍٍٍََُُُِّّّْرٍٍٍٍََُُِِّّّْآٍٍٍَُّ بٍٍٍٍََُُُِّّّْرٍٍٍٍََُُِِّّّْآٍٍٍ ...

  3. Solon rpc 之 SocketD 协议 - 消息应答模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

  4. mysql 应用 持续更新2 转载

    作者:彼岸Queen旅行链接:https://www.zhihu.com/question/27334963/answer/266624031来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...

  5. 【剑指 Offer】06.从尾到头打印链表

    题目描述 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10 ...

  6. DG主备切换遇到not allwod或者RESOLVABLE GAP解决办法

    今天做switchover,环境是11.2.0.3+OEL5.7,开始时主备库状态都是正常的,符合直接切换条件: 主库: SQL> select open_mode,database_role, ...

  7. 【RAC】11gRAC 搭建(VMware+裸设备)

    安装环境与网络规划 安装环境 主机操作系统:windows 7虚拟机VMware12:两台Oracle Linux R6 U5 x86_64 Oracle Database software: Ora ...

  8. oracle ORA-00060死锁查询、表空间扩容

    --查看被锁住的表 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects ...

  9. VBA调用数独求解器

    我开发了一个用于求解数独的dll文件,只需要双击一下注册表文件,就可以在VBA中调用这个功能了.具体步骤如下: 下载:https://share.weiyun.com/5dpcNqx 找到ExcelS ...

  10. JDBC代码的优化

    JDBC代码简化以及PreparedStatement和Statement接口 抽取 JDBC的Bug sql语句可以拼接导致登录功能中如果用户名或者密码中出现'or'2'='2则一定可以登录的bug ...