大并发server架构 && 大型站点架构演变

server的三条要求:

高性能:对于大量请求,及时高速的响应

高可用:7*24 不间断,出现问题自己主动转移。这叫fail over(故障转移)

伸缩性:使用跨机器的通信(TCP)

另外不论什么网络系统结构都能够抽象成C/S架构。我们常说的B/S模式本质上也是C/S架构(浏览器看作client)。

一个典型的server架构:

注: epoll是linux下最高效的网络I/O

因为server须要高效处理大并发连接。因此多个位置均可能出现性能瓶颈,以下我们分析不同位置产生瓶颈的原因及其处理方法:

(一)数据库瓶颈

【1】超过数据库的连接数的解决方法:加上一层DAL。使用队列等待(队列等待--数据訪问层)。也能够再使用连接池(DAL队列服务+连接池)这样不须要又一次连接。直接从池中找资源。

【2】超出时限的解决方法:

(1)将业务逻辑放置应用server(操作系统业务处理),数据库逻辑不要太复杂。仅仅是进行一定的辅助业务处理。

(2)缓存数据。可是面临缓存的更新和同步的问题,例如以下:

1. 缓存的时效性。if timeout then 又一次去数据库查询。(将热点数据放至缓存)这样的方法实时性较差。

2. 一旦数据库更新,马上通知前端缓存更新。

Update之后改动更新缓存,实时性较好。可能实现起来较难。

假设内存不够用,那么就放到外部磁盘,使用缓存换页机制(类似OS中的内存换页)。

上面提到的这些都能够使用开源产品实现:Nosql ---> (反sql )

主要存放非关系的数据。key/value

还有Redis 。memached 缓存等分布式开源软件。这些软件是能够跨server的。可是假设部署在应用server上,则是局部的,其它同级server訪问非常麻烦。

可是假设单独布置机器,使用分布式缓存,这些就是全局的。全部的应用server都能够訪问。方便快捷。

【3】数据库读写分离

数据库的查询操作一般比写操作频繁,我们能够对数据库进行负载均衡。使用主server进行写操作,从server进行读操作。DAL进行读写分离,通过replication机制进行主从server间的同步。

【4】数据分区(分库、分表)

分库:数据库能够依照一定的逻辑把表分散到不同的数据库--->垂直分区(用户表,业务表)

更加经常使用的分表--水平分区:将表中的记录分至不同的数据库,10条记录分至10个数据库,类似这样,这样的方式非常easy扩展水平结构。

(二)应用server瓶颈

加入任务server相应用server的任务分配进行负载均衡,当中又分为主动和被动两种方案:

(1)应用server被动接受方案:

使用任务server实现负载均衡,暴露一个接口,任务server能够当作一个client,应用server看作httpserver

任务server能够监视应用server的负载,CPU/IO/并发/内存换页高,查询到信息后,选取负载最低(算法确定)的server来分配任务.

(2)应用server主动到任务server接受任务进行处理

应用server处理完自己的任务后主动向任务server申请求任务。

(1)的方式可能会造成不公平。(2)的缺点是假设应用server处理不同的业务。那么可能任务server的编程逻辑会非常复杂。

当中任务server能够设置多台。彼此之间通过心跳联系------>满足 高可用性(fail over机制)。

如此一来(数据库,缓存,应用server,任务server)不论什么位置出现瓶颈就仅仅须要添加server好了。

为了高效的进行服务端的编程。我们也须要知道server性能四大杀手:

(1)数据拷贝 ----> 缓存来解决

(2)环境切换 -----> 理性创建线程:是否须要多线程。哪个好?单核server(採用状态机的编程效率最佳,类似OS中的进程切换)

多线程可以充分发挥多核server的性能,也要注意线程间切换的开销

(3)内存分配 ------> 内存池,降低向操作系统申请内存

(4)锁竞争 -------> 通过逻辑尽量降低锁的使用

以上的信息能够归纳为以下的这张图:

我们接下来介绍实际中的大型站点架构的演变过程,和我们上面的问题处理流程基本一致:

[Step1]web server与数据库分离

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

Apache/Nginx处理静态(前端server)  JBoss/Tomat处理动态 (后端server)

[Step2]缓存处理

1.浏览器缓存降低对站点的訪问

2.前端server静态页面缓存降低对webserver的请求

3.动态中相对静态的部分使用ESI

4.本地缓存降低对数据库的查询

[Step3]web server集群+读写分离

负载均衡:

前端负载均衡

DNS负载均衡

在DNSserver中,能够为多个不同的地址配置同一个名字,对于不同的客户机訪问同一个名字,得到不同的地址。

反向代理

使用代理server将请求发给内部server,让代理server将请求均匀转发给多台内部webserver之中的一个。从而达到负载均衡的目的。标准代理方式是客户使用代理訪问多个外部Webserver。而这样的代理方式是多个客户使用它訪问内部Webserver。因此也被称为反向代理模式。

基于NAT的负载均衡技术

LVS

F5硬件负载均衡

应用server负载均衡

数据库负载均衡

[Step4]CDN、分布式缓存、分库分表

眼下流行分布式缓存方案:memcached、membase、redis等,基本上当前的NoSQL方案都能够用来做分布式缓存方案

[Step5]多数据中心+分布式存储与计算

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

技术点:分布式文件系统(DFS)

Map/Reduce:

文件太大,无法载入至内存。切割得到key-value数据,这个是map过程(多个机器完毕)

将其合并的过程称为reduce。Map-->combine-->reduce,这就是所谓的分布式计算。

时间: 2024-10-12 07:29:39

