11 zhangskd

尚未进行身份认证

一路风雨,一路奔跑

等级
TA的排名 1k+

TCP协议的性能评测工具 — Tcpdive开源啦

Tcpdive是一个专门的TCP协议性能评测工具。Github地址:https://github.com/fastos/tcpdive 在过去的几年里,随着移动互联网的飞速发展,整个基础网络已经发生了翻天覆地的变化。用户接入网络的方式,除了宽带和光纤之外,还有2G/3G/4G/WiFi,5G也已经在路上了。作为使用范围最广的传输层协议,TCP诞生于固网时代,在设计之初并没有考虑到上述种种情况,这导致了

2016-01-19 21:59:45

Nginx的负载均衡 - 一致性哈希 (Consistent Hash)

当后端是缓存服务器时,经常使用一致性哈希算法来进行负载均衡。使用一致性哈希的好处在于,增减集群的缓存服务器时,只有少量的缓存会失效,回源量较小。在nginx+ats / haproxy+squid等CDN架构中,nginx/haproxy所使用的负载均衡算法便是一致性哈希。我们举个例子来说明一致性哈希的好处。假设后端集群包含三台缓存服务器,A、B、C。

2015-12-12 23:46:40

Nginx的负载均衡 - 最少连接 (least_conn)

我们知道轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同。这有个前提,就是每个请求所占用的后端时间要差不多,如果有些请求占用的时间很长,会导致其所在的后端负载较高。在这种场景下,把请求转发给连数较少的后端,能够达到更好的负载均衡效果,这就是least_conn算法。

2015-12-12 23:42:00

Nginx的负载均衡 - 保持会话 (ip_hash)

Nginx版本:1.9.1我的博客:http://blog.csdn.net/zhangskd 算法介绍 ip_hash算法的原理很简单,根据请求所属的客户端IP计算得到一个数值,然后把请求发往该数值对应的后端。所以同一个客户端的请求,都会发往同一台后端,除非该后端不可用了。ip_hash能够达到保持会话的效果。ip_hash是基于round robin的,判断后端是否

2015-12-12 23:39:23

Nginx的负载均衡 - 加权轮询 (Weighted Round Robin) 下篇

上篇blog讲述了加权轮询算法的原理、以及负载均衡模块中使用的数据结构,接着我们来看看加权轮询算法的具体实现。如果upstream配置块中没有指定使用哪种负载均衡算法,那么默认使用加权轮询。也就是说使用加权轮询算法,并不需要特定的指令,因此也不需要实现指令的解析函数。而实际上,和其它负载均衡算法不同(比如ip_hash),加权轮询算法并不是以模块的方式实现的,而是作为Nginx框架的一部分。

2015-12-12 23:36:45

Nginx的负载均衡 - 加权轮询 (Weighted Round Robin) 上篇

当在upstream配置块中没有指定使用的负载均衡算法时,默认使用的是加权轮询。按照上述配置,Nginx每收到7个客户端的请求,会把其中的5个转发给后端a,把其中的1个转发给后端b,把其中的1个转发给后端c。这就是所谓的加权轮询,看起来很简单,但是最早使用的加权轮询算法有个问题,就是7个请求对应的后端序列是这样的:{ c, b, a, a, a, a, a },会有5个连续的请求落在后端a上,分布不太均匀。

2015-12-12 23:33:21

Nginx的负载均衡 - 整体架构

Nginx版本:1.9.1我的博客:http://blog.csdn.net/zhangskd 什么是负载均衡 我们知道单台服务器的性能是有上限的,当流量很大时,就需要使用多台服务器来共同提供服务,这就是所谓的集群。负载均衡服务器,就是用来把经过它的流量,按照某种方法,分配到集群中的各台服务器上。这样一来不仅可以承担更大的流量、降低服务的延迟,还可以避免单点故障造成服务

2015-12-12 23:30:26

TCP的发送系列 — 发送缓存的管理(二)

主要内容:从TCP层面判断发送缓存的申请是否合法,进程因缺少发送缓存而进行睡眠等待、因为有发送缓存可写事件而被唤醒。内核版本:3.15.2上一篇blog讲述了单个Socket层面上的发送缓存管理,现在来看下整个TCP层面上的发送缓存管理。

2015-09-06 22:48:14

TCP的发送系列 — 发送缓存的管理(一)

