设为首页 收藏本站
查看: 1876|回复: 0

[经验分享] 高性能架构各层中间件应用及特点-个人整理

[复制链接]

尚未签到

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

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

DSC0000.jpg


1.最前端负载均衡层

硬件负载均衡:

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

软件负载均衡:

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

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

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


2.代理缓存层

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

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

Squid每一台Squid代理服务器上存有若干个颗磁盘。每颗磁盘又分割成多个分区,每一个分区又可建立很多目录,目录下存放着具体的文件(object)。其通过查询表的方式来定位某个资源的位置。所查询的表有两种,一种是Hash table,一种是Digest table。Hash 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.NET,PHP脚本等)来执行。

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模型,在高连接并发的情况下,Nginx是Apache服务器很好的替代者,因为在同样并发连接的情况下,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)  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-344093-1-1.html 上篇帖子: java进阶书籍推荐 下篇帖子: Servlet的多线程和线程安全
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表