面试官:关于负载均衡你了解多少,知道哪些常用框架?

问题分析:

工作中小编也会经常接触到 Nginx,比如美团的 Oceanus 框架,是一款 HTTP 服务治理框架,这个框架就是基于 Nginx和 ngx_lua 扩展的,主要提供服务注册与发现、动态负载均衡功能,日常的开发学习中,如果你想弄懂公司的 Oceanus ,Nginx 知识肯定是必不可少的,我想这也是我在面试中被问及 Nginx 相关知识的原因。

  1. Nginx,使用最多最常见的,很多公司自己的负载均衡框架都是基于 Nginx 开发的。
  2. LVS
  3. HAProxy
  4. F5,硬件负载均衡,价格昂贵。

无论使用哪种方案,目的都是要解决同样的问题,掌握其中一个框架的原理后,再看其它几个一定不会觉得吃力,接下来就通过 Nginx 实例来学习。

1.Nginx 简介

Nginx(发音同engine x)是异步框架的网页服器,也可以用作反向代理负载平衡器HTTP缓存。该软件由伊戈爾·賽索耶夫创建并于2004年首次公开发布。[6] 2011年成立同名公司以提供支持。[7]2019年3月11日,Nginx公司被F5 Networks以6.7億美元收购[8]
Nginx 官网:http://nginx.org/
下载列表:http://nginx.org/en/download.html
————维基百科

注意,http://nginx.org/ 区别于 http://nginx.com 前者是开源免费的,后者是企业版收费的,商业版支持带外健康检查。

选择 Nginx 的理由

  1. 软件成熟,2002年诞生到2019年,经过多年的沉淀和各大互联网公司的实践改进,Nginx 已经非常成熟,网上教程丰富,易于开发者维护。
  2. 高性能Web服务器,单机能够支持高达 50,000 个并发连接数的响应。
  3. 异步的、非阻塞,使用了epoll和kqueue模型,压缩请求和相应数据大小,节省宽带。
  4. 优秀的反向代理服务器,隐藏 Server 地址,提高安全性。
  5. 支持 Http 缓存

只需要安装 Nginx 配置好配置文件,就可以是实现 Https 访问。

worker_processes 1;
events {
worker_connections 1024;
}http {
include mime.types;
default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 443;server_name wangzha.tech www.wangzha.tech;ssl on;root html;index index.html index.htm;ssl_certificate   /www/server/nginx/conf/1631800_www.wangzha.tech.pem;ssl_certificate_key  /www/server/nginx/conf/1631800_www.wangzha.tech.key;ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;location / {proxy_pass          http://47.99.146.163:80;proxy_set_header    X-Real-IP $remote_addr;proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header    Host $http_host;}
}server {listen 80;server_name www.wangzha.tech;   }
}

2.Nginx 整体架构设计

Nginx架构图 图片来自 http://www.aosabook.org/en/nginx.html

主从模式

Nginx 启动后会创建多个进程,一个 Master 进程和多个 Worker 进程,Master 进程主要负责读取配置文件,管理维护多个 Worker 进程,像是一个大内总管,Master 自身不处理用户请求,用户访问的 web service 都是通过多个 Worker 进程处理,Worker 才是真正干活的,这种 Master Worker的主从设计理念在 。Worker 的数量可以通过配置文件随时调整,非常灵活。

Master 主要职责:

  1. 读取 Nginx 配置文件,配置实时生效。
  2. 监控 worker 进程运行状态,管理 worker 的创建与启动,当 worker 进程出现异常情况,Master 会自动重新启动 worker 进程。
  3. 接收用户请求,将请求分发给 worker 处理。

而 worker 进程事从 Master 进程 fork 过来的,worker 进程只负责处理请求,从读取请求,解析请求,处理请求,读取到服务器返回的 response 数据后,再将数据转发给客户端。每个请求只会被一个 worker 进程处理。

异步非阻塞 I/O

I/O 分两种,网络 I/O,读取 socket,另一种是磁盘 I/O,读取磁盘数据。我们知道计算机的 CPU 执行代码的速度极快,然而一旦遇到IO 操作,如读写文件、发送网络数据时,就需要等待IO操作完成。这样做CPU大部分都是在等待,等待蜗牛般速度的磁盘 IO 操作,这极大的浪费了 CPU 的性能,很显然,这种设计是不合理的,如果一个进程想要执行一个 read() 或 write() 同步调用,那么进程必须等到硬件完成 I/O 操作后才能进行下一步操作,这叫做同步调用。

