热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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




推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • php设置数组大小_【大厂必备】2020超经典PHP面试题
    结合我自己这段时间的面试情况,面对的一些php面试题列举出来,基本上结合自己的看法回答的,不妥的地方请大家指出去,与大家一起 ... [详细]
  • 怎么查看linux日志里请求量最高的url访问最多的_40道Linux运维面试精华题,请收下这份跳槽秘籍!...
    过一次年,结婚、存款、父母养老,一系列向钱看的事都在碾压我们本来还挺简单的神经,但难过没有出路,唯有找到好的方法和事业方向& ... [详细]
  • php实现监控varnish缓存服务器的状态
    php实现监控varnish缓存服务器的状态-当varnish和网站部署在同一台服务器上的时候,我们不可能随时登录上服务器去查看varnish的命中率,没想到有大神早就写了出来,今 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • ECMA262规定typeof操作符的返回值和instanceof的使用方法
    本文介绍了ECMA262规定的typeof操作符对不同类型的变量的返回值,以及instanceof操作符的使用方法。同时还提到了在不同浏览器中对正则表达式应用typeof操作符的返回值的差异。 ... [详细]
  • 基于php常用正则表达式的整理汇总【PHP】
    后端开发|php教程php,常用正则表达式后端开发-php教程正则表达式3m互助直销系统源码,传感器ubuntu,在家无聊如何爬虫,phpuniquid,康华seo推广lzw如下所 ... [详细]
  • 如何搭建一个 MySQL 分布式集群 ... [详细]
  • 这期内容当中小编将会给大家带来有关如何在php表单中使用正则表达式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可 ... [详细]
author-avatar
手机用户2502885301
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有