大型网站技术架构-核心原理与案例分析

阿里系的书,也是讲大型网站系统架构的,平常我们总是挂在嘴边的高性能、高可用、易扩展、安全性,这些所谓的系统非功能性指标到底如何实现,书里面讲了这些干货,作为网站架构师或者哪怕是应用系统的架构师,都值得了解,也许不一定都能用上,但是等需要用的那天,你肯定不会迷茫。

1.大型网站架构发展常见历程:应用/数据库分离--->使用缓存--->应用服务器集群--->数据库读写分离--->CDN及反向代理--->使用分布式文件系统和分布式数据库--->NoSQL及搜索引擎--->业务拆分,分库--->分布式服务

2.主要涉及的升级方案概要:横向业务分层(应用层,服务层,数据层),纵向业务分割(购物,论坛,搜索,广告),分布式服务(分布式应用和服务,分布式静态资源,分布式数据和存储,分布式计算,分布式文件系统),集群服务,引入缓存(CDN,反向代理,本地缓存,分布式缓存),异步调用(共享内存队列),冗余设计(主从分离热备份,冷备份),运维自动化(自动代码管理,自动测试,自动部署,自动安全检测,自动监控,自动报警,自动失效转移,自动失效回复,自动分配资源),保证安全(防XSS,防SQL注入)

3.大型网站核心目标及实现手段:

(一)高性能

通过性能测试(性能测试,负载测试,压力测试,稳定性测试)找到系统的最佳性能点,最大负载点,系统崩溃点,通过多层次对系统进行优化,主要包括:

1:Web前端优化

a:浏览器优化(合并http请求,使用浏览器缓存,启动静态文件压缩GZip,CSS放页面最上面,js文件放页面最下面,静态资源使用独立域名访问减少Cookie)

b:CDN(Content Distriburte Network)缓存加速

c:反向代理实现缓存及负载均衡

2:应用服务器性能优化

a:针对热点不经常改变的数据用分布式缓存

b:引入消息队列实现异步化操作

c:服务器集群

d:代码优化(多线程,单例及池化,合理数据结构设计,JVM参数调优)

3:数据库端存储优化

a:使用固态硬盘替代机械硬盘

b:B+和LSM树的使用

c:RAID廉价磁盘冗余阵列 和分布式文件系统

(二)高可用

高可用架构主要通过数据和服务的冗余备份及失效转移来实现,针对应用层和服务层,采用集群来实现,数据层采用数据复制,冗余。主要包括:

1:负载均衡无状态服务进行失效转移(失效确认,访问转移,数据恢复)

2:Session一致性的管理(Session复制,Session绑定,利用Cookie记录Session,专门的Session服务器实现状态分离)

3:常用策略:分级管理,超时设置,异步调用,服务降级,幂等性设计

4:数据冷备份和热备份

5:强调借助系统监控来保证高可用,通过手机服务日志信息,客户端浏览器日志,服务器性能参数(system load,内存占用,磁盘IO,网络IO)进行系统报警,并做失效转移及自动优雅降级等处理。

(三)易伸缩

指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或缩小服务处理能力。伸缩性包括应用服务器集群伸缩,缓存数据服务器集群伸缩,存储数据服务器集群伸缩

1:应用服务器集群需要通过负载均衡来实现分发,目前有多种软硬件负载均衡设备,包括商业产品及开源产品的,其主要通过以下几种技术实现负载:

a:HTTP重定向负载,通过重定向服务器获取真实服务IP然后访问,需要客户端浏览器两次请求存在瓶颈,且容易被所搜引擎判断为SEO作弊,一般使用较少。

b:DNS负载,利用DNS基于地理位置进行域名解析的特点来实现分发,缺点是多级解析容易出现更新不一致的情况。一般大型网站部分使用DNS分发到后端进行二次负载均衡分发。

c:反向代理负载均衡,在HTTP协议层由反向代理服务器根据负载算法向真实应用服务请求,并通过反向代理服务器再响应给用户。缺点是反向代理服务器是所有请求的中转站,容易发生瓶颈。

d:IP负载均衡,在网络层负载均衡服务器通过修改请求的目的ip的方式将服务转向真实服务器,然后再通过或修改源IP或将此负载服务器同时作为网关服务器的方式将响应接收回来,最后由负载均    衡服务器返回给客户端.缺点还是容易存在自身瓶颈。

e:链路层负载,配置集群下所有真实应用服务器虚拟IP和负载均衡服务器IP一致,负载均衡服务器只将请求的目的MAC地址修改成提供服务的服务器MAX,实现三角传输模式,避免负载均衡服务器自身瓶颈,LVS是Linux平台下最好的链路层负载均衡开源产品。

