時雨堂で開発しているミドルウェアソフトウェアは Erlang/OTP (以下 Erlang) を利用しています。
Erlang は分散機能が入っています。分散機能を簡単に説明すると、他のサーバーにある Erlang とやりとりができる仕組みです。
このときにサーバ間を利用する際に、暗号化が必要になりますが、Erlang が標準で提供為てる機能はサーバー間通信を TLS にする方法がありますが、Erlang に TLS 処理させるのは CPU も食べるしお勧めはできません。
Erlang -- Using TLS for Erlang Distribution
そこで、時雨堂ではTailscale を利用してサーバー間を WireGuard (P2P VPN) で繋いで、その上で Erlang の分散機能を利用するようにしています。これで Erlang の暗号化機能を利用せずに、安心して Erlang の分散機能が利用できます。
実際に Tailscale で繋いだサーバー間の ping の値を雑にのせておきますので参考にしてみてください。とても速いです。
IP アドレスは出てますが、これは Tailscale が利用するキャリアグレード NAT 用の予約アドレスなので気にしなくで大丈夫です。
パブリックネットワーク。
64 bytes from 100.71.97.122: icmp_seq=3 ttl=64 time=0.857 ms64 bytes from 100.71.97.122: icmp_seq=4 ttl=64 time=0.756 ms64 bytes from 100.71.97.122: icmp_seq=5 ttl=64 time=1.41 ms64 bytes from 100.71.97.122: icmp_seq=6 ttl=64 time=0.888 ms64 bytes from 100.71.97.122: icmp_seq=7 ttl=64 time=0.892 msパブリックネットワーク。
64 bytes from 100.120.18.29: icmp_seq=3 ttl=64 time=0.894 ms64 bytes from 100.120.18.29: icmp_seq=4 ttl=64 time=0.777 ms64 bytes from 100.120.18.29: icmp_seq=5 ttl=64 time=1.00 ms64 bytes from 100.120.18.29: icmp_seq=6 ttl=64 time=0.962 ms64 bytes from 100.120.18.29: icmp_seq=7 ttl=64 time=1.67 msプライベートネットワーク。
64 bytes from 100.87.92.1: icmp_seq=3 ttl=64 time=0.698 ms64 bytes from 100.87.92.1: icmp_seq=4 ttl=64 time=0.731 ms64 bytes from 100.87.92.1: icmp_seq=5 ttl=64 time=0.633 ms64 bytes from 100.87.92.1: icmp_seq=6 ttl=64 time=0.724 ms64 bytes from 100.87.92.1: icmp_seq=7 ttl=64 time=0.598 msTailscale はTeam プランを利用しています。
1 ユーザ、年間 $60 で、5 デバイス利用できます。
10 デバイスを月 $4.20 で追加できます。
https://tailscale.com/pricing/
ちなみに時雨堂で管理しているサーバーは全て Tailsacle がインストールされています。
Tailscale を利用する事でマルチクラウドを利用しても、特に気にすることなくサーバー間通信ができますし、VictoriaMetrics を利用した監視も、全て Tailscale 経由です。HTTPS とかは利用していません。
また、Grafana へのアクセスも Tailscale 経由で利用しており、Tailscale にがっつり依存しています。
気軽にマルチクラウドででクラスターが組めるのも良いです。実際Sora Labo では 3 種類のクラウド間を Tailscale で繋いで 12 ノードでクラスターを組んでいますが、今まで一度も問題は出ていません。
