在 Zite 上看到的「Implementing a Tor relay from scratch」,用 Go 寫的 Tor Relay Server。
會跳下去用 Go 寫是因為效能上的考量:
[...], but the lack of AES-NI instructions on the CPUs cause a significant slowdown.
但因為一個 IP 只能跑兩個 instance,這就有點痛了:
To maximize the amount of relayed data, it is normal to simply run multiple instances of the program, up to two per IP address.
而作者的目標是超過現有的極限:
My final goal was to beat the Tor speed record, which was at roughly 200 megabytes per second.
成果就是直接吃滿 2Gbps (250MBytes/sec),而且 CPU 只用了 60%:
[...] He set up a server with my relay and within a few days we had broken the Tor speed record with a nice 250 megabytes per second, effectively maxing out the network link. CPU usage was at a nice 60% across 12 cores. But his relay also suffered from the memory issues and had to be restarted every few days.
作者的程式碼放在 GitHub 上,之後應該會有人跳進去改寫:「A fast implementation of the Tor OR code, in Go」。