解析站点并连接其他云资源时的负载平衡

在本文中,我们将讨论一个库,该库在其自身中注册节点并将请求从外部重定向到特定节点。

您是怎么想到编写这个项目的?


在需要大量解析站点之后,我尝试使用硒网格实现这种事情,然后我选择了硒油。 selenoid出现了,但是我不需要很多东西,例如版本和浏览器选项,最重要的是,缺少自动缩放功能(但selenoid并非如此)。 90%的群集空闲时间,然后出现了很大的负载,服务器无法应对。 事实证明,铁的巨额支出几乎一直没有用,甚至无法应付。 我认为,如果随着负载的增加,可执行浏览器的数量增加,但是负载如何消失并删除浏览器,那将是很好的。 幸运的是,这可以例如通过AWS EC2实施


关于结构的一点点


  • 集线器

    该集线器会在您方便的任何地方启动,仅在一次实例中需要。
    使用集线器创建docker容器时,需要将令牌环境变量传递给它。

    之后,他开始期望来自节点和用户的传入连接。
    集线器会记住路由,并且会在一分钟的不活动状态中记住它们,然后删除该路由并将节点释放给另一个客户端。
  • 节点。

    可以将节点配置为自动伸缩系统的基本容器,例如,在容器池上平均负载,再添加一个,或者在极端情况下,只要您支付实际费用,就可以在启动时使用该容器启动虚拟服务器。服务器使用时间。

    在创建带有节点的Docker容器时,它需要将令牌服务器环境变量传递给它。 服务器是我们中心的IP。


选项号1.来自节点的请求


节点使用令牌集向集线器发出请求- 令牌集是来自环境变量的令牌。 集线器从请求中检查令牌,如果它们匹配,它将记住它。 集线器每4秒对此节点执行一次ping操作。 如果5次ping尝试失败,则删除该节点并记录连接丢失。 反之,如果与集线器的连接丢失,则节点每10秒初始化一次响应ping。 这样做是为了在断开连接后,群集本身将恢复其状态。

选项编号2。来自用户的请求


用户向设置了令牌数字标头的集线器发出请求。 需要令牌,以便只有受信任的节点才能操作集群,并进行编号,以便我们可以在同一客户端ip内创建不同的会话。 每个会话都有自己的唯一编号。

对于每个请求,集线器都会检查是否已经创建了路由,如果存在,则将请求简单地重定向到所需的节点,如果没有这样的路由,则将来自用户的请求排队以释放该节点。 一旦节点之一被释放,集线器就会为用户会话和释放的路由创建一条路由。 现在,此会话的所有请求将转到特定节点。

一分钟后。 用户如何关闭连接-节点已释放并转移到另一个用户请求。

链接到项目存储库

总结


原来,该帖子更像是使用说明,但是,我相信该项目可能会有用。

PS一些澄清


这是我开始在GOLANG上写的第一个项目,如果有人有建议或评论,请在评论中写(我什至不愿指望PR,但这太棒了!)

Source: https://habr.com/ru/post/zh-CN420303/


All Articles