不为难自己,迟早会委屈自己!

高性能架构各层中间件应用及特点-个人整理

高性能的网站架构离不开各层中间件的支持,作为一个成长中的架构师,富有创造力固然很重要,但是博览各家之架构,集各家之所长,拓展眼界,不断进步无疑是同样重要的,看多了各大型互联网的架构,其实多多少少都离不开下面列到的一些东西,所谓万变不离其宗,这些就好比各种兵器,作为一个武林高手,18般武器还是多少要熟悉一些的。下面是我的一些整理,有些实战过,有些只是初步研究:

高性能网站的架构如下图:

 

1.最前端负载均衡层

硬件负载均衡:

NetScalerF5RadwareArray:优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用。

软件负载均衡:

LVS:采用persistent机制(NAT/TUN/DR),工作在网络4之上仅作分发之用,高抗负载,易配置,稳定性强,但对网络要求较高,且不支持正则,不能做动静分离。

Nginx:采用ip_hash机制,工作在网络7之上,网络依赖小,支持灵活正则表达,能通过端口检测到服务器内部故障,但不支持url检测,而且仅能支持httpEmail

HA-Proxy:采用balance source机制,工作在网络第4层和第7,纯负载软件,支持虚拟主机,能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作,并且支持url检测,负载效率和并发处理优于Nginx,它跟LVSpersistentNginxip_hash一样,是让客户机访问时始终访问后端的某一台真实的web服务器。 

 

2.代理缓存层

代理缓存主要部署在web server之上,当用户对网站后台发起连接请求时,用户请求先到代理缓存中去查找,如果命中,则将请求返回给用户,如果没有命中,则代理缓存将请求发到 web server,然后web sever将请求复制一份到代理缓存中,同时把请求返回给客户。常用的代理缓存有varnishsquid

Varnish将所有的HTTP object存于一个单独的大文件中,该文件在工作进程初始化的时候,将其整个映射到内存中。这样Varnish在该块内存中实现一个简单的文件系统,具有分配、释放、修剪、合并内存等功能。其工作进程分为master进程和child进程,master进程负责初始化及fork并监控child进程,而child进程分配若干线程(Accept线程,Work线程,Epoll监听线程,Expire过期处理线程)

Squid每一台Squid代理服务器上存有若干个颗磁盘。每颗磁盘又分割成多个分区,每一个分区又可建立很多目录,目录下存放着具体的文件(object)。其通过查询表的方式来定位某个资源的位置。所查询的表有两种,一种是Hash table,一种是Digest tableHash table记录着所有Digest table表信息,所以Hash table可以称之为目录或者提纲。而Digest table记录了磁盘上每个分区、每个目录里存放的缓存摘要,所以Digest table可以称之为摘要或者索引。所以,Squid接到请求后先查询Hashtable,根据Hash table所指向的Digest table,再查询所需要的文件。

NginxNginx已经具备Squid所拥有的Web缓存加速功能,此外,Nginx对多核CPU的利用,胜过Squid不少,现在越来越来的架构师都喜欢将Nginx同时作为负载均衡服务器“Web缓存服务器来使用。 

3.Web Server

Web server的作用就是解析HTTP协议,通过用户发来请求的url地址从web服务器的文件系统中找到用户需要的HTML页面、静态文件,然后返回给用户。如果用户访问的是动态页面,则将请求转发到应用服务器(其上部署了如CGI(Common Gateway Interface), JSP, Servlets, ASP.NETPHP脚本等)来执行。

Lighttpd一个单进程模型的web server,内存使用量很小,CPU占用率低,性能好的轻量级Web Server。支持FastCGI, CGI, 输出压缩,URL重写,Alias等重要功能。使用FastCGI方式运行php

Apache是一款重量级的web服务器,也是世界上使用最多的web服务器,总体来讲,Apache web 服务器具有以下特性:

  (1)  支持HTTP1.1通信协议。

  (2)  支持通用网关接口。

  (3)  支持基于ip、域名、端口的虚拟主机。

  (4)  支持服务器端包含指令(ssl)

  (5)  支持FastCGI

  (6)  支持url重写。

Nginx使用多线程来处理请求,这使得多个线程之间可以共享内存资源,使用分阶段的内存分配策略,按需分配,及时释放,总体占用内存很小,可以支持较大的并发连接数。能够选择高效的epoll(Linux 2.6内核)kqueue(FreeBSD)eventport(Solaris 10)作为网络I/O模型,在高连接并发的情况下,NginxApache服务器很好的替代者,因为在同样并发连接的情况下,Nginx相对 Apache占用更少的系统资源。

4.应用服务器

Tomcat

websphere

JBoss

Weblogic

GlassFish

 

5.服务端缓存

Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。默认情况下采用名为Slab Allocator机制分配、管理内存。Slab Allocator的基本原理是将分配的内存分割成各种尺寸的块(chunk),并将尺寸相同的块分成组(chunk的集合)

 

6.文件服务器层

NFS:

 

热备DRDB+HeartBeat+NFS:

 

MFS:

 

自主研发分布式文件系统:

淘宝TFS

7.数据库

memcached数据缓存服务器:

 

Mysql主从复制,读写分离:

 

LVS+MySql集群:

当后面的MySQL机器超过十台时,HAProxy在这方面的性能不如LVS

水平分库设计:

 

垂直分区设计:

 

 

 

 

 

 

 

 

 

 

 

 

 

 



来自为知笔记(Wiz)



posted on 2015-05-04 18:09  Dimmacro  阅读(2847)  评论(0编辑  收藏  举报