大型网站核心架构要素
Posted roggeyue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大型网站核心架构要素相关的知识,希望对你有一定的参考价值。
1.性能——响应时间决定用户:
问题本质——用户视角的网站性能:用户的感受包括用户计算机和网站服务器通信的时间,网站服务器处理的时间,用户计算机浏览器构造请求解析响应数据的时间。
即影响用户体验的有用户计算机的性能,网络运营商宽带服务的差异,网站服务器性能(也跟网站代码实现有关),用户使用浏览器解析html的速度
开发人员视角的网站性能指标有:
(1)响应时间:从请求到收到最后响应数据的时间(如果测试的目标程序本身需要花费的时间极少,一般通过测试多次执行需要的总响应时间除以次数)。
(2)并发数:系统同时能够处理请求的数目 ,反映系统的负载特性(通过多线程模拟并发的方式,为了模拟实际用户,两次请求之间加入一个随机等等时间,这个时间间被称作思考时间)。
注:网站系统用户数>>网站在线用户数>>网站并发用户数
(3)吞吐量:单位时间内系统处理的请求数,体现系统的整体处理能力。
注:对于网站,吞吐量的衡量可以用‘请求数/秒’,‘页面数/秒’,‘访问人数/天’,‘处理的业务数/小时’等,常量化指标有:TPS(每秒事务数),HPS(每秒HTTP请求数),QPS(每秒查询数)等。
(4)性能计数器:描述服务器或操作系统性能的一些数据指标,包括System Load、对象与线程数、内存使用、CPU使用、磁盘与网络I/O等,这些指标也是系统监控的重要参数,可以对这些指标设置报警阈值,当监控系统发现性能计数器超过阈值时,就会报警。
注:System Load,即系统负载,指当前被CPU执行和等待被执行的进程数总和,反映系统忙闲程度(多核CPU情况下,完美情况是所有CPU都在使用,没有进程在等待处理,所以Load的理想值是CPU数目,linux系统中用top命令查看,显示的三个浮点数分别表示最近1分钟,10分钟,15分钟的运行队列平均进程数)
性能测试方法:见性能测试
主要优化手段:
(1)浏览器端:
①浏览器缓存;
②使用页面压缩;
③合理布局页面;
④减少Cookie传输;
(2)CDN:将网站静态内容分发至离用户最近的网络服务商机房,让用户通过最短访问路径获取数据。
(3)反向代理服务器:缓存热点文件,加快请求响应速度,减轻应用服务器压力
(4)应用服务器端:
①服务器本地缓存;
②分布式缓存;
③通过异步操作将请求发送至消息队列等待后续处理,加快请求响应及实现削峰;
④集群
(5)代码层面:多线程,改善内存管理等。
(6)数据库服务器端:索引,缓存,SQL优化,另外,方兴未艾的NoSQL数据库通过优化数据模型、存储结构、伸缩性等手段在性能方面的优势日趋明显。
衡量网站性能的一些指标:响应时间,TPS,系统性能计数器等。通过测试这些指标以确定系统设计是否达到目标。这些目标也是网站监控的重要参数,通过监控这些指标可以分析系统瓶颈,预测网站容量,并对异常指标进行报警,保障系统可用性
对于网站而言,性能符合预期仅仅是必要条件,因为无法预知网站可能会面临的访问压力,所以必须要考察系统在高并发访问情况下,超出负载设计能力的情况下可能会出现的性能问题。
网站需要长时间持续运行,还必须保证系统在持续运行且访问压力不均匀的情况下保持稳定的性能特性。
2.可用性——你能保证几个9?
网站高可用设计的前提是必然会出现服务器宕机,而高可用设计的目标就是当服务器宕机的时候,服务或者应用依然可用。
提高可用性的方法:
(1)主要手段——冗余:
①应用服务器:多台应用服务器通过负载均衡设备组成一个集群共同对外提供服务,任何一台服务器宕机,只需把请求切换即可(前提是应用服务器没保存会话信息)
②存储服务器:对数据进行实时备份,当服务器宕机时将数据访问转移到可用服务器上,并进行数据恢复,以保证其他服务器宕机时数据依然可用
除了上述,还需要软件开发过程的质量保证,通过预发布验证、自动化测试、自动化发布、灰度发布等手段,减少将故障引入线上环境的可能,避免故障范围扩大
3.伸缩性:通过不断向集群中添加服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求
(1)衡量标准:
①是否可以多台服务器构建集群?
②是否容易向集群中添加新服务器?
③加入服务器后是否能提供无差别服务?
④集群中可容纳的服务器数量是否有限制?
(2)主要手段:
①应用服务器:使用合适的负载均衡设备(应用服务器上不保存数据);
②缓存服务器:加入新服务器可能使缓存路由失效,对严重依赖缓存的应用可能会导致崩溃,所以需要改进缓存路由算法保证缓存数据的可访问性;
③数据库服务器:关系数据库支持数据复制,主从热备,但是很难做到大规模集群的可伸缩性。所以集群伸缩性方案必须在数据库之外实现,通过路由区分等手段将部署有多个数据库的服务器组成一个集群;nosql对伸缩性的支持通常都很好。
4.扩展性——不痛不痒新业务就上线了
衡量标准:增加新业务时是否对现有产品透明无影响,不需要任何改动或者很少改动既有业务功能就可以上线新产品。
主要手段:
(1)事件驱动架构:通常利用消息队列实现,将消息产生和消息处理分开,可以透明地增加生产者任务或消费者任务
(2)分布式服务:将业务和可复用服务分离,通过分布式服务框架调用。
5.安全性
安全架构:保护网站不受恶意访问和攻击,保护网站重要数据不被窃取
衡量标准:针对现存和潜在的各种攻击与窃密手段,是否有可靠的应对策略。
以上是关于大型网站核心架构要素的主要内容,如果未能解决你的问题,请参考以下文章