模式词汇来源于建筑学,定义:每个模式描述一个在我们周围不断重复发生发生的问题及该问题解决方案的核心,这样你就能一次又一次使用该方案而不必做重复的工作。
为解决大型网站所遇到的高并发访问、海量数据处理、高可用运行等系列问题,互联网公司实践中提出的解决方案,以实现网站高性能、高可用、易伸缩、可扩展、安全等各种技术架构目标。
将系统横向维度切分为几个部分,每部分负责一部分相对单一的职责,然后通过上层对下层的依赖和调用来组成一个完整的系统。网站架构通常分为应用层、服务层、数据层,应用层负责具体业务和视图展示、服务层为应用层提供基础服务支持(如用户管理服务)、数据层提供数据存储访问服务(数据库、缓存、搜索引擎)。
各层间保持一定的独立性,通过分层便于分工开发和维护。分层结构必须合理规划层次边界和接口,开发过程中严格遵循分层结构的约束,禁止跨层次的调用及逆向调用。
在纵向维度对服务和功能进行分割,包装成高内聚低耦合模块单元,有利于系统的开发和维护及不同模块单元分布式部署,提高网站的并发处理能力和功能扩展能力。
大型网站分割粒度可能会很小。比如应用层按不同业务分割,如购物、论坛、搜索等分割成不同的应用。服务层同样可根据需要将服务分割成合适的模块。
分布式架构可处理大量的并发访问和数据量,高效为更多用户提供更有效的服务。
分布式架构本身存在的问题; 1)网络对分布式服务调用影响严重 2)服务器越多,宕机概率越大,导致大量应用服务不可访问,降低网站可用性 3)数据、事务一致性很难保证。
常用的分布式方案:
1)分布式应用和服务,将分层的应用和分割的服务模块分布式部署,可改善网站性能和并发性、加速开发和发布速度、减少数据库连接资源消耗外,可使用不同应用复用共同的服务,便于业务功能扩展。
2)分布式静态资源,网站的静态资源如JS、图片独立部署,并采用独立的域名,动静分离。可减轻应用服务器的负载压力。
3)分布式数据和存储,分传统关系型数据库分布式及NoSql产品。
4)分布式计算,严格来讲,应用、服务、实时数据处理都是计算,目前网站大多采用Hadoop、MapReduce分布式计算框架进行批处理计算。
5)分布式配置,支持线上服务器配置实时更新
6)分布式锁,分布式环境下实现并发和协同 7)分布式文件,支持云存储。
使用分布式已将分层的应用和分割的服务模块分布式独立部署,接下来要将独立部署的服务器进行集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备或方案共同对外提供服务,提高系统的可用性。
缓存可加快数据访问速度,减轻后端应用和数据存储的负载压力。使用缓存两个前提1)数据访问热点不均衡 2)数据在某个时间段内有效,不会很快过期。
缓存设计分为:1) CDN即内容分发网络Content Delivery Network 2)反向代理Reverse Proxy,属于网站前端架构的一部分,部署在网站的前端,以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端 3)本地缓存,在应用服务器本地缓存热点数据 4)分布式缓存,在数据量非常庞大时,将数据缓存在专门的分布式缓存集群中。
计算机软件发展的一个重要目标和驱动力是降低软件耦合性。业务间消息传递时,将业务操作分成多个阶段,每个阶段通过共享数据的方式异步执行进行协作。单一服务器内部可通过多线程共享内存队列的方式实现异步,分布式系统中,多个服务器集群通过分布式消息队列实现异步,分布式消息队列可看作内存队列的分布式部署。
异步架构是典型的生产者-消费者模式,两者间不存在直接调用。
异步消息队列如下特性:1)提高系统可用性。消费者服务器宕机重启后,可继续读取消息队列内的数据。 2)加快网站响应速度。 3)消除并发访问高峰。
保证网站7*24小时连续运行,就需要一定程度的服务器冗余运行、数据冗余备份。数据库需要定期备份、存档保存,实现冷备份外,为保证线上业务高可用,还需要对数据库进行主从分离,实时同步实现热备份。
自动化架构设计主要集中在发布运维方面。自动化代码管理、测试、安全检测、部署等。上线涉及自动化监控、报警、失效转移、失效恢复、自动化降级、自动化分配资源。
网站在安全架构方面积累相应模式:身份验证-密码和手机校验码、加密、过滤、风险控制、多级安全审核。
浏览器访问优化:1)减少HTTP访问-主要手段合并图片、CSS、JS 2)使用浏览器缓存-设置HTTP头Cache-Control和Expires属性来设置浏览器缓存和间隔批量更新网站静态资源 3)启用压缩-服务器上对文件进行压缩 4)按页面加载顺序放置网页元素-CSS在上、JS在下 5)减少Cookie传输。
CDN加速:CDN网站架构
反向代理:反向代理网站架构
分布式缓存-分布式缓存架构如Memcached、异步操作、使用集群、代码优化-如多线程、资源复用、使用恰当的数据结构、垃圾回收。
通过负载均衡进行无状态服务的失效转移、应用服务器集群的Session管理
高可用的服务策略:1)分级管理 2)超时设置 3)异步调用 4)服务降级 5)幂等性设计-服务层保证服务重复调用和调用一次产生的结果相同,防止服务在层服务多次有效的执行。
CAP原理、数据备份、失效转移
网站伸缩性设计一般可分成二类,1)根据功能进行物理分离实现伸缩,即不同服务器部署不同服务; 2)根据单一功能通过集群实现伸缩,多台服务器集群部署相同服务,提供相同功能。
应用服务器集群可采用负载均衡技术实现服务分发。
代表技术有MemCached分布式缓存架构(待研究)。
常见分为关系数据库集群伸缩设计和NoSQL数据库伸缩设计。
内容来源于:<<大型网站技术架构 核心原理与案例分析>>