面試最后被問到,你用過那些中間件??


面試最后被問到,你用過那些中間件???

什么是中間件?

中間件是一種獨立的系統軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源。中間件位於客戶機/ 服務器的操作系統之上,管理計算機資源和網絡通訊。是連接兩個獨立應用程序或獨立系統的軟件。相連接的系統,即使它們具有不同的接口,但通過中間件相互之間仍能交換信息。

執行中間件的一個關鍵途徑是信息傳遞。通過中間件,應用程序可以工作於多平台或 OS 環境。

中間件是介於操作系統和應用軟件之間,為應用軟件提供服務功能的軟件,有消息中間件,交易中間件,應用服務器等。由於介於兩種軟件之間,所以,稱為中間件。

為什么使用中間件

 具體地說,中間件屏蔽了底層操作系統的復雜性,使程序開發人員面對一個簡單而統一的開發環境,減少程序設計的復雜性,將注意力集中在自己的業務上,不必再為程序在不同系統軟件上的移植而重復工作,從而大大減少了技術上的負擔。

中間件帶給應用系統的,不只是開發的簡便、開發周期的縮短,也減少了系統的維護、運行和管理的工作量,還減少了計算機總體費用的投入。

主要中間件的分類

1. Hadoop

當一個大的任務由一台機器在規定的時間內不能完成時,人們就要采用分布式計算,即很多台機器聯合起來共同完成任務。換句話說,就是把大任務拆分成許多個小任務,然后再把這些小任務分配給多台計算機去完成。參與計算的多台計算機組成一個分布式系統,需要運行一系列的分布式基礎算法。

Hadoop 就是一個分布式計算平台,用 Java 語言開發,包含 Common、MapReduce 和 HDFS 三個核心部件(HDFS 和 MapReduce 是最核心的兩個部件)。其中:

  • Common 為 Hadoop 的其他項目提供了一些常用工具,主要包括系統配置工具 Configuration、遠程過程調用 RPC、序列化機制和 Hadoop 抽象文件系統等。
  • MapReduce 是處理海量數據的計算模型。
  • 而 HDFS 用於存儲海量數據,它具備高度容錯性,能在低成本的通用硬件機器上穩定運行。


Hadoop 實現了分布式計算中的基礎算法(如一致算法、選舉算法、故障檢測、快照等),同時為用戶提供了編程和命令接口。程序員調用這些函數能輕松寫出分布式應用程序,我們都知道,如果一切從頭開始,要完成一個分布式程序的編寫是異常艱難的。

Hadoop 在海量非結構化數據處理方面能充分展示它的優勢,如消費者購買行為分析、商品推薦、關鍵詞檢索、信貸風險評估等。

如圖 1 所示,Hadoop 其實就是一個分布式計算平台,它“覆蓋”在操作系統之上,向上提供函數調用(API)和命令接口,在水平方向完成分布式系統的基礎算法。作為編程人員和用戶,只要了解 API 和命令即可。

Hadoop
圖 1  Hadoop


基於 Hadoop 平台衍生出來的開源項目主要有 Yarn、HBase、Hive、ZooKeeper、Avro、Sqoop、Mahout、Crossbow 等。

以 Hadoop 為基礎的生態目前已經成為大數據的標准方案,被廣泛用於金融、市場、電信、交通等行業的海量數據分析,在即將到來的大數據時代,它將會發揮更大的作用。

在中國,很多行業(如銀行、電信、移動、電力、石油、交通等)沉淀了大量的業務數據,對這些海量數據進行挖掘和分析,將會帶來巨大的價值。

用 Hadoop 構建的應用實例對於計算資源的消耗具備兩個明顯的特征:

  • 資源需求大:表明 Hadoop 需要大量的存儲、計算和網絡帶寬。
  • 資源需求具備季節性:表明除存儲需求是經常性占用外,在運行 Mapreduce 時才需要大量的計算和網絡資源,而分析大量數據的工作並不是經常性的——稱為季節性


因此,雲計算是大數據天生的計算資源供應途徑,雲計算的資源彈性很好地滿足了大數據的季節性計算資源需求。也就是說,大數據是雲計算經典的應用案例。當然,也可以按照大數據對計算資源的波峰需求靜態配給計算資源,但是這種方案會造成資源的巨大浪費。

2. LVS

LVS 是 Linux Virtual Server 的首字母縮寫,意為 Linux 虛擬服務器,即把許多台物理 Linux 計算機邏輯上整合成一台超級計算機,對用戶來說感覺只有一台計算能力很強的服務器,如圖 2 所示。

LVS 就是一個由軟件實現的負載均衡器,工作在網絡 OSI 的第四層(應用層),是中國人章嵩開發的,代碼已經並入了 Linux 內核。利用它,再加上一台廉價的計算機,就能構建一台企業級的負載均衡器。而那些外國大公司的負載均衡器,售價都要十幾萬元,甚至幾十萬元,便宜的也要幾萬元,LVS 出來后,這些產品都不得不降價。