2:缓存数据服务器集群注意新增缓存服务器时对其他节点的影响已经数据雪崩现象,一般来说利用一致性Hash算法(并加上虚拟层)分摊多服务器的压力。

3:存储数据服务一般通过主从复制,读写分离,分库,分片以及NoSQL数据库实现

a:主服务器将数据同步到从服务器,读操作及数据分析等离线操作在从服务器上执行。

b:不同业务数据表部署在不同的数据库集群上实现分库,最大的制约是不同库的表不能做join

c:大表数据分库存储实现分片。Cobar可以实现分布式关系数据库访问的代理,但是跨库的join和事务仍是难点,必要时需要通过业务来约束

d:NoSQL数据库如HBase实现大数据的集群存储 HMaster--->HRegionServer--->HRegion--->HFile(HDFS)

(四)易扩展

对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力,各应用间较少依赖和耦合。

1:分布式消息队列

2:分布式服务,将复杂关系和结构的系统进行拆分,按模块独立部署,降低系统耦合性。

纵向拆分:将一个大应用拆分为多个小应用,如果新增业务较独立,则单独部署

横向拆分:将复用的业务拆分,独立部署,提供分布式服务并保持接口的一致性供新增的业务调用.

分布式服务框架的设计一般包括服务提供者,服务注册中心,服务消费者(接口访问代理,负载均衡,远程通信模块等)

(五)安全性

1:通过特殊字符转义(消毒)和Cookie设置HttpOnly的方式实现跨站点脚本攻击XSS的防御

2:通过特殊字符转义(消毒)和参数绑定执行sql的方式实现SQL注入攻击

3:通过表单Token,验证码,Referer check等手段可以实现跨站点请求伪造CSRF的防御

4:其他可能的攻击和漏洞:Error Code(Exception)太详细,HTML注释,文件上传未限制,web服务路径可遍历

5:加解密技术的应用

4.CAP原理:

一个提供数据服务的存储系统无法同时满足数据一致性(Consistency),数据可用性(Availibility),分区耐受性(Patition Tolerance)这三个条件

5.对于代码版本控制,前期可以采用分支开发,主干发布的形式,便于多个团队同步协作开发,后期产品成熟稳定,在持续性升级过程中可以采用主干开发,分支发布的形式,便于管理和控制产品版本。

6.负载均衡的算法:轮询,加权轮询,随机,最少连接,源地址散列。

来自为知笔记(Wiz)

时间: 2024-10-17 06:13:40

大型网站技术架构-核心原理与案例分析的相关文章

《大型网站技术架构-核心原理与案例分析》之一: 大型网站架构演化

最近刚刚读完李智慧的<大型网站技术架构-核心原理与案例分析>,对每章重点内容作了一些笔记,以便加深印象及日后查阅. 一.大型网站软件系统的特点 高并发,大流量:需要面对高并发用户,大流量访问. 高可用:系统7X24小时不间断服务. 海量数据:需要存储.管理海量数据,需要使用大量服务器. 用户分布广泛,网络情况复杂:许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别. 安全环境恶劣:由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击. 需求快

大型网站技术架构--核心原理和案例分析 大型网站架构演化(一)

如果把上世纪90年代CERN正式发布web标准和第一个WEB服务的出现当作互联网的开始,那么互联网站的发展之经历了短短20多年的时间.在20多年的时间里,互联网的世界发生了变化,今天,全球有近一半的人口使用互联网,人们的生活因为互联网而产生了巨大的变化.从信息检索到即使通信,从电子购物到文化娱乐,互联网渗透到生活的每一个 角落,而且这种趋势还在蔓延.因为互联网,我们的世界正变得越来越小. 同时我们也看到,在互联网跨越式发展进程中,在电子商务火热的市场背后却是不堪重负的网站架构.某些B2C网站逢促

JAVA读书推荐----《深入分析Java Web技术内幕》--《java多线程编程核心技术》--《大型网站技术架构 核心原理与案例分析》-《Effective Java中文版》

(1)  首先推荐的不是一本书,而是一个博客,也是我们博客园另外一位博友java_my_life. 目前市面上讲解设计模式的书很多,虽然我前面讲了看书是最好的,但是对设计模式感兴趣的朋友们,我推荐的是这个博客.这位博友的设计模式讲得非常非常好,我认为90%的内容都是没有问题且很值得学习的,其讲解设计模式的大体路线是: 1.随便开篇点明该设计模式的定义 2.图文并茂讲解该设计模式中的结构 3.以详细的代码形式写一下该种设计模式的实现 4.补充内容 5.讲解该设计模式的优缺点 对于一个设计模式我们关

