開發企業軟件的第一準則:可擴展性

開發企業軟件絕非易事。設計一個平臺來服務成千上萬的用戶、設備或數據流是一項艱鉅的任務。

在制定新的軟件解決方案時,可擴展性是最重要的考慮因素之一。沒有它,軟件就無法支持用戶增長而不損害用戶體驗,對銷售也是如此。構建一個可擴展的軟件平臺很有挑戰性,因爲要事先知道供應商需要考慮哪些因素、選項和問題幾乎是不可能的,這就需要不停迭代。

我們來看看如何從頭開始構建軟件以快速支持擴展。

不要總是相信開源

首先,利用現成的平臺和工具,似乎是一個省錢省時的好方法。但是,當嘗試擴展軟件時,很快就會發現,雖然這些平臺是通用的,並且適用於廣泛的應用程序,但是當需要對特定平臺或用例進行重大定製時,它們並不是最合適的。

這是Forward Networks團隊早年遇到的問題。最初,團隊嚴重依賴Elasticsearch來計算、索引和存儲平臺的所有端到端網絡行爲計算。慢慢地發現這不是一個長期的解決方案。在Elasticsearch中預計算所有數據變得不可行,存儲成本也越來越高。對這些開源工具的依賴開始成爲一個問題,因此團隊決定創建一個自己的分佈式計算和搜索平臺。

在內部設計平臺時,如果可能的話,採用延遲計算方法是明智的。通過預計算執行快速處理所需的足夠數據,並在用戶查詢輸入時執行特定於該查詢的其餘計算,將帶來重大改進。計算能力和所需存儲量的大幅降低,使得平臺在未來的性能和可擴展性得到了迅速提高。

極簡主義設計

請記住軟件平臺必須在最小的內部硬件上運行。雖然在AWS、Azure或其他雲提供商中提供1TB+RAM的實例非常容易,但大多數客戶將在可用的最小RAM量上操作供應商的平臺。特別是當一個潛在的客戶在測試軟件時,他們不想爲一個不確定的平臺提供大量的資源。使用128GB或256GB的RAM並不少見。

一個簡單的事實是,當軟件需要大量的內部計算資源時,可能會引發擔憂。另一方面,潛在客戶要迅速開始使用該軟件,以完成概念驗證,否則他們還沒有看到在環境中操作該平臺的價值——這對轉換銷售絕對是關鍵。

即使需要擴展到1000倍,也不能簡單地使用具有1000個節點的集羣。即使在極少數情況下這在技術上是可能的,這也是不現實的做法。軟件供應商必須進行艱苦的工程工作,才能以最少的資源完成同樣的擴展工作。以下是一些具體的方法,可以幫助團隊在設計軟件平臺時牢記極簡主義:

——避免重複計算。

——消除內存和磁盤上的重複數據結構。

——延遲計算:將處理延遲到實際需要時。

——使核心數據結構儘可能緊湊,並且具有非常低的序列化和訪問開銷。

——使用fastutil在Java中實現快速和內存高效的集合。

——配置文件以檢測和優化實際瓶頸的性能。

如果可能的話,一個平臺的資源需求在理想情況下應該很低,開發人員可以在筆記本電腦上運行整個堆棧。這對於實現快速調試和快速迭代至關重要。以這種方式構建在最小硬件上運行的軟件平臺可以加快採用速度,並最終爲客戶節省資金和提高利潤率。

總是收集數據

即使是設計得最好的軟件,也可能存在一些根本無法預料的環境因素或數據模式。隨着時間的推移,軟件的計算核心可能需要多次重寫或顯著更改,以適應無法預見的新問題、約束或低效。可用於測試平臺的數據集越大,團隊就越早發現這些瓶頸和限制。

但對於一家新成立的公司來說,這並非易事。爲什麼一個大型企業要花時間安裝一個新供應商的平臺,配置他們的安全策略以允許軟件連接到他們的整個網絡來獲取他們的配置,並將數據發送給一個還沒有經過驗證的產品的小公司?大多數開發人員需要走很長的路。這意味着從客戶和試點項目中收集任何可能可用的相關數據,以不斷構建和擴展內部數據集,用於規模測試和改進。即使是不會帶來新客戶的軟件試用,也可以爲改進平臺提供具有寶貴洞察力的新數據。然後,隨着軟件變得更好、更快和更具可擴展性,可以進入更大的客戶環境,獲得更大的數據集,並用於下一組平臺瓶頸。

另一個複雜問題是,許多企業都有嚴格的安全和隱私政策。他們不會直接與軟件供應商共享數據和信息。這些類型的公司需要花時間在平臺中構建數據模糊處理功能,分析性能瓶頸,而不真正共享客戶的實際數據。

投資內部測試

當然,沒有一家供應商希望自己的平臺“崩潰”,這對公司來說並不好看,而且可能會讓客戶花費數百萬美元的時間來尋找解決方案,甚至更糟的是,尋找替代方案。對於那些希望在不破壞東西的情況下快速發展的軟件平臺供應商來說,投資複雜測試是至關重要的。

通過僱傭足夠的工程師來運行一致和徹底的測試,以檢查正確性和性能迴歸,供應商可以使軟件平臺儘可能可靠和有彈性。

不斷進化

老實說,這些過程是一個不斷循環的過程。沒有一家供應商真正“完成”了對其軟件平臺的改進。始終需要進一步開發軟件,以更好、更快、更高效地工作,並與市場上出現的新技術和平臺兼容。所有這些在構建可伸縮的企業軟件時都更加適用。

隨着越來越多的設備變得智能化和互聯化,對可擴展解決方案的需求將成倍增長。以可擴展性爲根本設計軟件還可以提高性能、計算和存儲效率和客戶體驗。這是一個明智的選擇,它可以讓供應商走在競爭對手的前面,並使他們取得長期成功。

原文鏈接:

Developing Enterprise Software with Scalability Top of Mind – The New Stack

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章