在Kubernetes中,服务通过服务ip相互通信。使用iptables或类似的东西,每个TCP连接都透明地路由到可用于被叫服务的pod之一。如果呼叫服务未关闭TCP连接(例如使用TCP keepalive或连接池),它将连接到一个Pod,而不使用可能产生的其他Pod。
处理这种情况的正确方法是什么?
我自己不满意的想法:
我将每个呼叫的速度变慢只是为了能够将请求分配到不同的Pod吗?感觉不对。
我可以强制调用者打开多个连接(假设它将随后在这些连接中分配请求),但是应该打开几个?呼叫者不知道(可能不应该知道)有多少个豆荚。
我可以限制被调用服务的资源,因此它在多个请求上变得很慢,并且调用方将打开更多连接(希望与其他Pod连接)。同样,我不喜欢任意放慢请求的想法,这仅适用于cpu绑定的服务。
最近,我开始学习Node.js的,对自己的无阻塞IO和令人难以置信的速度见长的V8之上的JavaScript库.
据我了解,节点不等待IO的响应,但运行的事件循环(类似于游戏循环),保持检查未完成的操作,并继续/尽快IO响应完成它们.节点性能与Apache的HTTPD与节点是显著更快,同时使用更少的内存.
现在,如果你了解了Apache,你了解它每个用户使用1个线程,这理应减缓下来显著,这是出现在我的问题,其中:
如果将线程与事件循环内部节点进行比较,则会开始看到相似之处:两者都是等待资源响应的未完成进程的抽象,都检查操作是否定期进行,然后不占用CPU占用了一段时间(至少我认为一个好的阻塞API在重新检查之前会休眠几毫秒).
现在哪个突出的,关键的差异让线程变得更糟?
只是想知道两个对象初始化之间是否有任何区别?
我应该使用哪一个?
有和没有括号()
var data = new Apple()
{
Color = "red",
Taste = "good"
}
Run Code Online (Sandbox Code Playgroud)
和
var data = new Apple
{
Color = "red",
Taste = "good"
}
Run Code Online (Sandbox Code Playgroud)