Unix Domain socket
A UNIX socket is an inter-process communication mechanism that allows bidirectional data exchange between processes running on the same machine.
Unix Domain Socket(后面統一簡稱 UDS)是在socket的框架上發展出一種IPC(inter-process communication)機制。對于本地的進程間通信,Unix Domain socket 比TCP / IP環回連接更安全,更有效。使用起來和傳統的 socket 非常的相似。區別點主要有兩個地方需要關注。
第一,在創建 socket 的時候,普通的 socket 第一個參數 family 為 AF_INET, 而 UDS 指定為 AF_UNIX 即可。
第二,Server 的標識不再是 ip 和 端口,而是一個路徑,例如 /dev/shm/fpm-cgi.sock,其實在平時我們使用 UDS 并不一定需要去寫一段代碼,很多應用程序都支持在本機網絡 IO 的時候配置。
在k8s 上通過共享卷來實現的:https://kubernetes.io/zh/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/,這樣你就好理解Dapr 的配置參數 dapr.io/unix-domain-socket-path。相關的Issue 可以參考 https://github.com/dapr/dapr/issues/4309。
Dapr 1.7 版本帶來了UDS的支持,現在,您可以在使用注釋? dapr.io/unix-domain-socket-path 調用 Dapr sidecar 時將 Unix Domain Sockets 與 Kubernetes(以及自托管)一起使用,以提高吞吐量并降低延遲。
Dapr 對 UDS 支持的平臺目前是Linux,還不支持Windows(Unix-domain sockets have long been a feature of most Unix platforms, and are now supported in Windows 10 and Windows Server 2019) ,Dapr 1.8 版本已經安排支持了,正在開發中,具體參見Issue:https://github.com/dapr/dapr/issues/4128。