每个模式描写叙述了一个在我们周围不断反复发生的问题及该问题解决方式的核心。这样,你就能一次重新地使用该方案而不必做反复工作。
所谓站点架构模式即为了解决大型站点面临的高并发訪问、海量数据、高可靠执行灯一系列问题与挑战。为此,在实践中提出了很多解决方式,以实现站点高性能、高可靠性、易伸缩、可扩展、安全等各种技术架构目标。
1、分层
分词是企业应用系统中最常见的一种架构牧师,将系统在横向维度上切分成几个部分,每一个部分负责一部分相对简单并比較单一的职责,然后通过上层对下层的依赖和调度组成一个完整的系统。
在站点的分层架构中,常见的为3层,即应用层、服务层、数据层。应用层详细负责业务和视图的展示;服务层为应用层提供服务支持;数据库提供数据存储訪问服务,如数据库、缓存、文件、搜索引擎等。
分层架构是逻辑上的,在物理部署上,三层架构能够部署在同一个物理机器上,可是随着站点业务的发展,必定须要对已经分层的模块分离部署,即三层结构分别部署在不同的server上,是站点拥有很多其它的计算资源以应对越来越多的用户訪问。
所以尽管分层架构模式最初的目的是规划软件清晰的逻辑结构以便于开发维护,但在站点的发展过程中,分层结构对站点支持高并发向分布式方向的发展至关重要。
2、分隔
假设说分层是将软件在横向方面进行切分,那么分隔就是在纵向方面对软件进行切分。
站点越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分隔开来,包装成高内聚低耦合的模块单元,不仅有助于软件的开发维护也便于不同模块的分布式部署,提高站点的并发处理能力和功能扩展能力。
大型站点分隔的粒度可能会非常小。比方在应用层,将不同业务进行分隔,比如将购物、论坛、搜索、广告分隔成不同的应用,有对立的团队负责,部署在不同的server上。
3、分布式
对于大型站点,分层和分隔的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的server上,通过远程调用协同工作。分布式意味着可以使用很多其它的计算机完相同的工作,计算机越多,CPU、内存、存储资源就越多,能过处理的并发訪问和数据量就越大,进而可以为很多其它的用户提供服务。
在站点应用中,经常使用的分布式方案有一下几种.
分布式应用和服务:将分层和分隔后的应用和服务模块分布式部署,能够改善站点性能和并发性、加快开发和公布速度、降低数据库连接资源消耗。
分布式静态资源:站点的静态资源如JS、CSS、Logo图片等资源对立分布式部署,并採用独立的域名,即人们常说的动静分离。静态资源分布式部署能够减轻应用server的负载压力;通过使用独立域名加快浏览器并发载入的速度。
分布式数据和存储:大型站点须要处理以P为单位的海量数据,单台计算机无法提供如此大的存储空间,这些数据库须要分布式存储。
分布式计算:眼下站点普遍使用Hadoop和MapReduce分布式计算框架进行此类批处理计算,其特点是移动计算而不是移动数据,将计算程序分发到数据所在的位置以加速计算和分布式计算。
4、集群
对于用户訪问集中的模块须要将独立部署的server集群化,即多台server部署同样的应用构成一个集群,通过负载均衡设备共同对外提供服务。
server集群能够为同样的服务提供很多其它的并发支持,因此当有很多其它的用户訪问时,仅仅须要向集群中增加新的机器就可以;另外能够实现当当中的某台server发生问题时,能够通过负载均衡的失效转移机制将请求转移至集群中其它的server上,因此能够提高系统的可用性。
5、缓存
缓存目的就是减轻server的计算,使数据直接返回给用户。在如今的软件设计中,缓存已经无处不在。详细实现有CDN、反向代理、本地缓存、分布式缓存等。
使用缓存有两个条件:訪问数据热点不均衡,即某些频繁訪问的数据须要放在缓存中;数据在某个时间段内有效,只是非常快过期,否在会由于数据过期而脏读,影响数据的正确性。
6、异步
使用异步,业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每一个阶段之间通过共享数据的方法异步运行进行协作。
详细实现则在单一server内部可用通过多线程共享内存对了的方式处理;在分布式系统中可用通过分布式消息队列来实现异步。
异步架构的典型就是生产者消费者方式,两者不存在直接调用。
7、冗余
站点须要7×24小时连续执行,那么就得有对应的冗余机制,以防某台机器宕掉时无法訪问,而冗余则能够通过部署至少两台server构成一个集群实现服务高可用。数据库除了定期备份还须要实现冷热备份。甚至能够在全球范围内部署灾备数据中心。
8、自己主动化
详细有自己主动化公布过程,自己主动化代码管理、自己主动化測试、自己主动化安全检測、自己主动化部署、自己主动化监控、自己主动化报警、自己主动化失效转移、自己主动化失效恢复等。
9、安全
站点在安全架构方面有很多模式:通过password和手机校验码进行身份认证;登录、交易须要对网络通信进行加密;为了防止机器人程序滥用资源,须要使用验证码进行识别;对常见的XSS攻击、SQL注入须要编码转换;垃圾信息须要过滤等。