面试官:关于负载均衡你了解多少

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

问题分析:

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

  1. Nginx,使用最多最常见的,很多公司自己的负载均衡框架都是基于 Nginx 开发的。

  2. LVS

  3. HAProxy

  4. F5,硬件负载均衡,价格昂贵。

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

NGINX-logo-rgb-large

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架构图

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工程师、还有我王炸、各路大牛都在,有任何不明白的都进群提问。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为 Kubernetes(k8s)面试官,以下是可能会问到的一些问题: 1. 你能简要解释一下 Kubernetes 吗?它是用来做什么的? 2. Kubernetes 的核心组件是什么?请详细描述每个组件的作用。 3. 如何创建 Kubernetes Pod?Pod 又是什么? 4. 如何定义 Kubernetes Deployment?Deployment 又是什么? 5. 什么是 Kubernetes Service?它的作用是什么? 6. 如何调整 Kubernetes Pod 的 CPU 和内存资源限制? 7. Kubernetes 中的 ConfigMap 和 Secret 有什么作用? 8. Kubernetes 中的控制器有哪些?它们的区别是什么? 9. 如何进行 Kubernetes 集群的扩容和缩容? 10. 如何进行 Kubernetes 的升级和回滚操作? 这些问题涵盖了 Kubernetes 的基本概念、组件和实践,面试官可能会进一步深入某些主题并询问相关问题,以确保应聘者对 Kubernetes 有足够的了解。 ### 回答2: 在K8s面试中,面试官通常会提问关于以下几个方面的问题: 1. K8s基础知识:面试官可能会问关于K8s的基本概念、组件和架构等方面的问题,例如K8s的工作原理、Master和Node节点的作用及其之间的通信方式等。 2. K8s资源管理:面试官可能会询问关于K8s资源管理的问题,包括如何创建和管理Pod、Deployment、Service和Ingress等资源对象,如何伸缩应用程序以及如何进行故障排除等。 3. K8s网络:面试官可能会提问关于K8s网络的问题,例如如何实现Pod间的通信和跨节点访问,如何配置网络策略和网络插件,并解释主流网络插件(如Flannel、Calico)的工作原理等。 4. K8s存储:面试官可能会问关于K8s存储的问题,包括如何使用持久化卷(Persistent Volume)和持久化卷声明(Persistent Volume Claim)来实现数据持久化,以及如何使用存储类(Storage Class)来动态分配存储资源等。 5. K8s安全性:面试官可能会询问关于K8s安全性的问题,包括如何配置K8s的认证和授权机制,如何使用角色和角色绑定来控制访问权限,以及如何使用Secret对象来安全管理敏感信息等。 6. K8s调度和自动扩缩容:面试官可能会提问关于K8s调度和自动扩缩容的问题,包括如何使用标签和选择器进行调度、如何设置资源限制和请求、如何使用HPA(Horizontal Pod Autoscaler)和VPA(Vertical Pod Autoscaler)等。 除了上述方面的问题,面试官还可能会根据具体的职位要求提问其他相关问题,例如K8s集群监控、CI/CD流水线和K8s与云原生应用开发等。因此,在准备K8s面试时,还应该对这些方面进行充分的学习和准备。 ### 回答3: k8s面试官通常会提问涉及以下主题的问题: 1. Kubernetes基础知识:面试官会询问关于Kubernetes的基本概念、主要组件和工作原理的问题,如Pod、Deployment、Service等。 2. 容器技术:由于Kubernetes是一个容器编排平台,面试官可能会问关于容器技术的问题,如Docker镜像、容器的生命周期管理、容器网络等。 3. 集群管理和调度:面试官可能会问如何管理和扩展Kubernetes集群,如何进行调度和负载均衡,如何监控、日志记录和故障处理等。 4. 安全性和访问控制:面试官可能会询问如何保护Kubernetes集群的安全性以及如何配置用户访问权限、网络策略和安全策略。 5. 自动化和持续集成/持续交付(CI/CD):面试官可能会问如何使用Kubernetes进行自动化部署、持续集成和持续交付,以及如何实现滚动部署和回滚等。 6. 监控和调试:面试官可能会问如何监控Kubernetes集群和应用程序的性能,如何分析日志和故障排除等。 7. DevOps实践和最佳实践:面试官可能会问DevOps相关的问题,如何实施基础设施即代码(Infrastructure as Code)、持续集成和持续交付、自动化测试和部署等。 8. Kubernetes生态系统:面试官可能会询问与Kubernetes相关的其它工具和技术,如Helm、Prometheus、Istio等,以及如何与其他云原生技术栈进行集成。 在准备面试时,应当深入了解这些主题,并准备一些常见问题的答案,以展示自己对Kubernetes的理解和实践经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值