《大型网站技术架构核心原理与案例分析》阅读笔记-01

通过阅读该书籍我们能够更加清楚的树立大型网站的的技术发展历程,剖析大型网站技术架构模式,深入的讲述大型互联网架构核心原理,并通过一些典型的技术案例来讲述大型网站开发全景视图,该书籍深入的阐述了各种大型网站面临的各种架构问题及解决方案. 在第一章第一篇大型网站架构演化中了解到与传统企业应用系统相比,大型互联网应用系统具有高并发大流量.高可用性.海量数据.用户分布广泛,网络情况复杂.安全环境恶劣.需求快速变更,发布频繁.渐进式发展等特点:大型网站架构演化发展历程经历了初始阶段的网络架构它的应用程序.

大型网站技术架构-核心原理与案例分析-阅读笔记4

在第四章案例章节中的淘宝网的架构演化案例分析小节中作者主要分析了淘宝架构的演化,以淘宝网的实例给我们分析介绍了淘宝网的业务发展历程及淘宝网的技术架构演化两个方面,在业务发展中作者写到淘宝的技术是随着淘宝业务一起发展起来的,业务是推动这技术发展的动力,淘宝如今的规模和当初有很明显的变化,在技术架构演化中介绍了架构技术的更新升级,该章节中主要介绍淘宝网的发展的历程,在随着时间的发展不断中网站的架构不断的引用着新的技术,由最初简单的c2c更改过来的网站,放弃了lamp架构转而使用java作为开发平台并

大型网站技术架构-核心原理与案例分析-阅读笔记5

在第四章案例章节中的海量分布式存储系统Doris的高可用架构设计分析的小节中作者主要分析介绍了分布式存储的高可用架构和不同故障情况下的高可用解决两个方面,在两小节前作者给我们介绍了Doris是一个海量分布式KV存储系统,其设计的目的是支持中等规模高可用.可伸缩的Kv存储群.跟主流的NoSQL系统HBase相比,doris具有相似的性能和线性伸缩能力,并具有更好的可用性及更友好的图形用户管理界面.而在分布式存储的高可用架构的小节中作者给我们分析了Doris的整体架构,其系统整体上可分为应用程序服务

大型网站技术架构-核心原理与案例分析-阅读笔记3

在第二章的架构章节中的 随机应变:网站的可拓展架构的篇章中作者介绍了构建网站的可扩展架构.利用分布式队列降低系统的耦合性.利用分布式可复用的业务平台.可拓展的数据结构.利用开放平台建设网站生态圈五个方面,作者在讲述前通过微信的成功发布及其中摇一摇功能的加入的开发的快捷引出来的,其中构建网站的可扩展架构中区分了扩展性和伸缩性的区别,讲到了低耦合性的系统跟容易扩展,并且更容易复用,一个低耦合性的系统也可以让系统更加容易的开发和维护,在如何降低系统的耦合性中,作者主要介绍用分布式消息队列的方法来降低系

【大型网站技术架构 核心原理与案例分析】读书笔记

章节 笔记 1.概述 网站架构模式:分层.分割.分布式.集群.缓存.异步.冗余.自动化.安全. 核心架构要素:性能.可用性.伸缩性.扩展性.安全. 4.高性能 一般重复请求一万次计算总响应时间然后除以一万得到单词响应时间. 测试程序并不是启动多线程然后不停发送请求,而是在两次请求之间加入一个随机等待时间. 吞吐量:每天通过收费站的车辆数目:并发数:正在行驶的车辆数目:响应时间:车速.TPS:每秒事务数:HPS:每秒请求数:QPS:每秒查询数. 性能计数器:System Load(系统负载,最理想

大型网站技术架构-核心原理与案例分析-阅读笔记02

在第二章的架构章节中的 瞬时响应:网站的高性能架构的篇章中讲到网站的性能是客观的标准,可以具体的体现在响应时间.吞吐量等技术指标上,同时也是主观的感受.在高性能架构中讲到对于网站性能的测试,性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准.在不同的角色响应下网站的性能有不同的标准,也有不同的优化手段.在此基础上作者更深一步的讲解到网站的性能测试,其中又包括了不同视角下的网站性能.性能测试指标.性能测试方法.性能测试报告.性能优化策略五个反面,同时也详细的讲解了这五个方面所具有的内