概述
本文簡單介紹:
1)工程部署的必要性/部署原理
2)單機和叢集的簡介/差別/適用場景/組成部件
3)各種部署方式的差別,什麼是容器化部署?
工程部署原理
為什麼不能直接用設計器,而需要在伺服器部署工程?
問題:既然 FineReport 官網提供的設計器可以直接使用,為什麼還需要在伺服器端部署報表工程呢?
答案:官網提供的設計器內建了 Tomcat 伺服器,所以可以直接使用。但是每個設計器都對應了一個本地工程,大家無法共用同一個工程。
而對於正式的企業工程,需要讓多個操作員使用不同的設計器連結到同一個工程,並讓多個查看者能夠在不同的電腦上存取數據決策系統。
因此,需要在伺服器上部署工程,來確定不同的操作員可以透過遠端設計器連結到工程,同時也確定不同的查看者可以在各自的電腦終端上存取工程。
注意:請勿在設計器中運作正式工程,建議將工程部署在伺服器中,使用設計器遠端連結為佳。
為什麼推薦將工程部署在中間軟體中?
中間軟體是位於作業系統和應用程式之間的軟體層,用於支援應用程式之間的通訊和交互。
為了實現報表工程的更好可用性和穩定性,通常會將FineReport部署在中間軟體中。
部署在中間軟體中可以提供以下優勢:
應用伺服器可以提供更好的安全性:應用伺服器可以對傳輸協定和Web安全性進行控制和管理,可以使用HTTPS協定等加密協定來保證資料傳輸的安全性。
應用伺服器可以提供更好的效能:應用伺服器可以對請求進行負載均衡,以確定系統在高負載時仍然能夠高效地運作。
應用伺服器可以提供更好的擴展性:使用應用伺服器可以方便地擴展系統,併為不同的應用程式提供專用資源,進而確定應用程式的穩定性。
應用伺服器可以提供更高的可用性:應用伺服器可以提供高可用性和故障容許度機制,以最大化系統的可用性。
因此,將FineReport部署在中間軟體中可以提供更好的安全性、效能、擴展性和可用性,進而確定報表工程的穩定性和高可用性。
伺服器工程的運作原理
伺服器中工程部署的原理就是將 FineReport 報表工程部署到 Web 應用伺服器端。
使用者在用戶端產生一個報表查看請求,傳送給 Web 應用伺服器端。
Web 應用伺服器將 FineReport 報表的計算結果反饋給用戶端。
FineReport 在計算報表結果時會涉及到資料庫的讀寫操作。
叢集與單機
什麼是叢集和單機?
單機
就是一個部署好的工程。
叢集
叢集(cluster)就是將多個相同的工程集中起來提供同一種服務,這些單個的工程就是叢集的節點(node)。
基於叢集的橫向擴展性,使用者可透過增加節點數量使併發趨於線性增長,進而獲得較高的併發支撐效能。
同時也可以用多個工程做備份,避免單機不可用導致系統停止造成的損失(業務中斷、資料/範本丟失),確定系統 7*24h 穩定運作。
叢集的優勢
帆軟叢集具有高可用性、高效能、易於管理、可伸縮性和安全保障等優點,適用於企業級的報表生成和管理需求,可以幫助企業更好地管理和控制報表資料的儲存、生成、共享等方面的效能和效果。
優勢 | 說明 |
---|---|
高可用性 | 帆軟叢集透過叢集節點、負載均衡器、狀態伺服器等多個組件協同工作,有多個節點來分擔處理請求的負荷。 當叢集節點發生故障時,負載均衡器會自動將請求轉發到其他可用節點,保證系統的高可用性。 |
高併發 | 帆軟叢集允許平行處理多個報表生成和資料計算任務,透過多個節點進而實現任務的分散式處理。 透過叢集的橫向擴展,實現資料計算與報表生成的加速,進而提高整體的效能。 節點數量越多,支援的併發越高。 |
易於管理 | 帆軟叢集提供了完整的管理平台,包括叢集節點的監視、配置、部署和故障自動修復等功能,可以大大降低叢集維護和維運的難度和風險,幫助企業更好地管理和維護系統。
|
強擴展性 | 基於良好的架構設計,Web叢集具有良好的橫向擴展性,帆軟叢集可以快速增加叢集節點的數量,使併發趨於線性增長,以應對高峯期和流量波動,做到系統的可伸縮性和高效性。 |
叢集和單機的差別/叢集解決什麼問題?
當我們把叢集和單機比作一組出租車承接客人的話,它們的差別可以這樣解譯:
1)解決高負載問題
單機就像是一輛出租車,它可以接受乘客的訂單,但是如果訂單請求變得非常多,該出租車的服務能力可能無法滿足,並可能會出現效能瓶頸。
此時,你需要多輛出租車來分擔訂單處理工作。而這些出租車可以被組成為一個出租車隊的形式稱之為叢集。
這樣,您可以將乘客分配到不同的車輛中,並將他們同時送到目的地,進而提高服務效率。
2)解決高可用問題
但是,僅僅增加車輛的數量只能解決工程高負載問題,並不足以保證高可用性。
您還需要一個良好的車隊管理系統來確定每輛車都可以順利地運作,並提供相同的服務品質和客戶體驗。
在叢集設計中,這意味着您需要將多個伺服器組合在一起,以實現負載均衡、配置資訊資料庫、狀態伺服器和檔案伺服器等功能。
這些組件可以確定整個叢集的高可用性,並提供穩定的服務。
3)總結
叢集和單機的主要差別在於共享資源和協作工作。
叢集中,多個工程相互通訊共享資料和任務,可以提供更好的可延伸性和更高的效能。
單機中,所有的資源都被獨佔使用,沒有擴展性和動態性可言。
總之,叢集設計是一種有效的解決方案,可以提高系統的負載能力和可用性,並確定系統的穩定性和一致。
叢集為什麼需要多類組件?
在搭建叢集時,需要注意到這不是一件輕鬆簡單的事情。
為了提供無縫絲滑的服務,必須提高服務品質並組建一個優秀的車隊。
我們需要考慮如何構建一個良好的車隊,這是叢集架構需要解決的問題。
組件 | 說明 |
---|---|
工程節點 | 叢集節點就是一輛輛出租車。 當某個出租車出現了故障,會自動安排其他出租車來代替它的工作,以確定整個車隊仍然正常工作。 帆軟叢集設計避免了主節點的概念,只將第一個加入叢集的節點作為基準節點。每個節點都平等地提供服務和進行管理操作。 每個節點都是一個可以獨立運作的工程,負責處理使用者的請求,處理生成報表的任務和管理其他組件的工作。叢集節點間透過一系列的網路協定和服務進行通訊和協作。 |
負載均衡 | 負載均衡就像出租車隊的調度中心,用於協調和分配所有的工作和請求。 在接待客戶時,負載均衡作為統一入口,負責對接客戶,不需要讓客戶一個個查詢司機。 在叢集中,負載均衡用於分配任務到各個節點上,使它們能夠更高效地工作。 負載均衡器會在所有節點之間平衡負載,確定每個節點都分配到足夠的任務並保持忙碌狀態。 |
外接資料庫 | 配置庫,即外接資料庫FineDB,類似於出租車隊的車管所。 它儲存並維護所有車輛和司機的資訊,為每個司機提供相同的車輛裝飾、報價、出行路線等資訊。讓每一輛車都給顧客提供一致的出行體驗。 在叢集中,配置庫用於儲存和維護所有節點的配置資訊和參數,這些參數是為了使叢集節點協調工作而必須合理設定的。 |
狀態伺服器 | 狀態伺服器就像出租車隊的管理中心。 它負責監視和維護車隊的整體狀態,包括車輛和司機的位置,以及服務進度。 在叢集中,狀態伺服器也執行相似的任務。它監視每個節點及整個叢集的運作狀態、記錄日誌和錯誤資訊、協調節點間的通訊和任務分配等。 |
檔案伺服器 | 檔案伺服器類似於出租車隊的儲存倉庫。 它儲存所有與車隊相關的檔案,包括車輛維護記錄、保險單、車輛位置資料等。 在叢集中,檔案伺服器用於儲存和共享叢集中所需的檔案和資料資源,以確定每個節點都可以存取並使用它們。 |
帆軟叢集的架構非常靈活,可以根據不同的業務需求和特點進行配置。想要開啟叢集必須至少滿足以下條件:
1)有1個以上工程節點
2)節點配置了外接資料庫
3)節點配置了狀態伺服器
4)如果有2個以上工程節點,則必須配置檔案伺服器
容器化部署與傳統部署
什麼是容器化部署和傳統部署?
傳統部署:
使用者可以自行準備,或使用帆軟封裝的部署包,搭建最普通的工程架構,即「FineReport工程+jdk環境+tomcat中間軟體」
容器化部署:
將應用“容器化”的程式,就是讓應用能夠運作在 Docker 容器或類似技術中,它們能將作業系統環境和應用封裝在一起(完整的系統鏡像)。
由於容器能給應用提供近似於完整系統的環境,這就為在不修改,或者少量修改應用的情況下,對應用的部署進行現代化改造提供了一種思路。
這也是應用的架構持續能保持“雲友好”的基礎。
容器化部署的優勢
相比於傳統部署架構,容器化部署可大幅降低客戶的維護成本和資源成本。
1)維護成本低
每個工程的環境相互隔離,出現異常時影響範圍小。
升級、災備、回滾方便。
2)資源成本低
多叢集管理、多租戶、微服務化,更高資源使用率。
資源彈性伸縮。
容器化部署和傳統部署的差別
容器在整個應用程式生命週期工作流中提供以下優點:隔離性、可攜性、靈活性、可伸縮性和可控性。
最重要的優點是可在開發和營運之間提供隔離。
對比項 | 傳統方式部署 | 容器化部署 |
---|---|---|
JVM初始配置 | 需要自行手動修改 Tomcat 配置檔案或其他容器對應配置檔案 大部分使用者可能不會完全配置,導致後續業務上出現異常 | 預設已經在鏡像中配置好了常用的所有jvm參數,避免大多jvm參數造成的問題 yaml檔案中可以單獨配置Xmx記憶體上限 |
負載均衡 | 需要單獨安裝 Nginx 或其他負載軟體,並進行轉發配置 存在使用者可能缺少很多配置,導致某些業務出現異常 可以根據需要配置keepalived+nginx的高可用架構 | 一鍵部署時,預設自動安裝好nginx且已自動配置好(不支援其他負載) 避免因客戶自行配置錯誤或缺失導致的問題 |
硬體要求 | 雖然有推薦,但沒有強制 | 強制要求所有節點至少500G磁碟空間和16G記憶體 防止在不適合的硬體環境中部署工程,埋下隱患 |
組件要求 | 沒限制,所有產品支援的組件都可以配置 | 沒限制,所有產品支援的組件都可以配置 同時支援mysql、redis和minio的部署 |
作業系統要求 | 基本無限制 | 支援 amd64 架構的 Linux 系統 centos7.3 以下版本不支援 ubuntu18 以下版本不支援 防止因作業系統版本過低,導致工程運作出現問題 |
防火牆要求 | 需要對應伺服器開放使用到的埠即可 | 必須開放所有節點所有組件使用的埠,否則無法部署 確定不因埠問題導致工程運作異常 |
單機部署 | 不配置外置庫和其他組件的情況,上傳部署包直接啟動即可 否則需要單獨配置外置庫和組件以及需要的環境、如jdk | 本機root使用者可以一鍵部署 支援在yaml檔案中配置相關節點和組件資訊後部署 支援透過yaml檔案配置使用者原有的組件 |
權限要求 | 需要保證檔案權限 | 普通使用者需要sudo權限(已經安裝好docker,且使用者屬於docker使用者組則無需權限) cp tar rm groupadd gpasswd groups dockerd systemctl(docker服務開機自啟需要,不強制) |
web容器配置修改 | 修改如tomcat目錄下的配置檔案後重啟tomcat | 可以透過維運平台實現前端修改 |
jvm參數修改 | 直接修改對應檔案即可 | 可以透過維運平台實現前端修改 |
環境影響 | 使用受到各種環境影響,如:jdk、glibc、系統字體、系統語言、系統時間等都可能造成某些業務問題 | FR/BI應用都使用docker容器部署,環境統一,只要能支援部署,基本沒有環境影響 |