企业级WEB服务Nginx实践——Web基础+Nginx介绍

Web基础

网站访问流程

递归和迭代的区别?
递归查询过程就是 “查询的递交者” 更替,而迭代查询过程则是 “查询的递交者”不变

www.baidu.com----本地缓存-----hosts
------“LDNS”(LDNS即用户本地DNS)
------权威DNS
10.122.42.11 ----------------->服务器
在这里插入图片描述在这里插入图片描述

http状态码

在这里插入图片描述

状态码 含义
200 正常
301 永久重定向 permanent
302 临时重定向 redirect
403 访问合法,因为设置的规则导致客户端没有权限访问
404 找不到资源
500 服务器内部错误 Selinux
502 Bad Gateway,反向代理后端节点服务异常(服务器自身工作正常)
503 后端代理无法访问(服务器无法响应)
504 网关超时

静态资源,动态资源,伪静态

静态资源:html,gpn,MP4
动态资源:.php .jsp(数据库交互)注册登录的页面、论坛
伪静态:重写技术将动态页面展示为静态的效果,更易于搜索引擎所收录

URI和URL的区别

URI:统一资源标识符,----> 资源
URL:统一资源定位符,----> 目录或文件

URI: 统一资源标识符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如HTML文档、图像、视频片段、程序等都由一个URI进行定位的。

URL: 统一资源定位符(Uniform Resource Locator,URL),是Internet上描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。 采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。

URL是URI概念的一种实现方式。
https://blog.csdn.net/qq_32595453/article/details/80563142

独立IP,PV,UV,DAU

名词 含义
DAU Daily Active User,日活跃用户数量(去除重复的用户)
UV unique visitor,访问网站的一台电脑客户端为一个访客
独立IP 独立用户/访客
PV Page View,页面浏览量,用户每1次对网站中的每个网页访问均被记录1次
  • DAU与UV区别
    UV根据设备号,DAU根据用户pin。多个设备号可以同时登录一个用户pin,也可以所有设备号都不登录用户pin。

在实际生产情况下,根据设备号去重计算的结果一般称为UV;而离线计算里,根据设备号去重计算结果一般称为DAU。

  • UV与独立IP区别
    如果同一个电脑(客户端),通过更换ip的方式,重复访问同一个网站,统计的时候,统计到的数据是1 UV,多个IP。
    如果在同一个IP下面有多台电脑(局域网客户端),这些电脑都访问同一个网站,统计的时候,统计到的数据是多个UV,1个IP。

并发连接

在单位时间内网站服务所能接受的最大连接数

Apache和Tomcat区别

对比项 服务器种类 解释java程序 资源区别
Apache Web服务器 不能 支持html、img等静态资源,不支持动态请求如:CGI、Servlet/JSP、PHP、ASP
Tomcat Java服务器(Servlet容器) 支持JSP,Servlet等动态资源,也支持静态页,但效率没有Apache高

Apache + Tomcat:
如果请求是静态网页则由Apache处理,并将结果返回;如果是动态请求,Apache会将解析工作转发给Tomcat处理,Tomcat处理后将结果通过Apache返回。这样可以达到分工合作,实现负载均衡,提高系统的性能。


Nginx

Nginx最初的设计是成为一个能够解决C10K问题的http服务器

C10K问题

C10K问题即单机1万个并发链接问题,这个概念最早是由Dan Kegel发布于其个人站点

web1.0 互联网的大部分使用场景是下载一个HTML页面,用户在浏览器中查看网页上的信息,这个时期不存在C10K的问题。

web2.0 用户集群倍数增长,应用程序的逻辑变的更复杂,不只是单纯的浏览万维网网页上的信息,逐渐开始进行交互,从简单的表单提交,到即时通信和在线实时互动,C10K的问题出现了。因为每一个用户都需要与服务器保持TCP链接才能进行实时的数据交互

采用分布式系统,维持1亿的在线用户需要10万台服务器,成本巨大

这些局限和问题最早被Dan Kegel进行了归纳和总结,并首次系统分析并提出解决方案,后来这种普遍的网络网络现象和技术局限被成为C10K

