@大型网站架构模式
关于什么是模式,这个次来自建筑学的词汇是这样定义的:“每个人描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作”。模式的关键在于模式的可重复性,问题和场景的可重复性带来解决方案的可重复使用。
@网站架构模式
为了解决大型网站面临的高并发访问,海量数据处理,高可靠性运行等一系列问题与挑战,大型互联网公司在实践中提出了许多解决方案,以实现网站性能,高可用,易伸缩,可扩展,安全等各种技术架构目标。这些解决方案又被更多网站复用,从而逐渐形成大型网站架构模式。
一,分层
网站分层架构:应用层,服务层,数据层
在大的分层结构内部还可以继续分层,如应用层可以再细分为视图层(美工负责)和业务逻辑层(工程师负责);服务层也可以细分为数据接口层(适配各种输入和输出的数据格式)和逻辑处理层。
二,分割
如果说分层是将软件在横向方面进行切分,那么分割就是在纵方面对软件进行切分。
大型网站分割的粒度可能会很小。如应用层,将不同业务进行分割,例如将购物车,论坛,搜索,广告分割成不同的应用,由独立的团队负责,部署在不同的服务器上。当然购物业务还可以再分为机票酒店业务,3C业务等。这些模块不管在逻辑上还是在物理部署上,可以是独立的。同样在服务层也可以根据需要将服务分割成合适的模块。
三,分布式
对于大型网站,分割和分层的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着可以使用更多的计算机完成同样的功能,计算机越多,CPU,内存,内存资源也就越多,能够处理的并发访问和数据量就越大,进而能够为更多的用户提供服务。
分布式在解决高并发问题的同时也带来其他问题:如宕机几率变大,数据一致性困难,开发管理维护困难。因此分布式设计要根据具体情况量力而行,切莫为了分布式而分布式。
在网站应用中,常用的分布式方案有:
1,分布式应用和服务
2,分布式静态资源
3,分布式数据和存储
4,分布式计算
此外,还有可以支持网站线上服务器配置实时更新的分布式配置;分布式环境下实时并发和协同的分布式锁;支持云存储的分布式文件系统等。
四,集群
使用分布式虽然已经将分层和分割后的模块独立部署,但是对于用户访问集中的模块(如网站的首页),还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
五,缓存
缓存就是将数据存放在距离计算最近的位置加快处理速度。缓存是改善软件性能的第一手段,现代CPU越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。
1,CDN,即内容分发网络
2,反向代理
3,本地缓存
4,分布式缓存
六,异步
计算机软件发展的一个重要目标和驱动力是降低软件耦合性。事物之间直接关系越少,就越少被彼此影响,越可以独立发展。
异步架构是典型的生产者消费者模式,两者不存在直接调用,只要保持数据结构不变,彼此功能实现可以随意变化而不互相影响,这对网站扩展新功能非常便利。使用异步消息队列还有如下特性:
1,提高系统可用性
2,加快网站响应速度
3,消除并发访问高峰
七,冗余
网站难免出现故障,当故障出现,通过冗余服务器,冗余数据的备份,可以将故障机上的访问转移到冗余机器上,从而实现服务高可用。
数据库除了定期备份,存档保存,实现冷备份外,为了保证在线业务高可用,还需要对数据库进行主从分离,实时同步实现热备份。
为了抵御地震,海啸等不可抗力导致的网站完全瘫痪,某些大型网站会对整个数据中心进行备份,全球范围内部署灾备数据中心。
八,自动化
发布对网站是头等大事,许多网站故障出在发布环节。通过减少人为干预,使发布过程自动化可有效减少故障。发布过程包括诸多环节。自动化代码管理,自动化测试,自动化安全检测,自动化部署。
此外,网站运行过程也会遇到问题,这时需要自动监控,自动化报警,自动化失效转移,自动化失效恢复,自动化降级,自动化分配资源。
九,安全
常用的如密码,验证码,加密,过滤等
@架构模式在新浪微博的应用
新浪微博也是从一个小网站开始发展起来的,简单的LAMP架构,支撑最初的新浪的微博,随着业务快速发展,最后形成如下架构:
十,小结
模式受其使用场景限制,对系统的要求和约束也很多,不恰当的使用模式只会画虎不成反类犬。
好的设计绝对不是模仿,不是生搬硬套某个模式,而是对问题深刻理解之上的创造与创新,即使是“微创新”,也是让人耳目一新的似曾相识。山寨与创新的醉倒区别不在于是否抄袭,是否模仿,而在于对问题和需求是否真正理解与把握。