分阶段事件驱动架构 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. 一、linux安装mysql

    一.下载mysql免编译包: wget http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.33-linux-glibc2.5-x86_64.tar.g ...

  2. 废弃fastjson!大型项目迁移Gson保姆级攻略

    前言 大家好,又双叒叕见面了,我是天天放大家鸽子的蛮三刀. 在被大家取关之前,我立下一个"远大的理想",一定要在这周更新文章.现在看来,flag有用了... 本篇文章是我这一个多月 ...

  3. golang遍历时修改被遍历对象

    目录 前言 遍历切片 遍历map 总结 前言 很多时候需要将遍历对象中去掉某些元素,或者往遍历对象中添加元素,这时候就需要小心操作了. 对于go语言中的一些注意事项我做了总结和示例,留下点笔记. 遍历 ...

  4. mmall商城用户模块开发总结

    1.需要实现的功能介绍 注册 登录 用户名校验 忘记密码 提交问题答案 重置密码 获取用户信息 更新用户信息 退出登录 目标: 避免横向越权,纵向越权的安全漏洞 MD5明文加密级增加的salt值 Gu ...

  5. python列表字符串集合常用方法

    1.1 列表常用方法 # 1. append 用于在列表末尾追加新的对象a = [1,2,3]a.append(4) # the result : [1,2,3,4]​# 2. count方法统计某个 ...

  6. 【ORA】ORA-00030: User session ID does not exist.

    今天巡检,查询锁相关的情况的时候,确认业务后,准备将锁干掉,但是干掉的时候报了一个错误,ORA-00030 发现回话不存在,我以为pmon进程已经将锁进程kill掉了,就再次查看,发现,还是存在 这个 ...

  7. SQL语句中 ` 的作用

    SQL语句中 ` 的作用 做攻防世界WEB区 supersqli 题目,在构建SQL语句时,遇到SQL语句中有 ` 时可以解析,没有则不能. 查阅资料得知,` 通常用来说明其中的内容是数据库名.表名. ...

  8. ctfshow——web_AK赛

    签到_观己 从题目描述中没发现什么有用的信息 发现文件包含 尝试使用PHP伪协议执行命令,发现无法执行 尝试使用远程文件包含,发现也未开启 尝试使用日志注入 记录了UA值,抓包写入一句话木马 使用蚁剑 ...

  9. 基于 WebRTC 实现自定义编码分辨率发送

    2020年如果问什么技术领域最火?毫无疑问:音视频.2020年远程办公和在线教育的强势发展,都离不开音视频的身影,视频会议.在线教学.娱乐直播等都是音视频的典型应用场景. 更加丰富的使用场景更需要我们 ...

  10. PAT练习num1-害死人补偿命的3n+1猜想

    卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ( 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 年的世界 ...