大并发server架构 && 大型站点架构演变的相关文章

分享JAVA从初级程序员到架构师视频,文档,架构设计,大型网站架构分析,大数据分析资料

JAVA从初级程序员到架构师视频,文档,架构设计,大型网站架构分析,大数据分析资料, 搭建高并发.高可用电商架构设计资料需要的联系我.很多目录都没列出来(QQ空间相册里有很多目录的截图)加QQ:1927360914

高性能大并发server的基础

一.背景 进入多核时代已经很久了,大数据概念也吵得沸沸扬扬,不管你喜欢不喜欢,不管你遇到没遇到,big-data或bigger-data都必须正视. 处理大数据,基本都离不开分布式计算和分布式存储,这其中以hadoop最为使用广泛和经典. 分布式系统,就离不开计算系统.网络系统.文件系统和数据库系统. 这么多系统,之间又是如何协作的呢? 通讯过程又是如何保障高性能的呢? 1.单处理器 在以前的单核心cpu下,我们要实现文件I/O.网络I/O,可以妥妥的使用单线程循环处理任务. 但是如果想"同时&

大型站点技术架构(二)--架构模式

大型站点技术架构(一)--大型站点架构演化 每个模式描写叙述了一个在我们周围不断反复发生的问题及该问题解决方式的核心. 这样,你就能一次重新地使用该方案而不必做反复工作. 所谓站点架构模式即为了解决大型站点面临的高并发訪问.海量数据.高可靠执行灯一系列问题与挑战.为此.在实践中提出了很多解决方式,以实现站点高性能.高可靠性.易伸缩.可扩展.安全等各种技术架构目标. 1.分层 分词是企业应用系统中最常见的一种架构牧师,将系统在横向维度上切分成几个部分,每一个部分负责一部分相对简单并比較单一的职责,

《大型站点技术架构》1:概述

參考自<大型站点技术架构>第1~3章 1.大型站点架构演化发展历程 (1)初始阶段的站点架构:一台server分别作为应用.数据.文件server (2)应用服务和数据服务分离:三台server分别承担上述三项工作,当中应用server要求CPU强大.数据库server需求更快的硬盘和内存,文件server须要较大的硬盘. (3)使用缓存改善站点性能:分为本地缓存以及缓存在专门的分布式server上的远程缓存. (4)使用应用server集群改善站点的并发处理能力. (5)数据库读写分离. (

大型站点技术架构(六)--站点的伸缩性架构

大型站点技术架构(一)--大型站点架构演化 大型站点技术架构(二)--架构模式 大型站点技术架构(三)--架构核心要素 大型站点技术架构(四)--站点的高性能架构 大型站点技术架构(五)--站点高可用架构 站点系统的伸缩性架构最重要的技术手段就是使用server集群功能.通过不断地向集群中加入server来增强整个集群的处理能力. "伸"即站点的规模和server的规模总是在不断扩大. 1.站点架构的伸缩性设计 站点的伸缩性设计能够分成两类,一类是依据功能进行物理分离实现伸缩.一类是单

大型站点技术架构(七)--站点的可扩展性架构

大型站点技术架构(一)--大型站点架构演化 大型站点技术架构(二)--架构模式 大型站点技术架构(三)--架构核心要素 大型站点技术架构(四)--站点的高性能架构 大型站点技术架构(五)--站点高可用架构 大型站点技术架构(六)--站点的伸缩性架构 扩展性是指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力. 设计站点可扩展架构的核心思想是模块化,并在此基础上,减少模块间的耦合性,提供模块的复用性.模块通过分布式部署,独立的模块部署在独立的server上(集群)从物理上分离模块之间的耦

大型站点技术架构(八)--站点的安全架构

大型站点技术架构(一)--大型站点架构演化 大型站点技术架构(二)--架构模式 大型站点技术架构(三)--架构核心要素 大型站点技术架构(四)--站点的高性能架构 大型站点技术架构(五)--站点高可用架构 大型站点技术架构(六)--站点的伸缩性架构 大型站点技术架构(七)--站点的可扩展性架构 从互联网诞生起,安全威胁就一直伴随着站点的发展,各种Web攻击和信息泄露也从未停止.常见的攻击手段有XSS攻击.SQL注入.CSRF.Session劫持等. 1.XSS攻击 XSS攻击即跨网站脚本攻击(C

高并发高负载的大型站点系统架构

大型站点的系统架构须要考虑非常多问题.大型站点有高并发高负载的特点,在面对大量用户訪问.高并发请求方面.主要的解决方式集中在这样几个环节:使用高性能的server.高性能的数据库.高效率的编程语言.还有高性能的Web容器.本文从低成本.高性能和高扩张性的角度来探讨了一些大型站点系统架构须要考虑的问题. AD:WOT2014:用户标签系统与用户数据化运营培训专场 一个小型的站点.比方个人站点,能够使用最简单的html静态页面就实现了.配合一些图片达到美化效果,全部的页面均存放在一个文件夹下,这种站

大型站点高并发架构技术

高并发: 高并发主要是由于网站PV访问量大,单台服务器涌承载大量访问所带来的压力,所以会采用多台服务器进行分流,采用服务器集群技术,对于每个访问会被 发送到哪台服务器,我们采取负载均衡策略,常见的技术有LVS,由于网站中有大量的静态页面,所以采用缓存服务器和反向代理技术,包括HAPROXY,Redis,数据库可以采用数据库集群,进行读写分离,缓解数据库压力. 大型站点高并发架构就是利用负载均衡技术.反向代理技术.数据库集群.web服务器集群.Nosql技术等,以实现单台数据器不能达到的并发量,换