————————目录————————-
1、硬件升级
2、服务器集群、负载均衡、分布式
3、CDN
4、页面静态化
5、缓存技术(Memcache、Redis)
以上为架构层面
以下为网站本地项目层面
6、数据库优化
1、数据库分表技术
2、数据库读写分离
3、表建立相应的索引
7、禁止盗链
8、控制大文件的上传下载
服务器并发处理
1、什么是服务器并发处理能力
一台服务器在单位时间里能处理的请求越多,服务器的能力越高,也就是服务器并发处理能力越强.HTTP请求通常是对不同资源的请求,也就是请求不同的URL,有的是请求图片,有的是获取动态内容,有的是静态页面,显然这些请求所花费的时间各不相同,而这些请求再不同时间的组成比例又是不确定的.
说个题外话
假如100个用户同时向服务器分别进行10个请求,与1个用户向服务器连续进行1000次请求,对服务器的压力是一样吗?(服务器缓冲区只有1个和100个请求等待处理)
2、提高服务器的并发处理能力
提高CUP并发的处理能力
1.多进程:多进程的好处不仅在于CPU时间的轮流使用,还在于对CPU计算和I/O操作进行很好的重叠利用.
2.减少进程切换:进程拥有独立的内存空间,每个进程都只能共享CPU寄存器。一个进程被挂起的本质是将它在CPU寄存器中的数据拿出来暂存在内存态堆栈着那个,而一个进程恢复工作的本质就是把它的数据重新装入CPU寄存器,这段装入和移出的数据称为“硬件上下文”,当硬件上下文频繁装入和移出时,所消耗的时间是非常明显的
3.减少使用不必要的锁:服务器处理大量并发请求时,多个请求处理任务时存在一些资源抢占竞争,这时一般采用“锁”机制来控制资源的占用,当一个任务占用资源时,我们锁住资源,这时其它任务都在等待锁的释放.
4.其他:不写了.对于老板来说,买就是了o(* ̄︶ ̄*)o
服务器集群、负载均衡、分布式
1、什么是集群?
单机处理到达瓶颈的时候,你就把单机复制几份,这样就构成了一个“集群”.集群中的每一台服务器叫做这个集群的节点,节点构成集群(废话…).每个节点提供<相同>的业务或者服务.这样系统的处理能力就会翻倍.
那么问题来了,用户的请求到底哪一台服务器去处理执行的?必须有”领导(负载均衡器)”.这个领导的职责就是进行调度所有的请求以达到使得每一台服务器的负载均衡(是不是很熟悉=.=),不能让有的人闲着,有的人忙死.
2、集群结构的优点?
集群结构的好处就是系统扩展非常容易.如果随着你们系统业务的发展,当前的系统又支撑不住了,那么给这个集群再增加节点就行了.所有节点处于活动状态,有一台down(宕)机,那么整个的业务还在跑(分布式的话,emmmm….)
3、集群分类:
Linux集群主要分成三大类:(高可用集群,负载均衡集群,科学计算集群),其他两个没了解,估计原理差不多吧…
4、集群负载的原理?
DNS轮询、HTTP重定向、IP欺骗(又称三角传输) (这三种实现方式都是在用户通过域名来访问目标服务器时,由GSLB设备(Global Server Load Balancing)进行智能决策,将用户引导到一个最佳的服务IP)
智能DNS可以通过多种负载均衡策略来将客户端需要访问的域名解析到不同的数据中心不同的线路上,比如通过IP地理信息数据库解析到最近的线路,或者权衡不同线路的繁忙度解析到空闲的线路等等.
下面介绍一个解析线路的过程:
1、DNS的负载均衡:
用户访问某个网站时,需要首先通过域名解析服务(DNS)获得网站的IP。域名解析通常不是一次性完成的,常常需要查询若干不同的域名服务器才能找到对应的IP。如下图所示,用户首先在本地配置一个本地DNS服务器地址,本地DNS服务器收到DNS请求后若不能解析,会将请求转发给更高一级的DNS服务器直到找到域名对应的IP或确定域名不存在
普通的访问流程:
加入GBLS(全局负载均衡设备)访问流程:
优点:部署容易,成本低。缺点:GSLB只能拿到本地DNS的IP(获取的地理信息或者其他信息),不能拿到用户的IP,或者说用户的指定的本地DNS如果离自己较远,那么,GSLB就回错误的认为你在本地DNS处,然后返回错误的IP。
2、HTTP重定向负载均衡:
使用基于HTTP重定向方案,首先在DNS中将GSLB设备的IP地址登记为域名的A记录(既域名对应的IP)。如上图所示,用户首先通过DNS得到GSLB设备的IP地址,此时用户以为这就是站点服务器的IP,并向其发送HTTP请求。GSLB设备收到HTTP请求后使用一定策略选择一个最合适的服务器,然后GSLB设备向用户发送一个HTTP重定向指令(HTTP302),并附上选出的服务器的IP地址。最后,用户根据重定向IP访问站点的服务器。
3、基于IP欺骗的负载均衡:
5、和单机结构,集群结构的区别:
从单机到集群,你项目的架构,代码基本不用动(也会改动,因为服务器之间的响应也需要你的项目中有对应的模块或者功能),因为你是通过服务器的数量和负载均衡来增加并发和大流量问题的.
举个栗子:电商网站的某一款娃娃热卖((@^_^@)),负责娃娃的模块瞬间生热,多台服务器也满足不了大家只买这一款娃娃,然而网站的其他模块或者部分基本闲着,调度者(负载均衡器)也表示爱莫能助(因为每一台服务器的局部发热严重),已经非常平衡的分配了用户请求,但是请求的是都是娃娃,这一模块卡顿甚至500(http状态码都5开头了),也不能满足用户需求. 明显是需要把所有的节点服务器中空余的资源分出一部分来给娃娃模块.
6、分布式结构工作机理:
分布式结构就是将一个完整的系统,按照业务功能,拆分成一个个独立的子系统,在分布式结构中,每个子系统就被称为“服务”.这些子系统能够独立运行在web容器中,它们之间通过RPC方式通.
如果上述的网站采用分布式结构,你的服务器器们不在做同一件事情,各司其职,娃娃卖的好,那就多用几台服务器来负责娃娃相关的模块,利用率得到提高.
7、分布式结构的优点:
<1>系统之间的耦合度大大降低,可以独立开发、独立部署、独立测试,系统与系统之间的边界非常明确,排错也变得相当容易,开发效率大大提升
<2>系统之间的耦合度降低,从而系统更易于扩展.我们可以针对性地扩展某些服务.假设这个商城要搞一次大促,下单量可能会大大提升,因此我们可以针对性地提升订单系统、产品系统的节点数量,而对于后台管理系统、数据分析系统而言,节点数量维持原有水平即可
<3>服务的复用性更高.比如,当我们将用户系统作为单独的服务后,该公司所有的产品都可以使用该系统作为用户系统,无需重复开发
CDN
1、什么是CDN?
内容分发网络(Content Delivery Network, CDN)其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络”边缘”,使用户可以就近取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因所造成的用户访问网站响应速度慢的问题。
2、CDN组成有什么?
一个CDN网络主要由以下几部分组成:内容缓存设备、内容分发管理设备、本地负载均衡交换机、GSLB设备和CDN管理系统,其网络结构如下图所示
各部分的工作:
1、内容缓存设备Cache用于缓存内容实体和对缓存内容进行组织和管理。当有用户访问该客户内容时,直接由各缓存服务器响应用户的请求
2、内容分发管理设备主要负责核心Web服务器内容到CDN网络内缓存设备的内容推送、删除、校验以及内容的管理、同步。
3、GSLB设备则实现CDN全网各缓存节点之间的资源负载均衡,它与各节点的SLB设备保持通信,搜集各节点缓存设备的健康状态、性能、负载等,自动将用户指引到位于其地理区域中的服务器或者引导用户离开拥挤的网络和服务器。还可以通过使用多站点的内容和服务来提高容错性和可用性,防止因本地网或区域网络中断、断电或自然灾害而导致的故障。
3、CDN的工作流程
用户访问某个站点的内容时,若该站点使用了CDN网络,则在用户会在域名解析时获得CDN网络GSLB设备的IP地址。GSLB设备根据其预设的选择策略(如,地理区域、用户时间等)为用户选择最合适的内容缓存节点,并且使用某种方式(如,基于DNS、基于HTTP重定向、基于IP欺骗的方式等)导引用户访问所选的内容缓存节点。用户继续向缓存节点发出请求,若缓存中包含请求的内容,则直接返回给用户,否则从核心Web服务器中获取该内容,缓存后返回给用户。这样当用户再次访问相同内容或其他用户访问相同内容时,可以直接从缓存中读取,提高了效率
写在最后:
集群强调的是任务的同一性,分布式强调的是差异性.但是不是绝对对立的.上海的服务器处理上海的文件上传事务,北京服务器处理北京文件上传事务,最终结果都完成文件上传,从全局考虑是分布式的结构,但是就北京而言,北京那边有多台服务器在做同样的事情那么北京那边就是集群结构…分布式的每一个节点都可以做集群,但是集群不一定就是分布式的.