大型网站构架

 一,大型网站的构架演化
随着访问量(并发量),数据存储量的增大而不断添加服务器的过程。
1,初始阶段:数据库,应用程序,文件部署在同一服务器。LAMP(linux+Apache+MySQL+PHP).
大型网站构架 - Garfield - 张广辉的博客
 
2,应用服务与数据服务分离:应用服务器处理业务逻辑,需要CPU;数据库服务器需要磁盘检索和数据缓存;文件服务器存储用户上传文件。
大型网站构架 - Garfield - 张广辉的博客
 
3,使用缓存:将热点数据放到内存中,提升访问速度。分为本地缓存和远程分布式缓存。
大型网站构架 - Garfield - 张广辉的博客
 
4,将单一服务器改为应用服务器集群,并行计算MapReduce。
大型网站构架 - Garfield - 张广辉的博客
 
5,数据库读写分离。将数据库部署在两台服务器,主数据库负责写操作,写完之后立即备份到从数据库,从数据库负责读操作。
大型网站构架 - Garfield - 张广辉的博客
 
6,反向代理和CDN加速网络,两种缓存方式。

  大型网站构架 - Garfield - 张广辉的博客
 
7,使用分布式文件系统和分布式数据库系统。这里包含了数据库的垂直分割(不同表)和水平分割(相同表)。详见数据库调优
大型网站构架 - Garfield - 张广辉的博客
 
 
8,使用Nosql和搜索引擎
大型网站构架 - Garfield - 张广辉的博客
 
9,应用的业务种类拆分,将不同业务拆分为多个系统
大型网站构架 - Garfield - 张广辉的博客
 
10,应用与可复用的服务拆分。详见7.2
大型网站构架 - Garfield - 张广辉的博客
 

二,大型网站的构架模式
1,分层:应用层(业务逻辑处理,特点:无状态),服务层(复用的代码,无状态),数据层(数据访问)。
应用层和服务层类似,可细分为MVC。应用层专注于与浏览器打交道,服务层与数据库连接。
大型网站构架 - Garfield - 张广辉的博客 大型网站构架 - Garfield - 张广辉的博客
 网站前端是指应用层之前的部分,包括DNS服务,CDN服务,反向代理等;网站后端是被应用层严重依赖的服务,包括缓存和数据库,他们是有状态的。 
网站前台和后台是分别为客户和管理员访问的界面,都是html写的。

2,分割:将不同功能的模块分割。包括应用和数据库(水平垂直)。
3,分布式部署:将分层和分割的模块部署在不同服务器或者分布式并行计算。
4,集群:将多台服务器部署相同的应用,防止服务器故障。需要做负载均衡处理,使http请求均衡( 集群中所有节点所存内容相中,所以请求可以交给任何一个节点 )。
5,缓存: 本质是内存哈希表
1)CDN:离用户最近的ISP服务器提供缓存;
2)反向代理:传统的代理服务器是在用户端局域网中的代理服务器,反向代理存放在网站的机房中,任何请求先访问代理,如果代理没有,代理去访问服务器。
3)本地缓存:应用服务器本地内存缓存的热点数据;
4)分布式缓存:专门用作缓存的分布式集群,应用服务器通过网络通信访问。 Memcached互不通信的缓存集群。
缓存的前提条件:1)数据访问热点不均衡;2)数据不会很快过期。
像维基百科这种读数据远远大于写数据的网站,缓存就尤其重要。
6,异步:通过消息队列,用户向服务器发出的请求装入消息队列中,服务器的处理线程从消息队列中取出请求不处理返回。
比如在提交订单的过程,订单提交后网页上提示待审核,其实就是订单请求在消息队列中等待的过程。
大型网站构架 - Garfield - 张广辉的博客
 

三,大型网站的要素
1,性能
2,可用性:系统出现几台服务器宕机,系统整体是否可用。
3,伸缩性:集群的构建与增删服务器,使服务器数量与处理能力呈线性。
4,扩展性:扩展新功能,并且不需要对现有系统和结构修改。
5,安全性:

四,系统性能优化

