zoukankan      html  css  js  c++  java
  • 高性能架构各层中间件应用及特点-个人整理

    高性能的网站架构离不开各层中间件的支持,作为一个成长中的架构师,富有创造力固然很重要,但是博览各家之架构,集各家之所长,拓展眼界,不断进步无疑是同样重要的,看多了各大型互联网的架构,其实多多少少都离不开下面列到的一些东西,所谓万变不离其宗,这些就好比各种兵器,作为一个武林高手,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

    水平分库设计:

     

    垂直分区设计:

     

     

     

     

     

     

     

     

     

     

     

     

     

     





  • 相关阅读:
    Codeforces Round #370 (Div. 2)
    Codeforces Round #425 (Div. 2)
    变量调节器
    Smarty基础
    流程
    iframe 内联框架
    权限:改变权限
    权限:查找
    html 框架
    Jcrop+uploadify+php实现上传头像预览裁剪
  • 原文地址:https://www.cnblogs.com/dimmacro/p/4476889.html
Copyright © 2011-2022 走看看