架构模式及要素
一:网站架构模式
1.分层
分层是企业应用中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对单一的职责,然后通过上下层的依赖和调用组成一个完整的系统。
分层在计算机世界里无处不在,网络的七层结构就是一种分层架构。计算机的硬件,操作系统,应用软件也可以看成一种分层。大型网站架构一般将系统分为应用层,服务层,数据层(这和MVC有异曲同工之意)
通过分层,我们可以将庞大的系统分割成不同的部分,便于分工合作开发与维护。而且各层之间具有一定的独立性,只要维护调用接口不变,各层内部可以独立演化发展只要保证接口不变
2.分割
分割就是在系统纵向上进行切分,将同一层的服务进行纵向分割,包装成高内聚低耦合的模块单元。比如购物、论坛、搜索、广告、卖家、卖家分割成不同的应用,交给不同的部门独立开发
3.分布式
对于大型网站,分割和分层的一个主要目的就是便于分布式部署,及不同的模块部署到不同的服务器上,通过远程调用协同工作(这些服务器在同一机房内网时,速度会很快,网络延迟率很低)。分布式意味着使用更多的机器,CPU以及系统资源也就更多,类似于分而治之,将一项工作分给多个人共同完成。、
另外分布式也存在的一些问题,服务器越多,服务宕机的概率也就越大,一台服务器不可用可能导致整个系统不可用。另外分布式环境中保证数据一致性也比较困难,分布式事务也难以保证。分布式还导致网站依赖错综复杂,开发维护难度大。
常用的分布式,分布式应用和服务:是将分层分割后的应用和服务模块分布式部署,改善网站性能。分布式静态资源:将网站的讲台资源如JS,CSS,LOGO图片等资源独立部署,采用独立域名,即人们常说的动静分离
4.集群
使用分布式虽然已经将模块分开,然而对于用户集中访问的模块(比如网站首页)效果依然不好,所以还需要独立部署服务器集群,即多态服务器都不熟相同应用,通过负载均衡设备共同对外服务。
5.缓存
缓存是解决系统性能的首选方案,在在之前的《大型网站架构演化》中,我们也有提到缓存的形式及特点,这里不做过多累述,主要分为以下几种:本地缓存 ,分布式缓存,CDN,反向代理
6.异步
异步消息队列可用性抢,一台宕机另一台可以继续工作(消息产生的服务器和消息处理的服务器)可用性好,另一方面也大大减少了响应时间,消除了并发访问高峰的问题,比如新浪微博就是一个很好的例子,大V用户比如姚晨发了一条微博,我们默认采用退的模式的时候,她发完微博我们就要推2000万次,不可能等待执行完了才给姚晨返回,所以将任务扔到消息队列中,先返回用户体验会更好
二:架构要素
网站的架构主要要涉及如下五个方面的问题: 性能、可用性、伸缩性、扩展性、安全性。一般情况下性能室决定网站升级的触发器
1.性能
在浏览器端,我们可以通过浏览器缓存,使用页面压缩,合理布局页面,减少cookie传输的手段改善性能
在前端服务器,还可以使用CDN,反向代理,缓存热点数据等方法
在应用服务器,可以使用服务器本地缓存,分布式缓存,集群负载均衡等,还可以通过异步,消息队列等方面
在代码层,可以使用多线程,改善内存管理等手段
在数据库端,索引,缓存,SQL优化,硬件优化,底层参数优化(参见《Mysql性能优化》)等方法,还可以使用NoSQL等技术
2.可用性
可用性就如同网站可用的时间长度,可用性意味着当服务器宕机时服务依旧可用,对于应用服务器而言,多台服务器通过负载军和组成一个集群,当一台服务器宕机时,只需把请求引导其他的服务器上就可实现高可用
3.伸缩性
当访问增大时,服务器需要扩展,加入更多的服务器,这就是伸缩性。服务器的扩展性需要我们选择合适的负载均衡设备
4.扩展性
随着网站的发展,业务不多增大,此时就要考验到服务器的扩展性,新加功能是否容易。采用事件驱动,将消息的产生和处理分开,可有效提高服务器的扩展性
5.安全性
安全性自然不必多说,衡量网站安全性的标准就是针对现存和潜在的各种攻击和窃取手段是否有可靠的应对策略参见:大型网站技术架构--李智慧