go - 如何在 Go 中有效地处理数千个保持事件连接?

标签 go load-balancing

使用 golang 的 net/http 服务器来处理连接,是否有一种模式可以更好地处理 10,000 个保持事件的连接,每个连接的每秒请求数相对较低?

我使用 Wrk 之类的基准性能是每秒 50,000 个请求,而对于实际流量(来自实时出价交易所),我很难超过每秒 8,000 个请求。

我知道来自硬件负载均衡器的连接多路复用是可能的,但似乎可以在 Go 中实现相同类型的模式。

最佳答案

您可以使用像 JSON RPC 这样的 IPC 协议(protocol)在本地和远程服务器上分配负载通过例如UNIX and TCP sockets .

相关:Go Inter-Process Communication

至于性能瓶颈;它已在 go-nuts 上进行了广泛讨论邮件列表。在撰写本文时,它是运行时的 goroutine 调度程序和世界一流的垃圾收集器。

核心团队近期取得重大进展improvements到运行时来缓解这个问题,但仍有改进的空间。举一个例子:

Due to tighter coupling of the run-time and network libraries, fewer context switches are required on network operations.

关于go - 如何在 Go 中有效地处理数千个保持事件连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18648278/

相关文章:

接受 channel 接收器并将字符串发送到 channel 的 goroutine

go - 指针接收器与值接收器混淆

go - 为什么 channel 的方向变化不能兼容?

tomcat - 哪种是在本地模拟平衡器的最佳方式?

C调用Go导出函数

go - 如何一次插入多个数据

kubernetes - 针对 istio 导出流量的粒度策略

matlab - 使用每个 iterand 工作量的先验估计来预测并行循环的运行时间(对于给定的工作人员数量)

docker - Kubernetes和Docker:如何让两个服务正确通信

kubernetes - Ingress 与负载均衡器