随着计算机越来越普及,对服务和服务器的需求已经增长到可以因过度使用而陷入停顿的地步。幸运的是,我们现在有负载均衡的概念来帮助处理需求。
什么是负载均衡?
负载均衡是一个通用术语,指的是你为确保所管理的资源得到有效分配而做的任何事情。对于web服务器的系统管理员来说,负载均衡通常意味着确保web服务器软件(如Nginx)配置有足够的工作节点来处理访问者的激增。换句话说,如果一个站点突然变得非常流行,并且访问者数在几分钟内增加了四倍,那么运行服务器的软件必须能够对每个访问者做出响应,而并没有任何一个访问者注意到服务降级。对于简单的站点,这与单行配置选项一样简单,但是对于每个用户有动态内容和多个数据库查询的复杂站点,这可能是一个严重的问题。
这个问题本应通过云计算解决,但当一个web应用遇到意外的激增时,它可能无法扩展。
当谈到负载均衡时,需要记住的重要一点是,高效地分配资源并不一定意味着均匀地分配资源。并非所有任务都需要所有可用资源。智能负载均策略仅在需要时向用户和任务提供资源。这通常是应用程序开发人员的职责,而不是IT基础设施的职责。异步应用程序对于确保离开计算机喝咖啡休息的用户不会占用服务器上的宝贵资源至关重要。
负载均衡是如何工作的?
负载均衡通过在多个计算节点上分配工作负载来避免瓶颈。这些节点可以是数据中心中的物理服务器、云中的容器、战略部署的边缘计算服务器、复杂应用程序框架中的独立Java虚拟机(JVM)或运行在单个Linux服务器上的守护进程。
其思想是将一个大问题分成小任务,并将每个任务分配给一台专用计算机。例如,对于要求用户登录的网站,该网站可能托管在服务器A上,而登录页及其附带的所有身份验证查找则托管在服务器B上。这样,新用户登录帐户的过程就不会从其他积极使用该站点的用户那里争夺资源。
云负载均衡
云计算使用容器,因此通常没有单独的物理服务器来处理不同的任务(实际上,有许多单独的服务器,但它们聚集在一起充当一个计算“大脑”)。相反,一个“pod”是由几个容器创建的。当一个pod由于用户或任务负载而开始耗尽资源时,会生成一个相同的pod。pod共享存储和网络资源,每个pod在创建时被分配给一个计算节点。pod可以根据负载需要创建或销毁,这样无论有多少用户,用户都可以体验到一致的服务质量。
边缘计算
边缘计算在负载均衡时考虑了物理世界。云天生是一个分布式系统,但实际上,云的节点通常集中在几个数据中心。用户离运行云计算的数据中心越远,要获得最佳服务,他们必须克服的物理障碍就越多。即使有光纤连接和适当的负载均衡,3000英里以外的服务器的响应时间也可能比300英里以外的服务器的响应时间要长。
边缘计算将计算节点带到云的“边缘”,试图弥合地理鸿沟,形成一种云的卫星网络,因此它也在良好的负载均衡工作中发挥了作用。
什么是负载均衡算法?
有许多负载均衡策略,它们的复杂程度取决于所涉及的技术和需求。负载均衡不一定很复杂,而且从一开始就开始就是很重要的,即使是在使用Kubernetes或Keepalived这样的专用软件时也是如此。
当你可以自行设计应用程序以采取简单的预防措施时,不要依赖容器来均衡负载。如果你从一开始就将应用程序设计为模块化和短暂的,那么你将受益于通过巧妙的网络设计、容器编排以及未来技术带来的任何负载均衡机会。
对应用程序开发人员或网络工程师而言的一些流行算法包括:
——按顺序将任务分配给服务器(这通常称为循环)。
——将任务分配给当前最不忙的服务器。
——将任务分配给具有最佳响应时间的服务器。
——随机分配任务。
例如,在分配特别复杂的任务时,可以将这些原则结合起来或加权,以支持组中最强大的服务器。编排是常用的,这样管理员就不必为负载均衡制定完美的算法或策略,尽管有时需要管理员选择使用哪种负载均衡方案组合。
小结
负载均衡实际上并不是确保所有资源在整个网络中得到均匀使用,而是要保证即使在意外发生时也能获得可靠的用户体验。良好的基础设施可以抵御计算机崩溃、应用程序过载、网络流量冲击和用户错误。考虑服务如何具有弹性,并从头开始相应地设计负载均衡。