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

马老师 LNMP生产环境Web架构 笔记

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-21 10:58:42 | 显示全部楼层 |阅读模式
  http协议和缓存原理、多路IO模型:
  MIME机制,Multipurpose Internet Mail Extensions,多用户互联网邮件扩展。MIME使用一个简单的字符串组成,最初是为了标识邮件Email附件的类型,在html文件中可以使用content-type属性表示,描述了文件类型的互联网标准。服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件。
  MIME规定了用于表示各种各样的数据类型的符号化方法。浏览器接收到文件后,会进入插件系统进行查找,查找出哪种插件可以识别读取接收到的文件。如果浏览器不清楚调用哪种插件系统,它可能会告诉用户缺少某插件,或者直接选择某现有插件来试图读取接收到的文件,后者可能会导致系统的崩溃。
  MIME是内容类型的标示。
  Web对象,Web资源:取回本地去展示。
  http request


  • method URL version 起始行
  • headers首部
  • Request body主体
  http response


  • version status_code reason
  • headers
  • response body
  status_code:


  • 1XX:简单信息
  • 2XX:正确响应
  • 3XX:重定向类的响应
  • 4XX:客服端错误响应
  • 5XX:服务器端错误响应
  Web服务器响应多个用户请求的模型:1、单进程模型,服务器只有一个,请求一个一个挨着来;2、多进程、多线程(服务器的线程)模型,客户和请求不是一一对应;3、一个进程处理多个请求,每个请求使用一个线程(进程的线程);4、多个进程处理多个请求。
  多路复用(复用机制不同)
  IO模型:同步阻塞模型。频率 Hz。
