Linux运维周作业九(8.12-8.18)

1.编写一个playbook实现Nginx的两种安装过程,安装方式可通过变量传入控制

第一种:包安装
[root@ubuntu2204 ~]vim install_nginx.yml
---
- hosts: webservers
 
  tasks:
    - name: add group nginx
      group: name=nginx state=present
    - name: add user nginx
      user: name=nginx state=present group=nginx
    - name: Install Nginx
      yum: name=nginx state=present 
    - name: web page
      copy: src=files/index.html dest=/usr/share/nginx/html/index.html
    - name: Start Nginx
      service: name=nginx state=started enabled=yes
[root@ubuntu2004 ~]ansible-playbook install_nginx.yml
 
第二种:源码编译安装
[root@ubuntu2204 ~]vim install_nginx.yml
---
- hosts: webservers
  vars:
    version: "1.20.2"
    url: "http://nginx.org/download/nginx-{{ version }}.tar.gz"
    install_dir: "/app/nginx"
  
  tasks:
    - name: install packages
      yum:
        name: "{{ item }}"
      loop:
        - gcc
        - make
        - pcre-devel
        - openssl-devel
        - zlib-devel
        - perl-ExtUtils-Embed
    - name: get nginx source
      unarchive:
        src: "{{ url }}"
        dest: "/usr/local/src"
        remote_src: yes
 
    - name: compile and install
      shell:
        cmd: "./configure --prefix={{ install_dir }} --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module && make && make install"
        chdir: "/usr/local/src/nginx-{{ version }}"
 
[root@ubuntu2204 ~]ansible-playbook  install_nginx.yml

2.总结http协议版本和工作原理

  • http/0.9:
1991,原型版本,功能简陋,只有一个命令GET。GET /index.html ,服务器只能回应HTML格式字符
串,不能回应别的格式
  • http/1.0
1996年5月,支持cache, MIME, method
https://tools.ietf.org/html/rfc2616
每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建
一个连接引入了POST命令和HEAD命令头信息是 ASCII 码,后面数据可为任何格式。服务器回应时会告
诉客户端,数据是什么格式,即Content-Type字段的作用。这些数据类型总称为MIME 多用途互联网邮
件扩展,每个值包括一级类型和二级类型,预定义的类型,也可自定义类型, 常见Content-Type值:
text/xml image/jpeg audio/mp3
  • http/1.1
1997年1月,引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复
用,不用声明Connection: keep-alive。对于同一个域名,大多数浏览器允许同时建立6个持久连接引入
了管道机制,即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率
新增方法:PUT、PATCH、OPTIONS、DELETE
同一个TCP连接里,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有
许多请求排队,造成"队头堵塞"(Head-of-line blocking)
为避免上述问题,两种方法:一是减少请求数,二是同时多开持久连接。
网页优化技巧,如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等
HTTP 协议不带有状态,每次请求都必须附上所有信息。请求的很多字段都是重复的,浪费带宽,影响
速度
  • HTTP1.0和HTTP1.1的区别:
缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,
HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None�Match等更多可供选择的缓存头来控制缓存策略
带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如:客户端只是需要某个
对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头
引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),方便了
开发者自由的选择以便于充分利用带宽和连接
错误通知的管理,在HTTP1.1中新增24个状态响应码,如409(Conflict)表示请求的资源与资源当
前状态冲突;410(Gone)表示服务器上的某个资源被永久性的删除
Host 头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并
没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个
虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应
消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)
长连接,HTTP 1.1支持持久连接(PersistentConnection)和请求的流水线(Pipelining)处理,
在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在
HTTP1.1中默认开启Connection: keep-alive,弥补了HTTP1.0每次请求都要创建连接的缺点
  • SPDY协议
SPDY:2009年谷歌研发,综合HTTPS和HTTP两者有点于一体的传输协议,主要特点:
降低延迟,针对HTTP高延迟的问题,SPDY优雅的采取了多路复用(multiplexing)。多路复用通
过多个请求stream共享一个tcp连接的方式,解决了HOL blocking的问题,降低了延迟同时提高了
带宽的利用率
请求优先级(request prioritization)。多路复用带来一个新的问题是,在连接共享的基础之上有
可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,重要的请求就会优先得到响
应。比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件
等加载,可以保证用户能第一时间看到网页内容
header压缩。HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大
小和数量
基于HTTPS的加密协议传输,大大提高了传输数据的可靠性
服务端推送(server push),采用了SPDY的网页,例如网页有一个sytle.css的请求,在客户端收
到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时
就可以直接从缓存中获取到,不用再发请求了
  • HTTP2协议
http/2.0:2015年发布,HTTP2.0是SPDY的升级版
头信息和数据体都是二进制,称为头信息帧和数据帧
复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序响
应,避免了"队头堵塞",此双向的实时通信称为多工(Multiplexing)
引入头信息压缩机制(header compression),头信息使用gzip或compress压缩后再发送;客户端
和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,
只发送索引号,提高速度
HTTP/2 允许服务器有新数据时未经请求,主动向客户端发送资源,而无需客户端拉取,即服务器推
送(server push)
  • HTTP2.0和SPDY区别:
HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE

3.总结IO模型和零复制技术的原理

IO模型

  • 阻塞型 I/O 模型(blocking IO)


    image.png
  • 非阻塞型I/O模型 (nonblocking IO)


    image.png
  • 信号驱动式 I/O 模型 (signal-driven IO)


    image.png
  • 异步 I/O 模型 (asynchronous IO)


    image.png
  • I/O 多路复用型 (I/O multiplexing)


    image.png

零复制技术原理

  • MMAP ( Memory Mapping )


    image.png
mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空
间后,进程可以向访问普通内存一样对文件进行访问。
mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘
地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。
实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到
对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间
对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。
内存映射减少数据在用户空间和内核空间之间的拷贝操作,适合大量数据传输
  • SENDFILE


    image.png
  • DMA辅助的 SENDFILE


    image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容

  • ios的风已吹过,继续ios还是走c/c++后台开发?或者风停了猪都摔下来了,需要更专业的人士?你为什么拿高薪?别...
    桃逸阅读 550评论 0 0
  • 01 Redis到底是单线程还是多线程 Redis 6.0 版本之前的单线程指的是其网络I/O和键值对读写是由一个...
    可怜的橡树阅读 142评论 0 0
  • 太长了,还是转载吧...今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源...
    庞哈哈哈12138阅读 20,154评论 3 283
  • 1. 总结关系型数据库相关概念,关系,行,列,主键,惟一键,域。 关系Relational :关系就是二维表,其中...
    Angel诸葛流云阅读 60评论 0 1
  • 设计模式 一.六大设计原则 1.开闭原则:针对扩展开放,修改关闭; 2.里氏替换原则:任何父类出现的地方都可由其子...
    说好的蔚蓝天空呢阅读 542评论 0 0