簡體   English   中英

應用程序從單片升級到微服務

[英]Application upgrade from monolithic to microservices

我們有13年歷史的整體Java應用程序使用

  1. 用於處理UI調用的Struts 2
  2. db調用的JDBC / Spring JDBC模板
  3. 彈簧DI
  4. UI的Tiles / JSP / Jquery

根據此單一源代碼創建了兩個可部署項。

  1. 在線申請戰爭
  2. 用於運行后端作業的JAR

當前的UI很舊。 我們的目標是使用微服務重新設計應用程序。 我們已經確定了可以作為單獨的微服務運行的模塊。

我們心中有以下問題

  1. 我們應該使用哪種UI框架(Angular / React或自制的)。 Angular似乎非常慢,就頁面加載而言,我們需要更好的性能。
  2. UI / Javascript應該直接調用后端Web服務,還是應該在已部署的WAR中存在spring控制器代理,以將UI調用轉發給API。 如果單個UI調用需要從不同的微服務獲取/更新數據,這也將有所幫助。
  3. 我們應該如何涵蓋微服務安全性方面
  4. 如果要具有同一微服務的多個實例,應該使用哪個負載均衡器。
  5. 由於它是銀行應用程序,因此我們組織不允許使用Elastic Search / Lucene進行搜索。 因此需要單獨使用Oracle報告的建議。
  6. 我們應該如何運行后端作業?
  7. 還有一個主要的付款微服務將創建付款。 由於付款量巨大,因此將需要多個實例。 我們將如何管理用戶登錄的會話。 我們是否應該去內存中的分布式會話存儲(可能是內存緩存)

這是一個非常廣泛的問題。 您需要聘請顧問架構師來深入了解您的應用程序,因為您不太可能在這里獲得有意義的深入答案。 但是,作為一個粗略的指導原則,這里有一些簡短的答案:

  1. 我們應該使用哪種UI框架(Angular / React或自制的)。 Angular似乎非常慢,就頁面加載而言,我們需要更好的性能。

這取決於應用程序實際需要執行的操作。 Angular是領先的框架之一,通常一點也不慢。 您可能做錯了什么(您進行了太多的細粒度調用嗎?后端速度慢嗎?)。 React也是一個強有力的競爭者,但似乎正在失去人氣,盡管那只是主觀意見,可能是錯誤的。 Angular是功能更完善的框架,而React是更多工具的組合。 如果您認為自己可以做一個自制的工具,並使其與這些現成的工具一樣成熟,就會發瘋。

  1. UI / Javascript應該直接調用后端Web服務,還是應該在已部署的WAR中存在spring控制器代理,以將UI調用轉發給API。 如果單個UI調用需要從不同的微服務獲取/更新數據,這也將有所幫助。

許多較大的微服務架構通常涉及API網關。 然后再次取決於您的用例。 您可能還會遇到CORS問題,因此即使是簡單的反向代理(您無需開發它),也可以通過代理/ API網關集中調用。

  1. 我們應該如何涵蓋微服務安全性方面。

同樣,不知道您的設置是什么樣子。 JWT是一種常見的方法。 我假設身份驗證過程本身使用一些集中的LDAP / Exchange或類似過程。 身份驗證一旦完成,您就可以簽署您提供給客戶端的令牌,然后將其傳遞到HTTP授權標頭中的各個微服務。

  1. 如果要具有同一微服務的多個實例,應該使用哪個負載均衡器。

取決於您想要什么。 您是否正在部署基於AWS的基於雲的解決方案(在這種情況下,基礎架構提供了負載平衡)? 您是否打算在Kubernetes設置上進行部署,在該設置中,負載平衡和擴展是其部署結構的一部分? 您是否需要客戶端負載平衡(Spring Cloud的一部分)?

  1. 由於它是銀行應用程序,因此我們組織不允許使用Elastic Search / Lucene進行搜索。 因此需要單獨使用Oracle報告的建議。

如果不了解Oracle數據的外觀以及報告要求是什么,則所有解決方案都是可能的。

  1. 我們應該如何運行后端作業?

取決於您選擇的基礎架構。 從簡單的cron作業到雲調度服務,或諸如Quartz之類的集成Java調度機制,一切皆有可能。

  1. 還有一個主要的付款微服務將創建付款。 由於付款量巨大,因此將需要多個實例。 我們將如何管理用戶登錄的會話。 我們是否應該去內存中的分布式會話存儲(可能是內存緩存)

並不是的。 它將破壞微服務的全部目的。 JWT令牌將由客戶端的瀏覽器管理並自動過期。 在這種架構中,您無需管理用戶登錄的會話。

正如您所提到的,這是一個銀行站點,因此安全性將是第一要務。 在這里,我對FE和BE的建議很少。

FE :您最好使用preactjs它就像庫一樣,但是比起react輕巧快捷。 對於ui,您可以使用styled components而不是使用一些笨拙的第三方lib。 這還將提高性能,並明顯提高圖像和大文件的CDN。

:根據您的需要,最好使用混合解決方案node ,例如,用於會話。 設置一個身份驗證服務器,並讓您的服務從那里驗證用戶,以后它將用於任何種類的服務。例如,您將公開某種種類的客戶端API。

Auth的用例 :您可以將redis用於會話信息,以使用戶從auth服務器進行驗證,並向redis添加信息,稍后再檢查用戶是否從redis登錄,這將減少來自auth服務器的負載。 (我對加密貨幣交換使用了相同的策略,效果很好)

負載均衡器 :對Java不太熟悉,但是對於節點JS PM2來說,只需一個命令就可以為您完成很多事情,它將啟動多個實例並自行平衡。 如果您的流量很大,那么最好使用某些消息服務,例如rabbitmq這樣可以防止擴展服務器,從而降低服務器成本。

BE Jobs :我已經使用node完成了廣泛的任務,並且進展順利,可以在其中使用派生或擴展,這將為特定作業啟動一個新實例,並在完成后將其殺死,並且您可以輕松地生成日志。

為了進一步澄清,我在這里:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM