我正在google-api-ruby-client
使用Streaming Data Into BigQuery。所以每当有请求时。它被推入Redis作为队列&然后一个新的Sidekiq工作者试图插入bigquery。我认为它涉及在每个插入时打开一个与bigquery的新HTTPS连接。
方式,我有它设置是: 事件每1秒发布一次,或批量大小达到1MB(1兆字节)时,以先发生者为准。这是每个工作者,因此Biquery API可以通过多个HTTPS连接每秒接收数十个HTTP帖子。
这是使用Google提供的API客户端完成的。
现在的问题 - 对于Streaming插入,更好的方法是什么: -
google-api-ruby-client
答案 0 :(得分:1)
我认为谈论这些优化很早就到了。如果您用尽内核的TCP连接,也会丢失其他上下文。或者有多少连接处于TIME_WAIT状态,依此类推。
否则,这将需要许多其他上下文,并深入了解其工作原理,以便在此处优化。
最大行尺寸:1 MB
HTTP请求大小限制:10 MB
每秒最大行数:每表100,000行每秒
每个请求的最大行数:500
每秒最大字节数:每个表每秒100 MB
我会尝试提供上下文,以便更好地了解端口耗尽时的复杂情况:
让我们在一台机器上说你有30,000个端口池和每秒500个新连接(典型值):
function myFunction() {
document.getElementById("exampleInput").value = "after";
}
现在说你平均每秒看到550个连接。 突然间,没有任何可用的端口可供使用。
因此,您的第一个选择是提高允许的本地端口范围; 很容易,但即使你尽可能多地打开它然后去 1025到65535,仍然只有64000个端口;你的60秒 TCP_TIMEWAIT_LEN,您可以平均维持1000个连接a 第二。仍然没有使用持久连接。
这里更好地讨论了这个端口排气:http://www.gossamer-threads.com/lists/nanog/users/158655