本文对工作中接触到的部分架构进行归纳总结。

一个大型的Web系统,要面对上亿的注册用户,大量的用户内容,巨大的访问量还有EB级别的数据存储。

操作系统

所有软件都要运行在操作系统上,因此操作系统要保证高效、稳定和安全。包管理工具提供丰富的、稳定、新的软件包也是重要的选择。

Ubuntu

新潮,有很多软件包可以快速跟进;

简单,易用。

CentOS

CentOS的生命周期是7年,基本上可以覆盖硬件的生命周期;

对硬件的支持更好(有些服务器是自行组装的机器);

PXE 安装系统比 Ubuntu 快多了;

稳定。

Windows Server

主要用途是特定平台的 Microso Office 文档转换服务。

虚拟化

OpenStack

运行环境

本文接触到的体系主要使用的是动态语言,在运行环境/解释器中运行,需要保证运行的高效与稳定啊。

PHP

Web 服务器不能直接执行 PHP , 当接收到请求后,会把请求交给 PHP 解释器处理,处理结果返回给客户端。

请求转发过程需要用到 CGI 管理器,使用 Nginx + PHP-FPM。

PHP-FPM 维护一个进程池,进程复用中处理多个请求,相比 Apache PHP-Mod 一个请求一个进程大大提高了处理速度、降低了内存消耗。

Node.js

主要用在消息推送系统中,相比 PHP 有以下显著优点:

  1. 采用事件驱动、异步编程,为网络服务而设计。其实Javascript的匿名函数和闭包特性非常适合事件驱动、异步编程;

  2. Node.js非阻塞模式的IO处理模式非常适合大量链接的客户端进行大量的数据推送(使用 Websocket 兼容 Web 端)。

Node.js 的缺点也是显著的:

  1. 可靠性低,回调出错难以排查,一个线程奔溃就需要重启整个进程;

  2. 单进程,单线程,只支持单核CPU。当前的集群方案也不能很好利用机器资源,还造成监控维护困难。

Web 服务器

处理静态文件的访问,并且提供反向代理到内网的 Http 或者 Websocket 服务。需要运行集群,保证可用度。

Nginx

一款轻量级、高性能的 Web 服务器/反向代理服务器,配合 PHP-FPM 能够得到更高的运行效率。

文件系统

FastDFS

开源的分布式文件系统,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。

SQL

MariaDB

MariaDB数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL。

使用 MariaDB 而不使用 MySQL 的原因是为了规避 Oracle 收购 MySQL 后协议变更导致的使用授权风险。

MyCat

单表、单库无法应对大量数据,所以需要进行数据库的拆分,数据库集群使用 MyCat 进行分表、分库、联合查询处理。

NoSQL

Elasticsearch

分布式的文档检索服务,可以提供文章页面的检索服务。

由于 Elasticsearch 提供了 JSON 的数据查询和存储模式,能够实现很多 NoSQL 的特性,因此也会在 Elasticsearch 直接存储标签等数据。相比关系数据库可以提供更快的查询速度。

各个模块的系统使用 Logstash 过滤日志存储到 Elasticsearch 中,使用 Kibana 进行查看,就是 ELK 日志处理方案。

CouchDB

使用 CouchDB 进行 Web 集群的 Session 共享。

Redis

提供了丰富的数据结构,可以在应用中执行各种缓存,分布式提供大量数据、高可用的服务。

负载均衡

HaProxy

提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理。

Redis 使用 HAProxy 实现分布式集群。

消息中间件

Rabbit MQ

  1. 耗时任务(视频转码,文档转换)需要发送到消息队列中,然后由大量的 Worker 进行处理,处理结果返回到消息队列中,或者持久化到数据库。

  2. 缓冲大量并发的访问,进行流量削峰。

RPC

Thrift

高效、多语言的远程执行框架。

Yar

PHP 使用的并行化远程执行框架。

应用框架

Gearman

把任务分发到不同的进程中处理,对工作进行并行化和负载均衡处理。

运维监控

Puppet

自动化配置和管理工具,可以通过集群对大量的服务器进行管理。

自动化运维系统中通过 Puppet 推送执行脚本到指定的服务器群组。

Cacti

网络流量监控,rrdtool 生成图标。

Nagios

  1. 监控系统、应用和交换机网络设备;

  2. 自定义监控规则;

  3. 插件提供邮件、短信、微信乃至电话的告警通知。