分布式架构中关于正向代理反向代理面试提问

目录
  • 引言
  • 1、面试官:完看你简历提到使用过Nginx做代理,你是如何理解“正向代理”,“反向代理”的?
  • 2、面试官:那服务端为什么要使用代理?有啥好处?
  • 3、面试官:那你知道哪些负载均衡算法?
  • 深入分析
  • 什么是负载均衡
  • 常用的负载均衡框架
  • 正向代理&反向代理
    • 正向代理
    • 反向代理
  • 总结

引言

面完了RPC相关的一系列问题,面试官确定我对分布式架构的理论知识和服务间通讯框架(RPC) 确实了解了。

接下来又开始问我网络相关的知识,但不是直接问HTTP三次握手,TCP,UPD这些,因为这些基础已经在一面问完了,这一面只围绕分布式系统相关的网络概念,从最基本的代理开始。

1、面试官:完看你简历提到使用过Nginx做代理,你是如何理解“正向代理”,“反向代理”的?

问题分析: 即使作为业务开发人员也会经常遇到需要配置Nginx或其他负载均衡的问题,比如你做了一个文件上传服务,上线后发现文件被拦截了,看看报错信息一看是被Nginx 代理拦截了,Nginx限制了文件大小,这个时候代理的概念是啥怎么看明白这个问题呢?

答:

正向代理: 代理用户端请求服务端,相对于服务器用户端是匿名的,比如单位内网使用了正向代理软件,所有员工都访问百度,但是百度看到的只有一个IP地址,百度也不知道到底是哪个员工访问的。

反向代理: 代理服务端提供服务,相对于用户服务端是匿名的,同样是访问www.baidu.com,所有用户输入的都是一个网站或者一个IP,但是百度背后有成千上万的服务器,你也不知道你访问的是哪一个。

2、面试官:那服务端为什么要使用代理?有啥好处?

问题分析: 面试官点点头,对我理解的代理表示认可,随后问我使用代理有什么用,考察代理技术的原理。

答:比如用 Nginx 做代理,这样就可以开buffer,Nginx 可以把 Request 请求和 Response 在读取完整之前 buffer 住,好比饭店服务员,所有顾客要什么菜和一个服务员说一下就行了,不会直接找厨师,一个服务员接待10个顾客,最后把点的20道菜分发给5个厨子做就行了,厨子好比服务器,这样厨子就可以专心做菜了,接待这种事就有Nginx代理做,同时,还可以根据顾客数量多增加或者减少厨师数量,把任务均匀分给每个厨师,这就是负载均衡的作用,Nginx 就可以有效分发流量。

总的来说:

  • 让IO和服务器分离,突破IO性能,提高服务器吞吐能力。
  • 控制流量分发,管理服务集群,起到负载均衡作用。
  • 安全性和匿名性:通过拦截前端服务器的请求,反向代理服务器可以保护其身份,并可以抵御安全攻击。它还确保可以从单个记录定位器或URL访问多个服务器,而不管服务端网络的结构如何。

3、面试官:那你知道哪些负载均衡算法?

问题分析: 聊到了负载面试官要继续深挖算法了。

答:

轮询算法:简单的理解就好比性感荷官在线发牌,从左到右依次发牌,最后每个人获得的纸牌张数一样,轮询算法就是将多个用户请求按顺序依次分发到1-10号机器上,目的就是让每台机器承受相同的压力,100W次查询理论上每台机器分摊了10W次查询。

加权轮询算法:轮询算法和加权轮询算法有什么区别?想象一下,如果10台服务器的配置不相同,8台机器是8核32G,剩下两台是4核16G,如果按照算法1轮询,每台机器分担10W次请求,那两台低配的服务器说我扛不住呀,你们配置比我好,这不公平,我要宕机休息一下,加权轮询算法就是为了应对这种情况,设置不同机器的权重不同,10台同配置机器分别均摊10%的流量,如果机器性能不同,那让两台低配的权重降低,只承担5%的流量,这样就公平了,能者多劳。每台机器都不闲着发挥自己最大的性能。

随机算法:随机算法和轮询算法类似,让所有请求随机分配到不同的机器上,请求越多最后分散在每台机器上的请求数约接近相等。

加权随机算法:和加权轮询算法道理相似,这里不多说了。

最小连接数算法:最小链接数就是请求分发以前,先看当前10台机器谁最清闲,谁当前处理的链接数最少那就把活分给谁,最后的分工也相对公平。

Hash 算法:前5种算法有一个问题,就是同一个用户的请求多次,可能每次都会被分配到不同机器上,这样有什么不好?如果服务器缓存了用户 Session,那每次请求不同服务器都需要保存用户的 Session,最坏的结果就是用户请求10次,10台服务器都缓存了同一个用户的 Session,这显然是浪费服务器资源。这个时候 Hash 算法就出现了,如果读者还不知道 Hash,建议先 Google 下 Hash,hash(client:ip) % N,N就是服务器的数量,只要用户的 IP不变,最后 Hash 取余的结果就不会变,这样就能保证同一个用户每次请求都会在同一台机器上,这里的IP还可以是用户的其他唯一ID。

一致性Hash:hash(client:ip) % N 上面的公式中如果N变了怎么办?比如一台服务器断电了,那最后 Hash 取余的结果就全变了,所有用户会被分配到哪台机器需要全部重新计算,这对有 Session 状态的服务就是一场灾难,一致性Hash 就是为了解决这个问题。

深入分析

负载均衡几乎是各大互联网公司搭建系统必用的技术了,也会有初学者学习分布式系统时会问我,什么是负载均衡,为什么要使用负载均衡,多加一层负载均衡会让服务调用变慢吗?带着这些问题学习一下这一章。

先看下没有负载均衡的网站架构

不知道你有没有发现,如果服务端是单台服务器,直接通过网络就可以链接。为什么说负载均衡几乎是各大互联网公司搭建系统必用的技术,除了个人网站,比如我的博客还是单体服务器以外,相信没有哪家互联网公司的服务敢这样,一台机器如果宕机怎么办?让用户等一会儿吗?那估计这家公司离倒闭就不远了。

那怎么解决单机故障的问题,再看下面的图。

可以看出,多台服务器的情况,增加了一层负载均衡。

什么是负载均衡

负载平衡(Load balancing)是一种计算机技术,用来在多个计算机(计算机集群、网络连接、CPU、磁碟驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。 使用带有负载平衡的多个伺服器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。 主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发和高可用的问题。

​ ——— 维基百科

简单地理解负载均衡的作用就是流量分发,将大量用户请求分发到不同服务器上分担压力,如果有机器宕机,负载均衡服务器会负责把故障机器自动摘除。

常用的负载均衡框架

NginxNGINX | High Performance Load Balancer, Web Server, & Reverse Proxy,来自俄罗斯的软件,不光可以用作负载均衡,反向代理,还是出色的web服务器,使用广泛,所以也是面试常问的知识点。如果英文不错可以参考。

LVSThe Linux Virtual Server Project - Linux Server Cluster for Load Balancing ,Linux Virtual Server的缩写,一个Linux下的开源服务器集群系统,章⽂文嵩博⼠士于1998年5月创立。

HAProxy:http://www.haproxy.org/ ,一款高可用http/TCP负载均衡。

F5F5 | Multi-Cloud Security and Application Delivery 硬件负载均衡。

上述都是常见负载均衡,在企业里具体使用哪种框架并不是绝对的,主要取决于系统的需求和工程师对每个框架的了解程度。

一个框架能存活下来一定是具有自己的优点,没有最好,适合自己的就是最好的。

比如F5,性能出色价格昂贵而出名,从十几万到上百万不等,有强大的售后和技术支持,我工作多年只有工作第一年参加国家电网项目上使用过F5,当时还给了我们一台测试用的机器,后来辞职后面试别的公司,面试官问我以前的项目组是使用的什么负载均衡,我说F5,面试官感叹国家队果然财大气粗,我那个时候不了解还有什么其他解决方案,表示F5很奇怪吗?面试完回家才慢慢了解,原来有很多解决方案,阿里使用LVS,也使用Nginx,美团最初使用Nginx + LVS,以及后来独立研发的MGW。

有人会问,怎么一个负载均衡就这么多种算法,心好累,企业开发里能用这么多算法吗?真正到企业开发中,一般都只用一种,如果负责的服务器没有带状态的 Session,也不存在机器配置不相同的情况,那就可以用轮询或随机算法,工程师根据实际情况选择最合适自己的算法。

正向代理&反向代理

正向代理

生活中的正向代理,打个比方,你想去俄罗斯旅行,需要去使馆办理签证,手续麻烦,你完全不知道从何下手,这个时候你想到找旅行社,有专门的导游可你帮你代办,你只需提供资料就在家等着拿签证就可以了,你是客户端,俄罗斯使馆是服务端,导游就是代理端。

正向代理就是代理客户端,服务端不知道客户端是谁。

反向代理

互联网不够发达的时候,我们都打过10086,有事儿就找客服,全国31个省都有自己的客服中心,每个客服中心都有上百个客服小哥小姐姐,我们不关心给你分配的是谁,只需要接通10086后会自动给你分配客服给你,这就是反向代理。

反向代理就是代理服务端,客户端不知道服务端是谁。

反向代理服务器可以充当“交通警察”,如上图,位于后端服务器(baidu)前面,并以最大化速度和容量利用率的方式在一组服务器上分发客户端请求,同时确保没有一个服务器过载,可以降低性能。如果服务器出现故障,负载均衡器会将流量重定向到其它正常的服务器上。

总结

这一节主要讲了负载均衡在网站后台建设中的应用和代理的概念,负载均衡算法和正/反向代理的概念也是面试中容易碰到的基础问题,是初学者必须掌握的概念。

以上就是分布式架构中关于正向代理反向代理面试提问的详细内容,更多关于分布式架构正向代理反向代理面试的资料请关注我们其它相关文章!

(0)

相关推荐

  • 使用nginx正向代理实现内网域名转发过程解析

    客户内网环境,使用ppoe拨号上网,提供商为集团内部二级运营商,网络环境比较复杂,在集团内部网络和办公网络采用静态路由协议互联,大致情况如下所示: 原来客户访问生产业务,都是通过ip地址访问,随着生产业务越来越多,现在客户强烈要求使用域名方式访问业务.但是鉴于内网环境复杂,不好部署域名服务器,部署了访问业务也比较困难. 后来学习nginx,知道nginx可以实现正向代理实现域名转发.整体思路如下: 说明: 1.在阿里云上配置域名解析.例如OA.XXXX.COM,解析地址为内网地址172.31.1

  • Nginx正向反向代理区别及原理解析

    一.正向代理和反向代理的区别 正向代理代理客户端,反向代理代理服务器. 1.1正向代理 正向代理服务器位于客户端和服务器之间,为了从服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端.这里客户端需要要进行一些正向代理的设置的. 举例:翻墙 正向代理中被代理的是客户端的请求 1.2 反向代理 反向代理,客户端对代理是无感知的,客户端不需要任何配置就可以访问,客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在

  • nginx正向代理与反向代理详解

    正向代理 就是假设有一个内网 内网有两台机器,这两台机器只有 a 可以上网 b 不能上网,但是 a 和 b 通过网络相连接 这时如果 b 想访问外网,就可以通过 a 来正向代理访问外网 正向代理就是在内网中模拟目标服务器,把内网中其它机器的请求 转发给外网中的真正的目标服务器 所以正向代理是接受内网其它机器的请求的 反向代理则是反过来 也是一个内网,有几台机器,只有其中一台与外网连接 但是反向代理接受的不是内网机器的访问请求 反向代理接受的是外网过来的访问请求 然后把请求转发到内网中的其它机器上

  • 通过nginx实现方向代理过程图解

    这篇文章主要介绍了通过nginx实现方向代理过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 nginx 实现方向代理 1.什么是nginx Nginx是由俄国人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,使用nginx网站用户有:百度.京东.新浪.网易.腾讯.淘宝

  • 一段万能的nginx接口实现反向代理配置

    1.什么是代理服务器 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机. 2.为什么要使用代理服务器 1)提高访问速度 由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度. 2)防火墙作用 由于所有的客户机请求都必须通过代理服务器访问远程

  • 分布式架构中关于正向代理反向代理面试提问

    目录 引言 1.面试官:完看你简历提到使用过Nginx做代理,你是如何理解“正向代理”,“反向代理”的? 2.面试官:那服务端为什么要使用代理?有啥好处? 3.面试官:那你知道哪些负载均衡算法? 深入分析 什么是负载均衡 常用的负载均衡框架 正向代理&反向代理 正向代理 反向代理 总结 引言 面完了RPC相关的一系列问题,面试官确定我对分布式架构的理论知识和服务间通讯框架(RPC) 确实了解了. 接下来又开始问我网络相关的知识,但不是直接问HTTP三次握手,TCP,UPD这些,因为这些基础已经在

  • 快速掌握Go语言正/反向代理

    先重温一下什么叫反向代理,正向代理. 所谓正向,反向代理取决于代理的是出站请求,还是入站请求. 正向代理: 代理的出站请求, 客户端能感知到代理程序,架构上距离客户端更近.反向代理: 代理的是入站请求,客户端认为代理程序就是服务器,客户端感知不到代理逻辑,架构上距离服务端更近. 前几天利用golang实现了反向代理程序,引出了Host请求头在反代中的关键作用. 对于proxy.com的请求,都被透明无感代理到A.com package main import ( "fmt" "

  • 详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南

    Nginx是一种服务器软件,也是一种高性能的http和反向代理服务器,同时还是一个代理邮件服务器.也就是说,我们在Nginx上可以发布网站,可以实现负载均衡(提高应答效率,避免服务器崩溃),还可以作为邮件服务器实现收发邮件等功能.而最常见的就是使用Nginx实现负载均衡. Nginx与其他服务器的性能比较: Tomcat服务器面向Java语言,是重量级的服务器,而Nginx是轻量级的服务器.Apache服务器稳定.开源.跨平台,但是Apache服务器不支持高并发,Nginx能支持处理百万级的TC

  • Springsession nginx反向代理集成过程

    一概述 springsession 配置,如果是sevlet的web应用后会自动集成 jdbc ,redis,Hazelcast,MongoDB 二session概述 2.1 分布式项目的session问题 在分布式项目中如果客户端给服务端发送了一个请求,在nginx做反向代理的情况下,第一个请求可能到达tomcat1,此时tomcat1就会创建一个session然后将响应给客户端:同理客户端再次发送一个请求,然后nginx又做了一次反向代理,此时的请求可能到达tomcat2,此时tomcat2

  • Nginx反向代理与负载均衡实战篇

    反向代理 反向代理指的是以代理服务器接收用户的的访问请求,代理用户向内部服务器重新发起请求,最后把内部服务器的响应信息返回给用户.这样,代理服务器对外就表现为一台服务器,而访问内部服务器的客户端用的就是代理服务器,而不是真实网站访问用户. 为什么使用反向代理 可以起到保护网站安全的作用,因为任何来自Internet的请求都必须先经过代理服务器. 通过缓存静态资源,加速Web请求. 实现负载均衡 反向代理例子 环境说明 假如有AB两个服务器.A服务器提供web资源,并且只给内网访问.B服务器有两块

  • 1行Go代码实现反向代理的示例

    暂且放下你的编程语言来瞻仰下我所见过的最棒的标准库. 为项目选择编程语言和挑选你最爱的球队不一样.应该从实用主义出发,根据特定的工作选择合适的工具. 在这篇文章中我会告诉你从何时开始并且为什么我认为 Go 语言如此闪耀,具体来说是它的标准库对于基本的网络编程来说显得非常稳固.更具体一点,我们将要编写一个反向代理程序. Go 为此提供了很多,但真正支撑起它的在于这些低级的网络管道任务,没有更好的语言了. 反向代理是什么? 有个很棒的说法是流量转发 .我获取到客户端来的请求,将它发往另一个服务器,从

  • 关于nginx负载均衡和反向代理的讲解

    目录 负载均衡 负载均衡分类 1.DNS负载均衡 2.IP负载均衡 3.链路层负载均衡 4.混合型负载均衡 负载均衡算法 1 轮询 2 随机 3 最少链接 4 Hash(源地址散列) 5 加权 反向代理 负载均衡 负载均衡是有多台服务器以对称的方式组成一个服务器集合,每台服务器都能具有等价的地位,都可以单独对外提供服务而无需其他服务器辅助.通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地相应用户的请求.均衡负载能够平均分配呵护请求到服务器阵

  • 利用node.js实现反向代理的方法详解

    本文主要给大家介绍的是关于利用node.js实现反向代理的相关内容,分享出供大家参考学习,下面话不多说,来一起看看详细的介绍: 跨域问题是前端开发很常见的问题解决方案有很多种 jsonp返回 Access-Control-Allow-Origin:'*' (需要注意的是 对于post请求会变成option请求需求后端支持) 前端添加代理 前端添加代理 以vue-cli为例,前端添加代理 dev: { env: require('./dev.env'), port: 8888, autoOpenB

  • 详解Linux中Nginx反向代理下的tomcat集群

    Nginx具有反向代理(注意和正向代理的区别)和负载均衡等特点. 这次Nginx安装在 192.168.1.108 这台linux 机器上.安装Nginx 先要装openssl库,gcc,PCRE,zlib库等. Tomcat 安装在192.168.1.168 和 192.168.1.178 这两台机器上.客户端通过访问192.168.1.108 反向代理访问到192.168.1.168 和 192.168.1.178 里Tomcat 部署的工程内容.  1.Linux 下安装Nginx (机器

随机推荐