- 博客(887)
- 资源 (7)
- 收藏
- 关注
转载 ZeroMQ(java)之I/O线程的实现与组件间的通信
算是开始读ZeroMQ(java)的代码实现了吧,现在有了一个大体的了解,看起来实现是比较的干净的,抽象什么的不算复杂。。。这里先来看看它的I/O线程的实现吧,顺带看看是如何实现组件的通信的。。。。首先要搞清楚I/O线程的实现,就先要弄懂一个类型,Poller(zmq.Poller.java),可以将其看成是对selector的一个封装,同时它还要管理定时事件,看了这么多代码,发现
2014-02-28 23:19:00
3701
转载 ZeroMQ(java)之负载均衡
我们在实际的应用中最常遇到的场景如下:A向B发送请求,B向A返回结果。。。。但是这种场景就会很容易变成这个样子:很多A向B发送请求,所以B要不断的处理这些请求,所以就会很容易想到对B进行扩展,由多个B来处理这些请求,那么这里就出现了另外一个问题:B对请求处理的速度可能不同,那么B之间他们的负载也是不同的,那么应该如何对请求进行分发就成了一个比
2014-02-28 23:17:15
9895
转载 ZeroMQ(java)之Router与Dealer运行原理
在开始这部分的内容之前,先来看看ZeroMQ中HWM概念---High-Water Marks当系统的数据量很大,而且发送频率很高的情况下,内存就很重要了,如果处理不好会出现很多问题,例如如下场景:A很快速的向B发送数据,但是B处理起来却很慢,这样子的话,数据就可能会在A的发送缓冲区,或者B的接收缓冲区累计起来....如果双方速度差太多,就很容易出现问题.......在Ze
2014-02-28 23:16:24
12923
转载 ZeroMQ(java)之Router/Dealer模式
在开始之前先把guid里面提到的几个ZeroMQ的特性列一下吧:(1)ZeroMQ有自己的I/O线程来异步的处理I/O,而且后台采用了无锁的数据结构(2)在ZeroMQ中,所有的组件都可以动态的加入和移除,而且可以启动组件以任何的顺利,例如我们可以先启动request,再启动response,依然可以工作,而且还会自动的重连接。(3)如果有需要的话,会自动的将message
2014-02-28 23:12:06
18362
转载 ZeroMQ(java)之Push/Pull模式
在ZeroMQ中并没有绝对的服务端与客户端之分,所有的数据接收与发送都是以连接为单位的,只区分ZeroMQ定义的类型,例如Response与Request,Publisher与Subscriber,Push与Pull等。。。例如在前面我们最开始的Response/Request模式,因为只有一个Response端,而有多个Request端,所以我们选择在Response端调用bind方法来
2014-02-28 23:10:46
10076
转载 ZeroMQ(java)之Publish/Subscribe模式
前面的文章介绍了比较简单的Request/Subscribe模式, 这篇文章介绍更为经典的Publish/Subscribe通信模式用来ZeroMQ的实现,其通信方式如下图:客户端(subscriber)向服务器(publisher)订阅消息,然后服务器可以将消息推送到所有订阅了消息的客户端,这里也可以理解为广播吧。。。。好了,闲话不多说了,直接
2014-02-28 23:09:19
9446
转载 ZeroMQ(java)之Requerst/Response模式
自己最开始是在cloud foundry中接触过消息服务器(nats),或者说是消息中间件,也算是初步知道了一个消息服务器对于分布式的网络系统的重要性,后来自己也曾想过在一些项目中使用它,尤其是在一些分布式的环境下,可以极大的方便整个系统的实现。。。。例如如下的形式:在中间通过一个消息中间件,可以很方便的将各个woker的数据发送到最终的统计服务器来做数据的
2014-02-28 23:07:49
17036
1
转载 Linux core 文件介绍
1. core文件的简单介绍在一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。 2. 开启或关闭core文件的生成用以下命令来阻止系统生成core文件:ulimit -c 0下面的命令可以检查生成core文件的选项是否打开:ulimit -a该命令将显示所有的用户定制,其中选项-a代表“al
2014-02-25 23:19:54
943
转载 线上应用故障排查之二:高内存占用
上一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。搞Java开发的,经常会碰到下面两种异常:1、java.lang.OutOfMemoryError: PermGen space2、java.lang.OutOfMemoryError: Java heap space要详细解释这两种异常,需要简单重提下Java内存模型。 Java内存模型是描
2014-02-24 20:57:57
1850
转载 线上应用故障排查之一:高CPU占用
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。但是,怎么定位到具体线程或者代码呢?首先显示线程列表:ps
2014-02-24 20:40:13
2058
转载 轻量级HTTP服务器Nginx(常用配置实例)
Nginx作为一个HTTP服务器,在功能实现方面和性能方面都表现得非常卓越,完全可以与Apache相媲美,几乎可以实现Apache的所有功能,下面就介绍一些Nginx常用的配置实例,具体包含虚拟主机配置、负载均衡配置、防盗链配置以及日志管理等。 一、 虚拟主机配置实例下面在Nginx中创建三个虚拟主机,需要说明的是,这里仅仅列出了虚拟主机配置部分。 http { serv
2014-02-20 23:32:46
1141
转载 Socket重要参数讲解
Java Socket的api可能很多人会用,但是Java Socket的参数可能很多人都不知道用来干嘛的,甚至都不知道有这些参数。backlog用于ServerSocket,配置ServerSocket的最大客户端等待队列。等待队列的意思,先看下面代码public class Main { public static void main(String[] ar
2014-02-19 23:46:11
1915
原创 Netty的核心组件
ChannelA nexus to a network socket or a component which is capable of I/O operations such as read, write, connect, and bind. ChannelFactoryThe main interface to a transport that creates a Chan
2014-02-19 22:42:53
3183
转载 HttpClient通过代理进行请求
在浏览一些网站的时候由于各种原因,无法进行访问。 这时我们需要通过IE,FireFox进行Http的代理设置, 当然HttpClient也为我们提供这样的设置 使用匿名代理 Java代码 HttpClient httpClient = new HttpClient(); //设置代理服务器的ip地址和端口 httpClient.getHostConfi
2014-02-19 13:15:13
1893
转载 Netty初步之Hello World
Java的学习是从Hello word开始的,Netty也从这里开始吧。这里的例子比较简单,后面会慢慢的对Netty的一些复杂应用、Netty的原理进行一些解析。本文主要是列举Netty初步使用的一个最基本的例子,具体的说明在代码中都有了,所以也不再重复。1、ClientThread.java[java] view plaincopypa
2014-02-18 23:43:50
4228
转载 Netty源码解读(四)Netty与Reactor模式
一:Netty、NIO、多线程?时隔很久终于又更新了!之前一直迟迟未动也是因为积累不够,后面比较难下手。前面的文章我们分析了Netty的结构,这次咱们来分析最错综复杂的一部分-Netty中的多线程以及NIO的应用。理清NIO与Netty的关系之前,我们必须先要来看看Reactor模式。Netty是一个典型的多线程的Reactor模式的使用,理解了这部分,在宏观上理解Netty的NI
2014-02-16 21:55:13
1818
转载 Netty源码解读(三)Channel与Pipeline
Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的“梦境”概念,希望大家喜欢。一层梦境:Channel实现概览在Netty里,Channel是通讯的载体,而ChannelHandler负责Channel中的逻辑处理。
2014-02-16 21:52:09
2394
转载 Netty源码解读(二)Netty中的buffer
上一篇文章我们概要介绍了Netty的原理及结构,下面几篇文章我们开始对Netty的各个模块进行比较详细的分析。Netty的结构最底层是buffer模块,这部分也相对独立,我们就先从buffer讲起。What: buffer二三事buffer中文名又叫缓冲区,按照维基百科的解释,是”在数据传输时,在内存里开辟的一块临时保存数据的区域”。它其实是一种化同步为异步的机制,可以解决数据传输的速
2014-02-16 21:51:02
2300
转载 Netty源码解读(一)概述
Netty和Mina是Java世界非常知名的通讯框架。它们都出自同一个作者,Mina诞生略早,属于Apache基金会,而Netty开始在Jboss名下,后来出来自立门户Netty.io。关于Mina已有@FrankHui的Mina系列文章,我正好最近也要做一些网络方面的开发,就研究一下Netty的源码,顺便分享出来了。 Netty目前有两个分支:4.x和3.x。4.0分支重写了很多东西,并对项
2014-02-16 21:47:59
1563
原创 NIO与Netty的Channel组件
Java NIO中提供针对TCP/IP的Channel封装如下:SelectableChannelA channel that can be multiplexed via a {@link Selector}.SocketChannelA selectable channel for stream-oriented connecting sockets.Ser
2014-02-16 21:16:04
1829
转载 Linux Epoll vs Windows IOCP
1 Epoll vs. IOCPEpoll 和 IOCP 都是为高性能网络服务器而设计的高效 I/O 模型;都是基于事件驱动的。事件驱动有个著名的好莱坞原则(“不要打电话给我们,我们会打电话给你”)。 不同之处在于:1. Epoll 用于 Linux 系统;而 IOCP 则是用于 Windows ;(啊,好大的鸡蛋 … ) 2. Epoll 是当事件资源满足时发出可处理通知
2014-01-29 22:31:17
3748
转载 Nginx事件驱动总结
其实最开始想要看nginx的源代码的初衷就是为了搞懂它的nginx的事件驱动到底是怎么回事。。。到现在为止nginx代码的大体结构部分已经看的差不多了,对它的事件驱动也算是有了一个较为全面的了解,终于可以写这篇文章了。。。首先用一张图来描述整个event的结构:首先最高层的是epoll自己定义的事件结构:[cpp] view plaincopy
2014-01-29 22:28:28
5710
转载 远程调用原理与对比(RMI、MINA、ESB、Hessian、SOAP、EJB)
1引用在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇
2014-01-29 22:19:08
1675
转载 Netty事件驱动总结
Netty源码也看了一段时间了,从最开始的勇斗不会用,到现在能够理解它的实现运行原理,还是蛮有成就感的。。而写到越发的觉得不管是C++还是Java,其实最终设计都差不太多。。。如果要总结的写可以写很多字,画很多图,算了吧,好麻烦,一切尽在不言中,来一个图吧:
2014-01-29 22:07:04
1450
转载 JVM性能优化
很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题。我说过JVM的自身技术限制了Java企业级应用的伸缩性。首先我们先列举一些主导因素。l 主流的硬件服务器提供了大量的内存l 分布式系统有大量内存的需求,而且该需求在持续增长l 一个普通Java应用程序所持有的对空间大概在1GB~4GB,
2014-01-29 21:40:24
1279
转载 Disruptor(无锁并发框架)-发布
假如你生活在另外一个星球,我们最近开源了一套高性能的基于消息传递的开源框架。下面我给大家介绍一下如何将消息通过Ring buffer在无锁的情况下进行处理。在深入介绍之前,简介介绍下Ring buffer的工作原理。1.ring buffer是由一个大数组组成的。2.所有ring buffer的“指针”(也称为序列或游标)是java long类型的(64位有符号数)
2014-01-29 21:11:34
1190
转载 Linux中epoll IO多路复用机制
epoll简介epoll 是Linux内核中的一种可扩展IO事件处理机制,最早在 Linux 2.5.44内核中引入,可被用于代替POSIX select 和 poll 系统调用,并且在具有大量应用程序请求时能够获得较好的性能( 此时被监视的文件描述符数目非常大,与旧的 select 和 poll 系统调用完成操作所需 O(n) 不同, epoll能在O(1)时间内完成操作,所以性能相当高
2014-01-29 16:50:53
3044
转载 Linux中select IO多路复用机制
Linux提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。关于文件句柄,其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、stdo
2014-01-29 16:39:57
4272
转载 Linux的进程/线程间通信方式总结
Linux系统中的进程通信方式主要以下几种:同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程通信方式:包括信号量(Semaphore), 消息队列(Message Queue), 和共享内存(Shared Memory)网络主机间的进程通信方式
2014-01-29 16:10:24
29460
转载 你需要知道的 16 个 Linux 服务器监控命令
如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员。有些 Linux 发行版会提供 GUI 程序来进行系统的监控,例如 SUSE Linux 就有一个非常棒而且专业的工具 YaST,KDE 的 KDE System Guard 同样很出色。当然,要使用这些工具,你必须在服务器跟前进行操作,而且这些 GUI 的程
2014-01-29 15:51:51
1157
原创 ZeroMQ的核心优势
ZMQ定义为“史上最快的消息队列”,从网络通信的角度看,它处于会话层之上,应用层之下。ZMQ相较于传统的socket网络编程,最大的特点和优势体现如下:ZMQ为应用程序提供了一套简单的套接字API,不用考虑实际使用的协议类型(进程内、进程间、机器间、或广播);ZMQ提供了多种模式进行消息路由,如请求-应答模式、发布-订阅模式等。这些模式可以用来搭建网络拓扑结构;ZMQ是通过后台的I
2014-01-29 00:01:10
5238
转载 Linux上实现双向进程间通信管道(socketpair)
Linux 提供了 popen 和 pclose 函数,用于创建和关闭管道与另外一个进程进行通信。其接口如下: FILE *popen(const char *command, const char *mode);int pclose(FILE *stream);遗憾的是,popen 创建的管道只能是单向的 -- mode 只能是 "r" 或 "w" 而不
2014-01-28 22:51:19
16420
转载 Linux中select、poll和epoll的区别
在Linux Socket服务器短编程时,为了处理大量客户的连接请求,需要使用非阻塞I/O和复用,select、poll和epoll是Linux API提供的I/O复用方式,自从Linux 2.6中加入了epoll之后,在高性能服务器领域得到广泛的应用,现在比较出名的nginx就是使用epoll来实现I/O复用支持高并发,目前在高并 发的场景下,nginx越来越收到欢迎。这里有个文章参考。Ng
2014-01-27 14:28:26
1308
转载 高性能的通讯库-ZeroMQ的几个高性能特征
这两天研究了一下ZeroMQ,号称史上最好的通讯库,比RabbitMQ快很多,基于C语言开发的,实时流处理sorm的task之间的通信就是用的ZeroMQ。ZeroMQ在使用模式上支持多种,有req-reply,publish-subscribe,push-pull。下图是zeroMQ的架构图简单说明一下,从上到下依次是网络、zeroMQ、用户的应用,相当于
2014-01-25 00:06:12
2065
转载 Tomcat基于Coyote的连接器源码分析
不论Tomcat的容器设计得如何精妙,本质上Tomcat就是个HTTP服务器,需要从socket中获得HTTP数据流;另一方面,容器只能处理封装好的org.apache.coyote.Request,从socket到Request之间需要有个转换过程。因此,连接socket和容器之间的重任就交给了CoyoteCoyote简介Coyote是Tomcat的Connector框架的名字,简单说就
2014-01-22 20:57:57
1785
原创 ZeroMQ阅读笔记
ZeroMQ是一种基于消息队列的多线程网络库,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间。ZeroMQ的主要特性是面向消息进行通信,所以它提供的是比Libevent处在网络通信中更高一层的组件,如果程序员要使用ZeroMQ,只需要做如下事情:告知所使用的通信模型,比如请求回应模型(Request-Reply)、发布订阅模型(Publish
2014-01-21 00:07:10
1574
转载 MySQL性能优化的最佳20+条经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。1. 为
2014-01-19 21:46:00
1235
原创 Disruptor 框架源码分析
Disruptor 是一个高性能异步处理框架,也可以认为是一个消息通信框架,它本质上为生产者-消费者模型。Disruptor消息处理流程Disruptor核心类和接口EventHandler:用户提供具体的实现,在里面实现事件的处理逻辑。Sequence:代表事件序号或一个指向缓存某个位置的序号。WaitStrategy:功能包括:当没有可消费的事件时,根据特定
2014-01-19 16:02:37
4159
转载 关于线程Thread和协程Coroutine
线程与协同程序的主要区别在于,一个具有多线程的程序可以同时运行几个线程,而协同程序却需要彼此协作地运行。就是说,一个具有多个协同程序的程序在任何时刻只能运行一个协同程序,并且正在运行的协同程序只会在其显示地挂起时,它的执行才会暂停。线程和协程的异同协程(Coroutine)类似于线程(Thread)的地方是:每个协程都有有自己的堆栈,自己的局部变量。线程和协程的主要区别在于:
2014-01-18 17:26:35
3064
1
转载 协程与例程
协程(coroutine)技术是一种程序控制机制,早在上世纪60年代就已提出,用它可以很方便地实现协作式多任务。协程是一种程序组件,是由子例程的概念泛化而来的,子例程只有一个入口点且只返回一次,而协程允许多个入口点,可以在指定位置挂起和恢复执行。被广为引用的协程定义:•协程的本地数据在后续调用中始终保持•协程在控制离开时暂停执行,当控制再次进入时只能从离开的位置继续执行在协
2014-01-18 16:12:04
2329
基于Agent的智能搜索平台
2009-02-17
嵌入式Linux知识培训
2009-02-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