好文分享 — PayPal 如何只用 8 台 VM 就能每天處理 10 億筆交易?

“How did PayPal handle a billion daily transactions with eight virtual machines?” 1 文介紹讓 PayPal 能夠高效率處理 10 億筆交易的大功臣— Actor Model 。

文章一開始介紹 PayPal 早期怎麼處理持續增長的交易需求,其實跟大家直覺會想到的做法雷同,主要就是改善硬體效能、增加伺服器等做法。

不過隨著伺服器規模超過 1,000 時,帶來不少新的問題,包含網路架構複雜、管理難度上升、資源利用率下降造成浪費等等(大家也可以思考要部署 1,000 台伺服器要怎麼做到短時間、高可靠性等要求,肯定需要投注不少心力)。

所以 PayPal 最後轉往使用 Actor Model (基於 Akka framework)。

Actor Model 有別與常見的程式碼架構,它有幾個特點:

  1. 把不同的功能拆成多個 Actors
  2. Actor 有自己獨有的狀態(state),只有 Actor 能夠自己存取、管理,其他 Actors 都無法存取,很大程度避免 side effect 的產生
  3. Actors 之間透過先進先出(FIFO)的訊息傳遞進行溝通,因此不需要使用 shared memory, lock 等機制,從而增加 concurrency 運算的效率,通常都會用名稱 mailbox 作為儲存訊息的 queue (message queue 的角色)
  4. Actor 不是 Thread, 也不是 Process, 而是單純的 object, 因此資源使用又比起使用 Thread 或者 Process 來得更少
  5. Actor 會指派給 Thread 執行,所以可以建立超多 Actors, 並指派給少數 Threads 執行,如果要增加效能可以單單升級 CPU 增加可執行的 Threads 數量達成

Actor Model 相當適合用 Golang 實作,因為 goroutine 的設計就很像 Actor Model 中的 Actor, goroutine 實際運作就是可以建立多個 goroutine 並分配給 Threads 進行執行,而 goroutine 之間的溝通則是透過 channel, 因此在文章最後也展示用 Golang 寫的 Actor Model 的簡單範例,蠻值得閱讀的。

“How did PayPal handle a billion daily transactions with eight virtual machines?”

Facebook Threads X

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!