`

大型网站技术架构-读书笔记

 
阅读更多

大型网站核心架构5要素:

 

一、性能

 

1.Web前端性能优化

 

(1)浏览器访问优化:

 

  ①减少http请求:因为http是无状态的,每次请求的开销都比较昂贵(需要建立通信链路、进行数据传输,而服务器端对于每个http请求都需要启动独立的线程去处理);减少http的主要手段是合并CSS、合并JS、合并图片(CSS精灵,利用偏移定位image);

 

  ②使用浏览器缓存:设置http头中Cache-Control和Expires属性;

 

  ③启用压缩:可以对html、css、js文件启用Gzip压缩,可以达到较高的压缩效率,但是压缩会对服务器及浏览器产生一定的压力;

 

  ④CSS放页面最上面,JS放页面最下面:浏览器会在下载完全部CSS之后才开始对整个页面进行渲染,因此最好将CSS放在页面最上面;而浏览器在加载JS后会立即执行,有可能会阻塞整个页面,造成页面显示缓慢,因此最好将JS放在页面最下面;

 

  ⑤减少Cookie传输:一方面,太大的Cookie会严重影响数据传输;另一方面,对于某些静态资源的访问(如CSS、JS等)发送Cookie没有意义;

 

(2)CDN加速:

       CDN(内容分发网络)仍然是一个缓存,它将数据缓存在离用户最近的地方,便于用户以最快速度获取数据。即所谓的“网络访问第一跳”。

  CDN只将访问频度很高的热点内容(例如:图片、视频、CSS、JS脚本等访问频度很高的内容)进行缓存,可以极大地加快用户访问速度,减少数据中心负载。

 

(3)反向代理:

  反向代理服务器位于网站机房,代理网站Web服务器接收Http请求,对请求进行转发。

  反向代理服务器具有以下功能:

  ①保护网站安全:任何来自Internet的请求都必须先经过代理服务器;

 

  ②通过配置缓存功能加速Web请求:减轻真实Web服务器的负载压力;

 

  ③实现负载均衡:均衡地分发请求,平衡集群中各个服务器的负载压力;

 

2.应用服务器性能优化

 

(1)分布式缓存

网站性能优化第一定律:优先考虑使用缓存优化性能。缓存是指将数据存储在相对较高访问速度的存储介质中(如内存),以供系统进行快速处理响应用户请求。

 

       ①缓存本质是一个内存Hash表,数据以(Key,Value)形式存储在内存中。

 

  ②缓存主要用来存放那些读写比很高、很少变化的数据,如商品的类目信息、热门商品信息等。这样,应用程序读取数据时,先到缓存中取,如缓存中没有或失效,再到数据库中取出,重新写入缓存以供下一次访问。因此,可以很好地改善系统性能,提高数据读取速度,降低存储访问压力。

 

  ③分布式缓存架构:一方面是以以JBoss Cache为代表的互相通信派;另一方面是以Memcached为代表的互不通信派;

 

  JBoss Cache需要将缓存信息同步到集群中的所有机器,代价比较大;而Memcached采用一种集中式的缓存集群管理,缓存与应用分离部署,应用程序通过一致性Hash算法选择缓存服务器远程访问缓存数据,缓存服务器之间互不通信,因而集群规模可以轻易地扩容,具有良好的伸缩性。

 

(2)异步操作

 

  ①使用消息队列将调用异步化,可改善网站的扩展性,还可改善网站性能;

 

  ②消息队列具有削峰的作用->将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务;

 

(3)使用集群

 

  ①在高并发场景下,使用负载均衡技术为一个应用构建多台服务器组成的服务器集群;

 

  ②可以避免单一服务器因负载压力过大而响应缓慢,使用户请求具有更好的响应延迟特性;

 

  ③负载均衡可以采用硬件设备,也可以采用软件负载。商用硬件负载设备(例如出名的F5)成本通常较高(一台几十万上百万很正常),所以在条件允许的情况下我们会采用软负载,软负载解决的两个核心问题是:选谁、转发,其中最著名的是LVS(Linux Virtual Server)

 

(4)代码优化

 

  ①多线程:使用多线程的原因:一是IO阻塞,二是多CPU,都是为了最大限度地利用CPU资源,提高系统吞吐能力,改善系统性能;

 

  ②资源复用:目的是减少开销很大的系统资源的创建和销毁,主要采用两种模式实现:单例(Singleton)和对象池(Object Pool)。例如,在.NET开发中,经常使用到的线程池,数据库连接池等,本质上都是对象池。

 

  ③数据结构:在不同场合合理使用恰当的数据结构,可以极大优化程序的性能。

 

  ④垃圾回收:理解垃圾回收机制有助于程序优化和参数调优,以及编写内存安安全的代码。这里主要针对Java(JVM)和C#(CLR)一类的具有GC(垃圾回收机制)的语言。

 

二、可用性

 

1.高可用的架构

 

  目前,通常企业级应用系统(特别是政府部门和大企业的应用系统)一般会采用安规的软硬件设备,如IOE(IBM的小型机、Oracle数据、EMC存储设备)系列。而一般互联网公司更多地采用PC级服务器(x86),开源的数据库(MySQL)和操作系统(Linux)组建廉价且高容错(硬件故障是常态)的应用集群。

 

  (1)设计的目的?

 

  保证服务器硬件故障服务依然可用,数据依然保存并能够被访问。

 

  (2)主要的手段?

 

  数据和服务的①冗余备份以及②失效转移:

 

  对于服务而言,一旦某个服务器宕机,就将服务切换到其他可用的服务器上;

 

  对于数据而言,如果某个磁盘损坏,就从备份的磁盘(事先就做好了数据的同步复制)读取数据。

 

2.高可用的应用

 

  应用层处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性。

 

  (1)通过负载均衡进行无状态服务的失效转移

 

  (2)应用服务器集群的Session管理

 

Web应用中将上下文对象称为会话(Session),单机情况下由部署在服务器上得Web容器(如IIS、Tomcat、JBoss等)管理。在使用了负载均衡的集群环境中,由于请求的分发是随机的,所以保证每次请求依然能够获得正确的Session比单机时要复杂得多。

 

Session服务器:利用独立部署的Session服务器(集群)统一管理Session,应用服务器每次读写Session时,都访问Session服务器。这种方案实际上是将应用服务器的状态分离,分为无状态的应用服务器和有状态的Session服务器。

 

  对于有状态的Session服务器,一种较简单的方法是利用分布式缓存(如Memcached、Redis等)、数据库等,在这些产品的基础上进行封装,使其符合Session的存储和访问要求。

 

3.高可用的服务

 

  ①分级管理:核心应用和服务具有更高的优先级,比如用户及时付款比能否评价商品更重要;

 

  ②超时设置:设置服务调用的超时时间,一旦超时后,通信框架抛出异常,应用程序则根据服务调度策略选择重试or请求转移到其他服务器上;

 

  ③异步调用:通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况。

    不是所有服务都可以异步调用,对于获取用户信息这类调用,采用异步方式会延长响应时间,得不偿失。对于那些必须确认服务调用成功后才能继续进行下一步的操作的应用也不适合异步调用。

 

  ④服务降级:网站访问高峰期间,为了保证核心应用的正常运行,需要对服务降级。

 

  降级有两种手段:一是拒绝服务,拒绝较低优先级的应用的调用,减少服务调用并发数,确保核心应用的正常运行;二是关闭功能,关闭部分不重要的服务,或者服务内部关闭部分不重要的功能,以节约系统开销,为核心应用服务让出资源;

 

  ⑤幂等性设计:保证服务重复调用和调用一次产生的结果相同;

分享到:
评论

相关推荐

    《大型网站技术架构》读书笔记.pdf

    《大型网站技术架构》读书笔记思维导图,初始架构、服务数据分离、缓存改善性能、服务器集群化、数据库读写分离、反向代理CDN、分布式FS/DBS、NOSQL和搜索引擎、业务切分

    大型网站技术架构+读书笔记

    大型网站技术架构_核心原理与案例分析_李智慧 pdf

    大型网站技术架构笔记

    李智慧老师的大型网站技术架构的读书笔记

    大型网站系统与Java中间件实践读书笔记(二)

    【大型网站系统与Java中间件实践读书笔记(二)】 大型网站系统是指处理海量数据、应对高并发访问、以及应对复杂业务逻辑的网络应用。在这些系统中,Java中间件扮演着关键角色,帮助实现系统的扩展性和高效运行。...

    大型分布式网站架构设计与实践.pdf

    文是学习大型分布式网站架构的技术总结。对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进行了概要性描述,并给出一个架构参考。一部分为读书笔记,一部分是个人经验总结。对大型分布式网站架构有很好的参考...

    《架构师》读书笔记模板.pptx

    【架构师】读书笔记模板是针对《架构师》杂志202x年第7期的一份详细学习记录。这本书关注的是IT行业中与架构设计相关的热点问题、理论探讨以及技术趋势,特别是针对云原生、大数据分析和数据架构的变革。通过思维...

    行业文档-设计装置-笔记本电脑参加电力需求响应的控制系统及方法.zip

    描述中的“行业文档-设计装置-笔记本电脑参加电力需求响应的控制系统及方法”进一步强调这是一个行业内部的技术文档,可能详细介绍了该系统的架构、工作原理以及实现方法。这样的文档通常会包含以下内容: 1. **...

    架构原理-架构师的修炼-v1.2-艾飞-超清文字版本

    总的来说,这本书提供了丰富的架构设计知识和实践经验,适合那些想要成为或已经是架构师的专业人士阅读。无论是刚入门的新手,还是有一定经验的开发者,都能从中受益。通过深入学习和实践,读者将能更好地应对各种...

    CCNA中文读书笔记

    【CCNA中文读书笔记】是一份详尽的网络技术学习资料,主要针对Cisco Certified Network Associate(CCNA)认证考试进行整理。这份笔记包含了CCNA学习的各个重要章节,旨在帮助学习者深入理解网络基础概念,熟悉Cisco...

    计算机网络读书笔记

    根据给定的“计算机网络读书笔记”文件信息,以下是对其中一些关键知识点的详细解析: ### 计算机网络概述 计算机网络是通过通信设备和线路将地理位置分散、功能独立的多个计算机系统互联起来,以功能完善的网络...

    Springboot017学生读书笔记共享_论文.lw.doc

    《Springboot实现学生读书笔记共享平台》 在当今数字化时代,知识分享与交流的重要性日益凸显。...关键词:读书笔记共享平台,Java语言,Springboot框架,B/S架构,软件开发流程,用户交互,知识分享,资源管理。

    SQL SEVER 2005 读书笔记

    ### SQL Server 2005 读书笔记 #### 一、SQL Server 2005 概览 **SQL Server 2005** 是微软公司发布的一款企业级数据库管理系统,它是在 SQL Server 2000 基础上的重大升级版本。此版本在性能、安全性、可管理性等...

    SSM 框架整合教程:三、SpringMVC-尚硅谷学习笔记 2022 年

    在Java Web开发中,SSM(Spring、SpringMVC、MyBatis)框架的整合是常见的技术栈,尤其对于大型项目,它们的协同工作能提供高效且灵活的解决方案。本教程将重点探讨SpringMVC,它是Spring框架的一部分,专门用于处理...

    note-architect:架构师学习笔记仓库

    《架构师学习笔记仓库——深入探索note-architect》 在IT行业中,架构师的角色至关重要,他们负责设计和规划复杂的软件系统,确保系统的稳定、高效和可扩展性。"note-architect" 是一个专门为有志于成为架构师或者...

    Reading-Notes:读书笔记们

    学习笔记都在这里了 好好学习,天天向上!生命不息,阅读不止! 本仓库参考以下书籍或资料 JavaScript高级程序设计(第三版) ...大型网站技术架构核心原理与案例分析 锋利的jQuery JavaScript设计模式与开发实践

    xinmd笔记(啦啦啦啦啦啦)

    【标题】:“xinmd笔记(啦啦啦啦啦啦)”...同时,DVA和UMI的笔记可以帮助开发者理解如何在大型项目中有效地管理状态和架构,提升开发效率。总的来说,这份“xinmd笔记(啦啦啦啦啦啦)”是一份全面且实用的前端学习资源。

    分布式商城项目笔记-乐优商城

    分布式商城项目笔记-乐优商城,是一个以Java技术为核心的电商系统开发案例,旨在提供全面、深入的学习材料,帮助开发者理解并掌握分布式系统在实际商业场景中的应用。该项目笔记包括了详细的课程内容,辅以丰富的...

Global site tag (gtag.js) - Google Analytics