查看原文
其他

WAX技术指南第13期:如何在节点之间路由特定的API查询

NFT Gamer NFT Gamer 2023-07-09

在 WAX 技术指南 #5#6 中,我们详细探讨了构建、配置和优化可靠的 WAX 负载均衡器的主题。在这些文章中,由于我们非常熟悉该平台的功能和特性,因此使用了 HAProxy。


最近在与社区名人 Anders的对话中,我们了解到许多新社区成员试图在单个节点上运行他们所有的公共服务,但没有意识到这会对他们提供服务的速度和可靠性产生影响。


WAX 技术指南第13期将讨论使用 HAProxy 在节点之间分离特定公共 API 查询的过程和配置。


01


如何在节点之间路由特定的 API 查询


在讨论路由 API 查询之前,应该提到的是,提高 WAX 软件节点公共服务的性能/速度的最快方法之一就是专门为公开的公共对等点 (P2P) 提供单独的节点。一个节点上的 100 多个对等点可以占用 nodeos 进程的 50% 以上,而留给 API 查询的则更少。


nodeos 是 WAX 软件的核心服务守护进程,运行在每个 WAX 协议网络节点上,然而它主要是单线程的。这意味着可用于公共 API 查询的 nodeos 服务实例越多,API 服务产品的性能和负载平衡就会越好。此外,一些 WAX 公共服务是使用其他软件提供的,并且有自己独特的技术要求,例如 Hyperion、Atomic API 甚至一个网站。


在此示例中,HAProxy 将用于创建策略,允许公共 API 服务根据请求的查询在多个节点之间分布。请务必查看 WAX 技术指南 #5,了解有关如何完整构建和配置 HAProxy 的详细信息。


02


配置


所有 HAProxy 配置都可以在 haproxy.cfg 中找到


在此示例中,目标是:


  • 配置HAProxy前端根据URL识别流量(前端为公网IP,后端为私有局域网)

  • 配置前端以根据特定查询将流量路由到适当的后端服务器

  • 配置后端服务器、负载均衡算法和阈值


按照以下示例配置新的 haproxy.cfg 中的每个部分:


> sudo nano /etc/haproxy/haproxy.cfg前端


配置一个名为 wax_acl 的访问列表来识别对您的 URL 的请求,在本例中为 wax.eosphere.io。这样做将允许您扩展此负载均衡器以支持多个 URL 和网络。wax_aclwax.eosphere.io


frontend http-inacl wax_acl hdr(host) -i wax.eosphere.io

将上述访问列表绑定到后端服务器组,并指定每个特定查询应路由到的位置。下面的配置示例执行以下操作:


  • 普通的 v1 API 查询被发送到后端wax_api_servers
  • 正常的 v1 API 块查询被发送到后端,这些服务器有完整的 wax_api_blocks_servers block.log
  • 历史 v1 和 v2 查询被发送到 wax_hyperion_servers 后端,这是一个 Hyperion 集群
  • Hyperion Swagger和Block Explorer Web门户被发送到后端 wax_hyperion_servers_web
  • Atomic API 查询被发送到 wax_atomic_api_servers,这是一个Atomic eosio-contract-api 服务器


frontend http-inuse_backend wax_hyperion_servers_web if wax_acl { path_beg /v2/docs }use_backend wax_hyperion_servers_web if wax_acl { path_beg /v2/explore }use_backend wax_hyperion_servers if wax_acl { path_beg /v2 }use_backend wax_hyperion_servers if wax_acl { path_beg /v1/history }use_backend wax_hyperion_servers if wax_acl { path_beg /socket.io }use_backend wax_api_block_servers if wax_acl { path_beg /v1/chain/get_block }use_backend wax_api_servers if wax_acl { path_beg /v1/chain }use_backend wax_api_servers if wax_acl { path_beg /v1/node }use_backend wax_atomic_api_servers if wax_acl { path_beg /health }use_backend wax_atomic_api_servers if wax_acl { path_beg /atomicassets }use_backend wax_atomic_api_servers if wax_acl { path_beg /atomictools }use_backend wax_atomic_api_servers if wax_acl { path_beg /atomicmarket }


重要的是要注意前端规则需要从最具体到最不具体的顺序排列,例如列表顶部的 path_beg / 将取代它下面的所有规则。


后端


配置后端服务器组以匹配您的基础架构并为每个服务器组应用特定策略。


后端提供了应用特定阈值以减少滥用的绝佳场所,如 WAX 技术指南 #6 中所讨论的,连同特定的查询路由,应该清楚的是,HAProxy 可以用于出色的策略粒度。


下面的配置提供了与上述配置相匹配的示例服务器和策略。


backend wax_hyperion_servers_web balance roundrobin default-server check maxconn 1000 server wax-hyperion-3 <PRIVATE LAN IP>:7000 cookie server1backend wax_hyperion_servers balance roundrobin default-server check maxconn 500 server wax-hyperion-1 <PRIVATE LAN IP>:7000 cookie server1 server wax-hyperion-2 <PRIVATE LAN IP>:7000 cookie server2backend wax_api_block_servers balance roundrobin default-server check maxconn 3000 server wax-pn-4 <PRIVATE LAN IP>:8888 cookie server1backend wax_api_servers balance roundrobin default-server check maxconn 3000 server wax-pn-1 <PRIVATE LAN IP>:8888 cookie server1 server wax-pn-2 <PRIVATE LAN IP>:8888 cookie server2 server wax-pn-3 <PRIVATE LAN IP>:8888 cookie server3backend wax_atomic_api_servers balance leastconn default-server check maxconn 800 server wax-atomic-1 <PRIVATE LAN IP>:9000 cookie server1 server wax-atomic-2 <PRIVATE LAN IP>:9000 cookie server2


请注意,本指南并不是关于如何设置特定基础架构或粒度查询路由的策略。但是,在了解了如何配置 HAProxy 以优化您的公共服务产品后,希望您现在会更有信心在 WAX 主网等要求极高且非常繁忙的网络上扩展 API。



策划制作


原文:EOSphere (Ross Dold)  

排版:9iMxxx    |   翻译:Michaelyang

发布:NFT Gamer  

防止失联


Telegram:https://t.me/NFTGamerChina

Discord:https://discord.gg/NU82sXeTNs

微信:NFTGURU


关注我们

👇👇




点击「阅读原文」,获取更多信息

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存