摘要:本文列出的失敗原因都屬于這一類——不會產生收益或直接影響用戶體驗的設備,因此可以在早期成功的階段和敏捷軟件開發的零碎迭代中,中途淘汰。物聯網的不間斷本質也會帶來進一步的風險。一旦啟動物聯網部署,你就無法關閉,哪怕只是一會,因此日常維護也將面臨挑戰,激進的架構變更近乎不可能。
覆蓋少量設備的原型實施,與支持具有不同軟件和硬件級別以及間歇性連接的數億臺設備之間存在巨大差異。本文列出的失敗原因都屬于這一類——不會產生收益或直接影響用戶體驗的設備,因此可以在早期成功的階段和敏捷軟件開發的零碎迭代中,中途淘汰。物聯網的不間斷本質也會帶來進一步的風險。一旦啟動物聯網部署,你就無法關閉,哪怕只是一會,因此日常維護也將面臨挑戰,激進的架構變更近乎不可能。
冷酷的事實是,你可以擁有“酷”,你會變得“不可靠”。你不能同時成為兩者,而你讓你的客戶感到失望或不便,并且保留生意的次數是有限的。以下是物聯網會發生的五個可預見性失敗:
安全
還需要解釋嗎?
沒有從初始就為大量部署進行架構
物聯網的成功將比以前任何技術都要更大,更“實時”。這意味著物聯網系統必須毫不費力的擴展到大規模部署。我們指的不是“只有”50%甚至100%的復合年增長率——成功意味著在幾年中,從1000個部署擴展到一億。
幾乎所有的云供應商都聲稱能夠支持巨大的工作負載,而NoSQL供應商和開源項目也是一樣。
我不會直接質疑這些說法,但是如果你想要試圖通過組合多種技術,來搭建大規模的系統,需要考慮三個因素:
物理約束。跨越美國的單向傳輸需要大約60毫秒。這意味著如果你的應用必須與服務器長時間對話,而不是發送單個請求,則你的延遲可能會上升到秒數,當用戶在遠離單個數據中心的地方使用應用。限制也適用于數據中心。大容量網絡在10GB /秒左右到達極限。要真正獲得擴展,你的應用不能只放入一個服務器,你的應用的任何單個子系統也不能只放入一個服務器。
技術阻抗不匹配。無論單個技術的擴展性有多大,都不能保證在將它們結合在一起時,能獲得高水平的性能,特別是當它們以不同的速度進行擴展時。
開發人員經驗。你擁有多少開發人員,真正構建過一個擁有一億用戶的系統?他們是你的員工,還是外包人員,或顧問?我不是說你的員工不夠聰明,但是他們第一次就能夠成功完成嗎?如果不是,還會有第二次機會嗎?
沒有預見到那些可能性不大的特定事件
常規軟件和物聯網系統之間的根本區別,是你對創建部署的環境的控制力不足。現實世界是一個奇怪的、混亂的和不穩定的地方,這種奇怪的行為也會體現在你的系統上。奇怪的是,一次性事件會頻繁發生。假設你已經部署了一億臺設備,一個百萬分之一概率的事件,大約每周會發生兩次。要應對這一點,很多開發人員的心態都需要發生根本改變。不夠偏執的軟件將允許錯誤進入系統并傳播混亂。混亂會導致用戶體驗不佳,反過來又會導致消極的看法 —或更糟。
無法預測和應對不斷變化的物理復雜性
物聯網系統的初始部署通常將集中在某種形式的最小化可行性產品上,隨著時間的推移,將會增加更多的功能。但除此之外,成功將導致競爭對手的收購,與不同世界觀的人的技術合作,受市場啟發的“功能”失敗,并被默默忘記,以及隨著時間的推移而產生的不可避免的技術債務。
在傳統的企業環境中,我們可以替換老化的組件,在物聯網領域中,實際的東西并不屬于你——它們由你的客戶擁有,不能強迫他們停止使用他們的設備,他們期望設備一直工作,直到出現故障。這意味著,一旦你發貨了一個設備,你就必須為它提供幾十年的支持,除非你愿意讓你的設備“變成磚頭”,并對抗你的客戶。
未能預測和應對不斷變化的邏輯復雜性
隨著你的物理環境變得更加復雜,你的軟件堆棧也會更加復雜。本來是一個好的干凈的部署,隨著時間的推移,將變得老舊起來,大量過時的代碼和越來越多的復雜的數據路徑通過系統,當你試圖應對不可避免的事實,你永遠不能停止支持任何已發貨的設備。
你的JSON是否暗藏問題?
文檔數據存儲在這種情況下是一個真正的問題。因為它們對于存儲內容沒有任何規則,所以你擁有的每一個數據庫交互代碼都需要能夠理解每一個可能遇到的記錄結構。在SQL數據庫中,新列用于存儲新數據,使這問題更易于管理。
你會如何平衡需要改進和需要隨時隨地保持在線的需要?
高可用性(HA)應用的大量問題,是需要預測罕見但危險場景所帶來的副作用。創建和部署一個真正的HA應用,是一個重大的技術挑戰;而長期保持它的運行則是更大的挑戰。
在十年之后,你所有的開源組件是否還能獲得支持?
比一個廢棄的購物中心更讓人傷感的,就是一個廢棄的開源項目,特別當你還使用它時。雖然現在可以通過組合開源項目來構建復雜的應用,但持續的支持將隨著時間的推移而變得具有挑戰性。遲早一個或多個組件會被拋棄。到時候,你將不得不在架構更改和不會影響收益增加的中斷之間進行選擇,或者你能夠修復任何發生的問題。至少,這意味著你需要保留編譯整個堆棧的能力。