解决问题的思路

(1)对于每一个链接处理分配一个独立的进程/线程
占用大量系统资源,不具备良好的可扩展性
(2)用同一个进程/线程来同时处理若干链接(IO多路复用)

实现方式1:循环挨个处理各个连接
问题归纳:任一文件句柄的不成功会阻塞住整个应用

实现方式2:select方案
在读取文件句柄之前,先检查其状态,ready了就进行处理

用一个fd_set结构体来告诉内核同时监控多个文件句柄,当其中有文件句柄的状态发生指定变化(例如某句柄由不可用变为可用)或超时,则调用返回,之后应用可以使用FD_ISSET来逐个查看是哪个文件句柄的状态发生了变化

问题归纳:存在管理的句柄上限(FD_SETSIZE),每次调用之前要重新初始化fd_set,逐个排查所有文件句柄状态效率不高

实现方式3:poll
解决select的前两个问题:通过一个pollfd数组向内核传递需要关注的事件消除文件句柄上限,同时使用不同字段分别标注关注事件和发生事件,来避免重复初始化
问题归纳:逐个排查所有文件句柄状态效率不高

实现方式4:epoll,调用返回的时候只给应用提供发生了状态变化(很可能是数据 ready)的文件句柄,epoll的这种设计,适用于大规模的应用场景
问题归纳:依赖特定平台(Linux)

实验表明,当文件句柄数目超过10之后,epoll性能将优于select和poll;当文件句柄数目达到10K的时候,epoll已经超过select和poll两个数量级

nginx正是基于这样的开发理念,使得其有占用内存少,并发能力强的特性

Nginx知识

程序,进程的概念回顾

nginx和apache的对比

Nginx和Apache一样,都是HTTP服务器软件,在功能实现上都采用模块化结构设计,都支持通用的语言接口,如PHP、Perl、Python等,同时还支持正向和反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输等。

Nginx Apache
占用内存及资源少,可处理高并发请求 rewrite功能强大
本身是反向代理服务器,负载均衡能力突出,可实现分布式架构及高可用集群 动态页面处理能力强
社区活跃,高性能模块出品迅速 bug少,稳定性强
模块化设计,编写模块相对简单 模块超多,基本想到的都可以找到

Nginx相对apache的优点
(1)轻量级,作为web服务,比apache占用更少的内存及资源
(2)静态处理性能高,比Apache高3倍以上
(3)抗并发,处理请求异步非阻塞,在高并发下能保持低资源低消耗高性能
(4)高度模块化的设计,编写模块相对简单
(5)社区活跃,各种高性能模块出品迅速

apache相对nginx的优点
(1)rewrite比nginx的强大
(2)模块超多,基本想到的都可以找到
(3)bug少,稳定性强
(4)Apache对PHP支持比较简单,Nginx需要配合其他后端用
(5)处理动态请求
(6)apache是目前的主流,拥有丰富的特性,成熟的技术和开发社区

选择Nginx的优势所在

(1)作为Web服务器,Nginx处理静态文件、索引文件,自动索引的效率非常高。
(2)作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站运行速度。
(3)作为负载均衡服务器,Nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡。
(4)在性能方面,Nginx是专门为性能优化而开发的,在实现上非常注重效率。它采用内核Poll模型(epoll and kqueue),可以支持更多的并发连接,最大可以支持对50 000个并发连接数的响应,而且只占用很低的内存资源。
(5)在稳定性方面,Nginx采取了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx官方表示,Nginx保持10000个没有活动的连接,而这些连接只占用2.5MB内存,因此,类似DOS这样的攻击对Nginx来说基本上是没有任何作用的。
(6)在高可用性方面,Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7×24小时不间断地运行。

同时使用Nginx和Apache

由于Nginx和Apache各自的优势,现在很多人选择了让两者在服务器中共存。在服务器端让Nginx在前,Apache在后。由Nginx做负载均衡和反向代理,并且处理静态文件,将动态请求(如PHP应用)交给Apache去处理。

负载均衡及高可用集群概念

I/O多路复用

原文地址:https://www.cnblogs.com/zhaoya2019/p/12718685.html