1,性能指标:响应时间(用户发出请求收到相应的时间),并发数(系统能够同时处理的请求数,系统负载特性),吞吐量(单位时间内处理的请求数,系统整体处理能力)。
系统资源就像一个高速公路:吞吐量是每天通过的车数目,并发数是正在公路上行驶的车数,响应时间时车速。
大型网站构架 - Garfield - 张广辉的博客
 
大型网站构架 - Garfield - 张广辉的博客
 
分布式的解决方案解决了高并发环境下的访问延迟,但由于自身节点通信延迟,架构复杂等问题提高了低并发的延迟。
另外,要想性能提升,服务器数量需要增多,要想延迟减小,数据一致性要下降。这就是性能优化的利与弊。

2,web前端优化:
1)浏览器优化:减少http请求(合并html,js,css);使用浏览器缓存;压缩文本;减少Cookie传输;
2)使用CDN和反向代理;
3,应用服务器优化
1)缓存
2)异步
3)集群
4,代码优化
1)并发优化:比如servlet不适用成员变量,尽量使用局部变量。
2)资源复用:每个web请求服务器都需要用独立线程处理,可使用数据库连接池和线程池。
3)算法优化
4)垃圾回收,减少full GC。
5、存储性能优化
1)机械硬盘(快速顺序读写,慢速随机读写),固态硬盘(和访问内存速度差不多)
2)B树,LSM树   ...........详见数据库。
3)RAID,HDFS

五,可用性优化
1,应用层
1)失效转移
大型网站构架 - Garfield - 张广辉的博客
应用服务器无状态,不像存储服务器。当负载均衡服务器通过心跳监测发现有台应用服务器宕机时,就会把它从服务器列表中删除,将请求转移到其他节点。
2)Session管理(需要session的应用记录了用户状态):session复制(冗余太大,传输缓慢,不用),session绑定(将用户IP与服务器绑定,但该服务器当即就完蛋了,不用),Cookie记录session(需要session时,查找cookie中的sessionID并发送给服务器获取session,常用),session服务器(将有状态与无状态分离)
大型网站构架 - Garfield - 张广辉的博客

2,服务层(同应用层)
 分级管理(等级不同的服务放在等级不同的硬件),超时设置,异步调用,拒绝服务,关闭功能。

3,数据层
1)CAP原理:数据容忍性(系统部分出问题但总体可用),数据可访问性(随时访问数据,无论成功失败总会收到响应),数据一致性(各个副本在每个时刻数据一致)。为了保证高可用,网站常常牺牲一致性,就是保证最终结果一致,但不保证数据变化后所有节点立刻一致,如nosql。详见hadoop的nosql。
2)数倍备份:冷备份(每隔一段时间进行备份,成本低,但一致性差)。热备份:每次写入数据就立刻备份,分为同步和异步。
大型网站构架 - Garfield - 张广辉的博客
 
大型网站构架 - Garfield - 张广辉的博客
 
异步方式进行读写分离。数据热备份可以考虑中间做一张增量日志表,用于记录在备份过程中数据的改变,备份完成后再把增量日志的内容复制过去。
  3)失效转移:失效确认(心跳检测,应用程序访问失败报告),访问转移,数据恢复(将数据的副本数目恢复到之前水平)
4,网站发布:网站的升级和发布是一次人为的宕机,频率较高,因此软件发布是非常重要的过程。它犹如给正在飞行的飞机换引擎,既不能让飞机剧烈晃动,也不能降落,更不能坠毁。另外,测试不是万能的,经过严格测试的系统也会出现问题。
5,网站故障监测
1)数据采集:日志采集(服务器和客户端日志),服务器性能监测(CPU,内存,IO性能,缓存命中率,访问延时)
2)故障处理手段:系统报警(设定阈值),失效转移,自动降级(关闭某些非核心功能)。

六,伸缩性优化
分为功能伸缩和集群伸缩。,
1,应用服务器集群的伸缩性
负载均衡服务器 大型网站构架 - Garfield - 张广辉的博客

1)HTTP重定向实现(不常用)
大型网站构架 - Garfield - 张广辉的博客
 
