Nginx 如何优雅的实现这个客户需求分析三大要素

原标题:资深大牛总结的40道运维面试精华题,高薪工作手到擒来!

下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家找个高薪好工作。

1、什么是运维?什么是游戏运维?

1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术,运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等。

2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维

  • 开发运维:是给应用运维开发运维工具和运维平台的
  • 应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查
  • 系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等

总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑

开发运维、应用运维和系统运维他们的工作是环环相扣的

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

游戏运营要做的一个事情除了协调工作以外

还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划

3、现在给你三百台服务器,你怎么对他们进行管理?

管理3百台服务器的方式:

1)设定跳板机,使用统一账号登录,便于安全与登录的考量。

2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。

3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。

RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据

还有一个大功能,多块盘放在一起可以有冗余(备份)

RAID 0,可以是一块盘和N个盘组合

其优点读写快,是RAID中最好的

缺点:没有冗余,一块坏了数据就全没有了

RAID 1,只能2块盘,盘的大小可以不一样,以小的为准

10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高

特点,读写性能一般,读还好一点,写不好

单台服务器:很重要盘不多,系统盘,RAID1

WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)

有多台,监控、应用服务器,RAID0 RAID5

我们会根据数据的存储和访问的需求,去匹配对应的RAID级别

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

LVS: 是基于四层的转发

HAproxy: 是基于四层和七层的转发,是专业的代理服务器

Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发

LVS由于是基于四层的转发所以只能做端口的转发

而基于URL的、基于目录的这种转发LVS就做不了

HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做

在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大

配置简单,所以中小型企业推荐使用HAproxy

能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资

源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接

收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你

如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网

1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业

但是本身不支持特性挺多,只能缓存静态文件

2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成

3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术

在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。

还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存

它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的

4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境

要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。

7、Tomcat和Resin有什么区别,工作中你怎么选择?

区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少

最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些

但稳定性和java程序的兼容性,应该是比resin的要好

工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容

8、什么是中间件?什么是jdk?

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯

是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口

但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递

通过中间件,应用程序可以工作于多平台或OS环境。

它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境

- 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到

最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度

11、什么叫网站灰度发布?

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式

AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B

如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来

灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度

12、简述DNS进行域名解析的过程?

用户要访问,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器..cn,就去找三级域名服务器,三级域名服务器正好有这个网站,然后发给请求的服务器,保存一份之后,再发给客户端

RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器

消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用

队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用

消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地

在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,

BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息)

多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性

由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息

15、讲述一下LVS三种模式的工作过程?

原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址

并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP

将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器

优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址

缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈

因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时

大量的数据包都交汇在负载均衡器那,速度就会变慢!

原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大

那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS

RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过

负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户

所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量

这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”

三、直接路由模式(VS-DR)

原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应

所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR

而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)

并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户

则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端

由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域

也可以简单的理解为在同一台交换机上

优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端

与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

}

WSGI:全拼为Python Web服务器网关接口,Python Web服务器网关接口,是项目默认会生成一个wsgi.py文件,确定了设置模块,uWSGI实现了WSGI的所有接口,是一个快速,自我修复,开发人员和系统管理员友好的服务器,C语言编写,效率高

使用nginx的的作用主要包括负载均衡,反向代理

1、文件打包传服务器,通过xshell

Linux下压缩包解压命令:

(rar格式压缩包解压较为复杂,尽量别传rar格式)

文件 > 新建,开启多终端

建议开多终端,这样对uwsgi、Nginx、项目代码进行调试修改时,可以避免在一个终端下来回切换目录,提高工作效率,具体开终端的个数根据实际需求来定,并且右击tab终端名重命名,更加方便知道哪个终端对应做哪些事情

不管修改uwsgi的配置文件uwsgi.ini还是修改nginx配置文件nginx.conf,修改完都必须重启服务才能生效,并且启动服务要在指定的目录下面重启

方法2、没网情况下去官网下载uwsgi压缩包,为tar.gz格式,传到服务器,进行解压,解压路径/lib/目录下面,然后切换到uwsgi文件目录,执行以下两个命令,即可完成安装,示意图如下(解压路径可以自定义,记下来,方便以后进行维护)

1、项目目录(例如本例中DataBusines)下创建uwsgi.ini文件,配置如下

本地测试一般用:127.0.0.1即可,端口可以自定

线上的话用线上服务器IP,端口自定,该配置访问地址需要和nginx.conf中的配置一样

例如:这是后面的nginx.conf配置文件,两者地址和端口需要一致

6、Uwsgi的使用(启动、查看进程、关闭)

启动uwsgi.ini,需要切换到项目目录

查阅相关资料文档,提到多种命令关闭方式,关闭命令的意义在于修改配置文件后,
一般需要重启uwsgi才会生效

7、通过uwsgi网页访问

因为uwsgi本身就是web服务器,我们可以通过更改配置直接通过uwsgi进行访问网页

