河南夢之網網絡科技有限公司
夢之網科技出品
掃描關注夢之網科技微信公眾賬號

掃小程序碼聯系客服

舍棄Python+C,Salesforce將企業級軟件全面遷移到G-夢之網科技

夢之網科技?2019-10-12?經驗之談?

舍棄Python+C,Salesforce將企業級軟件全面遷移到G-夢之網科技


Python 非常適合快速編寫更高級別的應用程序,但并不總是能夠提供企業級所需的高性能。C 可以創建高性能的可執行文件,但是添加功能會花費更多時間。這篇文章分享了 Einstein Analytics 企業級軟件從 C-Python 混合遷移到完全使用 Go 應用程序的經驗。

我們很少有機會直接將兩種技術彼此比較以完成同一任務。但是有時就會那么巧遇到星星排成一行的情況,比如從當前技術堆棧中你一直得到的是負面影響,而這時恰巧出現了滿足你確切需求的新技術,或者項目的規模和功能集超過了現有技術的能力范圍。

在 Salesforce,我們在過去幾年中遇到了這種情況。我們將大多數 Einstein Analytics 后端從 Python-C 混合平臺移植到了 Go。Go 是 Google 為大規模現代軟件工程設計的一種語言。傳說中,谷歌工程師想創建一種為大型應用程序設計的語言,并在等待大型 C ++ 項目編譯時開始了對 Go 的設計。

這篇文章將分享了我們將企業級軟件從 C-Python 混合遷移到(幾乎)完全使用 Go 應用程序的經驗。

Einstein Analytics 將業務智能處理添加到 Salesforce 實例中。通過基于云的 AI 處理,無論結構和格式如何,它都直接從 Salesforce CRM 數據以及盡可能多的客戶外部數據中生成可行的見解或預測、管道報告、性能度量。

在后臺,給定的 Salesforce 實例將 Einstein Analytics 功能公開為常規 Salesforce REST API 的一部分。這些鏈接到一個查詢服務器集群,每個查詢服務器都提供緩存在內存中的鏈接數據集的查詢,但是它們可以從集群中的任何節點填充緩存的數據。為了管理所有這些請求,我們在每個服務器上都有一個優化的流程,該流程將請求路由到適當的節點,并將響應轉發到 API 請求的發起者。對于任何讀取數據集的查詢服務器,這些調用都看起來是本地的。而本地意味著快速。較大的數據集是分區的,無狀態查詢協調器聚合來自遠程分區子查詢的數據。

數據集是使用 ETL(提取,轉換,加載)創建的 批處理,然后以專有的列式數據庫格式存儲。最初成為 Einstein Analytics 的產品的查詢引擎和數據集創建工具是用 C 編寫的, 使用 Python 包裝器提供高級功能解析查詢、REST API 服務器、表達式引擎等等。

從本質上講,該產品具有兩全其美的優勢。Python 非常適合快速編寫更高級別的應用程序,但并不總是能夠提供企業級所需的高性能。C 可以創建高性能的可執行文件,但是添加功能會花費更多時間。

轉 Go 初體驗

最初,這種組合是起作用的。但是,在開發該軟件多年之后,Einstein Analytics 開始出現性能下降問題。這是因為不屬于核心查詢引擎的很多功能都被添加到了 Python 包裝器中。這種方式可以快速開發和部署功能,但是隨著時間的流逝,它們會拖累整個系統。Python 的多線程性能不是很好,因此要求包裝程序執行的次數越多,其執行效果就越差。

之前的團隊已經在考慮將包裝器移植到 Go 上,因此我們也做了一些研究。我們很快意識到,在企業級系統上,我們將面臨另外兩個問題。首先,Python 使用松散類型輸入,這對于一個快速開發新想法并將其投入生產的小型團隊非常有用,但對于某些客戶為此付出數百萬美元的企業級應用程序而言,卻不太合適。其次,我們預見到一個巨大的依賴噩夢即將來臨,因為部署正確的 Python 庫、版本和文件是一件苦差事。所以在 2014 年,我們決定移植 Python 包裝器到 Go 上。

最初,我們對年輕的 Go 生態系統持謹慎態度,但是當我們研究過該語言的設計目標后(轉到 Google:軟件工程服務中的語言設計)),它給我們留下了深刻的印象。它是為軟件工程而設計的,而不僅僅是語言的復雜性,因此它的優勢包括可靠的內置工具,快速的編譯和部署以及簡單的故障排除。

企業軟件面臨的現實問題是,與編寫代碼相比,需要花費更多的時間閱讀代碼。我們感謝 Go 使代碼易于理解。在 Python 中,你可以編寫超級優雅的列表推導式和幾乎是數學式的漂亮代碼。但是,如果你沒有參與編寫代碼,那么這種優雅可能讓可讀性付出代價。

第一個項目進展順利。我們對新項目的性能和可維護性感到非常滿意。我們遇到的為數不多的抱怨之一是,在選擇可伸縮性而不是原始性能來幫助它們進行垃圾回收時,需要在語言上進行權衡:他們決定開始將原始類型作為指針而不是值存儲在接口中,這為我們帶來了性能開銷和額外的分配。

全部遷移到 Go 上

文章關鍵詞
中國軟件網
軟件行業
soft6
cdec
智能生態
軟件協
急速赛车国语 江西11选5多乐彩 nba2kol2拉爆发 天天2棋牌在哪下载 单注守号中大奖 山东快彩乐老11选5 p3组选237后 作弊赚钱的网络项目 神州三分彩计划 法甲附加赛规则 11选5技巧 历史排五中奖票样 北京pk10赛车 注册就100提现 官方pk拾开奖 平果赚钱app 云南11选5高频彩票开奖