电子电路中高电平是电压高的状态,一般记为1; 电子电路中低电平是电压低的状态,一般记为0;
同步时钟频率,步调一致。
异步,不需要同步时钟频率,有一套规则告诉你如何解析。
阻塞。
非阻塞。
  四种模型:


  • 同步阻塞
  • 同步非阻塞
  • 异步阻塞(异步是不能阻塞的,只能阻塞异步信号)
  • 异步非阻塞,基于函数回调机制。内核完成,用一个回调机制再传给他。内核主动执行回调函数
  多进程模型下套接字只有一个,监听一个套接字。
  select系统调用是用来让我们的程序监视多个文件描述符(file descrīptor)的状态变化的。程序会停在select这里等待,直到被监视的文件描述符有某一个或多个发生了状态改变。Select机制通知完成已否。每隔一定频率扫描一遍,向用户发送通知,无论完成与否。最早通知个数是1024个。并发请求1024个是不可能的。等同于不论完成都告诉客服,让没有完成的客户也接收到通知,不胜其烦。Select只是一个内核函数。
  epoll机制下每个用户的请求被制成一种状态,当请求完成后,状态发生改变,从未完成到完成。Epoll只是将已完成的请求的输出到用户组,只通知已完成。只通知一次的叫边缘触发;通知直到完成叫做水平触发。 epoll比select更负责,更高效。Epoll打开文件描述符的个数不受1024的限制,受操作系统的限制。
  Apache


  • prefork模型:多进程,每个请求用一个进程响应。select机制。并发数有限。
  • work模型:多进程(每个进程可以生成多个线程),每个请求用一个线程响应。不完全是Select机制。线程开销小,可以共享进程的资源。
  • Event模型:多进程,每个进程可同时响应多个用户请求。基于事件实现。 同步阻塞。用户请求,到缓存中找,没有的话去磁盘上找。等待内核将资源返回,磁盘IO。磁盘IO通过系统调用,所以跟内核打交道。完成了网路服用,将网络连接完成了复用。使用一个单独的进程来响应的。网络连接完成了复用。
  高并发实现模式:


  • 基于线程:多进程(每个进程可以生成独立线程),每个线程响应一个请求,比如work。线程开销小,可以共享进程的资源。有数目限制。在linux上,work没有优势可言。
  • 基于事件:Event。线程抖动(线程切换过快)。进程只有一个,或者进程内只有一个线程。一个进程响应多个用户请求,不停循环,run-loop机制(端口套接字复用,listen接受请求,然后交给其他处理,一直listening接受状态,然后磁盘IO。这样就实现网络复用)。如何知道接受处理情况-网络IO? 未完成的时候表示为未完成,完成的时候通过epoll通知完成。
  网络IO:网络IO、磁盘IO。
  文件的AIO(All In One一体机制)。读取文件,内核发起调用,从磁盘上到到内存buffer,从内核copy到用户的进程。这样会很慢。系统利用内核的MMap机制形成映射,进行内存映射机制,获得的是地址空间,而不再是数据。
  网络IO上Epoll是最好的,磁盘IO异步非阻塞(AIO)是最好的。
  Nginx:基于时间,支持边缘触发,mmap,AIO的一种轻量级Web服务器。   多个进程相应N个用户请求。并行计算能力。Nginx完全可以用SMP的优势。
  采用模块化设计: core + function(模块是管道穿墙,流水线式工作),接受创建模块连接,再接受,循环。
  Nginx Feature


  • static file serving
  • SSL/TLS support
  • Virtual hosts
  • Reverse proxying
  • Load balancing
  • Compressing
  • Access controls
  • URL rewriting
  • Custom logging
  • Server-side includes
  • WebDAV
  • Flv streaming
  • FastCGI
  核心模块,功能模块,组合模块
  web反向代理,mail服务器(pop,smtp,imap)
  squid反向代理是同步的。
  apache root, master process


  • 创建新进程
  • 回收进程
  Nginx也是两类进程:


  • master进程,根据配置需要启动slave进程或销毁slave进程;启用新的配置
  • slave进程,真正向用户请求的都是slave进程
  Nginx可以根据需要,无缝升级。先想mater升级,然后升级slave,等老的slave销毁了,再启用就使用新的slave进程。
  Nginx会按需同时运行多个进程:一个主进程master和几个工作进程worker,配置了缓存时还会有缓存加载器进程cache loader和缓存管理器进程cache manager等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信,主进程以root用户身份运行,而worker、cache loader和cache manager均以非特权用户身份运行。
  主进程主要完成以下工作:
1、读取并验证配置信息;
2、创建、绑定及关闭套接字;
3、启动、终止及维护worker进程的个数;
4、无须中止服务而重新配置工作特性;
5、控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本;
6、重新打开日志文件;
7、编译嵌入式perl脚本。
  worker进程主要完成的任务包括:
1、接受、传入并处理来自客户端的连接;
2、提供反向代理及过滤功能;
3、Nginx任何能完成的其他任务。
  cache loader进程主要完成的任务包括:
