Tuesday, January 9, 2018

12 factors 心得

I. Codebase
一個 app 對應一個 git repo ,而不是一個 distributed system 對應一個 git repo 。

II. Dependencies
python 可以用 pip 和 virtualenv 來做依賴聲明 (dependency declaration) 與依賴隔離 (dependency isolation)

V. Build, release, run
應該要使用 release management tools,以便用於管理 release 的版本。必要時可以一個命令 rollback 退版。

VII. Port binding
語言有提供 http server 的 library 是一大優點。app 可以直接做 port binding

IX. Disposability
要讓 app 可以 graceful shutdown ,主要需要考慮兩個問題:
(1) network app 要拒絕所有新的請求,並且繼續執行當前已接收的請求,然後退出。
(2) worker process 終止之前,要把當前的任務退回 Queue 。比方說,對 RabbitMQ 發送 NACK

XII. Admin processes
語言有提供 REPL 是一大優點,可以直接使用該種語言寫成的 script 來做 admin/management process。如此就可以與 app process 使用相同的依賴聲明、依賴隔離。