Untitled
HA(High Availability,高可用性)
HA 之前,先搞懂 Stateful vs Stateless
✅ Stateless component 是什麼?
像是:Application Server(AS)/ Nginx
特性是:不會保存任何「狀態」(state),也就是沒有 session、使用者資料、執行進度這些。
所以它可以橫向擴充(scale out)非常容易,想加幾台就加幾台,反正大家都是 stateless。
如何維持 HA(高可用)?
靠 heartbeat(心跳)機制判斷哪台死掉。
有問題就換台 server 接手即可。
✅ Stateful component 是什麼?
像是:PostgreSQL / Kafka / RabbitMQ
這類會保存狀態資料,例如資料庫內的使用者資料、訊息佇列的訊息等。
所以要維持 HA,比起 stateless 難很多,因為 state 不能亂丟、不能亂同步。
二、Redis 是什麼?Stateless 嗎?
如果 Redis 只是做 caching(快取),就可以當作 stateless 看待(只是暫時性資料,掉了沒差)。
但如果 Redis 當作主資料來源,那就是 stateful,要好好維運,cache-miss 可能會出事。
📌 三、Stateless 的 HA 很容易做到
範例:我們架了幾個 nginx,只要判斷有沒有在跑、有沒有心跳訊號就好。
而且 nginx 本身還可以接上 monitoring 工具,萬一 IP 有異常(例如被改掉)也能警告。
所以:Stateless 非常容易做 HA。
📌 四、Stateful 就麻煩多了
比如 RDBMS(關聯式資料庫):
需要 Master-Slave replication,甚至要引入 NoSQL 的架構來避開這些麻煩。
所以很多時候,我們會選擇讓系統的 component 盡量 stateless。
例如 PostgreSQL 很強,但如果可以不接觸它,就先別碰。
❗️當你設計高可用系統時,要先分類:哪些元件是 Stateless、哪些是 Stateful
Stateless 就像是跑腿的員工,不用記事情,誰上都行;
Stateful 就像是管帳的阿姨,資料存在她腦中,不能亂換人。


