上一篇是对大型网站系统的一个总结的一个初步认识,并对大型网站架构的一个简介。这篇我们对大型网站架构的模式进行学习。对于一个大型的网站来说不可能每开发一种大型的网站都需要对其进行创新性的设计,创造一种独特的开发思路,基本上都是一些成熟模式的复用,通过多种成熟模式的组合,对网站的结构进行创造的。虽然对于每个网站的应用场景不同,开发的思路也不尽相同,但是网站的结构也有这一些共同的模式,这些模式已经被许多大型网站一再验证,通过对这些模式的学习,我们可以掌握大型网站架构的一般思路和解决方案,以知道我们架构的设计。
建筑学中对模式是这样定义的:“每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心,这样,你就能一次又一次得使用该方案二不必做重复工作”,模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用。对此我们也学过设计模式这门课,在课程中我们可以清楚的感觉到,设计模式就是对特定应用场景的提供一种成熟的解决方案,我们可以采用这种设计模式,快速的构建一个功能场景的基础框架。下面对网站开发中的一下模式进行总结。
分层:首先就是对一个大型网站进行分层,通过分层的方式将一个庞大的软件系统切分成不同的部分,便于分工合作开发和维护,各层之间具有一定的独立性,只要维持调用接口不变各层可以根据具体问题独立演化发展而不需要其它层必须做出相应的调整。
分割:如果说分层是将软件在横向方面进行切分,那么分割就是在纵向对软件进行切分。网站越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的服务和功能分割开来,包装成高内聚低耦合的模块单元,一方面有助于软件的开发和维护;另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。
分布式:对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着可以使用
更多的计算机完成同样的功能,计算机越多,CPU、内存、存储资源也就越多,能够处理的并发访问和数据量就越大,进而能够为更多的用户提供服务。
集群:使用分布式虽然已经将分层和分割后的模块独立部署,但是对于用户访问集中的模块(比如网站的首页),还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
缓存:缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第-手段,现代CPU越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。
异步:大型网站架构中,系统解耦合的手段除了前面提到的分层、分割、分布等,还有一个重要手段是异步,业务之间的消息传递不是同步调用,而是将一- 个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。
冗余:网站需要7x24小时连续运行,但是服务器随时可能出现故障,特别是服务器规模比较大时,出现某台服务器宕机是必然事件。要想保证在服务器宕机的情况下网站依然可以继续服务,不丢失数据,就需要- -定程度的服务器冗余运行,数据冗余备份,这样当某台服务器宕机时,可以将其上的服务和数据访问转移到其他机器上。
自动化:在无人值守的情况下网站可以正常运行,- -切都可以自动化是网站的理想状态。目前大型网站的自动化架构设计主要集中在发布运维方面。
安全:互联网的开放的特性使得其从诞生起就面对巨大的安全挑战,网站在安全架构方面也积累了许多模式:通过密码和手机校验码进行身份认证;登录、交易等操作需要对网络
通信进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理;等等安全技术手段。