一、分布式系统的难点 分布式系统比起单机系统存在哪些难点呢? 1. 网络因素 由于服务和数据分布在不同的机器上,每次交互都需要跨机器运行,这带来如下几个问题: 同机房的网络IO还是比较块的,但是跨机房,尤其是跨IDC,网络IO就成为不可忽视的性能瓶颈了。并且,延迟不是带宽,带宽可以随便增加,千兆网卡 ...
分类:
其他好文 时间:
2016-04-24 12:46:13
阅读次数:
221
libevent 网络IO分析 Table of Contents 1. 简介 2. 简单使用与入门 2.1. 定时器-timeout 超时回调 2.2. 信号事件 2.3. 读取 socket 3. 操作系统 I/O 模型封装 4. 源码分析-基本功能 4.1. 超时机制-对 timeout 例子 ...
分类:
其他好文 时间:
2016-04-23 13:19:33
阅读次数:
185
APR通道是Tomcat比较有特色的通道,在早期的JDK的NIO框架不成熟的时候,因为java的网络包的低效,Tomcat使用APR开源项目做网络IO,这样有效的缓解了java语言的不足,提供了一个高性能的直接通过jni接口进行底层IO通信内存使用的这么一个通道。但是,当JDK的后续版本推出之后,J... ...
分类:
其他好文 时间:
2016-04-18 13:19:19
阅读次数:
260
Memcache 是什么 ?Memcache 是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个Has ...
分类:
系统相关 时间:
2016-04-15 19:42:46
阅读次数:
236
gevent是Python的一个用于网络IO的函数库,其中应用到了 coroutine(协同程序) 的思想。首先来了解下目前网络框架的几种基本的网络I/O模型: 阻塞式单线程:这是最基本的I/O模型,只有在处理完一个请求之后才会处理下一个请求。它的缺点是效能差,如果有请求阻塞住,会让服务无法继续接受 ...
分类:
编程语言 时间:
2016-04-15 00:20:03
阅读次数:
268
为了执行网络IO,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型 int socket(int family,int type,int protocol); 其中,family参数指定协议簇,type参数指明套接字类型,protocol参数一般为0 TCP是一个字节流协议, ...
分类:
其他好文 时间:
2016-04-03 14:23:50
阅读次数:
126
Redis中,处理网络IO时,采用的是事件驱动机制。但它没有使用libevent或者libev这样的库,而是自己实现了一个非常简单明了的事件驱动库ae_event,主要代码仅仅400行左右。
没有选择libevent或libev的原因大概在于,这些库为了迎合通用性造成代码庞大,而且其中的很多功能,比如监控子进程,复杂的定时器等,这些都不是Redis所需要的。...
分类:
其他好文 时间:
2016-04-03 11:52:58
阅读次数:
244
EndPoint提供基础的网络IO服务,用来实现网络连接和控制,它是服务器对外I/O操作的接入点。主要任务是管理对外的socket连接,同时将建立好的socket连接交到合适的工作线程中去。里面两个主要的属性类是Acceptor和Poller、SocketProcessor Acceptor类实现了
分类:
其他好文 时间:
2016-03-13 17:28:33
阅读次数:
183
网络层 主要任务是把网络协议数据单元或分组从源计算机经过适当的路径发送到目的地计算机。从源计算机到目的计算机可能要经过若干个中间节点,这需要在通信子网中进行路由选择。 网络层与数据链路层有很大的差别,数据链路层仅把数据帧从线缆或信道的一端传送到另一端(即在相邻节点间进行数据传送),网络层的目的是实现
分类:
其他好文 时间:
2016-03-04 19:05:19
阅读次数:
147
寻找性能瓶颈 通常性能瓶颈的表象是资源消耗过多、外部处理系统性能不足或资源消耗不多,但程序的响应速度却仍达不到要求。 资源主要消耗在CPU、文件IO、网络IO及内存方面,机器的资源是有限的,当某资源消耗过多时,通常会造成系统的响应...
分类:
其他好文 时间:
2016-01-19 19:08:05
阅读次数:
197