2)DNS域名解析实现(常用作第一级负载均衡),在DNS服务器一个域名下注册多个IP
大型网站构架 - Garfield - 张广辉的博客
 
3)反向代理实现,这样反向代理有缓存和负载均衡功能
大型网站构架 - Garfield - 张广辉的博客
 
4)IP实现,用网关作负载均衡,并执行NAT。
大型网站构架 - Garfield - 张广辉的博客
 
5)数据链路实现(最常用),使负载均衡服务器与web服务器的IP相同,但每台MAC不同,负载均衡服务器只需要修改MAC进行直接路由。由于数据包中源和目的IP没有变,这样返回响应时,web服务器就可直接找到用户,不用再经过负载均衡,减小了负载均衡的压力。
大型网站构架 - Garfield - 张广辉的博客

 前两种方式用户与服务器直连,后三种都通过中间代理。

6)负载均衡算法(运行在负载均衡服务器中的算法)
轮询,加权轮询(按服务器硬件性能加权),随机,最小连接(统计每台服务器当前的连接数,选择最小的),原地址散列(对源IP哈希,这样同一台客户机总被分到同一台服务器)

 2,缓存集群的伸缩性
缓存集群中,每台服务器缓存的内容都不一样,所以没法用负载均衡的方式。但缓存内容的丢失不影响业务正常服务,只是增大了数据库的访问压力。
余数hash算法:可以解决访问问题,但服务器数量的改变会使已经缓存的大部分内容失效。
一致性哈希:详见集合框架。
节点扩容只会使很小一部分内容失效。
大型网站构架 - Garfield - 张广辉的博客
  大型网站构架 - Garfield - 张广辉的博客
 
虚拟节点(一台物理机对应多个hash值)保证负载均衡。
大型网站构架 - Garfield - 张广辉的博客
 3,数据存储集群的伸缩性
1)关系数据库
通过关系数据库访问代理,可以解决不同数据分库的问题,但不能使用跨库join和事物
大型网站构架 - Garfield - 张广辉的博客
 2)非关系型数据库
详见Hadoop。

七,扩展性优化
主要目标是降低耦合性。
1,分布式消息中间件JMS:就是将消息队列部署在单独的服务器,应用服务器通过远程调用或者socket通信进行访问。降低了生产者和消费者之间的耦合性。如果消息队列内存满了,就将消息暂存于硬盘。为防止消息队列宕机,生产者在消息被处理之前暂存消息,如果消息在未处理之前服务器宕机,那发送发会选择其他队列。比较著名的有Apache的ActiveMQ,简单的有mysql数据库可以当作消息队列。
消息队列模型:queue模型:所有消费者共同消费队列中消息;topic模型:所有消费者会独立收到所有消息。多个集群间用topic,集群内部用queue。

2,分布式服务构架(SOA)
1)服务:多个应用模块都需要使用(复用)的应用称为服务,比如用户管理模块。服务可以给网站内部的应用服务器使用,也可以给第三方的开发者使用。为了降低服务模块与其他模块的耦合性,通常在用暴露接口的形式提供服务。因此被服务者只要遵循该接口,无论是用什么语言,都可以进行应用开发。
2)简单实例:比如应用服务器需要一个add(a,b)的结果。如果在用用服务器中设计该程序,那其他应用需要此函数时还需要从新设计相同的代码。于是我们可以把add(a,b)的代码放在服务服务器中。当应用需要此代码时,通过socket向服务服务器传递需要服务的接口名和方法和参数a,b。服务器接收到传递的信息后,通过接口名new出实例对象,并将参数传入计算结果,最后将结果返回给应用服务器。
在实际项目中,是在应用程序(需要服务的程序)中含有一个服务接口的引用,这个引用实际是通过远程调用方式生成的动态代理,通过该代理完成服务方法的调用。
3)服务的接口
大型网站构架 - Garfield - 张广辉的博客 大型网站构架 - Garfield - 张广辉的博客
  

Web Serverce是SOA构架的一个具体实现。详见网络编程的Web Serverce.
4)服务层负载均衡
大型网站构架 - Garfield - 张广辉的博客
 

3,可扩展的数据结构(列存储的列族)
详见hadoop中的nosql
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值