Fork me on GitHub

Dapr 1.7 之 Unix Domain socket 他来了

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

posted @ 2022-06-04 15:21  张善友  阅读(93)  评论(0编辑  收藏  举报