負載均衡器的作用就是把任務分配給最合適的服務器。比如一個大型購物網店,有 100 台同樣配置的服務器在運行,如果某一時刻有 10 萬用戶在線購物,那么通過負載均衡器,每台服務器差不多承擔 1000 個在線購物用戶。

LVS 的官網網站是 http://www.linuxvirtualserver.org。另外,兩個較為流行的第七層負載均衡器是 Nginx 和 HAProxy,針對應用做均衡,所以能適應的負載種類沒有 LVS 多。

LVS原理圖
圖 2  LVS原理圖

3. Linux-HA

也許有讀者會問:“負載均衡器本身故障怎么辦?”是的,如果負載均衡器出現故障,那么整個系統(如網店)將會癱瘓。所以人們開發了各種集群軟件,如 Linux-HA 和 Keepalive 等,而微軟干脆就在 Windows 服務器版中集成故障轉移集群軟件。

集成故障轉移集群軟件的核心思想是,實時檢測故障機器並及時讓好的機器接管工作,對外提供高可用性。Linux-HA 意為 Linux 高可用性項目,此項目具體包含如下幾個組件。

名稱 作用
Heartbeat 負責維護集群中各節點的信息及它們之間的心跳通信。
Pacemaker 集群資源管理器,是核心組件,客戶端通過 Pacemaker 來配置、管理並監控整個集群。此組件的社區網站為 http://clusterlabs.org/。OpenStack 高可用性部署實例中一般都采用 Pacemaker 和 HAProxy。
Resource Agent 為用於控制服務啟停、監控服務狀態的腳本集合,本地資源管理器(LRM)調用這些腳本來啟動、停止、監控各種集群資源。
Cluster Glue 包含一套函數庫和工具,在集群棧中,除集群消息傳輸(由 Heartbeat 承擔)、集群資源管理(由 Pacemaker 承擔)和資源代理(由 Resource Agent 承擔)功能外,其他功能都由 Cluster Glue 來完成。它包含的兩個主要部分是 LRM 和 Stonith,前者是本地資源管理器,后者的任務是隔離故障機器。

通過心跳信號(Heartbeat)檢測故障,一台好的計算機會不斷向其他計算機發送心跳信號,也會接收其他計算機發送過來的心跳信息。當在規定的時間內沒有收到對方計算機的心跳信號時,就啟動應急預案,進一步確認故障並准備接管那台計算機的任務。

例如,我們采用兩台 LVS 計算機,並分別安裝和配置 Linux-HA,一台 LVS 計算機作為工作機,另一台作為備份機,兩台 LVS 計算機互相監督對方的運行狀態。當工作機故障時,備份機接管負載均衡任務並報警。相反,當備份機出故障時,只報警,提醒技術員維修備份機。

兩台LVS計算機同時出故障是比較糟糕的情況,不過這種情況發生的概率很小,除非機房斷電或者遭到雷擊。對於一些非常關鍵的應用,可以增加參與負載均衡的服務器數量來提高可靠性,如民航飛機上采用 5 台服務器。

4. 靜態網站服務器

我們瀏覽一家公司的網站時,很可能就是跟那家公司服務器上的 Apache 程序打交道,網頁瀏覽器與 Apache 成了標准的 C/S 模式,瀏覽器是客戶端,而 Apache 是服務端。Apache 首先把主頁對應的文件 index.html 發給我們,我們看到主頁內容后,點擊主頁上的某個鏈接,它又把該鏈接對應的文件發給我們,過程如圖 3 所示。

訪問靜態網頁的過程
圖 3  訪問靜態網頁的過程


配合 PHP 引擎,Apache 也支持 PHP 動態網頁。過程為:

1)當 Apache 收到用戶要瀏覽的 PHP 文件后,把這個 PHP 文件發給 PHP 執行引擎。

2)PHP 執行引擎執行該 PHP 文件,產生一個臨時的靜態網頁文件並發回給 Apache。

3)最后 Apache 把這個臨時的靜態網頁文件發給用戶。

采用 Perl、Python 和 Ruby 腳本語言編寫的動態網頁,其工作過程與 PHP 類似。

Apache 是最流行的開源網站服務器,在世界排名前 100 萬的網站中,有 60.6% 的網站采用 Apache;在排名前 1000 的大型網站中,Apache 占到了 34.5%,而 Ngnix 占到了 34.9%,略勝於 Apache。

5. 動態應用服務器

開源的動態應用服務器有 JBoss、Tomcat、Geronimo、JOnAS,關於這些項目更詳細的介紹,請參考相應的官方網站。

  • 一般本地開發的話,小項目,或者是個人開發建議使用tomcat。
  • linux系統建議使用jetty或apache hpptd
  • 大型的項目就用JBOSS或webloigc
  • 大項目或者商業項目一般采用:weblgoic/webshere,其他的還有jboss、glasshfish等
  • 一些示例項目或者小項目常采用jetty
  • tomcat , jboss, weblogic, websphere 一般項目tomcat就可以了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM