大型网站架构模式
每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。
分层
逻辑上
对软件进行横向拆分,通常拆分为三层:应用层、服务层、数据层。便于分工合作和后期的扩展维护,要注意的是接口和层次边界要规划合理,开发过程中禁止跨层调用和逆向调用。
物理上
将各层分别部署到不同的服务器以应对更多的访问压力。
分割
软件的纵向拆分,在应用层根据业务划分为商品模块、订单模块、咨询模块等,分别部署便于维护,提高并发处理能力。
分布式
伴随分布式也带来一些问题,如访问网络造成性能的下降,服务器宕机概率上升导致网站不可用以及数据一致性难得到保证。所以分布式是根据需求决定是否启用。
通常的分布式方案有以下几种:
分布式应用和服务
改善网站性能,服务服用,便于业务扩展,
分布式静态资源
动静分离,减轻服务器压力,加快浏览器并发加载速度,
分布式数据和存储
对大量数据进行分布式存储,还可以采用NoSql,
分布式计算
用于搜索引擎和数据分析,有Hadoop,MapReduce等云计算框架特点是移动计算而非移动数据,将计算程序发送到数据所在的位置以加速计算和分布式计算。
集群
将同一应用部署到多台服务器以提高对高并发的处理。
缓存
将数据存放在里计算机最近的位置以加快处理速度。常见的缓存方式:
CDN
内容分发网络,网站将静态资源通过CDN服务商部署到各个地方,不同地区的用户会访问离他最近的资源,加快了访问速度。
反向代理
部署在网站前端,缓存有网站的静态资源,服务请求最先访问的是反向代理, 不访问应用服务器就能拿到静态资源数据。
本地缓存
应用服务器本地缓存了热点数据,无需访问数据库。
分布式缓存
缓存数据量大时,对缓存做分布式,通过网络通信访问缓存数据(Redis,Memcache等)。
使用缓存应注意的两个条件:1对经常访问的热点数据做缓存,2数据在某个时间段一直有效不会很快过期,否则会导致脏读。
异步
业务之间的消息传递不是通过同步调用,而是将业务操作分成多个阶段,每个阶段通过共享数据的方式异步执行进行协作。
异步架构是典型的生产者消费者模式,前面的操作将数据写入队列,后面的操作从队列中读数据(单服务器使用内存队列,多服务器通过分布式消息队列实现异步)。
一个简单的例子:
异步带来的好处:
提高系统可用性
消费者服务器发生故障,生产者可以继续工作,加快网站响应速度
,消除并发访问高峰
削峰填谷,网站高访问量时期,消息队列将请求数据放入队列中依次处理,缓解网站负载压力。常用的消息队列:ActiveMQ,RabbitMQ,RocketMQ,Kafka,ZeroMQ等
冗余
保证在服务器宕机的情况下,网站能够继续服务,不会丢失数据。数据库需要做冷备份(定期备份,存档保存)和热备份(数据库主从分离,实时同步),做集群。
自动化
能让机器做的事情,就让机器来做。如自动化部署
,自动化测试
,监控系统
,报警系统
,自动化的安全监测
等。这一块大部分是运维方面。
好处:
1.避免人为导致的错误
2.提高效率
安全
网站对用户登录、交易信息的网络通信进行加密,低于网络攻击,过滤垃圾信息。(服务器安全,数据安全、数据传输安全、应用程序安全等)
以及以下两点的考虑:
1.现有安全问题(漏洞,伪造,篡改等),已经的安全问题解决掉
漏洞:文件上传,注入漏洞(SQL,OS命令),脚本攻击等
2.有预防或预警机制,做到事前监控,尽量较少因安全问题导致的损失
针对未知问题
病毒:特征库,监测已知的病毒; 病毒的监控:发现疑似病毒,报警,排查,确定,解决问题