分阶段事件驱动架构 SEDASEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stage,不同资源消耗的Stage使用不同数量的线程来处理,Stage间使用事件驱动的异步通信模式.更进一步,在每个Stage中可以动态配置自己的线程数,在超载时降级运行(如输出纯文字页面)或拒绝服务.(参考百度百科)一般一些工作单元会在一个线程池中完成.不过cassandra使用SEDA,所以一个操作可能在一个线程池开始,然后把工作移交给别的线程池.移…
环和令牌cassandra的数据管理是用一个环来表示.为环中的每个节点分配一or多个数据范围,用token描述.token由64位整数ID表示,范围-2^(63)~2^(63)-1.使用对分区键进行一个hash来计算分区键落到哪个token中,进而决定分配到哪个节点.org.apache.cassandra.dht.Range类.虚拟节点(vnode),1.2版本引入,2.0默认开启.一个token就是对应一个vnode.将环分解为虚拟节点数的分段,可以让数据分布更均匀,在扩容,缩容,修复都会更…
结构 集群-->数据中心-->机架-->节点. cassandra尽可能将数据副本存在多个数据中心,然后读取(查询路由到)尽可能在本地数据中心. 为了去中心化和分区容错性,使用gossip协议.允许各个节点跟踪其他节点的状态信息. cassandra gossip详情可以参考: https://blog.csdn.net/weixin_38916872/article/details/81334014 https://zhaoyanblog.com/archives/1017.html…
cassandra使用一个特殊主键(复合键)表示宽行,宽行也叫分区.复合键由一个分区键和一组可选的集群列组成.分区键用于确定存储行的节点,分区键也可以包含多个列.集群键用于控制数据如何排序以及在分区中如何存储.cassandra还支持静态列,这些列用于存储不属于主键但是由一个分区中的所有行共享的那些数据.主键=分区键(用来确定分区)+集群键(确定一条记录在分区的位置) 集群-->keyspace-->表-->列可以只查询,更新部分列.不像关系型,不是定义的所有列都会占空间,如果这一列没有…
cassandra是一个开源的.分布式.去中心化.弹性可扩展.高可用.容错.可调一致性.面向行数据库,分布式设计基于Amazon Dynamo,数据模型基于Google BigTable.cassandra由facebook创建.AP数据库去中心化,P2P(peer to peer,对等网络)协议,使用Gossip来维护和同步一个存活或者死亡列表.弹性可扩展,水平扩展简单,自动数据迁移,几乎不影响现有访问.高可用.容错:不存在单点故障问题.扩容缩容更简单.防灾,天然支持多AZ(area zone…
认证和授权driver,JMX和cassandra服务器支持SSL/TLS,cassandra节点间也支持SSL/TLS.密码认证器cassandra还支持自定义,可插拔的认证机制.默认的认证器:org.apache.cassandra.auth.AllowAllAuthenticator密码认证:org.apache.cassandra.auth.PasswordAuthenticator配置在cassandra.yaml 的authenticator,cassandra 2.2及以后的版本,…
DataStax驱动最成熟.默认,驱动程序会使用第一个连接的节点作为支持的版本协议.如果集群存在高低版本的节点(比如升级场景),如果驱动先连接不同不同版本的节点,可能会出现不兼容.驱动支持压缩客户端和cassandra节点之间的消息.目前支持2种压缩算法:LZ4和SNAPPY.默认为NONE,即不压缩.可以调用Cluster.Bilduer.withCompression()操作来覆盖这个设置.认证和加密驱动可插拔实现com.datastax.driver.core.AuthProvider.比…
cassandra自带测试工具cassandra-stress.nodetool proxyhistograms可以在多个节点运行,发现最慢的协调节点.nodetool tablehistograms可以查看特定表的性能. 利用tracing去跟踪某个特定表和相关查询.可以知道每个查询涉及的客户端和节点之间的通信和每一步的时间.设置tracing,可以使用cqlsh设置 TRACING ON,然后查询,再TRACING OFF.也可以通过驱动去查询tracing的结果.nodetool setr…
cassandra SLF4J API记录日志,具体采用Logback实现.在终端启动cassandra时,可以向程序输入-f,就能在终端看到这个输出.Java Mangement Extensions,JMX.JMX是java API,主要采用两种方式管理.首先利用JMX可以从内存,线程池和CPU等java应用通用的一些方面了解健康状况.其次,利用JMX可以分析应用中的监测的特定方面.监测是指在应用代码外加一个包装器,从应用向JVM提供hook(钩子),使JVM能够收集数据供外部工具使用.包括…
写cassandra除了轻量级事务,不支持别的事务.cassandra是追加写,写的速度非常快.cassandra还有hint日志,这个数据库总是可写的,而且单个列的写操作是原子的.hint并不是一定写在协调节点,一般是写在下线节点的某个非副本的邻居节点.写一致性ANY:写hint也算成功ONE:写hint和memtable才算成功. 协调节点会根据keyspace的副本数确定哪些是副本节点,如果副本节点不够满足一致性级别,直接报错.多DC时,客户端发请求到协调节点,协调节点同时会转发请求到所有…
配置集群时,要求所有节点的集群名,分区器,snitch必须相同.种子节点最好相同. 种子节点:最好每个DC,配置2个,这样即使一个DC中一个种子节点挂了,仍然有一个中子节点可用.种子节点被认为是最先加入集群的,不会做数据迁移.其他节点都会优先连接种子节点加入集群.允许指定种子节点的实现,默认:org.apache.cassandra.locator.SeedProvider,这会从yaml文件中加载种子节点.分区器:指定分区键如何排序.Murmur3Partitioner,默认分区器,org.a…
没有join操作.有轻量级事务和批处理,但是没有外键等.反规范化.3.0支持物化视图,允许在一个表上创建数据的多个物化视图.使用cassandra要从查询入手,而不是先从数据模型开始.先对查询建模,然后根据查询来组织数据,然后再构建表结构.cassandra建表要考虑磁盘怎么存储数据,也就是要求要保证相关的列定义在同一个表中,不像RDBMS去关联查询.尽可能搜索最小的分区去满足一个给定的查询.搜索单个分区往往会得到最优的性能.排序需要提前设计,根据集群键排序.只能是和设计排序一样,或者完全相反.…
数据库事务正确执行的四个基本要素事务要有四个基本要素:ACID:原子性(Atomic).一致性(Consistent).隔离性(Isolated).持久性(Durable)原子性(Atomic):整个事务中的如果有多个操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节.执行失败则回滚.一致性(Consistent):如果事务并发多个,系统也必须如同串行事务一样操作.单机就保证多表级联操作等等,得保证两个表都同时修改.事务前后的操作得一致.事务执行完得和预期一致.隔离性(Isolated…
HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读一遍之后,会对HTTP有个总体认识.然后你可以根据文章中的关键点,去查找更详细的细节.这就是读书的第二重境界,将书读厚. HTTP(hypertext transfer protocol,超文本传输协议)是万维网进行通信时所使用的协议方案.HTTP有很多应用,但最著名的是用于Web浏览器和Web服务…
今天翻手机,翻到了许久之前看css权威指南时的笔记,遂移到博客中来. 1.属性选择器p.one class名为one的p元素p[class][name] 含有class和name属性的p元素p[class="one"][name="two"] class属性为one且name属性为two的p元素p[class~="one"] class属性包含one的p元素p[class^="one"] class属性以one开头p[clas…
web性能权威指南 page 203 经典的性能优化最佳实践 无论什么网络,也不管所用网络协议是什么版本,所有应用都应该致力于消除或减 少不必要的网络延迟,将需要传输的数据压缩至最少.这两条标准是经典的性能优 化最佳实践,是其他数十条性能准则的出发点. 减少DNS查找 每一次主机名解析都需要一次网络往返,从而增加请求的延迟时间,同时还会阻 塞后续请求. 重用TCP连接 尽可能使用持久连接,以消除 TCP 握手和慢启动延迟;参见 2.2.2 节“慢启动”. 减少HTTP重定向 HTTP 重定向极费…
这一章看了之后真是豁然开朗,之前虽然写了圣杯布局和双飞翼布局,有些地方也是模糊的,现在打算总结之后再写一遍. 以下都是从<css权威指南>中摘抄的我认为很有用的说明. 浮动元素 一个元素浮动时,其他内容会环绕该元素.浮动元素会生成一个块级框,不论这个元素本身是什么.并且浮动元素周围的外边距不会合并.如果要浮动一个非替换元素,必须显式声明width. 浮动元素的几条规则: 1)      浮动元素的左(右)外边界不能超出其包含块(包含快是其最近的块级祖先元素)的左(右)边界.但是负外边距或者浮动…
集中讨论以下3 个有意思的话题 :• Kafka 如何进行复制:• Kafka 如何处理来自生产者和消费者的请求 :• Kafka 的存储细节,比如文件格式和索引. 集群成员关系 Kafka 使用 Zoo keeper 来维护集群成员的信息.每个 broker 都有一个唯一标识符,这个标识符可以在配置文件里指定 ,也可以自动生成.在 broker 启动的时候,它通过创建临时节点把自己的ID注册到 Zookeeper.Kafka 组件订阅 Zookeeper 的/brokers/ids 路径(br…
不管是把 Kafka 作为消息队列.消息总线还是数据存储平台来使用 ,总是需要有一个可以往 Kafka 写入数据的生产者和一个从 Kafka 读取数据的消费者,或者一个兼具两种角色的应用程序. 开发者们可以使用 Kafka 内置的客户端 API 开发 Kafka 应用程序. 我们将从 Kafra 生产者的设计和组件讲起,学习如何使用 Kafka 生产者.内容包括: 如何创建 KafkaProducer 和 ProducerRecords 对象.如何将记录发送给 Kafka: 如何处理从 Kafk…
1. 概述 kylin 是 OLAP 引擎,采用多维立方体预计算技术,可将大数据的 SQL 查询速度提升到亚秒级别. 需求: 虽然像 spark,hive 等使用 MPP 大规模并行处理和列式存储的方式,可以将 Hadoop 的 SQL查询提高到了分钟级别, 但是仍然不能满足数据分析师的要求.在面对超大规模的数据集时,分析师不要讲更多的精力花在等待查询结果上, 而不是更加重要的建立领域模型上. kylin 就是要打破查询时间随着数据量成线性增长的规律,采用的思路就是 “预计算” 它会尽量的预先计…
本书中提到的Hadoop项目简述 Common:一组分布式文件系统和通用I/O的组件与接口(序列化.javaRPC和持久化数据结构). Avro:一种支持高效.跨语言的RPC以及永久存储数据的序列化系统. MapReduce:分布式数据处理模型和执行环境,执行于大型商业集群. HDFS:分布式文件系统,执行于大型商用机集群. Pig:一种数据流语言和执行环境,用以检索很大的数据集. Pig执行在MapReduce和HDFS的集群上. Hive:一个分布式.按列存储的数据仓库.Hive管理HDFS…
JavaScript 1.变量 变量是一个表示值的符号,是一个名字,他的本质是值: var x; //----声明一个变量: 值通过等号“=”赋给变量,x = 16; 对象是名/值对的集合,或字符串到值映射的集合: var book = { //对象用花括号包起来 topic:"JavaScript", //属性topic的值是JavaScript,多个名/值对用逗号分隔: fat:true //属性fat的值是true; }; //分号表示定义变量结束: 通过"."…
吞吐量是指,应用程序的TPS: 每秒多少次事务,QPS: 每秒多少次查询等性能指标. 吞吐量调优就是减少垃圾收集器消耗的CPU周期数,从而将更多的CPU周期用于执行应用程序. CMS吞吐调优 CMS包括Minor GC所带来的开销应该小于10%,如果垃圾收集的开销在3%或更少,说明通过调优吞吐量,提升性能的空间就极其有限了. 可用的调优方法如下: 1. 增大新生代空间,以降低Minor GC频率,减少CPU周期占用: 2. 增加老年代空间,以降低CMS频率,并可以减少老年代内存碎片: 3. 优化…
延迟指服务器处理一个请求所花费的时间,单位一般是ms.s. 本文主要讲降低延迟可以做的服务器端JVM优化. JVM延迟优化 新生代 新生代大小决定了应用平均延迟 如果平均Minor GC持续时间大于应用程序平均延迟性要求,可以适当减小新生代空间大小: 如果Minor GC频率大于应用程序平均延迟性要求,可以适当增大新生代空间: 老年代 老年代大小决定了应用最差延迟 FullGC频率大于应用程序最大FullGC频率要求,可以适当增大老年代空间大小: FullGC持续时间大于应用程序最差延迟性要求,…
新生代.老年代.永久代的概念不多说,这三个空间中任何一个不能满足内存分配请求时,就会发生垃圾收集. 新生代不满足内存分配请求时,发生Minor GC,老年代.永久代不满足内存分配请求时,发生Full GC,Minor GC比Full GC持续的时间要短很多. 所以内存空间设置的不合理就会频繁引起垃圾收集,以及OutOfMemoryError错误,严重影响程序性能. Java堆大小计算法则 若你的应用部署在单独的服务器,且该服务器上只有这一个应用,那Java堆肯定是越大越好,但这种情况比较少. J…
概述:JVM性能调优没有一个非常固定的设置,比如堆大小设置多少,老年代设置多少.而是要根据实际的应用程序的系统需求,实际的活跃内存等确定.正文: JVM调优工作流程 整个调优过程是不断重复的一个迭代,后面的步骤有可能影响前面的配置,可能需要重新调优. 应用程序的系统需求 确定应用程序的系统需求是性能调优的基础,后面的调优都会依赖这个要求.一个应用不会无休止地调优下去. 1.可用性 2.可管理性 3.启动时间 4.吞吐量 TPS: 每秒多少次事务 QPS: 每秒多少次查询 5.延迟 比如关键请求必…
一:CPU 1. 用户态CPU是指执行应用程序代码的时间占总CPU时间的百分比. 系统态CPU是指应用执行操作系统调用的时间占总CPU时间的百分比.系统态CPU高意味着共享资源有竞争或者I/O设备之间有大量的交互. 提高应用性能和扩展性的一个目标就是尽可能降低系统态CPU使用率. 2. CPU运行队列就是那些已经准备好运行.正等待可用CPU的轻量级进程. 当运行队列长度达到处理器的4倍或者更多时,系统的相应就非常迟缓了. 解决运行队列长有两种办法: 1). 增加CPU以分担负载: 2). 分析系…
1 数据库和MapReduce对比 2 hadoop 包含的内容…
一个服务器能不能运行多个不同端口的mongo实例? 如果两个对象不相等,hashcode一定不相等:如果两个对象相等,hashcode相等或者不相等? 修改器速度42页 update({},{"$setOnInsert"}) 3.3 更新文档 4.2.4 条件语义 4.3.1 null 4.3.4 查询内嵌文档 第19章 持久性 mongodb不支持事务,是指mongodb没有原子性. 但是mongodb有持久性,和mysql的持久性的含义是一样的. 事务结束后,事务处理的结果必须能够…
KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力的主要方式. 我们有必要为主题创建大量的分区,在负载增长时可以加入更多的消费者.不要让消费者的数量超过主题分区的数量,多余的消费者只会被闲置.  除了通过增加消费者来横向伸缩单个应用程序外,还经常出现多个应用程序从同一个主题读取数据的情况. Kafka 设计的主要目标之一 ,就是要让 Kafka 主…