《大型网站技术架构》读书笔记:
网站架构模式
关于什么是模式,这个来自建筑学的词汇是这样定义的:“每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作”。模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用。
![](https://i-blog.csdnimg.cn/blog_migrate/ffdd02b9b37d539de924d25ecceb7a40.jpeg)
分层
分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统。
在大型网站架构中也采用分层结构,将网站软件系统分为应用层、服务层、数据层。
应用层:负责具体业务和视图展示,如网站首页及搜索输入和结果展示 (视图层、业务逻辑层)
服务层:为应用层提供服务支持,如用户管理服务,购物车服务等 (数据接口层、逻辑处理层)
数据层:提供数据存储访问服务,如数据库、缓存、文件、搜索引擎等
虽然分层架构模式最初的目的是规划软件清晰的逻辑结构便于开发维护,但在网站的发展过程中,分层结构对网站支持高并发向分布式方向发展至关重要。因此在网站规模很小的时候就应该采用分层的架构,这样将来网站做大时才能有更好地应付。
分割
如果说分层是将软件在横向方面进行切分,那么分割就是在纵向方面对软件进行切分。
大型网站分割的粒度可能会很小。比如在应用层,将不同业务进行分割,例如将购物、论坛、搜索、广告分割成不同的应用,由独立的团队负责,部署在不同的服务器上。
分布式
对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署。
在网站应用中,常用的分布式方案有以下几种。
分布式应用和服务
将分层和分割后的应用和服务模块分布式部署。
分布式静态资源
网站的静态资源如JS,CSS,Logo图片等资源独立分布式部署,并采用独立的域名,即人们常说的动静分离。
分布式数据和存储
分布式计算
还有分布式配置,分布式锁,分布式文件系统等。
集群
在网站应用中,即使是访问量很小的分布式应用和服务,也至少要部署两台服务器构成一个小的集群,目的就是提高系统的可用性。
缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度。
CDN
反向代理
本地缓存
分布式缓存
使用缓存有两个前提条件,一是数据访问热点不均衡,某些数据会被更频繁的访问,这些数据应该放在缓存中;二是数据在某个时间段内有效,不会很快过期。
异步
大型网站架构中,系统解耦合的手段除了前面提到的分层、分割、分布等,还有一个重要手段是异步。
异步架构是典型的生产者消费者模式,两者不存在直接调用。
使用异步消息队列有如下特性:
提高系统可扩展性
提高系统可用性
加快网站响应速度
消除并发访问高峰
冗余
服务集群,冗余实现服务高可用
数据库定期备份,存档保存,实现冷备份;主从分离,实时同步实现热备份
数据中心备份,全球范围内灾备数据中心
自动化
目前大型网站的自动化架构设计主要集中在发布运维方面。
发布对网站都是头等大事。
发布过程自动化:自动化代码管理 、自动化测试、自动化安全检测、自动化部署
网站在运行过程中可能会遇到各种问题:服务器宕机、程序Bug、存储空间不足、突然爆发的访问高峰。
自动化监控、自动化报警、自动化失效转移、自动化失效恢复、自动化降级、自动化分配资源
安全
通过密码和手机校验码进行身份认证
网络通信加密(登录、交易等)
存储敏感数据加密处理
网站验证码
常见攻击处理:XSS攻击、SQL注入
垃圾信息、敏感信息过滤
风险控制(对交易转账等重要操作)
小结
好的设计绝对不是模仿,不是生搬硬套某个模式,而是对问题深刻理解之上的创造与创新,即使是“微创新”,也是让人耳目一新的似曾相识。山寨与创新的最大区别不在于是否抄袭,是否模仿,而在于对问题和需求是否真正理解与把握。
(转载请注明来源:http://zhanjia.iteye.com/blog/2038589)