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

本文探讨了大型网站架构面临的挑战,包括复杂业务逻辑处理、高并发访问应对、海量数据存储及处理等问题。文中详细介绍了常见的架构模式,如分层、分割、集群等,并讨论了如何通过这些模式提高系统的性能、可用性和可伸缩性。
企业应用最大的难点在于复杂的业务逻辑,大型网站最大的难点在于大量用户以及高并发和海量的数据存储。
互联网1年对于技术人员的成长等于传统行业3年。
会不会很大程度上在于你是否遇到过这些问题,遇到了这些问题,并且解决了,迈过了这个坎,你就获得了成长,所以百度有大

量搜索的专家,QQ有大量高并发的专家,阿里有大量海量数据处理的专家。

性能、可用性、可伸缩性、可扩展性、安全性。

一、架构图


[img]http://dl2.iteye.com/upload/attachment/0104/0731/ad88c999-596a-3a3a-a643-97fb9a604136.jpg[/img]

二、常用架构模式
1.分层
无论是企业机构还是大型网站架构都会进行纵向的划分,根据功能划分为不同的层,下层为上层提供抽象接口,通常分为应用层

(含业务逻辑)-服务层-数据层(持久层),大型的网站切分后,每个层都可以部署在独立的服务器上,层与层之间通过远程服务调

用,以减轻应用服务器的计算压力。

2.分割
按功能进行横向的切分,对于访问频繁的例如首页,可以部署到一个单独的应用服务器中,
这样可以很好的做到可伸缩性。对于单表海量数据,通常也采用分表的方式进行分割,例如
facebook的用户表,分离的多个表中,通过分布式数据库进行存储和访问。

3.集群
为了减轻计算压力,通过部署集群,前端放置负载均衡服务器,将访问压力分散到不同的服务器上。同时为了保证高可用性,即

使简单的功能也至少要部署2台服务器的集群,以免单点故障,导致服务不可用。

4.冗余
为了保证高可用性,服务通过集群冗余,数据则采用主备复制,将数据放到多个服务器中,以免单点故障,数据丢失。通过主备

数据存储架构,也可以实现读写分离,提高性能。


5.异步
服务的消费者将服务调用发送到消息服务器中,服务器的生产者从消息服务器中读取消息队列,逐步进行处理,将消息发送到消

息服务器后立即返回,缩短了用户响应时间,并且有助于消峰。异步可能会影响到业务的处理流程,要从业务上支持异步。

6.缓存
因为不同硬件的速度不同,缓存在整个计算机体系到处可见,例如CPU的多级缓存等,将热点数据缓存到本地缓存或者分布式缓

存服务器中,减轻数据库压力,提升性能。
CDN、反向代理也是缓存。


三、高性能
测试分类:
1.性能测试:在可接受的资源消耗的情况下,进行并发测试,测试软件的性能情况。
2.负载测试:持续对系统加压,直到系统的吞吐量开始下降。
3.压力测试:系统可以承受的极限。
4.稳定性测试:长时间对系统进行性能测试,并均衡的分布压力,观察系统是否稳定。
a.前端:
1.减少http请求。合并js和css,减少http请求,因为1个http请求,服务器端要启动一个线程来响应,请求多了对资源

消耗增加。
2.压缩。压缩可以大大降低网络资源消耗,提高响应时间。
3.CDN。content distributed network 将静态资源,css,js,图片等缓存到离用户最近的网络提供商的服务器中,缩短

访问路径,减少网络环节,提高速度。
4.反向代理。普通代理位于浏览器一测,反向代理位于机房一测。访问后缓存静态资源,下次再访问就直接返回,减轻

了应用服务器的处理压力。由于反向代理和负载均衡机器处于的位置相同,所以也经常作为负载均衡服务器。
b.应用服务器。
1.缓存。
缓存分类:1)jboss cache,将缓存同步到各个集群节点中,如果集群节点多的话,会大大增加 网络的消

耗,另外缓存多太多的话,可能会撑爆了单机的内存。
2)分布式缓存memcached。通过路由算法,路由到一个节点中。
缓存误用:1)读写比高。至少1次写,2次读才有必要使用缓存,马上就失效的数据,不应该缓存 ,只是带

来了缓存一致性问题和增加了网络消耗。通常读写比很高,例如热门博客等。
2)没有热点数据。应该根据2:8原则,应该20%的数据,80%情况下会用到。如果没有热点数据就没有必要缓

存。
2.异步。
3.集群。
c.数据存储。
1.机械硬盘 VS 固态硬盘。固态硬盘有更好的随机读性能,机械硬盘需要移动磁盘臂实现数据读取,随机读性能比大致

为:10:1 ,机械硬盘读取1M数据,时间为2ms,固态硬盘为0.3ms
2.B+树 VS LSM树。传统数据库索引基于B+Tree,使数据按一定的顺序进行存储,加快数据访问速度。LSM是一个n阶合

并树,在内存中写入和读取,因此速度快。
3.RAID VS HDFS。 HDFS以block为单位进行存储,每次存储都同时复制到另外的两个机器中,保证了数据的可靠性,相

当于RAID1。读数据时,通过mapreduce分布式框架读取,保证了速度,相当于RAID0。

四、高可用
a.应用层。
由于应用层无状态,所以通过部署集群就可以实现高可用。
但是例如购物车等session信息实际是有状态的所以也要考虑session。
方法:1.session复制。复制到各个节点。缺点是网络消耗加剧,容易session不一致。 2.session绑定。每次请求都请

求到同一个服务器中。缺点是违背了高可用的原则。
3.cookie传递session信息。缺点是用户可以关闭cookie,cookie太大影响性能。
4.构件独立的session服务器。可以存到单独的数据库中。大型网站通常使用这种方式。
b.服务层。
1)设置超时时间。2)服务降级。 3)服务权重 4)幂级恒等性。
c.数据存储层。
通过数据库备份,将数据冗余保存到多个地方。
冷备和热备。
同步请求(同时请求到主数据库和从数据库,性能取决于性能较差的那一个)和异步请求(请求到主数据库,主数据库

通过异步方式复制到从数据库)。

d.监控。 1)用户行为监控。访问路径,浏览器、操作系统版本等。2)服务器性能监控。网络、内存、CPU占用。 3)运行数据

监控。如缓存命中率,平均响应时间等。
其他保证高可用的方式:
1)升级方式。先升级部分机器,再升级其他机器
2)自动化测试。
3)预生产环境测试。
4)灰度发布,AB测试。
5)分支开发,主线发布。

五、高伸缩
1.应用层。
?负载均衡方式。
1)HTTP请求重定向。每次都请求2次,影响性能。
2)DNS域名解析负载均衡。 有缓存,不即时生效。
3)反向代理负载均衡。
4)IP地址负载均衡。
4)数据链路层负载均衡。通过修改mac地址实现,请求直接返回给浏览器,性能好,目前大型网站基本用这个。Linux LVS。

负载均衡算法。
1)轮询 2)加权 3)最少连接 4)随机

2.分布式缓存
一致性哈希算法。通过这个算法解决增加服务器,缓存失效问题。
增加虚拟层解决方案。插入虚拟节点,分担增加服务器后的负载均衡问题。

3.CAP原理
C是数据一致性
A是可用性
P是分区耐用性
这3个只能保证其中的2个,大型网站要保证可用性,所以通常牺牲一定的数据一致性。

4.数据存储层。
a.分布式数据库。cobar.
b.noSQL产品。HBase。


《大型网站技术架构》 李智慧
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值