雲服務開發要注意的12因素

2022-06-30 14:51:12 字數 2977 閱讀 9014

saas(software-as-a-service):軟體即服務.使用者通過網路來訪問軟體的軟體分發模型.它把軟體當作一種服務來交付,它們被稱為網路應用程式.

saas服務構建應該滿足下面12種因素,這樣才能實現:

標準化流程,快速上手

劃清服務邊界,提供最大的可移植性

適合部署在雲平台,節省伺服器和系統管理資源

縮減不同環境差異,便於持續交付

可在工具,架構和開發流程不發生明顯變化的前提下實現擴充套件

理解12因素,要基於雲服務(容器)的前提來考慮,就會更好理解它們的價值點.

乙份基準**,多份部署

便於**和應用之間對應

縮減不同環境差異

不同部署的應用版本,**是否要保留??

release版本是從master中切出去的,大小版本迭代:模組化,維護成本高,介面位址會變多.
模組化:將支付寶拆分為支付,商家,金融不同模組;最終由專門團隊聚合;

熱修復版本:已發布版本存在bug,網際網路產品因為是web應用,只需更新線上版本即可.存在客戶端的歷史版本需要發布補丁等處理.

顯示宣告依賴

簡化環境配置流程

快速執行應用

避免依賴版本衝突;

在環境變數中儲存配置,讓配置和**分離.優點如下:

1 **更加通用

2 配置與**分開管理,容易管理,可避免配置誤嵌入**庫;

3 不同環境的環境變數天然可以區分,不存在增加配置後,配置檔案變多問題;

把後端服務當作附加資源

後端服務是指:應用依賴的通過網路呼叫的各種服務.如資料庫,快取等;

將後端服務當作附加資源,它不區分本地或第三方服務,只要是網路呼叫就是後端服務,它的優點:

1 引數化依賴服務 所有的後端服務對於應用就是乙個配置項;

2 按需裝卸依賴服務 只要修改配置檔案,就可以更換後端服務;

嚴格分離構建和執行.

部署基準**分為三個階段:

構建階段:將**倉庫轉化為可執行包.構建時會使用指定版本的**,獲取和打包依賴項,編譯成二進位制檔案和資源檔案;

發布階段:將構建結果和部署所需的配置結合,生成可執行應用;

執行階段:執行已發布應用.

階段分離的優點:

規範發布流程;

便於提起發現應用中異常;

加速應用啟動;

以乙個或多個無狀態程序執行應用

應用進行必須無狀態且無共享.

任何持久化資料都要儲存在後端服務內,如資料庫.

記憶體區域或磁碟空間可以作為程序在做某種事務型操作時的快取,因為它們不會影響應用狀態.多程序間,快取資料不共享;單程序內也會因為容器重新部署而丟棄這部分資料.

session保持通過redis等帶有過期時間的快取來處理.極力反對hash等"粘性session",這會讓應用存在狀態,同時也存在服務擴充套件後快取穿透的問題.

tip:

一致性hash問題,針對於老系統,可能沒有考慮會話問題或者檔案狀態問題,無法通過快取方式獲取會話狀態等情況,反而採用一致性hash,可以很好的解決問題,也不用修改業務**,所以具體原則運用也要考慮具體的場景.

通過埠繫結來提供服務

應用應完全自我載入,不依賴任何網路服務就可建立乙個面向網路的服務.網際網路應用通過埠繫結來提供服務.

應用依賴更靈活.任何應用都是乙個可配置的引數.

執行更靈活.隨起隨用

通過程序模型進行擴充套件

程序無共享,水平分割槽,會讓併發更容易新增且更健壯.
快速啟動和優雅終止可最大化健壯性

程序易處理指:程序具備快速開啟和停止的能力.追求最小啟動時間.追求快且優雅的停止.還要保證停止時的健壯性.

有利於快速,彈性伸縮應用;

加速產品迭代;

降低停止的影響;

保證意外發生時,可以優雅的退出.

盡可能保持開發,預發布,線上環境相同

環境差異表現:

時間差異: 開發人員正在編寫的**時間線長;

人員差異: 開發人員編寫**,運維人員部署**;

工具差異: 開發人員在用nginx,osx,線上環境使用apache,linux;

應用想持續部署必須縮小本地和線上差異.

縮小時間差異: 開發人員可以幾小時甚至幾分鐘就部署**;

縮小人員差異: 開發人員不知要編寫**,部署和線上服務執行也要參與;

縮小工具差異: 盡量保證開發環境和線上環境的一致性;

反對不同環境使用不同的後端服務.

把日誌當作事件流

應用本身不考慮儲存自己的輸出流.不應該去管理日誌檔案,每個執行的程序都會直接的標準輸出事件流,將所有執行中的程序和後端服務的輸出流按時間順序收集.

開發環境: 通過這些資料流,實時的在終端看到應用的活動.

生產環境: 輸出流匯集後傳送給日誌處理程式,用於檢視或存檔.

日誌統一管理,便於檢視整個呼叫鏈情況;

日誌管理和應用解耦;

便於後續根據日誌進行行為分析;

後台管理任務當作一次性程序執行

程序構成:用來處理應用的常規業務的一組程序.常規業務之外,還有一些管理或維護應用的一次性任務,如:

資料遷移;

執行乙個控制台,用於執行一些**或進行資料檢查等;

執行一些一次性指令碼等;

這些後台管理任務應該當作一次性程序,它應該和常駐程序使用同樣的環境.它應該隨其他應用程式**一起發布,從而避免同步問題.

避免同步問題
參考文件:

12factor

介面開發需要注意的

我們在開發 api 應該注意的幾個事項 僅供參考 1 單檔案實現多介面的形式有很多種,例如 if.elseif.或 switch 或 動態方法 也就是tp的這種訪問函式體的形式 2 對於資料的輸出最好用json,json具有相當強大的跨平台性,市場上各大主流程式語言都支援json解析,json正在逐...

DDoS攻擊緩解 可利用雲服務,不過要注意

任何遭遇過ddos攻擊的企業都知道這種攻擊會造成嚴重的破壞。除了顯而易見的影響,例如效能下降或企業 完全無法訪問,還有不太明顯的影響,例如,如果企業在iaas或甚至主機託管提供商那兒選擇 基於使用量的定價 ddos攻擊會給企業造成財務損失。當這些企業需要為頻寬或cpu時間付費時,ddos相關的成本影...

平時開發需要注意的點

一 牢記瀏覽器常見bug的處理方式,在 第一次編寫時就考慮解決相容問題 其實在第一次編寫 時,就已經可以開始考慮元素的樣式是否會引起其他瀏覽器的相容問題,防範於未然。舉個常見的例子 ie中float元素如果同時設定了margin值,此時margin的值會變為雙倍,解決辦法是在該元素中加入displa...