Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | 51CTO学院 | CSDN程序员研修院 | Github | OSChina 博客 | 腾讯云社区 | 阿里云栖社区 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏多维度架构

1.3. 服务器部署与网络拓扑

所谓大型网站主要的特点是访问量大,既海量访问,对带宽要求大,而在中国的网络环境比较复杂,单单靠一家也难保访问的快速、稳定,我们可能选择多家网络运营商,才能得到保障。

我们不得不把服务器分散部署到各地

1.3.1. 小型网站

一个IP,多台服务器流水线方式解决方案。

这种方案必须使用带有双网卡的服务器,建议选择千兆网卡,web服务器与database连接建议采用交叉线互联,不要通过Hub,Switch连接。

当web和database在同一台服务器是建议采用 UNIX SOCK 来链接数据库,以代替TCP/IP Socket。

以上图中的第三套方案为例,当用户访问网站时,通过电信交换机连接到cache服务器,有两种情况。第一种是静态html文件或图片,将判断是否被缓存,如果缓存直接反馈给用户否则链接web服务器。第二种动态脚本,将处理立即送给web服务器。如果动态脚本有请求数据库操作,将连接database服务器。

这种方式适合中小型企业,非互联网运营商,仅仅是用一个IP实现。

两个IP,多台服务器解决方案。

建议你吧图片,缩图单独使用一台服务器实现。

多个IP,多台服务器解决方案。

这种方案要注意服务器全部暴露在WAN上,一定要谨慎设置iptables规则。

1.3.2. 集群网站

下面是负载均衡的例子

过程 1.1. 过程访问演示

  1. 访问用户 www.example.com 网站

    用户输入网址: www.example.com回车

  2. dns

    域名服务器将www.example.com解析到load balancing负载请均衡调度服务器。

  3. load balancing

    负载均衡器根据调度算法分配到某个squid节点上

  4. squid

    静态规则:判段是否是缓存,如果已经缓存从cache中直接取出内容,否则请求web服务器

    动态规则:直接请求web服务器

    请求web服务器是将再次由load balancing分配web节点

  5. web

    web server 处理动态脚本,连接数据库查询。连接数据库是仍然需要由load balancing分配database节点

  6. database

    database cluster

1.3.3. 关于服务器远程管理

将每一台服务器暴露在广域网上不是一个好主意,我的经验是,目前服务器基本都是双网卡。

eth0: 用于对外访问,如web服务器仅仅开放80端口,其他端口不允许在广域网上直接访问。

eth1: 对内有一个私有局域网,开放SSH的22端口。22端口仅仅能通过私有局域网访问,不能通过广域网访问。

在机房放置一台专门的管理服务器并安装有VPN服务,当远程管理服务器是通过VPN连接到这台服务器,登录到这台服务器上,然后在通过SSH登录到私有LAN上的其他服务器进行远程管理。

下面是VPN解决方案图