课堂作业04——读大型网站技术架构后感
结合XXX项目
读大型网站技术架构:核心原理与案例分析
——5,6,7章后感
在阅读大型网站技术架构之前我们学到:可以用六个质量属性衡量系统架构的好坏,所谓上梁不正下梁歪,架构也是获取许多质量属性的基础。
讲到可用性,就像永远没有不变的需求,一个系统的完全可用性永远无法达到的,但可用性是一个系统最重要的属性,不可用的系统是没有意义的。国内的QQ服务99.99%可用,也就是每年只有53分钟的时间是不可用的,而Twitter网站的可用性不足99%,相比较而言,国内在社交软件的可用性要求上还是比较高的。一个高可用性的网站可能需要过硬的技术、大量的设备资金投入、富有责任心的工程师和一个好运气。
系统运行时,硬件故障是常态,所以一个高可用架构设计的主要目的是保证硬件服务器故障时服务仍然可用并且数据依然能存储和访问。实现该架构的主要手段就是数据和服务的冗余备份及失效转移。
大型网站的服务器通过分层集群的方式实现高可用性,应用层的负载均衡技术就像是给服务器安了一个卫兵,让负载均衡服务器与服务器构成一个队伍,随时监测服务器安全状况,一旦发生问题便剔除他,并把任务交给其他安全的服务器。但这种技术也会有失误的时候,因为备份的服务器是完全一样的,当一台服务器因为某种原因不可用时,其他服务器也会因为这个问题宕掉。对于XXX系统,用户访问量相对较小,我们可以使用这种方式来提高系统可用性,即提供一个备用服务器。另外,如果服务器没有配置到负载均衡服务器上,外部用户是无法访问的。
应用层中的session信息对系统的可用性也是至关重要的,大型的web网站会有大量的session信息要存储,选择一个正确的session管理方式不仅可以保证系统可用,还可以提高系统运行速度。正如上次对淘宝网架构的了解中认识到session管理的重要性。一种较好的session管理方式是使用session服务器,将服务器重新划分为有状态的无状态。
高可用的数据有数据持久性、数据可访问性、数据一致性三层含义,数据备份中的热备方式有两种:异步热备、同步热备,其中同步热备较为常用。可采用同步热备的方式给XXX系统进行数据备份,以防数据丢失。
实现网站的伸缩性有两种:在不同的服务器上部署不同的服务,提供不同的功能;在集群内多台相同的服务器中部署相同的功能,实现相同的功能。实现负载均衡的基础技术有:HTTP协议重定向负载均衡、DNS域名服务器负载均衡、反向代理负载均衡、IP负载均衡、数据链路层负载均衡等。对XXX系统而言,可应用DNS域名服务器负载均衡技术。
许多Web 应用程序都将数据保存到REBMS(关系数据库管理系统)中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大,访问的集中,就会出现REBMS的负担加重,数据库响应恶化,网站显示延迟等重大影响。Memcached是高性能的分布式内存缓存服务器。一般的使用目的是通过缓存数据库查询结果,减少数据库的访问次数,以提高动态Web 应用的速度、提高扩展性。
开发低耦合系统是软件设计的终极目标之一(一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合),在XXX系统中,降低系统耦合性可以从代码编辑、结构设计入手,尽量封装。文中使用分布式消息队列(消息队列是一种进程间通讯机制)来降低耦合,使系统更容易扩展,低耦合的模块更容易复用,一个低耦合的系统设计也会让开发过程和维护变得更加轻松和容易管理,提高系统可用性。