
Nginx&高性能服务器架构
Dave888Zhou
大处着眼,小处着手;群居守口,独居守心。
展开
-
Linux Socket编程
IP socket 是在其上建立高级Internet 协议的最低级的层:从HTTP到SSL到POP3到Kerberos再到UDP-Time,每种Internet协议都建立在它的基础上。为了实现自定义的协议,或定制众所周知的协议的实现,程序员需要掌握基本的socket基础结构的工作知识。 1、网络进程间的通信--Socket 我们知道本地的进程间通信(IPC)有很多种方式,通常可原创 2013-05-25 20:44:38 · 5008 阅读 · 0 评论 -
Nginx:配置指南(1)
This guide gives a basic introduction to nginx and describes somesimple tasks that can be done with it.It is supposed that nginx is already installed on the reader’s machine.If it is not, see theIns翻译 2014-07-20 22:29:46 · 4943 阅读 · 0 评论 -
高性能服务器架构
本文将与你分享我多年来在服务器开发方面的一些经验。对于这里所说的服务器,更精确的定义应该是每秒处理大量离散消息或者请求的服务程序,网络服务器更符合这种情况,但并非所有的网络程序都是严格意义上的服务器。使用“高性能请求处理程序”是一个很糟糕的标题,为了叙述起来简单,下面将简称为“服务器”。 本文不会涉及到多任务应用程序,在单个程序里同时处理多个任务现在已经很常见。比如你的浏览器可能就在做一些并翻译 2013-11-21 13:41:09 · 10387 阅读 · 0 评论 -
开源软件架构:Nginx
nginx(发音"engine x")是俄罗斯软件工程师Igor Sysoev开发的免费开源web服务器软件。nginx于2004年发布,聚焦于高性能,高并发和低内存消耗问题。并且具有多种web服务器功能特性:负载均衡,缓存,访问控制,带宽控制,以及高效整合各种应用的能力,这些特性使nginx很适合于现代网站架构。目前,nginx已经是互联网上第二流行的开源web服务器软件。14.1 为什翻译 2014-07-20 22:14:01 · 12375 阅读 · 2 评论 -
服务器设计系列:网络模型
全文针对linux环境。tcp/udp两种server种,tcp相对较复杂也相对比较常用。本文就从tcp server开始讲起。先从基本说起,看一个单线程的网络模型,处理流程如下: socket-->bind-->listen-->[accept-->read-->write-->close]-->close []中代码循环运行,[]外的是对监听socket的处理,[]内的是对转载 2013-11-13 22:29:54 · 4094 阅读 · 0 评论 -
服务器设计系列:日志模块
log模块是一个小模块,却是每个系统必备的模块。优秀的系统一定会有优秀的log信息,也可以说全面到位的log信息在一定程度上决定了一个系统的健壮性。在linux上,log模块是跟踪程序运行,验证业务逻辑正确的唯一方法。 一、功能 一个优秀的log系统应该包含以下功能: (1)支持打印到屏幕、文件、socket、syslog (2)支持分级别打印 (3)支持分模块打印转载 2013-11-13 22:31:18 · 4716 阅读 · 0 评论 -
服务器设计系列:定时器
一、 基础知识 1、时间类型。Linux下常用的时间类型有4个:time_t,struct timeval,struct timespec,struct tm。 (1)time_t是一个长整型,一般用来表示用1970年以来的秒数。 (2)struct timeval有两个成员,一个是秒,一个是微妙。struct timeval { long tv_sec;转载 2013-11-13 22:30:52 · 5473 阅读 · 1 评论 -
服务器设计系列:内存管理
服务器设计人员在一段时间的摸索后,都会发现:服务器性能的关键在于内存。从收包到解析,到消息内存的申请,到session结构内存的申请都要小心处理,尽量减少内存数据copy,减少内存动态申请,减少内存检索。为达到这个目的,不同的地方有不同的方法,比如常见的包解析,使用缓冲区偏移以及长度来标识包内字段信息;内存使用量固定的系统,系统启动就申请好所有需要的内存,初始化好,等待使用的时候直接使用;基于li转载 2013-11-09 11:10:52 · 4392 阅读 · 0 评论 -
服务器设计系列:状态机
一、状态机描述 状态机理论最初的发展在数字电路设计领域。在数字电路方面,根据输出是否与输入信号有关,状态机可以划分为Mealy型和Moore型状态机;根据输出是否与输入信号同步,状态机可以划分为异步和同步状态机。而在软件设计领域,状态机设计的理论俨然已经自成一体。Moore型状态机的输出只和当前状态有关,和输入无关,如果在软件设计领域设计出这种类型的状态机,则该状态机接受的事件都是无内蕴转载 2013-11-09 11:09:08 · 4877 阅读 · 0 评论 -
服务器设计系列:线程
废话不多说,详细介绍使用线程的优点好处请参考baidu、google。 一、线程使用场景 使用线程的方式大致有两种: (1)流水线方式。根据业务特点,将一个流程的处理分割成多个线程,形成流水线的处理方式。产生的结果:延长单一流程的处理时间,提高系统整体的吞吐能力。 (2)线程池方式。针对处理时间比较长且没有内蕴状态的线程,使用线程池方式分流消息,加快对线程消转载 2013-11-09 11:03:03 · 1931 阅读 · 0 评论 -
千万级并发实现的秘密:内核不是解决方案,而是问题所在!
我们现在已经搞定了 C10K并发连接问题 ,升级一下,如何支持千万级的并发连接?你可能说,这不可能。你说错了,现在的系统可以支持千万级的并发连接,只不过所使用的那些激进的技术,并不为人所熟悉。 要了解这是如何做到的,我们得求助于Errata Security的CEO Robert Graham,看一下他在Shmoocon 2013 的绝对奇思妙想的演讲,题目是C10M Defen翻译 2013-11-21 13:45:55 · 4566 阅读 · 2 评论 -
C10K问题
是时候让 Web 服务器同时处理一万客户端了,你不觉得吗?毕竟,现在的 Web 是一个大地盘了。 并且,计算机也是一样的大。 你可以花 $1200 左右购买一台 1000MHz,2Gb RAM 和一块 1000Mbit/s 以太网卡的机器。我们来看看——在 20000 客户端(是 50KHz,100Kb 和 50Kb/s/客户端)时,它不采取任何更多的马力而是采用 4Kb 的硬盘和为2万客翻译 2013-11-17 23:46:35 · 3378 阅读 · 0 评论 -
服务器设计系列:高性能服务器本质论
一 服务器分类 从软件性能角度,高性能服务器分:cpu密集型服务器/IO密集型服务器 (1) CPU密集型:该类服务器没有对io的访问/没有同步点,性能瓶颈在于对cpu的充分利用。典型的如转发服务器/代理服务器/协议转换类服务器/分布式总线服务器等。 (2) IO密集型:该类服务器存在对cache/db/硬盘等的同步访问,或者对fcgi/其他服务器等的同步访问。简单说有同步访问点转载 2013-11-17 23:45:53 · 2518 阅读 · 1 评论 -
服务器设计系列:架构综述
一、系统框架概述 网络上的服务器,无论是嵌入式的网络设备,还是pc上服务器,整体结构以及主要思想都大体相同:根据业务模型确定主要数据结构,根据数据结构确定线程模型,在各个业务线程内根据围绕主要数据结构进行的操作确定状态机模型,低层使用网络层收发数据完成和其它网元的通讯。线程交互模型简单描述如下图:图1 线程交互模型 二、网络层 相对而言,网络层的实现相对呆板、模式转载 2013-11-17 23:43:47 · 5590 阅读 · 0 评论 -
Linux的异步IO
Linux异步I/O是Linux内核中提供的一个相当新的增强。它是2.6版本内核的一个标准特性,但是我们在2.4版本内核的补丁中也可以找到它。AIO背后的基本思想是允许进程发起很多I/O操作,而不用阻塞或等待任何操作完成。稍后或在接收到I/O操作完成的通知时,进程就可以检索I/O操作的结果。 1、 I/O 模型 在深入介绍AIO API之前,让我们先来探索一下Linux上可翻译 2013-06-05 09:55:48 · 1589 阅读 · 0 评论 -
网络IO模型
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不转载 2013-06-03 17:07:26 · 25482 阅读 · 11 评论 -
Nginx:配置指南(2)
基于名字的虚拟主机Nginx首先选定由哪一个虚拟主机来处理请求。让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听)开始:server { listen 80; server_name example.org www.example.org; ...}server { listen 80; ser翻译 2014-07-23 17:22:09 · 7787 阅读 · 0 评论