Apache Architecture -- Aaron Bannert 翻译

Apache Architecture:

How do we measure performance? 如何测量web服务器的性能?

 

–Requests per Second 每秒请求次数

–Bandwidth 带宽

–Latency 等待时间

–Concurrency (Scalability) 并发(可扩展)

Building a scalable web server:设计可扩展的web server

 

handling an HTTP request 处理http请求

–map the URL to a resource 将url映射成资源

–check whether client has permission to access the resource 检查客户端是否有访问资源的权限 –choose a handler and generate a response 选择处理器和生成响应

–transmit the response to the client 发送响应到客户端

–log the request 记录请求日志

must handle many clients simultaneously 必须同时处理多个请求

must do this as fast as possible 必须尽可能快的处理

Resource Pools:资源池

 

one bottleneck to server performance is the operating system 服务器性能瓶颈之一是操作系统

–system calls to allocate memory, access a file, or create a child process take significant amounts of time

分配内存,访问文件和创建子进程的系统调用会消耗大量时间

–as with many scaling problems in computer systems, caching is one solution

计算机系统中的许多扩展性的问题,缓存是一种解决方法

resource pool: application-level data structure to allocate and cache resources 应用层数据存储的分配和缓存资源

–allocate and free memory in the application instead of using a system call 

在应用中分配和释放内存,用来代替使用系统调用

–cache files, URL mappings, recent responses 

缓存文件,url映射,最近产生的回复(响应)

–limits critical functions to a small, well-tested part of code 

把至关重要的函数限制到小的,充分测试的代码

 

Multi-Processor Architectures:多处理器体系结构

a critical factor in web server performance is how each new connection is handled

web服务器性能至关重要的因素之一就是每一个连接如何被处理

–common optimization strategy: identify the most commonly-executed code and make this run as fast as possible

通常的优化策略:识别最频繁执行的代码并且让它执行的尽可能快

–common case: accept a client and return several static objects

通常的情况:接受客户端请求,返回几个静态对象

–make this run fast: pre-allocate a process or thread, cache commonly-used files and the HTTP message for the response

让这运行的更快:预分配线程或进程,缓存经常使用的文件和http消息

 

Connections:连接

must multiplex handling many connections simultaneously 必须同时处理多个连接

–select(), poll(): event-driven, singly-threaded 事件驱动,单线程的

–fork(): create a new process for a connection 为每个连接创建一个进程 

–pthread create(): create a new thread for a connection 为每个连接创建一个线程

synchronization among processes/threads 进程/线程间同步

–shared memory: semaphores message passing 共享内存:信号消息传递

 

Select:

select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

Allows a process to block until data is available on any one of a set of file descriptors.

允许进程阻断,直到一系列文件描述符中的一个准备好

One web server process can service hundards of socket connections

一个web服务器进程可以服务于几百个连接

 

Event Driven Architecture:事件驱动体系结构

one process handles all events 一个进程处理多个事件

must multiplex handling of many clients and their messages 

必须多路处理多个客户端和它们的消息

use select() or poll() to multiplex socket I/O events 使用select或poll来多路复用io事件

provide a list of sockets waiting for I/O events 提供一个socket列表来等待io事件

sleeps until an event occurs on one or more sockets 休眠直到多个socket的事件发生

can provide a timeout to limit waiting time 可以提供一个超时时间来限制等待时间

must use non-blocking system calls 必须使用非阻塞系统调用

some evidence that it can be more efficient than process or thread architectures 一些证据表明比进线程更有效率

 

Process Driven Architecture:进程驱动体系结构

devote a separate process/thread to each event 每个线程或进程专注于一个事件

master process listens for connections 主进程监听连接

master creates a separate process/thread for each new connection 主进程为每一个连接创建独立的进程/线程

performance considerations 性能考虑

creating a new process involves significant overhead 创建一个进程需要大量的系统开销

threads are less expensive, but still involve overhead 线程相比少了很多,但仍然需要系统开销

may create too many processes/threads on a busy server 可能在一个繁忙的服务器上创建太多的进程/线程

 

Process/Thread Pool Architecture:进程/线程池体系结构:

master thread 主线程

creates a pool of threads 创建线程池

listens for incoming connections 监听到来的连接

places connections on a shared queue 把连接放到共享队列

processes/threads 进程/线程

take connections from shared queue 从共享队列里获取线程

handle one I/O event for the connection 为每个连接处理io事件

return connection to the queue 返回连接给队列

live for a certain number of events (prevents long-lived memory leaks) 有一定数量的事件(阻止长寿命的内存泄露)

need memory synchronization 需要内存同步

 

Hybrid Architectures:复杂体系结构:

each process can handle multiple requests 每一个进程处理多个请求

each process is an event-driven server 每一个进程是一个事件驱动服务器

must coordinate switching among events/requests 必须在事件和请求间切换

each process controls several threads 每一个进程控制几个线程

threads can share resources easily 线程间可以容易的共享资源

requires some synchronization primitives 需要一些同步原语

event driven server that handles fast tasks but spawns helper processes for time-consuming requests

事件驱动服务器处理快速任务,而生成助手进程来处理耗时的请求

 

What makes a good Web Server?:什么东西可以设计一个优秀的web服务器

Correctness 准确性

Reliability 可靠性

Scalability 可扩展性

Stability 稳定性

Speed 速度

 

Correctness 准确性

Does it conform to the HTTP specification? 符合http协议标准吗?

Does it work with every browser? 对每一个浏览器起作用吗?

Does it handle erroneous input gracefully? 能优雅的处理错误的输入吗?

 

Reliability 可靠性

Can you sleep at night? 你晚上可以休息吗?

Are you being paged during dinner? 吃晚饭的时候被打断了吗?

It is an appliance? 这是一个设备,工具?

 

 

Scalability 可扩展性

Does it handle nominal load? 它可以处理标称的负载吗?

Have you been Slashdotted? 

And did you survive?

What is your peak load? 峰值负载时多少?

 

Speed 速度

Does it feel fast? 速度快吗?

Do pages snap in quickly? 

Do users often reload pages?

 

你可能感兴趣的:(apache,多线程,应用服务器,Web,socket)