大型应用系统通常又可分为以下几个子系统:
(1)web前端系统
(2)负载均衡系统
(3)数据库集群系统
(4)缓存系统
(5)分布式存储系统
(6)分布式服务器管理系统
(7)代码分发系统
web前端系统
该web系统基于Apache/Eginx等虚拟主机平台,提供PHP程序运行环境。服务器对开发人员是透明的,不需要开发人员介入服务器管理。
负载均衡系统
负载均衡系统分为硬件和软件两种。硬件负载均衡效率高,但是价格贵,比如F5等。软件负载均衡系统价格较低或者免费,效率较硬件负载均衡系统低,不过对于流量一般或稍大些网站来讲也足够使用,比如lvs, nginx。大多数网站都是硬件、软件负载均衡系统并用。
数据路集群系统
如何构建一个高可靠、可大规模并发处理的数据库体系?我们可以采用如上图所示的方式:
1)使用Mysql数据库,考虑到web应用的数据库读多写少的特点。可以提供专用的读数据库和写数据库,在应用程序中实现读操作和写操作分别访问不同的数据库。
2)使用mysql replication机制实现快速将主库(写库)的数据库复制到从库(读库)。一个主库对应多个从库,主库数据实时同步到从库。
3)写数据库有多台,每台都可以提供多个应用共同使用,这样可以解决写库的性能瓶颈问题和单点故障问题。
4)读数据库有多台,通过负载均衡设备实现负载均衡,从而达到读库的高性能、高可靠、高可扩展性。
5)数据库服务器和应用服务器分离。
6)从数据库使用BigIP做负载均衡。
缓存系统
缓存分为文件缓存、内存缓存、数据库缓存。在大型Web应用中使用最多且效率最高的是内存缓存。最常用的内存缓存工具是Memcached。使用正确的缓存系统可以达到实现以下目标: 1、使用缓存系统可以提高访问效率,提高服务器吞吐能力,改善用户体验。 2、减轻对数据库及存储集服务器的访问压力。 3、Memcached服务器有多台,避免单点故障,提供高可靠性和可扩展性,提高性能。
分布式存储系统
web系统平台中的存储需求有以下两个特点:
1)需要大规模存储系统。存储量很大,经常达到单台服务器无法支持的规模,比如相册、视频等应用。
2)负载均衡cluster中的每个节点都有可能访问任何一个数据对象、每个节点对数据的处理也能被其他节点共享,因此这些节点要操作的数据从逻辑上只能看成一个整体,不是各自独立的数据资源。
因此高性能的分布式存储系统对于大型网站应用来说是非常重要的 一环。
分布式服务器管理系统
大多的网络服务都是以负载均衡集群的方式对外提供服务,随之集群规模的扩大,原来基于单机的服务器管理模式已经不能够满足我们的需求,新的需求必须能够集中式的、分组的、批量的、自动化的对服务器进行管理,能够批量化的执行计划任务。
在分布式服务器管理系统软件中有一些比较优秀的软件,其中比较理想的一个是Cfengine。它可以对服务器进行分组,不同的分组可以分别定制系统配置文件、计划任务等配置。它是基于C/S 结构的,所有的服务器配置和管理脚本程序都保存在Cfengine Server上,而被管理的服务器运行着 Cfengine Client 程序,Cfengine Client通过SSL加密的连接定期的向服务器端发送请求以获取最新的配置文件和管理命令、脚本程序、补丁安装等任务。 通过Cfengine这种集中式的服务器管理工具,我们可以高效的实现大规模的服务器集群管理,被管理服务器和 Cfengine Server 可以分布在任何位置,只要网络可以连通就能实现快速自动化的管理。
代码发布系统
通过代码发布系统,我们可以实现:
1) 生产环境的服务器以虚拟主机方式提供服务,不需要开发人员介入维护和直接操作,提供发布系统可以实现不需要登陆服务器就能把程序分发到目标服务器。 2) 我们要实现内部开发、内部测试、生产环境测试、生产环境发布的4个开发阶段的管理,发布系统可以介入各个阶段的代码发布。 3) 我们需要实现源代码管理和版本控制,SVN可以实现该需求。 这里面可以使用常用的工具Rsync,通过开发相应的脚本工具实现服务器集群间代码同步分发。