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...