摘要: 目录 场景假设 在介绍 Storm 的性能调优方法之前,假设一个场景:项目组部署了3台机器,计划运行且仅运行 Storm(1.0.1) + Kafka(0.9.0.1) + Redis(3.2.1) 的小规模实验集群,集群的配置情况如下表: 现有一个任务,需要实时计算订单的各项汇总统计信息。订单数据 阅读全文
posted @ 2017-05-19 15:49 _1900 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 在这个教程中,你将学会如何创建 Storm 的topology并将他们部署到 Storm 集群上, 主要的语言是 Java,但是少数几个例子用 Python 编写来说明 Storm 的多语言支持能力。 术语和名词 MapReduce jobstopologies topology 由用户编写的Sto 阅读全文
posted @ 2017-05-10 12:40 _1900 阅读(1797) 评论(0) 推荐(0) 编辑
摘要: 一、队列常用命令 #创建topics $ ./kafka-topics.sh --create --zookeeper chenx02:2181 --replication-factor 1 --partitions 1 --topic test#查看队列列表$ ./kafka-topics.sh 阅读全文
posted @ 2017-05-09 12:04 _1900 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 一、数据库常用命令 # 切换/创建数据库 PRIMARY> use yourDB; #当创建一个集合(table)的时候会自动创建当前数据库# 查询所有数据库 PRIMARY> show dbs; # 删除当前使用数据库 PRIMARY> db.dropDatabase(); # 从指定主机上克隆数 阅读全文
posted @ 2017-05-08 17:58 _1900 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 本节主要分析server的启动过程。 Netty是基于Nio实现的,所以也离不开selector、serverSocketChannel、socketChannel和selectKey等,只不过Netty把这些实现都封装在了底层。 从示例可以看出,一切从ServerBootstrap开始。 Serv 阅读全文
posted @ 2017-05-03 15:31 _1900 阅读(899) 评论(0) 推荐(0) 编辑
摘要: 前言 Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。 作为当前最流行的NIO框架,Netty 阅读全文
posted @ 2017-05-02 11:50 _1900 阅读(987) 评论(0) 推荐(0) 编辑
摘要: 前言 Java NIO 由以下几个核心部分组成: Buffer Channel Selector 以前基于net包进行socket编程时,accept方法会一直阻塞,直到有客户端请求的到来,并返回socket进行相应的处理。整个过程是流水线的,处理完一个请求,才能去获取并处理后面的请求;当然我们可以 阅读全文
posted @ 2017-04-24 15:07 _1900 阅读(3272) 评论(0) 推荐(1) 编辑
摘要: Java NIO 由以下几个核心部分组成: 传统的IO操作面向数据流,意味着每次从流中读一个或多个字节,直至完成,数据没有被缓存在任何地方。NIO操作面向缓冲区,数据从Channel读取到Buffer缓冲区,随后在Buffer中处理数据。本文着重介绍Channel和Buffer的概念以及在文件读写方 阅读全文
posted @ 2017-04-21 10:39 _1900 阅读(446) 评论(0) 推荐(0) 编辑
摘要: 深入浅出ConcurrentHashMap(1.8) 前言 HashMap是我们平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,进行put操作有可能会引起死循环,导致CPU利用率接近100%。 解决方案有Hashtable和Collections.synchronize 阅读全文
posted @ 2017-04-19 17:21 _1900 阅读(1058) 评论(0) 推荐(0) 编辑
摘要: CAS,Compare and Swap即比较并替换,设计并发算法时常用到的一种技术,Doug lea大神在java同步器中大量使用了CAS技术,鬼斧神工的实现了多线程执行的安全性。 目前的处理器基本都支持CAS,只不过不同的厂家的实现不一样罢了。CAS有三个操作数:内存值V、旧的预期值A、要修改的 阅读全文
posted @ 2017-04-19 17:18 _1900 阅读(611) 评论(0) 推荐(0) 编辑
摘要: ava并发采用的是共享内存模型,线程之间的通信对程序员来说是透明的,内存可见性问题很容易困扰着java程序员,今天我们就来揭开java内存模型的神秘面纱。 在揭开面纱之前,我们需要认识几个基础概念:内存屏障(memory Barriers),指令重排序,happens-before规则,as-if- 阅读全文
posted @ 2017-04-19 17:16 _1900 阅读(623) 评论(0) 推荐(0) 编辑
摘要: 一、概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品。关于微商代理,首先我们从他们那里买东西时通常不知道背后的厂家究竟是谁,也就是说,“委托者”对我们来说是不可见的;其次,微商代理主要以朋友圈的人为目标客户,这就相当于为厂家做了一次对客户群体的 阅读全文
posted @ 2017-04-19 16:58 _1900 阅读(538) 评论(0) 推荐(0) 编辑
摘要: 摘要: 在JAVA NIO相关的组件中,ByteBuffer是除了Selector、Channel之外的另一个很重要的组件,它是直接和Channel打交道的缓冲区,通常场景或是从ByteBuffer写入Channel,或是从Channel读入Buffer;而在Netty中,被精心设计的ByteBuf 阅读全文
posted @ 2017-04-08 13:19 _1900 阅读(6001) 评论(0) 推荐(0) 编辑
摘要: 摘要: 在Netty中,通常会有多个IO线程独立工作,基于NioEventLoop的实现,每个IO线程负责轮询单独的Selector实例来检索IO事件,当IO事件来临的时候,IO线程开始处理IO事件。最常见的IO事件即读写事件,那么这个时候就会涉及到IO线程对数据的读写问题,具体到NIO方面即从内核 阅读全文
posted @ 2017-04-08 13:18 _1900 阅读(2819) 评论(1) 推荐(0) 编辑
摘要: 其实,双亲委派模型并不复杂。自定义类加载器也不难!随便从网上搜一下就能搜出一大把结果,然后copy一下就能用。但是,如果每次想自定义类加载器就必须搜一遍别人的文章,然后复制,这样显然不行。可是自定义类加载器又不经常用,时间久了容易忘记。相信你经常会记不太清loadClass、findClass、de 阅读全文
posted @ 2017-04-08 13:16 _1900 阅读(43148) 评论(9) 推荐(23) 编辑
摘要: Java中的阻塞队列接口BlockingQueue继承自Queue接口。 BlockingQueue接口提供了3个添加元素方法。 3个删除方法。 常用的阻塞队列具体类有ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、Linke 阅读全文
posted @ 2017-04-08 13:13 _1900 阅读(2002) 评论(0) 推荐(0) 编辑
摘要: 引言 二叉查找树是一种能将链表插入的灵活性和有序数组查找的高效性结合起来的一种重要的数据结构,它是我们后面学习红黑树和AVL树的基础,本文我们就先来看一下二叉查找树的实现原理。 二叉查找树的定义 二叉查找树最重要的一个特征就是:每个结点都含有一个Comparable的键及其相关联的值,该结点的键要大 阅读全文
posted @ 2017-04-08 13:11 _1900 阅读(1296) 评论(0) 推荐(1) 编辑
摘要: 本章我们将分析一下consumer向注册中心注册,并获取服务端相应的信息,根据这些信息生产代理对象的过程和源码。 1.类图 上图展示了部分消费者注册及生成代理对象过程中需要使用到的类和接口,其中: spring适配涉及到的类:DubboNamespaceHandler、DubboBeanDefini 阅读全文
posted @ 2017-03-29 10:54 _1900 阅读(2780) 评论(0) 推荐(0) 编辑
摘要: 本文将深入分析dubbo的服务发布涉及到的流程及主要类的代码。首先,我们先从类的关系图来看一下dubbo发布服务涉及到的相关类。 1.类图 上图展示了部分服务发布过程中需要使用到的类和接口,其中: spring适配涉及到的类:DubboNamespaceHandler、DubboBeanDefini 阅读全文
posted @ 2017-03-29 10:51 _1900 阅读(558) 评论(0) 推荐(0) 编辑
摘要: 本文作为dubbo源码分析的第一章,先从总体上来分析一下dubbo的代码架构、功能及优缺点,注意,本文只分析说明开源版本提供的代码及功能。 1.dubbo的代码架构: spring适配层:常规的spring适配方法,内容包括使用dubbo.xsd文件来定义dubbo相关的元素及属性;DubboNam 阅读全文
posted @ 2017-03-29 10:47 _1900 阅读(984) 评论(0) 推荐(0) 编辑
摘要: 1. Kafka集群partition replication默认自动分配分析 下面以一个Kafka集群中4个Broker举例,创建1个topic包含4个Partition,2 Replication;数据Producer流动如图所示: (1) (2)当集群中新增2节点,Partition增加到6个 阅读全文
posted @ 2017-03-08 16:19 _1900 阅读(4228) 评论(1) 推荐(0) 编辑
摘要: Kafka的通讯协议 标签:kafka Kafka的Producer、Broker和Consumer之间采用的是一套自行设计的基于TCP层的协议。Kafka的这套协议完全是为了Kafka自身的业务需求而定制的,而非要实现一套类似于Protocol Buffer的通用协议。本文将介绍这套协议的相关内容 阅读全文
posted @ 2017-03-08 15:20 _1900 阅读(6532) 评论(0) 推荐(0) 编辑
摘要: 关于Kafka 根据Kafka官方的文档,Kafka可以被认为一个高大上的集群消息中间件,但是读了下以前一个朋友给的部署文档和Kafka的官方的文档。发现Kafka确实不错,真的可以说是集群消息中间件。 用topic来进行消息管理,每个topic包含多个part,每个part对应一个逻辑log,有多 阅读全文
posted @ 2017-03-08 12:05 _1900 阅读(2122) 评论(0) 推荐(1) 编辑
摘要: 最近开研究kafka,下面分享一下kafka的设计原理。kafka的设计初衷是希望作为一个统一的信息收集平台,能够实时的收集反馈信息,并需要能够支撑较大的数据量,且具备良好的容错能力. 1、持久性 kafka使用文件存储消息,这就直接决定kafka在性能上严重依赖文件系统的本身特性.且无论任何OS下 阅读全文
posted @ 2017-03-08 12:04 _1900 阅读(812) 评论(0) 推荐(0) 编辑
摘要: 引言 Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互独立的。每个topic又可以分成几个不同的partition(每个topic有几个partition是在创建topic时指定的),每个partition存储一部分Message。借用官方的一张图,可以直观地看 阅读全文
posted @ 2017-03-08 12:00 _1900 阅读(3327) 评论(1) 推荐(0) 编辑
摘要: Netty 超时机制的介绍 Netty 的超时类型 IdleState 主要分为: ALL_IDLE : 一段时间内没有数据接收或者发送 READER_IDLE : 一段时间内没有数据接收 WRITER_IDLE : 一段时间内没有数据发送 在 Netty 的 timeout 包下,主要类有: Id 阅读全文
posted @ 2017-03-07 18:31 _1900 阅读(15385) 评论(1) 推荐(1) 编辑
摘要: 准备 JDK 7+ Maven 3.2.x Netty 4.x Eclipse 4.x WebSocket WebSocket 通过“Upgrade handshake(升级握手)”从标准的 HTTP 或HTTPS 协议转为 WebSocket。因此,使用 WebSocket 的应用程序将始终以 H 阅读全文
posted @ 2017-03-07 18:29 _1900 阅读(614) 评论(0) 推荐(0) 编辑
摘要: Netty 是一个 Java NIO 客户端服务器框架,使用它可以快速简单地开发网络应用程序,比如服务器和客户端的协议。Netty 大大简化了网络程序的开发过程比如 TCP 和 UDP 的 socket 服务的开发。更多关于 Netty 的知识,可以参阅《Netty 4.x 用户指南》(https: 阅读全文
posted @ 2017-03-07 18:27 _1900 阅读(7184) 评论(1) 推荐(0) 编辑
摘要: 怎么保证可靠性的? RabbitMQ提供了几种特性,牺牲了一点性能代价,提供了可靠性的保证。 持久化当RabbitMQ退出时,默认会将消息和队列都清除,所以需要在第一次声明队列和发送消息时指定其持久化属性为true,这样RabbitMQ会将队列、消息和状态存到RabbitMQ本地的数据库,重启后会恢 阅读全文
posted @ 2017-03-07 15:23 _1900 阅读(429) 评论(0) 推荐(0) 编辑
摘要: Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项 阅读全文
posted @ 2017-03-02 17:21 _1900 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify、MetaQ、Rocke 阅读全文
posted @ 2017-03-02 17:17 _1900 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 本文主要讲述在使用ZooKeeper进行分布式锁的实现过程中,如何有效的避免“羊群效应( herd effect)”的出现。 一般的分布式锁实现 这里简单的讲下一般的分布式锁如何实现。具体的代码实现可以在这里看到: https://svn.apache.org/repos/asf/zookeeper 阅读全文
posted @ 2017-03-01 11:40 _1900 阅读(2017) 评论(0) 推荐(0) 编辑
摘要: 事务简介 事务的核心是锁和并发,采用同步控制的方式保证并发的情况下性能尽可能高,且容易理解。这种方式的优势是方便理解;它的劣势是性能比较低。计算机可以简单的理解为一个标准的打字机,尽管看起来计算机可以并行处理很多事情,但实际上每个CPU单位时间内只能做一件事,要么读取数据、要么计算数据、要么写入数据 阅读全文
posted @ 2017-03-01 10:31 _1900 阅读(1846) 评论(0) 推荐(1) 编辑
摘要: 目录 一、 kafka简介二、 Kafka架构方案三、 Kafka安装四、 Kafka Client API 4.1 Producers API 4.2 Consumers API 4.3 消息高可靠 At-Least-Once 4.4 消息高可靠Consumer 4.5 生产者、消费者总结五、 K 阅读全文
posted @ 2017-02-27 16:47 _1900 阅读(1423) 评论(0) 推荐(1) 编辑
摘要: 红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小,右节点的值要比父节点的值大。它的高度决定了它的查找效率。 在理想的情况下,二叉查找树增删查改的时间复 阅读全文
posted @ 2017-02-20 18:22 _1900 阅读(473) 评论(0) 推荐(0) 编辑
摘要: 微服务架构解决了很多问题,但是同时引入了很多问题。本文要探讨的是如何解决下面这几个问题。 有大量的同步 RPC 依赖,如何保证自身的可靠性? 依赖的微服务调用失败了,我应该失败,还是成功。依赖很多外部服务之后,自身如何保障稳定性。如果所有依赖的服务成功,我才算成功,自身的稳定性就堪忧了。 RPC 调 阅读全文
posted @ 2017-02-20 18:14 _1900 阅读(13443) 评论(1) 推荐(0) 编辑
摘要: 一些数据: 大家还记得2013年的小米秒杀吗?三款小米手机各11万台开卖,走的都是大秒系统,3分钟后成为双十一第一家也是最快破亿的旗舰店。经过日志统计,前端系统双11峰值有效请求约60w以上的QPS ,而后端cache的集群峰值近2000w/s、单机也近30w/s,但到真正的写时流量要小很多了,当时 阅读全文
posted @ 2017-02-09 18:14 _1900 阅读(3537) 评论(0) 推荐(1) 编辑
摘要: HashMap 的实现原理 HashMap 概述 HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 阅读全文
posted @ 2017-02-09 15:00 _1900 阅读(5887) 评论(0) 推荐(1) 编辑
摘要: Java 代码编译和执行的整个过程 Java 代码编译是由 Java 源码编译器来完成,流程图如下所示: Java 字节码的执行是由 JVM 执行引擎来完成,流程图如下所示: Java 代码编译和执行的整个过程包含了以下三个重要的机制: Java 源码编译机制 类加载机制 类执行机制 Java 源码 阅读全文
posted @ 2017-02-09 11:01 _1900 阅读(771) 评论(0) 推荐(0) 编辑
摘要: 主要结论 Spring Cloud为微服务系统中相互依赖的服务提供了丰富的连接选项。 Spring Cloud Config为配置数据提供了通过Git管理的版本控制机制,并能在无需重启动的情况下对此类数据进行动态刷新。 通过将Spring Cloud与Netflix Eureka以及Ribbon组件 阅读全文
posted @ 2017-02-08 10:38 _1900 阅读(867) 评论(0) 推荐(0) 编辑