如下图:我们在服务器通过vi更改配置文件为http请求模式,更改后保存并重启uwsgi服务器,在我们自己的浏览器访问设置的IP和端口,成功显示页面,证明uwsgi配置成功

方法1、pip install nginx(官方提供有该方法,但是之前在本地测试遇到坑,没有配好,建议通过方法二中压缩包方式安装)

方法2、没网情况下去官网下载nginx压缩包,为tar.gz格式,传到服务器,进行解压,解压路径/lib/目录下面,然后切换到nginx文件目录,执行以下三个命令,进行安装

9、nginx的使用(启动、查看进程、关闭)

查阅相关资料文档,提到多种命令关闭方式,关闭命令的意义在于修改配置文件后,一般需要重启nginx才会生效

配置静态资源目录是因为让静态资源通过nginx可以直接返回,不需要通过uwsgi,也就是让uwsgi只处理后端逻辑,不处理静态资源,优化性能

1、静态资源在nginx.conf中的配置,路径可以自定义

2、在服务器上创建如下目录

4、项目代码中配置settings,加入该目录(本地演示在IDE中,线上可以用vi)

5、收集所有静态文件到static_root指定目录

服务器上切换到项目目录(DataBusines),执行如下命令收集

刚才在做uwsgi时候,用了http配置,现在nginx正式搭建起来,需要改成socket配置,修改完毕要重启uwsgi

Settings.py需要debug设置为不调试,允许访问的地址设置为服务器地址

以上步骤完成后,访问服务器主机地址和端口,如果nginx.conf中配置的为80端口,则地址栏不需要输入端口,因为浏览器请求端口也是默认为80端口,非80端口的需要自己在ip后面添加

经验有限,不足之处欢迎指正

}

    nginx是由俄罗斯人开发的一款高性能的http和反向代理服务器,也可以用来作为邮件代理。相比较于其他的服务器,具有占用内存少,稳定性高等优势

location会尝试根据用户请求中的URI来匹配设置的表达式  并选中最终结果中的配置来处理用户的请求

=表示把uri作为字符串,与参数中的URI作完全匹配

~进行正则表达式匹配的时候,区分大小写

~*进行正则表达式匹配的时候,不区分大小写

^~表示匹配URI的时候,如果该location是最佳匹配,那么对于匹配这个location的字符串不在进行正则表达式的匹配检测

@表示仅用于nginx服务内部请求之间的重定向,带有@的location不直接处理用户请求

1、如果查询精确的命中了一个使用=前缀的location,那个它将被使用,并结束匹配

2、在剩下普通字符串中,将按照最大前缀匹配的原则进行匹配,将结果最后候选结果,如果最终命中的结果使用了^~前缀表示或者它是一个完全匹配,那么它将被使用,并结束匹配

3、正则表达式匹配时,按照正则表达式在配置文件中出现的顺序,并且只有匹配到了一条正则local,就不在匹配下面的local了

4、如果步骤3命中了一个匹配,那个它将被使用,否则将使用步骤2的候选结果

(普通字符串和正则字符串的区别 ~和~*前缀表示location是正则字符串,其他前缀和无前缀表示location是普通字符串)

Upstream模块是与反向代理,负载均衡相关的模块

指定了一个叫backend的代理服务器,可以在proxy_pass和fastcgi_pass中使用,默认的负载均衡方式为加权轮询,可以在配置项使用使用ip_hash来使用ip哈希

四、nginx配置的解析

nginx在配置解析的处理上可以分成3个步骤

这一步的目的是调用核心函数模块的create_conf函数,为配置信息分配内存空间,并且对一些配置变量进行NGX_CONF_UNSET的初始化

这里我们看到222行有对是否有create_conf函数的判断,因为不是所有的核心模块都有create_conf函数的,比如ngx_http_module,这个模块是否使用取决于具体的配置文件,因此分配

内存空间放到了自己的回调函数中了。

这一步主要用于解析配置文件

为了进行配置的解析,nginx利用ngx_command_s数据类型对有的nginx配置进行了统一的描述

字段name表示配置项的名称,如damon

字段type可以指定该配置相关的多种信息,配置的类型bool,块配置(复杂配置项);该配置项目的token个数(token是只一个被空格,引号,分号等分开的字符串);该配置项可以出现的上下文

字段set的解析出name配置项后,处理该配置项的回调函数

字段conf用于指定当前配置项所作的大致位置

字段offset用于指定该配置项值的精确存放位置,一般为某一个结构体变量的字段偏移

字段post配置项处理后的回调方法,在大多数情况下为NULL

ngx_conf_handleh函数用于查找配置名属于那个模块,并调用回调函数set方法,进行每个配置项具体的处理

用户如果在配置文件中没有对一些字段进行设置,那个在这个函数中就会进行设置,并进行最后的初始化工作

同样不是所有的核心模块都用自己的create_conf函数

这里拿配置daemon的解析进行一个讲解

2、《深入理解nginx》

}

我要回帖

更多关于 客户需求分析三大要素 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信