# 3.6 服务器架构
## 3.6 服务器架构
### 简单的情况
Web服务器位于整个网站的最前端,它接受客户端的HTTP请求,并作出应答,如图所示:
![web-server-without-proxy](https://box.kancloud.cn/061b40057e43c4a737e99db9c339c851_600x138.png)
流行的Web服务器有[Apache HTTP Server](https://httpd.apache.org/)、[Nginx](https://nginx.org/),以及微软的[IIS](http://www.iis.net/)等。另外,有一些Web编程技术依赖于特定的Web服务器,如前面提到的[Java Servlet](java.html)须要运行在Servlet容器,如[Aapche Tomcat](http://tomcat.apache.org/),中;[Node.js](nodejs.html)应用内建Web服务器。
### 负载均衡
对一个请求繁忙的网站来说,一个Web服务器可能是不够的;它往往有一组Web服务器,通过某种负载均衡技术组合起来,共同对外提供Web服务,如图所示:
![web-server-with-proxy](https://box.kancloud.cn/dae3157a9c455bba435003ca2a4b1777_750x205.png)
**负载均衡器(Load Balancer)**接受来自用户的HTTP请求,并把它转发给内部的Web服务器。
知名的负载均衡器有[HAProxy](http://www.haproxy.org/)等。另外,Apache HTTP Server和Nginx等Web服务器也可以配置为负载均衡器使用。
需要说明的是,负载均衡器实际上是一种Web**反向代理(Reverse Proxy)**。反向代理不仅可以做负载均衡,还可以做[Web缓存](web_cache.html),或称之为Web加速器(Web Accelerator)——它可以缓存那些动态生成的页面,用以响应对这些页面的请求,从而加速网站访问。知名的Web加速器有[Varnish](https://www.varnish-cache.org/)等。另外,有些负载均衡器也有加速功能,比如Nginx(这是一种多功能的Web服务器)。
### 高可用性
少数网站有**高可用性(High Availability)**的要求,它要求网站在任何一个节点(如Web服务器、负载均衡器等)失效的情况下仍然可以正常工作。这须要对每个节点做冗余(redundency),并且在发生故障时自动切换故障节点,如图所示:
![web-server-with-HA](https://box.kancloud.cn/283ffe4c924175cf66e965fe9b949195_800x196.png)
其中,“DNS解析”部分是这种架构的关键:它把一个域名,如www.example.com,指向到多个不同的IP——在本例中对应着不同的负载均衡器。浏览器会依次向这些IP发出请求,直到一个有效的节点。这种技术又称为**Round Robin DNS**[1](#fn_1)。
> 1. Round Robin DNS是一个有争议的HA技术,由于TTL的存在,故障切换不是“即时”发生的。但是即时性更好的DNS解析技术往往需要更大的代价,或者依赖服务器供应商提供的专有技术,如Digital Ocean的Floating IP。[↩](#reffn_1 "Jump back to footnote [1] in the text.")
- 前言
- 1 Web概述
- 1.1 什么是Web
- 1.2 超文本和超链接
- 1.3 URL
- 1.4 DNS
- 1.5 HTTP
- 1.5.1 客户端请求
- 1.5.2 服务器应答
- 1.5.3 进一步了解HTTP
- 1.6 HTTPS
- 2 Web浏览器
- 2.1 HTML
- 2.1.1 文档类型声明
- 2.1.2 标签和属性
- 2.1.3 文档结构
- 2.1.4 DOM
- 2.1.5 进一步了解HTML
- 2.2 CSS
- 2.2.1 样式与样式表
- 2.2.2 样式表语法
- 2.2.3 级联样式表
- 2.2.4 进一步了解CSS
- 2.3 JavaScript
- 2.3.1 script标签
- 2.3.2 操纵DOM
- 2.3.3 jQuery
- 2.3.4 进一步了解JavaScript
- 2.4 Ajax
- 2.5 移动设备与响应式Web设计
- 3 Web服务器
- 3.1 方法与资源
- 3.2 状态代码
- 3.3 静态内容与动态内容
- 3.4 编程语言与技术
- 3.4.1 CGI
- 3.4.2 PHP
- 3.4.3 Java
- 3.4.4 Python
- 3.4.5 Ruby
- 3.4.6 Node.js
- 3.5 RESTful Web API
- 3.6 服务器架构
- 3.7 Web缓存
- 3.8 服务器推送
- 4 数据库
- 4.1 关系型数据库
- 4.2 NoSQL数据库
- 5 Web服务器的其他组件
- 5.1 Cron
- 5.2 消息队列
- 5.3 邮件服务器
- 6 开发工具与技术
- 6.1 Git
- 6.1.1 Git基础操作
- 6.1.2 Git基本原理
- 6.1.3 进一步了解Git
- 6.2 敏捷开发