Nginx 为了提供并发能力,避开了这种同步阻塞的设计,采用异步,非阻塞,使用 epoll 多路复用模型,这是 Nginx 支持高并发的灵魂所在,如果读者对 同步/异步 I/O 为什么会提高程序的响应速度不是很理解,推荐看 IBM 这篇文章:https://www.ibm.com/developerworks/cn/linux/l-async/ ,IO属于基础篇,在 Nginx 篇不做过多阐述了。

模块化设计

关于模块化设计可以简单的理解一个功能就是一个模块,类似于设计模式里六大原则之一“单一职责原则”,这种设计的好处就是“高内聚,低耦合”,Nginx 采用模块化设计继承了这个特点,且用户可以根据自己的需要选择性安装,具有高度的灵活性。

Nginx 共有五大类型的模块:

  1. 核心模块:提供最基本的核心服务,如进程管理,权限控制等。
  2. 事件模块:Nginx 支持事件驱动的核心模块。
  3. 标准 HTTP 模块:提供 http 相关功能,如代理,转发,压缩,加密,负载均衡。
  4. Mail 服务模块:提供基本的邮件发送服务,邮件服务模块是 Nginx 的特色。
  5. 第三方模块:支持丰富的第三方自定义模块,

关于上述模块如何配置使用不必全部记下来,工作中现学现卖就可以,活学活用,记住这些模块的功能,用的时候再去查找文档。

如知道了 Nginx 提供了邮件服务,百度 Google 一下“Nginx 如何配置邮件服务” 就会得到下面的配置:

mail {server_name mail.myweb.name;auth_http mail.postfix.cn:80/auth.php; #配置了HTTP认证地址imap_capabilities IMAP4rev1 UIDPLUS IDLE LITERAL+ QUOTA;pop3_auth plain apop cram-md5;pop3_capabilities LAST TOP USER PIPELINING UIDL;smtp_auth  login plain cram-md5;smtp_capabilities "SIZE 10485760" ENHANCESTATUSCODES 8BITMIME DSN;xclient off;server{listen 25;protocol smtp;}server{listen 110;protocol pop3;proxy_pass_error_message on;}server {listen 143;protocol imap;}
}

3.总结

本节主要介绍了 Nginx 的特性和架构模型,在大公司,如果你是一名开发人员,你可能不会直接接触 Nginx 配置,会有专门的运维人员去做这件事,但是这不代表你可以不会,Nginx 的很多设计思想值得每个优秀的开发者学习,使用太广泛,如果做二次开发,Nginx 可以说架构师必须掌握的基础知识,面试经常会问 Nginx 如何实现高并发?你需要知道异步,非阻塞,epoll,需要知道 Master Worker 模型,Nginx常见的优化配置?为什么 Nginx 不使用多线程?

参考资料

  1. http://www.aosabook.org/en/nginx.html
  2. 《Nginx高性能web服务器详解》

联系我

VX搜索【转行程序员】回复”加群“,我会拉你进技术群。讲真的,在这个群,哪怕您不说话,光看聊天记录也是一种成长。阿里/腾讯/百度资深工程师、Google技术大神、IBM工程师、还有我王炸、各路大牛都在,有任何不明白的都进群提问。

最后,觉得王炸到文章不错就来个三连吧:关注 转发 点赞

