分阶段事件驱动架构 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. 风炫安全Web安全学习第十节课 数字型的Sql注入

    数字型的Sql注入 风炫安全Web安全学习第十一节课 字符型和搜索型的sql注入 风炫安全Web安全学习第十二节课 mysql报错函数注入 风炫安全Web安全学习第十三节课 CUD类型的sql注入 风 ...

  2. Dubbo 就是靠它崭露头角!(身为开源框架很重要的一点)

    Hola,我是 yes. 经过了 RPC 核心和 Dubbo 微内核两篇文章后,今天终于要稍稍深入一波 Dubbo 了. 作为一个通用的 RPC 框架,性能是很重要的一环,而易用性和扩展性也极为重要. ...

  3. 当音乐学博士搞起编程,用一本书改变了Java世界!

    前言 说到Spring,也许现在的开发者们最先想到的是 Josh Long 超快的语速与现场代码能力,让很多Java开发者折服. 然后Spring的历史上,最传奇的还是要数其创始人:Rod Johns ...

  4. Appium 介绍及环境安装

    Appium是一个可用于测试iOS. Android操作系统和Windows桌面平台原生应用,移动网页应用和混合应用的自动化测试框架. 原生应用(Native App):用 android.iOS或者 ...

  5. 【Flutter】可滚动组件之CustomScrollView

    前言 CustomScrollView是可以使用Sliver来自定义滚动模型(效果)的组件.它可以包含多种滚动模型,举个例子,假设有一个页面,顶部需要一个GridView,底部需要一个ListView ...

  6. 剑指offer-56数组中数字出现的次数

    题目 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 输入:nums = [4,1,4,6] 输出 ...

  7. 二进制格式 PLY 模型文件的读取与渲染

    PLY 文件头部信息: ply format binary_little_endian 1.0 comment VCGLIB generated element vertex 13469 proper ...

  8. 【JS学习】数组过滤方法的使用filter

    前言:本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 使用效果: 可以返回参数函数为真的值 //情景:实现从stu数 ...

  9. 【Web】CSS中的浮动float

    CSS中的float 文章目录 CSS中的float 1.float浮动属性 2.float文字环绕图片 3.float浮动的真正原因以及副作用分析 4.清除浮动的四种解决方法 5.实际应用 导航效果 ...

  10. 什么是xss攻击

    概述: XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列 表,然后向联 ...