您的位置:首页 > 运维架构 > 网站架构

大型网站核心架构要素

2015-08-05 14:44 417 查看
什么是架构:通俗点讲:最高层次的变化,难以改变的决定。
软件架构的定义:有关软件整体结构与组件的抽象描述,用于指导大型软件系统各方面的设计。这些组成部分可以是具体的功能需求,也可以是非功能的设计与决策。
一般来说。软件架构除了当前的系统功能需求外,软件架构还需要关注性能、可用性、可伸缩性、可扩展性和安全性五大方面。
1、性能
优化网站性能的手段也比较多,从用户浏览器到数据库。影响用户请求的所有环节都可以进行性能优化。
优化方案:

在浏览器端,可以通浏览器缓存、使用页面压缩、合理布局页面,减少Cookies的传输等手段改善性能。
使用CDN,将静态内容分发到离用户最近的网络提供商机房,使用户通过最短访问路径获取数据,可以在网站机房部署反向代理(如:Nigex)缓存热点文件,加快响应速度。减轻应用服务器的压力。
在应用服务器端,可以使用服务器本地缓存和分布式缓存,通过缓存在内存中的热点数据处理用户的请求,加快请求处理过程。减轻数据库的负载压力。
通过异步操作将用户请求发送到消息队列等待后续任务处理,而当前请求直接返回响应给用户。
在高并发请求情况下,可以采用多台应用服务器组成集群共同对外服务,提高整体处理能力,改善性能。
在代码层面,可以采用多线程、改善内存管理手段优化性能。
在数据库层面,可以采用索引、缓存、SQL性能优化手段都已经比较成熟,方兴未艾的Nosql数据库通过优化数据模型、存储结构、伸缩特性等手段在性能方面的优势也日趋明显。

衡量性能的指标包括:重要的响应时间、TPS、系统性能计数器等.通过监控这些指标可以分析系统瓶颈,预测网站容量,并对异常指标进行报警,保障系统的可用性.

2、可用性
几乎所有的网站都承诺7X24小时可用,实际上任何网站都不可能达到完全的7X24小时可用,总会有一些故障时间,扣除这些故障时间就是网站的可用时间。这个时间可以换算成网站的可用性指标,以此衡量网站的可用性。
网站高可用性的手段是冗余,应用部署在多台服务器上同时提供访问,数据存储在多台服务器是相互备份,任何一台服务宕机都不会影响整体的可用,也不会导致数据丢失。
对于应用服务器而言,多台应用服务器通过负载均衡设备组成一个集群共同对外提供服务,任何一台服务器宕机,只需要把请求切换到其他服务器就可实现应用的高可用性。但是一个前提是应用服务器不能保存请求的会话信息。否则服务器宕机,会话丢失,即使将用户请求转发到其他服务器上也无法完成业务处理。
对于存储服务器,由于其上存储着数据,需要对数据进行实时备份,当服务器宕机是时需要将数据访问转移到可用的服务器上,并进行数据恢复以保证继续有服务器宕机的时候数据依然可用。
除了运行环境,网站的高可用还需要软件开发过程的质量保证。通过发布验证、自动化测试、自动化发布、灰度发布等手段,减少将故障引入线上环境的可能,避免故障范围扩大。
最后,衡量一个系统是否满足高可用的目标,就是假设系统中任何一台或多台服务器宕机时,以及出现各种不可期的问题时,系统整体是否依然可用。
3、伸缩性
大型网站需要面对大量用户的高并发访问和存储海量数据,不可能只用一台服务器就处理全部用户请求,存储全部数据,网站通过集群的方式将多台服务器组成一个整体共同提供服务。所谓伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的并发访问压力和不断增长的数据存储需求。
《!-- 衡量网站架构扩展性好坏的主要标准就是在网站增加新业务的同时,是否可以实现对现有产品透明无影响,不需要任何改动或者很少改动既有的业务功能就可以上线新产品。不同产品之间是否很少--》
衡量架构的伸缩性的主要指标就是是否可以用多台服务器构建集群,是否穿得向集群中添加新的服务器,加入新的服务器后是否可以提供和原来服务无差别的服务,集群中可容纳的总的服务器数量是否有限制。
对于应用服务器集群:只要服务器不保存数据,所有服务器都是对等的,通过使用合适的负载均衡设备就可以向集群中加入服务器。
对于缓存服务器集群:加入新的服务器可能导致缓存路由失效,进而导致集群中大部分缓存数据都无法访问。虽然缓存的数据可以通过数据库重新加载 ,但是如果应用已经严重依赖缓存,可能会导致整个网站的崩溃。需要改进缓存路由算保证缓存数据的可访问性。
关系型数据库虽然支持数据复制,主从热备等机制,但是很难做到大规模集群的可伸缩性,因此关系型数据库的集群伸缩性方案必须在数据库之外实现,通过路由分区等手段将部署有多外数据库的服务器组成一个集群。
至于大部分NoSql数据库产品,由于其先天就是为海量数据而生,因此其对伸缩性的支持通常非常好,可以做到较少运维参与的情况下实现集群规模的线性伸缩。
4、扩展性
不同于其他架构要素主要关注非功能性需求,网站的扩展性架构直接关注网站的功能需求。网站快速发展,功能不断扩展,如何设计网站的架构使其能够快速响应需求变化,是网站可扩展架构的主要的目的。
衡量网站架构扩展性好坏的主要标准就是网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要改动或者很少改动既有业务功能就可以上线新产品。不同产品之间是否很少耦合。一个产品的改动对其他产品无影响,其他产品和功能不需要受牵连进行改动。
网站可伸缩架构的主要手段是事件驱动架构和分布式服务。
事件驱动架构在网站通常利用消息队列来实现,将用户请求和其他业务事件构造成消息发布到消息队列,消息的处理者作为消费者从消息队列中获取消息进行处理,通过这种方式将消息产生和消息处理分离开来,可以透明地增加新的消息生产者任务或者新的消息消费者任务。
分布式服务则是将业务和可复用服务分离开来,通过分布式服务框架调用。新增产品可以通过调用可复用的的服务实现自身的业务逻辑,而对现有产品没有任何影响。可复用服务升级变更的时候,也可以通过提供多版本服务对应用实现透明升级,不需要强制应用同步变更。
大型网站还会吸引第三方开发者,调用网站服务,使用网站数据开发周边产品,扩展网站业务。第三方开发者使用网站服务的主要途径是大型网站提供的开放平台接口。
5、安全性
网站的安全架构就是保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取。
衡量网站安全架构的标准就是针对现存和潜在的各种攻击与窃密手段,是否有可靠的应对策略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: