- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章分布式架构中关于正向代理反向代理面试提问由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
面完了RPC相关的一系列问题,面试官确定我对分布式架构的理论知识和服务间通讯框架(RPC) 确实了解了.
接下来又开始问我网络相关的知识,但不是直接问HTTP三次握手,TCP,UPD这些,因为这些基础已经在一面问完了,这一面只围绕分布式系统相关的网络概念,从最基本的代理开始.
问题分析: 即使作为业务开发人员也会经常遇到需要配置Nginx或其他负载均衡的问题,比如你做了一个文件上传服务,上线后发现文件被拦截了,看看报错信息一看是被Nginx 代理拦截了,Nginx限制了文件大小,这个时候代理的概念是啥怎么看明白这个问题呢?
答:
正向代理: 代理用户端请求服务端,相对于服务器用户端是匿名的,比如单位内网使用了正向代理软件,所有员工都访问百度,但是百度看到的只有一个IP地址,百度也不知道到底是哪个员工访问的.
反向代理: 代理服务端提供服务,相对于用户服务端是匿名的,同样是访问www.baidu.com,所有用户输入的都是一个网站或者一个IP,但是百度背后有成千上万的服务器,你也不知道你访问的是哪一个.
问题分析: 面试官点点头,对我理解的代理表示认可,随后问我使用代理有什么用,考察代理技术的原理.
答:比如用 Nginx 做代理,这样就可以开buffer,Nginx 可以把 Request 请求和 Response 在读取完整之前 buffer 住,好比饭店服务员,所有顾客要什么菜和一个服务员说一下就行了,不会直接找厨师,一个服务员接待10个顾客,最后把点的20道菜分发给5个厨子做就行了,厨子好比服务器,这样厨子就可以专心做菜了,接待这种事就有Nginx代理做,同时,还可以根据顾客数量多增加或者减少厨师数量,把任务均匀分给每个厨师,这就是负载均衡的作用,Nginx 就可以有效分发流量.
总的来说:
问题分析: 聊到了负载面试官要继续深挖算法了.
答:
轮询算法:简单的理解就好比性感荷官在线发牌,从左到右依次发牌,最后每个人获得的纸牌张数一样,轮询算法就是将多个用户请求按顺序依次分发到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、磁碟驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。 使用带有负载平衡的多个伺服器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。 主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发和高可用的问题.
——— 维基百科 。
简单地理解负载均衡的作用就是流量分发,将大量用户请求分发到不同服务器上分担压力,如果有机器宕机,负载均衡服务器会负责把故障机器自动摘除.
Nginx:NGINX | High Performance Load Balancer, Web Server, & Reverse Proxy ,来自俄罗斯的软件,不光可以用作负载均衡,反向代理,还是出色的web服务器,使用广泛,所以也是面试常问的知识点。如果英文不错可以参考.
LVS:The Linux Virtual Server Project - Linux Server Cluster for Load Balancing ,Linux Virtual Server的缩写,一个Linux下的开源服务器集群系统,章⽂文嵩博⼠士于1998年5月创立.
HAProxy:http://www.haproxy.org/ ,一款高可用http/TCP负载均衡.
F5:F5 | Multi-Cloud Security and Application Delivery 硬件负载均衡.
上述都是常见负载均衡,在企业里具体使用哪种框架并不是绝对的,主要取决于系统的需求和工程师对每个框架的了解程度.
一个框架能存活下来一定是具有自己的优点,没有最好,适合自己的就是最好的.
比如F5,性能出色价格昂贵而出名,从十几万到上百万不等,有强大的售后和技术支持,我工作多年只有工作第一年参加国家电网项目上使用过F5,当时还给了我们一台测试用的机器,后来辞职后面试别的公司,面试官问我以前的项目组是使用的什么负载均衡,我说F5,面试官感叹国家队果然财大气粗,我那个时候不了解还有什么其他解决方案,表示F5很奇怪吗?面试完回家才慢慢了解,原来有很多解决方案,阿里使用LVS,也使用Nginx,美团最初使用Nginx + LVS,以及后来独立研发的MGW.
有人会问,怎么一个负载均衡就这么多种算法,心好累,企业开发里能用这么多算法吗?真正到企业开发中,一般都只用一种,如果负责的服务器没有带状态的 Session,也不存在机器配置不相同的情况,那就可以用轮询或随机算法,工程师根据实际情况选择最合适自己的算法.
生活中的正向代理,打个比方,你想去俄罗斯旅行,需要去使馆办理签证,手续麻烦,你完全不知道从何下手,这个时候你想到找旅行社,有专门的导游可你帮你代办,你只需提供资料就在家等着拿签证就可以了,你是客户端,俄罗斯使馆是服务端,导游就是代理端.
正向代理就是代理客户端,服务端不知道客户端是谁.
。
互联网不够发达的时候,我们都打过10086,有事儿就找客服,全国31个省都有自己的客服中心,每个客服中心都有上百个客服小哥小姐姐,我们不关心给你分配的是谁,只需要接通10086后会自动给你分配客服给你,这就是反向代理.
反向代理就是代理服务端,客户端不知道服务端是谁.
反向代理服务器可以充当“交通警察”,如上图,位于后端服务器(baidu)前面,并以最大化速度和容量利用率的方式在一组服务器上分发客户端请求,同时确保没有一个服务器过载,可以降低性能。如果服务器出现故障,负载均衡器会将流量重定向到其它正常的服务器上.
这一节主要讲了负载均衡在网站后台建设中的应用和代理的概念,负载均衡算法和正/反向代理的概念也是面试中容易碰到的基础问题,是初学者必须掌握的概念.
以上就是分布式架构中关于正向代理反向代理面试提问的详细内容,更多关于分布式架构正向代理反向代理面试的资料请关注我其它相关文章! 。
原文地址:https://blog.csdn.net/qq_34272760/article/details/120734825 。
最后此篇关于分布式架构中关于正向代理反向代理面试提问的文章就讲到这里了,如果你想了解更多关于分布式架构中关于正向代理反向代理面试提问的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
是否可以简化在裸机上运行的这条链: 具有随时间变化的副本数的 StatefulSet 服务 使用 proxy-next-upstream: "error http_502 timeout invali
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我需要为应用程序制定架构。它专为销售产品而设计。 系统每天将接受大约 30-40k 的新产品。它将导致在表 product 中创建新记录。 系统应保留价格历史记录。用户应该能够看到产品 A 的价格在去
我需要一些帮助来理解 PHP 的内部工作原理。 还记得,在过去,我们曾经写过 TSR(Terminate and stay resident)例程(pre-windows 时代)吗?一旦该程序被执行,
1.Nginx 基础架构 nginx 启动后以 daemon 形式在后台运行,后台进程包含一个 master 进程和多个 worker 进程。如下图所示: master与
本文深入探讨了Kubernetes(K8s)的关键方面,包括其架构、容器编排、网络与存储管理、安全与合规、高可用性、灾难恢复以及监控与日志系统。 关注【TechLeadCloud】,
我知道 CNN 的工作原理,包括每一层的用途(Dropout、Pooling 等)。但是,在为新数据集设计 CNN 时,我不知道要使用多少个 Conv-Relu-Pool 层,在最终获得输出之前我应该
在基于 REST 的架构中,资源和方法之间有什么区别。有吗? 最佳答案 资源是您的应用程序定义的东西;它们与物体非常相似。方法是 HTTP 动词之一,例如 GET、POST、PUT、DELETE。它们
我想用 oneOf仅在 xyType 的值上不同的模式属性(property)。我想要其中两个:一个是 xyType设置为 "1"第二个在哪里xyType是 任何其他值 .这可以使用 json 模式完
寻求 PHP 架构师的建议! 我对 PHP 不是很熟悉,但已经接管了一个用该语言编写的大型分析包的维护工作。该架构旨在将报告的数据读取到大型键/值数组中,这些数组通过各种解析模块传递,以提取每个模块已
这些存在吗? 多年来,我一直是大型强类型面向对象语言(Java 和 C#)的奴隶,并且是 Martin Fowler 及其同类的信徒。 Javascript,由于它的松散类型和函数性质,似乎不适合我习
我已经阅读了 Manning 的 Big Data Lambda Architecture ( http://www.manning.com/marz/BD_meap_ch01.pdf ),但仍然无法
在过去的几年里,我做了相当多的 iOS 开发,所以我非常熟悉 iOS 架构和应用程序设计(一切都是一个 ViewController,您可以将其推送、弹出或粘贴到选项卡栏中)。我最近开始探索正确的 M
我有以下应用程序,我在其中循环一些数据并显示它。 {{thing.title}} {{thing.description}}
昨天我和我的伙伴讨论了我正在开发的这个电子购物网站的架构。请注意,我为此使用 ASP.NET。他非常惊讶地发现我没有将添加到购物车的项目保留在 ArrayList 或其他通用列表中,而是使用 LINQ
我正在使用在 tridion 蓝图层次结构中处于较低位置的出版物。从蓝图中较高级别的出版物继承的一些内容和模式不适合我的出版物,并且永远不会被我的出版物使用。 我将跟进添加这些项目的内部团队,并尝试说
我目前已经在 Cassandra 中设计了一个架构,但我想知道是否有更好的方法来做事情。基本上,问题在于大多数(如果不是全部)读取都是动态的。我构建了一个分段系统作为应用程序服务,读取动态自定义查询(
我正在按照 documentation 中给出的 icingaweb UI v 2.0 布局执行在服务器上设置 icinga 的步骤。 。我成功进入设置页面,该页面要求您输入 token ,然后按照步
我必须保存来自不同社交媒体的用户的不同个人资料。例如用户可能有 1 个 Facebook 和 2 个 Twitter 个人资料。如果我保存每个配置文件它作为新文档插入不同的集合中,例如 faceboo
我的团队使用 Puppet 架构,该架构目前可在多个环境(流浪者、暂存、生产)中容纳单个应用程序。 我们现在想要扩展此设置的范围以支持其他应用程序。他们中的许多人将使用我们已经定义的现有模块的子集,而
我是一名优秀的程序员,十分优秀!