好刚编程: 网站架构三之架构要素
Posted 好刚编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了好刚编程: 网站架构三之架构要素相关的知识,希望对你有一定的参考价值。
你好,我是好刚,再上一节介绍了网站架构的9种模式,了解大型网站常见的技术问题以及相应的解决方案。这一节继续介绍大型网站技术架构的第三章:网站架构的5个要素。
设计软件架构时除了系统功能需求,还需要关注性能,可用性,伸缩性,扩展性和安全性5个架构要素,它们也是考察软件架构设计得好不好的衡量标准。以下从这5个要素分别是什么,如何达到要求以及怎么衡量的角度来简单描述它们。
1. 性能
网站性能直接影响用户体验,没有人可以忍受一个响应缓慢的网站。
从用户浏览器到数据库,常见的优化手段也有很多:
浏览器端:可以使用浏览器缓存,压缩页面大小,减少cookie 的方式加快响应。
CDN/反向代理缓存:CDN 是将数据分发至离用户最近的服务商机房,加快数据返回;反向代理是使用反向代理服务器缓存热点数据,以起到快速响应请求,并且减少服务器计算的作用。
应用服务器:使用缓存,直接从内存中读取数据,减轻数据库负载压力;使用异步,将用户请求数据写入队列后,就直接返回响应,由后端程序处理;使用集群,多台服务器功能对外提供服务,提升并发处理能力;还可以优化代码,使用多线程,合并重复请求等方式提升性能。
数据库端:可以通过索引,数据缓存,优化SQL 语句等手段加快查询,也可以针对特定数据使用场景引入NoSQL 数据库。
在衡量性能时重要指标是响应时间,TPS等;监控系统也通过监控这些指标,了解系统状态,分析性能瓶颈,对异常项进行报警,以保障系统可用性。
2. 可用性
网站总会有一些故障时间,总运行时间减去故障时间,就是网站总可用时间。用总可用时间与总运行时间的百分比来衡量可用性,大型网站的可用性一般可以做到99.99%,即一年只有52分钟不可使用。
故障主要发生在两个时期,首先是代码运行期间,机器总会发生故障,为了保证系统可用,可以对应用和数据冗余部署:对应用程序集群化,一台机器故障时,还可以由正常的机器继续提供服务;数据库冷备和实时热,一个数据节点故障时,也可以通过备份快速恢复。
其次是发布的时候,由于代码更新导致服务不可用。这需要通过自动化发布,来减少发布中的人为故障和环境问题;灰度发布,避免故障范围扩大。
最后衡量一个系统是否满足高可用标准,可以假设系统中任何一台机器宕机时,系统整体是否仍然可以使用。
3. 伸缩性
面对大量用户访问和海量数据的存储需求,网站需要站通过集群对外提供服务,伸缩性是指可以通过不断往集群中添加服务器的方式,来缓解不断上升的用户并发访问压力。
在网站架构中,伸缩性主要体现在3个方面:
应用服务器层面,通过集群实现伸缩性,在集群内部各台机器是对等的,可以通过负载均衡策略不断添加新机器。需要注意不能在服务器本地保存数据,不然当请求转发到另一台机器时会访问不到数据。
分布式缓存,它的特点是加入新机器会导致缓存路由失效,使大部分缓存数据无法访问,需要改进路由算法来保证缓存可用性,常见算法为一致性HASH 算法。
关系数据库,扩展比较困难,主要通过路由分区,部署多个数据库服务器组成集群。
衡量架构伸缩性的标准主要是看应用程序或者服务是否可以集群化部署,是否容易添加新机器,并且以添加机器的方式,持续提升服务能力。
4. 扩展性
扩展性主是指网站架构快速响应需求变化的能力。通过减少产品耦合,使产品的改动不影响其他产品来实现。主要方案有:
事件驱动,基于生产者和消费者模式,通过消息队列传递数据,这样可以透明地增加生产者和消费者任务,而不影响已有业务功能。
第二个是分布式服务,将可复用的服务从业务中分离出来,新产品直接调用这些服务实现业务,也不会影响已有业务。
衡量扩展性的主要标准是看在快速响应新需求,增加新产品时,是不是不影响已有产品业务。
5. 安全性
由于互联网的开放性,任何人都可以访问我们的网站,安全架构就是保护网站不受恶意攻击,数据不被窃取。衡量标准是,针对各种攻击手段是否有可靠的应对策略。
小结
最后小结一下,这一节主要简单介绍了网站架构的5个要素:性能,可用,伸缩,扩展和安全性,处理好了这些要素,也就克服了大部分的网站架构挑战。
大型网站技术架构的第三章:网站架构的5个要素就先介绍到这。这一节是后续内容的一个提纲,你可能还想继续深入了解每一个要素,下一节我将首先从网站架构的高性能讲起。
参考资料
《大型网站技术架构:核心原理与案例分析》 李智慧
以上是关于好刚编程: 网站架构三之架构要素的主要内容,如果未能解决你的问题,请参考以下文章