主要内容:TCP发送缓存的管理,包括发送缓存的初始化、sock发送缓存的动态调整、sock发送缓存的申请和释放。内核版本:3.15.2。TCP对发送缓存的管理是在两个层面上进行的,一个层面是单个socket的发送缓存管理,另一个层面是整个TCP层的内存管理。先来看下单个socket的发送缓存管理。

2015-09-06 22:44:50

TCP的发送系列 — tcp_sendmsg()的实现(二)

主要内容:Socket发送函数在TCP层的实现内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 在上篇blog中分析了tcp_sendmsg()这个主要函数的实现,现在来看下之前略过的一些细节,包括等待连接的建立、tcp_push()的实现、tcp_autocorking和数据的复制。

2015-09-06 22:38:36

TCP的发送系列 — tcp_sendmsg()的实现(一)

主要内容:Socket发送函数在TCP层的实现内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd上一篇blog讲的是send()、sendto()、sendmsg()和sendmmsg()这些发送函数的系统调用和Socket层实现,现在来看下它们的TCP层实现tcp_sendmsg()。

2015-09-06 22:30:13

Socket层实现系列 — send()类发送函数的实现

主要内容:socket发送函数的系统调用、Socket层实现。内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd以下是send()、sendto()、sendmsg()和sendmmsg()的发送流程图,这四个函数除了在系统调用层面上有些差别,在Socket层和TCP层的实现都是相同的。

2015-09-06 22:23:56

TCP连接建立系列 — 客户端接收SYNACK和发送ACK

主要内容:客户端接收SYNACK、发送ACK,完成连接的建立。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 客户端主动建立连接时,发送SYN段后,连接的状态变为SYN_SENT。此时如果收到SYNACK段,处理函数为tcp_rcv_state_process()。

2015-08-15 22:47:56

TCP连接建立系列 — 客户端的端口选取和重用

主要内容:connect()时的端口选取和端口重用。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 端口选取 connect()时本地端口是如何选取的呢? 如果用户已经绑定了端口,就使用绑定的端口。如果用户没有绑定端口,则让系统自动选取,策略如下:1. 获取端口的取值区间,以及区间内端口的个数。2. 根据初始偏移量

2015-08-15 22:42:07

TCP连接建立系列 — 客户端发送SYN段

主要内容:客户端调用connect()时的TCP层实现。内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd connect的TCP层实现 SOCK_STREAM类socket的TCP层操作函数集实例为tcp_prot,其中客户端使用tcp_v4_connect()来发送SYN段。struct proto tcp_prot = {

2015-08-15 22:35:23

linux下使用异步通知

阻塞式I/O是一直等待直到设备可以访问,非阻塞式I/O是定期轮询设备是否可以访问。异步通知则是当设备可以访问时才主动通知应用程序,有点像设备的硬中断。 并不是所有的设备都支持异步通知,应用程序通常假设只有套接字和终端才有异步通知的能力。异步通知存在一个问题,当进程收到SIGIO信号时,它并不知道是哪个文件有了新的输入,如果有多于一个的文件可以异步通知同一个进程,那么应用进程还需

2015-05-23 22:47:36

Socket层实现系列 — connect()的实现

主要内容:connect()的Socket层实现、期间进程的睡眠和唤醒。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 应用层 int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);Connects the socket ref

2015-05-23 22:29:12

Socket层实现系列 — I/O事件及其处理函数

主要内容:Socket I/O事件的定义、I/O处理函数的实现。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd I/O事件定义 sock中定义了几个I/O事件,当协议栈遇到这些事件时,会调用它们的处理函数。struct sock { ... struct socket_wq __rcu *sk_wq; /*

2015-05-23 22:25:25

Socket层实现系列 — 信号驱动的异步等待

主要内容:Socket的异步通知机制。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 概述 socket上定义了几个IO事件:状态改变事件、有数据可读事件、有发送缓存可写事件、有IO错误事件。对于这些事件,socket中分别定义了相应的事件处理函数,也称回调函数。 Socket I/O事件的处理过程中,要使用到sock

2015-05-23 22:24:51

Socket层实现系列 — 睡眠驱动的同步等待

主要内容:Socket的几个I/O事件、Socket的同步等待机制。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 概述 socket上定义了几个IO事件:状态改变事件、有数据可读事件、有发送缓存可写事件、有IO错误事件。对于这些事件,socket中分别定义了相应的事件处理函数,也称回调函数。 Socket I/O事件

2015-05-23 22:24:35

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!