使用nginx负载均衡的webservice wsdl访问不到_面试官:关于负载均衡你了解多少相关推荐

  1. 使用nginx负载均衡的webservice wsdl访问不到_谁说前端不用懂,Nginx 反向代理与负载均衡(超实用)...

    谁说前端不需要懂-Nginx反向代理与负载均衡 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等.用一句别人开玩笑的话来说,java十年前的技术现在还能 ...

  2. 负载策略_面试官:讲一下什么是负载均衡,什么是轮询策略随机策略哈希策略

    什么是负载均衡? 先举个例子吧.以超市收银为例,假设现在只有一个窗口.一个收银员: 一般情况下,收银员平均 2 分钟服务一位顾客,10 分钟可以服务 5 位顾客:到周末高峰期时,收银员加快收银,平均 ...

  3. js轮询导致服务器瘫痪_面试官:讲一下什么是负载均衡,什么是轮询策略随机策略哈希策略...

    什么是负载均衡? 先举个例子吧.以超市收银为例,假设现在只有一个窗口.一个收银员: 一般情况下,收银员平均 2 分钟服务一位顾客,10 分钟可以服务 5 位顾客:到周末高峰期时,收银员加快收银,平均 ...

  4. dubbo调用失败策略_面试官:dubbo负载均衡策略,集群容错策略,动态代理策略有哪些...

    面试官心理分析 继续深问吧,这些都是用 dubbo 必须知道的一些东西,你得知道基本原理,知道序列化是什么协议,还得知道具体用 dubbo 的时候,如何负载均衡,如何高可用,如何动态代理. 说白了,就 ...

  5. ribbon 默认负载均衡 是什么_面试官:说说Ribbon是如何实现负载均衡的?

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 来源:blog.csdn.net/LO_YUN/article/details/ ...

  6. keepalived安装与配置_面试官问LVS+keepalived+nginx怎么实现时该怎么答?

    概述 前面大家已经对基本概念有个了解了,接下来就是搭建过程了~ 需求 1.LVS给两台nginx做负载均衡 2.keepalived做lvs高可用,同时做Real-Server健康检查,如果发现Rea ...

  7. 面试官问:HTTP 的负载均衡你了解么?你不是说了你们用的Nginx么?说一下把。...

    1.HTTP 重定向 1.1 重定向是什么 重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向.域名的重定向.路由选择的变化也是对数据报文经由路径的一种重 ...

  8. 面试官:关于负载均衡你了解多少 | Nginx面试题 | Nginx架构

    面试官:关于负载均衡你了解多少,知道哪些常用框架? 问题分析: 工作中小编也会经常接触到 Nginx,比如美团的 Oceanus 框架,是一款 HTTP 服务治理框架,这个框架就是基于 Nginx和 ...

  9. java获取f5服务器真实ip,F5服务器做负载均衡时WebService获取真实客户端IP地址

    首先,我先来介绍一下什么是F5服务器,内容来自百度: 负载均衡,英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡.分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器. ...

最新文章

  1. 正弦交流电电压电流峰值与有效值关系的推导
  2. java正则表示判断。是否以某个关键字结尾的
  3. 计划策略-20-订货型生产
  4. java蛮力法背包问题_[算法课]五种蛮力法解决01背包问题
  5. 移植gdb到DM368 IPNC中 linux arm gdb
  6. 京东投票项目开发笔记
  7. 【读书笔记】深入分析Java Web技术内幕-Cookie与Session
  8. 大数据的价值与发展趋势
  9. 前景检测算法(一)--综述
  10. 如何高效和快乐的学习RS和GIS知识
  11. 第10章 接口、继承与多态----对象类型的转换
  12. AdTime:多屏时代下传统媒体的鼓起
  13. EnableViewState和EnableTheming的作用
  14. PHP架构师成长路线,PHP架构师要求
  15. IT行业的发展前景分析
  16. Bad client credentials
  17. 基于JAVA餐饮掌上设备点餐系统计算机毕业设计源码+系统+lw文档+部署
  18. 支付宝支付报 invalid-app-id : 无效的AppID参数
  19. 如何使用电脑在线制作闪图?
  20. PLC读取PC文件(汇川PLC读取电脑上的文件)

热门文章

  1. 计算机组成原理 位宽,数据总线宽度一般为存储单元位宽的整数倍 这怎么理解哦...
  2. 计算机英语四六级对调剂有影响吗,英语四六级对考研有什么影响?不过会被歧视吗?...
  3. 20200301 Intel Realsense D435摄像头掉线问题测试数据记录
  4. MyCat学习:使用MySQL搭建主从复制(双主双从模式)
  5. 视图插入数据_SAP Fiori的ABAP编程模型-CDS视图创建
  6. Java 11都有哪些新特性?
  7. 计算机相关冷门专业,211名校冷门专业和双非计算机专业,该如何选择?过来人告诉你...
  8. 树和二叉树的转换代码python_python数据结构之二叉树的统计与转换实例
  9. android刷机教程视频,Android 设备刷机教程
  10. Qt QSetting *.ini.lock