iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0
自我挑戰組

這些年,我玩Pokémon Go學到的兩三事系列 第 29

[Day 29] K8s不能避免的二三事--認識Stateful Application

The definition on Wikipedia says:

A Stateful application saves data about each client session and uses that data the next time the client makes a request.

【Pod: mongodB】

任何應用程式的資料終點站就是資料庫,因此資料庫本身就是一個Stateful Application
https://ithelp.ithome.com.tw/upload/images/20200921/20109107OmwWGNAtF7.png
參考Example: Deploying WordPress and MySQL with Persistent Volumes,在K8s中,Stateful application最簡單的部署方式就是給它配置一個Volume儲存空間。
https://ithelp.ithome.com.tw/upload/images/20200921/20109107qoPs2LIgvM.png
好處就是Pod掛掉後,Volume中的資料都還在,mongodB再透過create YAML檔又滿血復活了。
Docker中,也是有類似的做法。

【Stateful Application常見的問題】

  • 完成整個交易程序期間(R/W)是否都需要與資料庫保持連線?
  • 大量的交易請求資料庫,能正確地被處理嗎?
  • 交易過程中是否斷線?
  • 如何處理斷線期間交易傳輸的資料?
  • 客戶在交易期間是否只能傻傻的等待資料庫回應?

Stateless Over Stateful Applications

https://ithelp.ithome.com.tw/upload/images/20200921/20109107OuFlmYx46K.png
透過Spring boot這類型的微服務,一個理想的交易應該被拆分成數個資料量小讀寫快獨立完成的小交易。
正所謂『天下武功,唯快不破!』如何去設計數個小交易,一個個疊加成一個完整的大交易,這才是最大的挑戰。
此外,基於Kubernetes本身的核心設計:『Pod服務掛了,重建一個新的是最便宜做法。
因應Kubernetes此一特性,Stateless的設計方式也能減小服務重啟後的資料遺失量。

[K8s Tip in Pokémon Go - A Successful Kubernetes Story]

https://ithelp.ithome.com.tw/upload/images/20200923/20109107W9aFWl8M6x.png

  • 你/妳的應用服務是Stateful嗎?
  • 資料需要一直持續保存嗎?
  • 哪些部分的資料才是必須被永久保存的?

K8s Tip:不要把所有client端取得的資料都存入資料庫,只存必要的

哈哈,這篇明明是要介紹Stateful Application的,結論卻是:
『在K8s中,Stateless Appliction才是王道。』
果然很符合雙子座的我,表裡不一的調調。/images/emoticon/emoticon07.gif


上一篇
[Day 28] K8s不能避免的二三事--認識Stateless Application
下一篇
[Day 30] 完賽過中秋囉!
系列文
這些年,我玩Pokémon Go學到的兩三事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言