■ 正文
《大型网站技术架构·核心原理与案例分析》已经读完了,没好好做笔记,现在一篇篇补上来,算是复习吧。目前开始在读《图解设计模式》,做笔记真的很重要……
2.1. 网站架构模式
1) 定义:为了解决大型网站面临的高并发访问、海量数据处理、高可靠运行等一系列问题与挑战,大型互联网公司在实践中提出了许多解决方案,以实现网站高性能、高可用、易伸缩、可扩展、安全等各种技术架构目标。这些解决方案又被更过网站重复使用,从而逐渐形成大型网站架构模式。
2) 分层:大型网站将架构进行分层,应用层、服务层、数据层。分层结构对网站支持高并发向分布式方向发展至关重要,因此网站规模小的时候,就应该使用分层架构,这样网站做大时才能有更好应对。
3) 分割:网站越来越大,功能和服务也复杂,将这些不同的功能分割开来,包装成高内聚低耦合的模块但愿,有助于软件的开发和维护,并便于分布式部署。比如在应用层根据业务进行分割,如:购物,论坛、搜索、广告、分割成不同的应用,由独立的团队服务。
4) 分布式:分层和分割的一个重要目的是为了将切分后的模块便于分布式部署,将不同的模块部署到不同的服务器上,随着部署的计算机越多,CPU、内存、存储资源就越多,能够处理的并发量和数据量就越大,进而能够为更多用户服务,常用分布式方案有以下几种:
a) 分布式应用和服务:将分层和分割后的应用和服务模块分布式部署,除了可以改善网站性能和并发性、加快开发和部署速度、减少数据库连接资源消耗外、可以复用共同的服务,便于业务功能扩展。
b) 分布式静态资源:网站静态资源如JS,CSS,Log图片等资源独立分布式部署,并采用独立域名,即动静分离。静态资源分布式部署可以减轻应用服务器的负载压力,加快并发加载速度
c) 分布式数据和存储:大型网站需要处理P级别的数据,单台计算机无法提供如此大的存储空间,这些数据需要分布式存储
d) 分布式计算:网站除了要处理在线业务,实时性比较强的业务外,还有很多后台业务要处理,如搜索引擎的索引构建、数据仓库的数据分析统计等。这些业务的计算规模非常庞大,目前网站普遍使用Hadoop、及MapReduce分布式计算框架进行此类批处理计算
e) 分布式配置:如携程的Apollo远程配置中心,统一管理应用系统的配置
f) 分布式文件系统:谷歌的GFS,Hadoop的HDFS,淘宝的TFS
追加 2019-11-07
1) 集群:使用多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务,因为服务器集群有跟多服务器提供服务,因此可以提供更好的并发性
2) 缓存:缓存就是将数据存放在距离计算最近的位置以加快处理速度,缓存是改善性能的第一手段,使用缓存有两个前提条件,一是数据访问热点不均衡,某些数据会被更频繁的访问,这些数据应该放在缓存中,而是数据在某个时间段内有效,不会很快过期,否则缓存数据就回因为失效而产生脏读,影响结果的正确性。缓存设计分以下几种:
a) CDN:内容分发网络,部署在距离终端用户最近的网络服务商,用户的网络请求总是先到达他的网络服务商那里,在这里缓存着网站的一些静态资源,可以就近以最快速度返回用户,视频网站和门户网站会将用户访问量大的热点内容缓存在CDN
b) 反向代理:反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,最先访问到的就是反向代理服务器,这里缓存着网站的静态资源,无需将请求转发为应用服务器就能返回给用户
c) 本地缓存:应用程序可以在本机内存中直接访问数据,而无需访问数据库
d) 分布式缓存:大型网站数据非常庞大,即使只缓存一小部分,需要的内存空间也不是单机能够承受的,这时将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据
3) 异步:大型网站架构中系统解耦合的一个重要手段就是异步,业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段通过共享数据的方式进行协作,分布式消息队列有如下特性:
a) 提高系统可用性:当消费者服务器发生故障时,数据会在消息队列服务器中存储堆积,生产者服务器可以继续处理业务请求,系统整体表现无故障,当消费者服务器恢复正常后,继续处理消息队列中的数据
b) 加快网站响应速度:处理前端的业务请求后,将请求数据写入消息队列,不需要等处理完成就可以返回,减少响应延迟
c) 消除并发访问高峰:用户访问网站是随机的,存在访问高峰和低谷,在高峰期并发访问量增大,这可能使网站负载过重,响应延迟,甚至服务器宕机,这是使用消息队列将突然产生的请求数据放入消息队列中等待消费者服务依次处理,就不会对整个网站负载造成太大影响。
4) 冗余:大型网站一般需要7*24小时不间断运行,但是随着服务器的增多,任意服务器宕机几乎是必然事件,要想保证服务器集群中部分宕机的情况下继续服务,不丢失数据,就需要一定程度的服务器冗余运行,数据冗余备份,这样当某台服务器宕机时,可以将其上的服务和数据访问转移到其他机器上,数据备份有定时备份,存档保存的冷备份,还有数据库的主从分离,实时同步的热备份,同时为了抵御地震海啸等不可抗力因素,还有在全球范围内进行部署灾备数据中心等
5) 自动化:主要集中在发布运维方面:发布过程自动化,有效减少故障;自动化代码管理,自动化测试,自动化安全监测,自动化部署,自动化监控,自动化报警,自动化失效转移,自动化失效恢复,自动化降级,自动化分配资源等
6) 安全:主要有通过密码和手机验证码进行身份校验,登录、交易等操作需要多网络通信进行加密,网站服务器存储的敏感数据如用户信息等也进行加密,为了防止机器人程序滥用网络资源供给网站,网站使用验证码识别,对于xss攻击和sql注入攻击进行编码转换等处理,敏感信息进行过滤等