開發者手記:跨云編程煩惱重重(一)
大多數云應用程序都有開發功能(或至少可以編寫腳本),允許深度定制,加上一定程度的數據庫訪問和計算能力,但即使是***的云計算應用程序,也會受到平臺/開發環境的限制,應用程序不是通用的運行時或通用的對象容器。例如,開發語言必須為多租戶部署提供安全,不能讓用戶的代碼將虛擬機,數據庫或整個應用程序搞癱掉,此外,某些類型的語言結構必須限制,以防資源被過度使用和死鎖(的確,試想Salesforce.com上運行了上億行用戶代碼,要讓它們保持快速響應和良好的正常運行時間是一項非常艱巨任務)。
拿Salesforce的APEX為例,不需要太多的技巧,語言本身可以處理大多數業務邏輯,但在云開發環境中,要受平臺的限制,例如,在J2EE中有一個很好的庫可以完成你想要的任務,但J2EE在你的云平臺上是不可用的,即使你只需要這個庫的一組方法也不行,許多底層功能必須靠你自己實現。
我們舉一個現實世界中的例子:許可密鑰生成。軟件廠商可能會使用許可密鑰強制他們的最終用戶簽訂協議,CRM系統管理這些許可密鑰(作為客戶資產的一部分),在CRM應用程序內也可以生成完整的密鑰,因此軟件組織要求將密鑰系統移植到CRM中,其實密鑰生成也使用的是CRM平臺的加密方法。
但是,即使你可以移植所有邏輯到CRM系統,但密鑰生成的計算負載仍然要受CPU,堆棧大小和查詢量的限制。
解決辦法是調用一個毗鄰云中的服務執行數據處理,遺憾的是,目前還沒有適合這種情形的設計模式,因為:
你需要訪問的部分數據可能因為政策,組織策略,安全或其它原因不能移動,還有一種情況是,其它系統也在使用這些需要移動的數據。
如果你的其它云需要處理駐留在CRM數據庫中的大量數據,你可能想要的是數據的摘要,匯總,歸納或圖形展示,而不是原始記錄。
其它云可能對RESTful協議,如JSON支持得更好,但它們可能對WSDL和SOAP支持得不好。
根據計算的性質,在CRM系統中完成所有工作,只從遠程云調用很小的方法可能會很有意義,相反,在遠程完成所有的工作,作為一個完整的服務進行調用可能也有意義。
如果計算需要評估系統狀態(如工作量,鎖或數據變化),網絡流量(和結果延遲)可能會成為一個嚴重的問題。
安全,測試和部署注意事項不能被忽略,必須隨時關注,即使開發人員,管理員和組織的所有權發生了變化,也要將影響降到***(思考一下將來企業重組對開發人員的影響,他們屆時是否還有足夠的訪問權訪問其它云)。
因此***步是為你特定的應用程序確定***架構,找出哪些數據元素需要傳輸,并跨云重構你的類。
原文出處:http://www.itworld.com/hardware/161153/trouble-coding-across-clouds-part-1
原文名:The trouble with coding across the clouds: Part 1
作者:David Taber
【編輯推薦】