Nginx服务器及相关体系组件总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35488412/article/details/78485230

1.Nginx基础

Nginx简介静态HTTP服务器,反向代理服务器(还是为了后面的负载均衡功能)负载均衡(多台服务器或虚拟主机)。

Apache和Nginx对比:

Nginx优点:轻量级、配置简洁、抗并发、高度模块化。

Apache优点:rewrite强大,模块极为丰富,超稳定。

Tomcat:Tomcat也可以认为是HTTP服务器,但通常它仍然会和Nginx配合在一起使用:

动静态资源分离——运用Nginx的反向代理功能分发请求:所有动态资源的请求交给Tomcat,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻Tomcat的压力。

负载均衡,当业务压力增大时,可能一个Tomcat的实例不足以处理,那么这时可以启动多个Tomcat实例进行水平扩展,而Nginx的负载均衡功能可以把请求通过算法分发到各个不同的实例进行处理

Apache/Nginx 应该叫做「HTTP Server」;

Tomcat 则是一个「Application Server」,更准确的来说,是一个「Servlet/JSP」应用的容器。


Nginx模块:

Nginx的核心模块包括内核模块和事件驱动模块,即 CoreModule和EventsModule;另外还有第三方模块 HTTP内核模块,HttpCoreModule,它是Nginx服务器的核心模块。

CoreModule和EventsModule模块的配置相对于HttpCoreModule会少一些,但是它们的配置将会影响系统的性能,而非功能上的差异。

1、 CoreModule用于控制Nginx服务器的基本功能; 
2、EventsModule用于控制Nginx如何处理连接。该模块的指令的一些参数会对应用系统的性能产生重要的影响; 
3、HttpCoreModule提供HTTP访问Nginx服务器,该模块是不能缺少的。

Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码。

淘宝开发的ngx_lua模块通过将lua解释器集成进Nginx,可以采用lua脚本实现业务逻辑,由于lua的紧凑、快速以及内建协程,所以在保证高并发服务能力的同时极大地降低了业务逻辑实现成本。    

需要下载新增模块,然后重新编译nginx。这里以安装第三方ngx_http_google_filter_module模块为例。nginx的模块是需要重新编译nginx,而不是像apache一样配置文件引用.so

1.下载第三方扩展模块ngx_http_google_filter_module

2.查看nginx编译安装时的命令,安装了哪些模块

3.加入需要安装的模块,重新编译

4.替换nginx二进制文件:

5.启动nginx

 

I/O模型有五种:阻塞式I/O,非阻塞式I/O,多路复用I/O,信号驱动I/O,异步I/O 。

文件句柄 Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。

总结:文件句柄不是内存地址,而是保存且能更新文件内存地址的32位整数。通过文件句柄可以确定文件的内存地址。程序-文件句柄-内存地址-文件   文件句柄

Crontab  crontab 是用来让使用者在固定时间或固定间隔执行程序之用,在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现。以某一频率执行任务linux缺省会启动crond进程,crond进程不需要用户启动、关闭。

2.Nginx在大数据架构业务场景中

组件作用:我们的业务场景中用于接受埋点数据,是一个可靠的web服务器,速度快,支持高并发,内存消耗低,高扩展性。

组件工作原理:静态http服务器、反向代理、负载均衡等。

类似组件的横向比较:nginx、Apache、Tomcat。 前两个都是http服务器,Tomcat是web应用服务器,Apache模块极为丰富,rewrite强大,超稳定。

Nginx 处理响应请求快、高并发连接、低消耗内存、高可靠性、高扩展性、热部署。

3..软件负载对比

基于硬件的方式(F5)

  优点:能够直接通过智能交换机实现,处理能力更强,而且与系统无关,负载性能强更适用于一大堆设备、大访问量、简单应用

  缺点:成本高,除设备价格高昂,而且配置冗余.很难想象后面服务器做一个集群,但最关键的负载均衡设备却是单点配置;无法有效掌握服务器及应用状态.

  硬件负载均衡,一般都不管实际系统与应用的状态,而只是从网络层来判断,所以有时候系统处理能力已经不行了,但网络可能还来得及反应(这种情况非常典型,比如应用服务器后面内存已经占用很多,但还没有彻底不行,如果网络传输量不大就未必在网络层能反映出来)

基于软件的方式(Nginx)

  优点:基于系统与应用的负载均衡,能够更好地根据系统与应用的状况来分配负载。这对于复杂应用是很重要的,性价比高,实际上如果几台服务器,用F5之类的硬件产品显得有些浪费,而用软件就要合算得多,因为服务器同时还可以跑应用做集群等。

  缺点:负载能力受服务器本身性能的影响,性能越好,负载能力越大。

综述:对我们管理系统应用环境来说,由于负载均衡器本身不需要对数据进行处理,性能瓶颈更多的是在于后台服务器,通常采用软负载均衡器已非常够用且其商业友好的软件源码授权使得我们可以非常灵活的设计,无逢的和我们管理系统平台相结合。

4.Openresty

    Openresty是一款全功能的web应用服务器。它打包了标准的Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种Nginx C 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的 Web 应用。第二代的 openresty 致力于通过一系列 Nginx 模块,把nginx扩展为全功能的 web 应用服务器。

ngx_openresty 目前有两大应用目标:
1. 通用目的的 web 应用服务器。在这个目标下,现有的 web 应用技术都可以算是和OpenResty 或多或少有些类似,比如 Nodejs, PHP 等等。ngx_openresty 的性能(包括内存使用和 CPU 效率) 算是最大的卖点之一。
2. Nginx 的脚本扩展编程,用于构建灵活的 Web 应用网关和 Web 应用防火墙。有些类似的是 NetScaler。其优势在于 Lua 编程带来的巨大灵活性。

web应用防火墙:从防范内容来看,传统防火墙只是针对一些底层(网络层、传输层)的信息进行阻断,提供IP、端口防护,对应用层不做防护和过滤;而Web应用防火墙则专注在应用核心层,对所有应用信息进行过滤,从而发现违反预先定义好的安全策略的行为。

网关(Gateway) 又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。

大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关(Gateway)[1]  就是一个网络连接到另一个网络的“关口”。也就是网络关卡

为什么选择openresty,相对于nginx:

用Nginx时比如ngx_lua安装能够通过下载模块源代码,编译Nginx。可是推荐採用openresty。Openresty就是一个打包程序,包括大量的第三方Nginx模块,比方HttpLuaModule,HttpRedis2Module,HttpEchoModule等。省去下载模块,而且安装很方便。

5.Lua

LuaJIT它利用即时编译( Just-inTime) 技术把 Lua代码编译成本地机器码后交由 CPU直接执行,起到了加速效果。

Lua作用:Lua是一个由标准C语言编写的简洁、高效、移植性强的脚本语言,适合作嵌入应用程序的脚本。我们需要它配合nginx完成所接受数据的处理及存储。

6.logrotate

由于nginx自带的日志功能不够完善,通常会用到logrotate,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循转储,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。

·        monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。

·        rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。

·        compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。

·        delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。

·        missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。

·        notifempty: 如果日志文件为空,轮循不会进行。

·        create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。

·        postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。

上面的模板是通用的而配置参数则根据你的需求进行调整,不是所有的参数都是必要的。

猜你喜欢

转载自blog.csdn.net/qq_35488412/article/details/78485230