我正在尝试学习负载平衡和服务器是如何工作的(既有云服务器,也有常规池服务器)。根据我的理解,负载均衡器将用户的请求重定向到压力/连接量最少的服务器,这样无论有多少用户在发出相同的请求,网页都可能快速加载。我感到困惑的部分是每个服务器所做的任务。从我在网上看到的图和诸如此类的东西来看,似乎有多个服务器执行不同的任务,例如发送视图文件(html)、发送静态内容或数据库服务器(MySQL)。但我也听说这样做可能是不好的,因为拆分服务器会使事情变得复杂,例如,使用不同的DNS,每个DNS做不同的事情。所以我想我需要澄清的是,服务器只是在一个服务器上做它需要做的所有事情吗,所以我的意思是,如果一个请求要求一个视图文件,它会被送到同一个服务器上,那个服务器处理静态图像请求,或者post请求,或者get请求等等。
关于AWS实例,这是否意味着每个实例只是您所拥有的“设置”的另一个副本。意思是一个实例的服务器A与数据库服务器A相同,但另一个实例只是它的另一个副本,所以第二个实例的服务器A与数据库服务器A相同?
Server A (for doing everything such as sending
view file, get requests static
assets etc.)
Server B (For database MySQL)
/
user ---> DNS ---> load b. - Server A (for doing everything such as
sending view file, get requests
static assets etc.)
Server B (For database MySQL)
\
Server A (for doing everything such as
sending view file, get requests
static assets etc.)
Server B (For database MySQL)
所以基本上,我想问的是,负载均衡器是重定向所有的服务器,使其具有相同的任务,还是负载均衡器将它们发送到具有不同任务的不同服务器。如果是后者,它如何知道什么时候将它发送到服务器,例如服务静态文件,如果有许多请求到这个服务器,负载均衡器将如何处理它?
我的小图中的每组服务器(服务器A和服务器B)是AWS实例的样子吗?
答案是,服务器执行您配置的任何操作。
有时,人们设计他们的系统,使每个服务器都能响应任何请求,有时,他们有单独的服务器用于单独的任务(例如,一些服务器处理移动请求,一些服务器处理身份验证请求,另一些服务器处理web请求)。在AWS术语中,这些不同的服务器组将是单独的目标组,应用程序负载均衡器将被配置为根据URL的内容向不同的目标组发送请求。
不过,在事情上...数据库服务器从来不放在负载均衡器后面,如上面所示。只有应用程序服务器与数据库服务器进行通信。这就形成了一个三层体系结构:
Load Balancer -> Application Servers -> Database
通常的做法是将数据库放在单独的服务器(或服务器集群)上,以便它们独立于应用程序。这允许应用程序通过添加/删除应用程序服务器来扩展,而不会影响数据库。
将静态内容卸载到AmazonS3也是值得的。这可以像在
标记中更改URL一样简单。这改善了带宽,因为AmazonS3是巨大的,这意味着通过应用服务器的流量更少。这改进了应用程序的缩放。