1、检查缓存存储中的缓存对象;
2、使用缓存元数据简历内存数据库。
cache manager进程的主要任务:
缓存的失效及过期检验。
  Nginx的配置由着几个不同的上下文:main、http、server、upstream和location(还有实现邮件服务反向代理的mail)。配置语言的格式和定义方式遵循所谓的C风格,因此支持嵌套,还有这逻辑清晰并易于创建、阅读和维护等优势。
  Nginx的代码是由一个核心和一系列的模块组成,核心主要用于提供web server的基本功能,以及web和mial反向代理的功能;还用于启用网络协议,创建必要的运行时环境以及确保不同的模块之间平滑地运行交互。不过,大多跟协议相关的功能和某应用特有的功能都是由nginx的模块实现的。这些功能模块大致可以成为事件模块、阶段性处理器、输出过滤器、协议、upstream和负载均衡几个类别,这些共同组成了nginx的http功能。事件模块主要用户提供os独立的(不同操作系统的事件机制有所不同)事件通知机制如kqueue或epoll等。协议模块则负责事件nginx通过http、tls/ssl、smtp、pp3以及imap与对应的客户端建立会话。
  在nginx内部,进程间的通信是通过模块的pipeline或chain实现的:换句话说,每个功能或操作都由一个模块来实现。例如,压缩、通过FastCGI或uwsgi协议与upstream服务器通信,以及与memcached建立会话等。
  work_connections首先用户用户连接数限制,ulimit -n
  work process


  • 如果是IO密集型,此个数是CPU的1.5或2倍.也有人将此个数设置为跟磁盘数一样。
  • 如果是CPU密集型,此个数是CPU个数
  Nginx的location匹配规则,Nginx的Location可以有以下几个匹配:


  • 〖=〗  严格匹配这个查询。如果找到,停止搜索。
  • 〖^~ 〗 匹配路径的前缀,如果找到,停止搜索。
  • 〖~ 〗 为区分大小写的正则匹配
  • 〖~*〗 表示不区分大小写的正则匹配
  • 〖@〗 指定一个命名的location,一般只用于内部重定向请求。
  首先对字符串进行匹配查询,最确切的匹配将被使用。然后,正则表达式的匹配查询开始,匹配第一个结果后会停止搜索,如果没有找到正则表达式,将使用字符串的搜索结果,如果字符串和正则都匹配,那么正则优先级较高。
例子:
location = /{
  # 只匹配对 / 目录的查询.
  [ config A ]
}
location /{
  # 匹配以 / 开始的查询,即所有查询都匹配。
  [ config B ]
}
location ^~ /images/{
  # 匹配以 /images/ 开始的查询,不再检查正则表达式。
  [ config C ]
}
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配以gif, jpg, or jpeg结尾的文件,但优先级低于config C。
  [ config D ]
}
  如果要定义多个location,则可以有2种方式:
使用/ :
location / {
  client_max_body_size 200m;
  proxy_connect_timeout 30;
  proxy_set_header Host $http_host;
  proxy_set_header x-forwarded-for $remote_addr;
  proxy_pass http://127.0.0.1:8008;
}
location /tmp/{
  root /; internal;
}
采用这种方式,/tmp可以放在/的下面,因为“/是匹配任何查询,但是正则表达式规则和长的块规则将被优先和查询匹配”
使用~ /* :
location ~ /tmp/ {
  root /tmp; internal;
}
location ~ /* {
  client_max_body_size 20m;
  proxy_connect_timeout 30;
  fastcgi_pass fpass;
  include fastcgi_params;
}
采用这种方式,/tmp则必须放在~ /*这个前面,因为~是正则匹配的,正则匹配是有顺序的,只要匹配上就不会再往下匹配了。除非在conf中有定义=或者^~,也就是说=和^~的优先级最高,如果匹配上,就不会再去匹配其它的规则了。
总之,引用Nginx的官方文档的匹配规则:
Directives with the = prefix that match the query exactly. If found, searching stops.All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.Regular expressions, in order of definition in the configuration file.If #3 yielded a match, that result is used. Else the match from #2 is used.
注意:正则表达式的匹配是有顺序的,按顺序匹配。其它的匹配理论上讲是只有优先级,而没有顺序的。
总之:
(location =) > (location 完整路径 >)>(location ^~ 路径) >(location ~* 正则)>(location 路径)
只要匹配到,其它的都会忽略,然后返回到改匹配。
如果都是正则,都能够匹配,以配置文件出现顺序来,谁在前谁优先。
  ELinks 是一个 Linux 系统下的纯文本的浏览器,安装后。使用命令elinks -dump URL,即可访问URL路径地址。
  启用基于用户的认证:



server {
server_name www.realure.com
location /{
auth_basic "Restricted"
auth_basic_user_file /etc/nginx/.htpassws;
...
}
...
}
  
  看完第十一讲

运维网声明 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-102118-1-1.html 上篇帖子: lnmp环境搭建,超详细教程 下篇帖子: 网站后台的lnmp启动与重启
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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