SaaS應(yīng)用12原則:(十二)管理進(jìn)程

后臺管理任務(wù)當(dāng)作一次性進(jìn)程運行

進(jìn)程構(gòu)成(process formation)是指用來處理應(yīng)用的常規(guī)業(yè)務(wù)(比如處理 web 請求)的一組進(jìn)程。
與此不同,開發(fā)人員經(jīng)常希望執(zhí)行一些管理或維護(hù)應(yīng)用的一次性任務(wù)淮捆,例如:

  • 運行數(shù)據(jù)移植(Django 中的 manage.py migrate, Rails 中的 rake db:migrate)后室。
  • 運行一個控制臺(也被稱為 REPL shell),來執(zhí)行一些代碼或是針對線上數(shù)據(jù)庫做一些檢查独撇。大多數(shù)語言都通過解釋器提供了一個 REPL 工具(pythonperl) 屑墨,或是其他命令(Ruby 使用 irb, Rails 使用 rails console)躁锁。
  • 運行一些提交到代碼倉庫的一次性腳本。

一次性管理進(jìn)程應(yīng)該和正常的常駐進(jìn)程使用同樣的環(huán)境卵史。這些管理進(jìn)程和任何其他的進(jìn)程一樣使用相同的代碼配置战转,基于某個發(fā)布版本運行。后臺管理代碼應(yīng)該隨其他應(yīng)用程序代碼一起發(fā)布以躯,從而避免同步問題槐秧。

所有進(jìn)程類型應(yīng)該使用同樣的依賴隔離技術(shù)。
例如忧设,如果Ruby的web進(jìn)程使用了命令 bundle exec thin start 刁标,那么數(shù)據(jù)庫移植應(yīng)使用 bundle exec rake db:migrate 。同樣的址晕,如果一個 Python 程序使用了 Virtualenv膀懈,則需要在運行 Tornado Web 服務(wù)器和任何 manage.py 管理進(jìn)程時引入 bin/python

12-factor 尤其青睞那些提供了 REPL shell 的語言谨垃,因為那會讓運行一次性腳本變得簡單启搂。
在本地部署中,開發(fā)人員直接在命令行使用 shell 命令調(diào)用一次性管理進(jìn)程刘陶。在線上部署中胳赌,開發(fā)人員依舊可以使用ssh或是運行環(huán)境提供的其他機(jī)制來運行這樣的進(jìn)程。

總結(jié)

開發(fā)人員經(jīng)常希望執(zhí)行一些管理或維護(hù)應(yīng)用的一次性任務(wù)匙隔,例如:

  • 運行數(shù)據(jù)移植匈织。
  • 運行一個控制臺也被稱為 REPL shell,來執(zhí)行一些代碼或是針對線上數(shù)據(jù)庫做一些檢查牡直。
  • 運行一些提交到代碼倉庫的一次性腳本缀匕。
  • 12-Factor應(yīng)用中,一次性管理進(jìn)程應(yīng)該和正常的常駐進(jìn)程(應(yīng)用進(jìn)程)使用同樣的環(huán)境碰逸,并且使用相同的代碼和配置乡小,基于某個發(fā)布版本運行,隨著其他的應(yīng)用程序一起發(fā)布饵史。

補(bǔ)充知識

什么是 REPL

R(read)满钟、E(evaluate)、P(print)胳喷、L(loop) 或者(Read-Eval-Print Loop)
讀取 - 執(zhí)行 - 打印輸出 - 循環(huán)這個過程湃番,有時候翻譯成交互式解釋器或交互式編程環(huán)境。
往 REPL 里輸入一行代碼吭露,它立即給你執(zhí)行結(jié)果吠撮。而不用像 C++, Java 那樣通常需要編譯才能看到運行結(jié)果。

A Read-Eval-Print-Loop (REPL) is available both as a standalone program and easily includable in other programs. REPL provides a way to interactively run JavaScript and see the results. It can be used for debugging, testing, or just trying things out.

交互式解釋器(REPL)既可以作為一個獨立的程序運行讲竿,也可以很容易地包含在其他程序中作為整體程序的一部分使用泥兰。REPL為運行JavaScript腳本與查看運行結(jié)果提供了一種交互方式弄屡,通常REPL交互方式可以用于調(diào)試、測試以及試驗?zāi)撤N想法鞋诗。

下面列舉一些常見編程語言對 REPL 的原生支持:

原生就有REPL的語言

  • Common Lisp
  • Ruby
  • Python
  • Lua

原生不帶REPL的語言

  • JavaScript
  • PHP
  • JAVA
  • C#
  • C++
  • Haxe

參考:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膀捷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子削彬,更是在濱河造成了極大的恐慌全庸,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件融痛,死亡現(xiàn)場離奇詭異壶笼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)酌心,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門织阳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泡一,“玉大人,你說我怎么就攤上這事×敛埽” “怎么了严沥?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵焕盟,是天一觀的道長夜畴。 經(jīng)常有香客問我,道長址貌,這世上最難降的妖魔是什么铐拐? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮练对,結(jié)果婚禮上遍蟋,老公的妹妹穿的比我還像新娘。我一直安慰自己螟凭,他們只是感情好虚青,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著螺男,像睡著了一般棒厘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上下隧,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天奢人,我揣著相機(jī)與錄音,去河邊找鬼淆院。 笑死何乎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宪赶,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宗弯,長吁一口氣:“原來是場噩夢啊……” “哼脯燃!你這毒婦竟也來了搂妻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤辕棚,失蹤者是張志新(化名)和其女友劉穎欲主,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逝嚎,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡扁瓢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了补君。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片引几。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挽铁,靈堂內(nèi)的尸體忽然破棺而出伟桅,到底是詐尸還是另有隱情,我是刑警寧澤叽掘,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布楣铁,位于F島的核電站,受9級特大地震影響更扁,放射性物質(zhì)發(fā)生泄漏盖腕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一浓镜、第九天 我趴在偏房一處隱蔽的房頂上張望溃列。 院中可真熱鬧,春花似錦膛薛、人聲如沸听隐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遵绰。三九已至,卻和暖如春增淹,著一層夾襖步出監(jiān)牢的瞬間椿访,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工虑润, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留成玫,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像哭当,于是被迫代替她去往敵國和親猪腕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容