共计 1928 个字符,预计需要花费 5 分钟才能阅读完成。
当个人电脑刚刚开始走进人们工作和生存畛域时,一个家庭通常最多只有 1 台电脑。孩子们白天应用电脑玩游戏,而大人们早晨通过电脑在论坛上灌水。但现如今只有一台电脑的家庭很容易呈现每个人在同一时间都须要应用电脑的状况。这或多或少与 IT 行业产生的状况雷同。因为计算机曾经变得越来越广泛了,对服务和服务器的需要曾经减少到它们可能因为适度应用而宕机的水平。侥幸的是,咱们当初有负载平衡的概念来帮忙咱们解决这一需要。
什么是负载平衡?
负载平衡是一个通用的术语,指的是为了确保你所治理的资源失去无效调配而做的任何事件。对于网络服务器的系统管理员来说,负载平衡通常意味着确保网络服务器软件(如 Nginx)配置了足够的 worker 节点以解决激增的访客。换句话说,如果一个网站忽然变得十分受欢迎,其访客数量在几分钟之内翻了几倍,运行服务器的软件必须可能对这一状况做出反馈,而不会让用户感到拜访变得不晦涩。对于简略的站点来说,只须要进行简略的配置即可,但对于具备动静内容并且每个用户几个数据库查问的简单站点,这可能是一个难以解决的问题。
这个问题本应随着云计算的倒退而解决,然而,当一个网络应用遇到意外的激增时,也有可能无奈及时进行扩容。
当谈及负载平衡的时候,请记住一点分布式资源并不意味着平均调配。并不是所有工作都始终须要所有可用的资源。一个智能的负载平衡策略应该只在适合的时候为用户和任何提供资源。当然,这通常是开发工程师解决而不是 IT 基础架构部门的工作。异步利用能够当用户短暂来到时而不在服务器上占用有价值的资源。
负载平衡的工作原理
负载平衡通过在多个计算节点上散布工作负载而防止了瓶颈。那些节点可能是数据中心的物理服务器、云端中的容器、面向边缘计算场景设置的服务器、在简单应用程序框架中的 Java 虚拟机(Java Virtual Machines)或者运行在单个 Linux 服务器上的 daemon。
具体实现原理是将大问题拆分成若干个小工作,并为每个任务分配指定计算机。例如,对于须要用户登录的网页,网页可能被托管在 Server A 上,与此同时登陆页面以及所有身份验证 lookups 被托管在 Server B 上。这种部署形式能够使得一个新用户登录到账号上时无需从其余沉闷用户处应用资源。
云端负载平衡
云计算应用容器,所以通常没有独立的物理服务器来解决不同的工作(实际上,有许多独立的服务器,但它们被集中在一起,作为一个计算 “ 大脑 ”)。相同,一个 “pod “ 是由几个容器创立的。当一个 pod 因为其用户或工作负载而开始耗尽资源时,会生成一个雷同的 pod。Pod 之间共享存储和网络资源,每个 pod 在创立时被调配到一个计算节点。pod 能够依据负载的须要创立或销毁,这样,无论有多少用户,用户都能体验到统一的服务质量。
边缘计算
边缘计算在进行负载平衡时须要思考到物理世界。云是一个分布式系统,但在实际上,云的节点通常集中在几个数据中心。用户离运行云的数据中心越远,他们就必须克服更多的物理阻碍以获得最佳服务。即便有光纤连贯和适当的负载平衡,位于 3000 公里外的服务器的响应工夫也可能比 300 公里外的服务器响应工夫更长。
边缘计算将计算节点带到云的“边缘”以试图弥合天文鸿沟,从而造成一种用于云端的卫星网络,所以它在良好的负载平衡中也施展了作用。
什么是负载平衡算法?
负载平衡有很多策略,它们的复杂程度取决于所波及的技术和需要的不同。负载平衡不肯定很简单,即便应用 Kubernetes 或 Keepalived 这样的业余软件,也要从一开始就进行负载平衡。
当你的应用程序能够本人采取简略的预防措施时,不要依赖容器来平衡负载。如果你从一开始就把你的利用程序设计成模块化且短暂的,那么你就会从奇妙的网络设计、容器编排以及将来的任何技术所带来的负载平衡机会中受害。
一些风行的算法能够领导你作为一个利用开发者或网络工程师的工作,包含:
- 将工作按程序调配给服务器(这通常被称为轮询调度 round-robin)
- 将任务分配给目前最不忙碌的服务器
- 将任务分配到响应工夫最好的服务器上
- 随机地分配任务
这些准则能够联合或加权,例如,在调配特地简单的工作时,偏差于一个组中最弱小的服务器。编排是罕用的,这样管理员就不用为负载平衡鼓捣出完满的算法或策略,只管有时要由管理员来抉择应用哪种负载平衡计划的组合。
期待意外的产生
负载平衡并不是真正要确保你的所有资源在整个网络中失去平均应用。负载平衡是指即便在意外状况产生时也要确保牢靠的用户体验。良好的基础架构能够接受计算机宕机、应用程序过载、网络流量的剧烈攻打和用户谬误。你能够开始思考如何让服务具备弹性,并从头开始设计相应的负载平衡。
原文链接:
https://opensource.com/articl…