以 Rust 撰寫的 heartbeat server

Heartbeat server

Heartbeat server 是一種伺服器,具有提供連接者了解此伺服器健康狀況的功能。

有些伺服器本身的設計有包括 heartbeat endpoint ,其他的情況下, heartbeat server 和提供主要功能的伺服器是不一樣的軟體。

若提供功能的伺服器是由您親自撰寫,則建議可以在裡面加上 heartbeat 探測的功能,這樣可以更加準確的判斷您伺服器軟體的可用性,因為由您撰寫的伺服器軟體可以更容易地播報內部診斷參數。

Simple implementation

程式碼請見 倉庫

這隻程式選用了 rouille 程式庫來提供 HTTP server 的功能。選用這個程式庫,是考慮到它的構造簡單,沒有麻煩事要處理,用起來直覺,不必使用 macro ,也不必使用 nightly Rust 。缺點是,它使用 sync IO ,跟 PHP + apache 的情況很像,不過員作者允諾未來有機會改進這樣的情況,畢竟現在 Rust async IO 仍然處在接近戰國時代的情景。

命令列參數的處理使用了 clap 。畢竟這個程式若是能提供少許自訂性的話或可變成真正的實用工具也說不定 XD 。

使用的話,可以參見下面的 shell session

1
2
3
4
5
6
7
8
9
10
11
12
$ git clone https://gitlab.com/chiakikame/rust-http-heartbeat.git
$ cd rust-http-heartbeat
$ cargo build --release
$ ./target/release/rust-http-heartbeat -i "Machine 1" &
[1] 12436
Heartbeat server binds to http://localhost:9988 is starting
$ curl http://localhost:9988
Timestamp 1509036530
MachineIdentity Machine 1
RemoteAddr 127.0.0.1:37026
$ kill 12436

從上面應該可以看得出來這個 heartbeat server 只給出簡單的資訊來證明它所在的機器可以接受連線,並且作業系統有在運作中。您不可以依賴這個 heartbeat server 來推測

  • 作業系統的健康度

  • 連線線路的上的精確流量

  • 其他服務的狀況(包括但不限於其他服務的程式可否執行,或是其他服務的程式使用的 port 有沒有辦法接受外界存取等。)

文章目錄
  1. 1. Heartbeat server
  2. 2. Simple implementation