zetavg/zh-tw-wikipedia huggingface dataset:
Aout

**a.out** 是舊版類 Unix 系統中用於執行檔、目的碼和後來系統中的函式庫的一種檔案格式，這個名稱的意思是**組譯器輸出**。

儘管目前大多數類 Unix 系統都已改用 ELF 格式，不再採用 _a.out_ 格式，但編譯器和連結器依然會在使用者未指定檔名時，將輸出檔案取名為「a.out」。

## 應用

在 UNIX 第一版中，就出現了給 PDP-7 和 PDP-11 用的 _a.out_ 格式。之後它被 UNIX System V 中的 COFF 所取代，而 COFF 最後也被 SVR4 中的 ELF 格式所取代。

儘管 BSD 曾經沿用了一段時間的 _a.out_ 格式，但較新的 BSD 系統都已切換到 ELF。NetBSD/i386 在 1.5 版中正式從 _a.out_ 切換到 ELF，FreeBSD/i386 則是在 2.2 到 3.0 的轉換中切換到 ELF 的。

_a.out_ 格式對除錯資訊的支援是由符號表中稱作「stabs」的特殊項實現的。許多 COFF 和 ELF 變體中也用到了 stabs 格式。

Linux 在 1.2 版核心之前也曾使用 _a.out_ 格式（實驗性的 1.1.52 版中加入了對 ELF 的支援），在此之後也被 ELF 取代了。 Linux 之所以轉向 ELF，或多或少是因為在此平台上構建一個 _a.out_ 格式的函式庫所需的複雜性過高：因為 Linux 中 _a.out_ 的 ld.so 不能重定位共享函式庫，所以需要一個中央機構來註冊各個函式庫的虛擬位址域。一些 BSD 變體在 Linux 被迫轉向 ELF 之後仍然用了很久的 _a.out_ 格式，因為相比於 Linux，BSD 的 _a.out_ 略微更靈活一些。由於 a.out 格式的相關代碼已經老舊並缺乏維護，而且已經幾乎沒有使用 a.out 格式的存在，5.1 版核心決定移除相應的功能支援。

MINIX 3 仍將 _a.out_ 作為二進位檔案的格式，但其不支援共享函式庫。

## 格式

_a.out_ 執行檔通常是以下幾種變體之一：OMAGIC、NMAGIC、QMAGIC 或 ZMAGIC。

**OMAGIC**
: OMAGIC 格式在檔案頭後有連續段，沒有文字和資料的分離。也被用作目的檔格式。

**NMAGIC**
: NMAGIC 格式與 OMAGIC 相像，但資料段出現在文字段結束後的下一頁，且文字段被標為唯讀。

**ZMAGIC**
: ZMAGIC 格式加入了對按需分頁的支援，代碼段和資料段的長度需要是頁寬的整數倍。

**QMAGIC**
: QMAGIC 二進位檔案通常被載入在虛擬位址池的底端，用以通過段錯誤擷取對空指標的解除參照。_a.out_ 頭部與文字段的第一頁合併，通常會省下一頁的記憶體。

**CMAGIC**
: 舊版的 Linux 使用此格式來存放核心轉儲。

_a.out_ 檔案包含至多七節，順序如下：

**執行頭部**
: 包含核心將二進位檔案載入入記憶體並執行所需的參數，也包含對動態連結器 ld 的指引。僅有本節是必須出現的。

**文字段**
: 包含執行時被載入記憶體的機器碼和相關資料，可能是唯讀的。

**資料段**
: 包含已初始化的資料，總是可寫的。

**文字重定位**
: 包含連結編輯器在合併二進位檔案時修改文字段指標的記錄。

**資料重定位**
: 與文字重定位一節類似，但是給資料段指標用的。

**符號表**
: 包含連結編輯器用於交叉參照不同二進位檔案中變數和函式（符號）的記錄。

**字串表**
: 包含對應於符號表的字串。

## 參見

* Portable Executable
* ELF
* Vasm，一個自由的組譯器

## 參考資料

## 外部連結

* a.out 格式
* a.out 格式的 Unix 手冊頁
Ap

**AP** 可以指：

* 美國聯合通訊社（Associated Press），著名國際通訊社。
* 大學先修課程（Advanced Placement），由美國大學理事會贊助的高中先修性大學課程。
* 無線接取器（Access point，又稱「無線網路基地台」），網絡設備，連接無線網絡和有線網絡的乙太網裝置。
* 愛彼（Audemars Piguet），瑞士愛彼 AP 時尚。
* 自動駕駛（Autopilot）
* 應付帳款（Accounts payable），會計學專有名詞。
* 阿斯科利皮切諾省（Provincia di Ascoli Piceno），義大利馬爾凱的一個省。
* 香港九龍巴士車隊之中的 Neoplan Centroliner 型號巴士車隊編號。
* 阿馬帕（Amapá）是巴西的一州。
* 心絞痛（Angina pectoris）
* 等差數列（Arithmetic Progression）
* 氣壓（Atmospheric pressure）
* 應用物理學（Applied physics）
* 應用心理學（Applied psychology）
* 過硫酸銨（Ammonium persulfate）, 提供自由基，在促凝劑 TEMED 的作用下使丙烯醯胺和甲叉丙烯醯胺聚合。
* 穿甲彈（Armor Piercing）
* 妊娠（Ante Partum）
* JR 北海道千歲線機場支線的編號，目前只用於新千歲機場車站。
* 動作電位 （Action potential）
ApJ

**天文物理期刊**（**The Astrophysical Journal**）是在天文學及天體物理學領域重要的研究期刊，於 1895 年創刊，至 2008 年底都由美國芝加哥大學出版社發行；2009 年 1 月起改由英國物理學會出版社發行。編輯部附屬美國天文學會之下，每月出版三冊，刊載的內容主要為最新的天文物理發展、發現、及學說。

## 歷史與內容沿革

許多 20 世紀著名的天文學上的發現首先都是登載在本期刊上，也發表著一些近年來的重要研究報告如：類星體、脈衝星、中子星、黑洞、太陽及星際磁場、X 射線、與星際物質。本期刊由喬治・海爾與詹姆士・愛德華・凱勒（James Edward Keeler）二位人士創辦於 1895 年。

自 1953 年開始《天文物理期刊增刊系列》雙月刊與《天文物理期刊》於 1953 年起同時發行，增刊的發行主要是對於《天文物理期刊》上的文章能有所實質上的、及擴充性的支援，且《天文物理期刊增刊系列》內容含有非常多在天文學文獻之中經常被引用的文章。

《天文物理期刊》內另附屬《天文物理期刊通訊》（The Astrophysical Journal Letters）是做為即時性事件發表用。

## 曾任編輯的知名天文學家

* 喬治・海爾（1895-1902）
* 蘇布拉馬尼揚・錢德拉塞卡 (1952-1971)

## 參考資料

## 參見

## 外部連結

* 天文物理期刊網站 （頁面存檔備份，存於網際網路檔案館）
* 天文物理期刊增刊系列 （頁面存檔備份，存於網際網路檔案館）
Apa

**APA** 可以指：

## 學會

* 美國精神醫學學會（American Psychiatric Association）
* 美國心理學會（American Psychological Association）
  * APA 格式，起源於該學會的一種撰寫格式

## 娛樂與文化

* 亞克姆私人軍隊（ARCAM Private Army）， 《轟天高校生》中的組織
* 香港演藝學院（The Hong Kong Academy for Performing Arts）
* apa，南德內語支（除納瓦荷語）的 ISO 639 代碼
* APA 集團，一家日本酒店集團

## 其他

* 原發性高醛固酮症（Aldosterone-Producing Adenoma）

## Apa

* 父親 (1966 年電影)（匈牙利語：_Apa_），1966 年匈牙利電影
* 阿帕・謝爾巴（Apa Sherpa），尼泊爾夏爾巴人，著名珠穆朗瑪峰攀登者
Apache-2.0

**Apache 授權條款**（英語：Apache License），是一個由 Apache 軟體基金會釋出的自由軟體授權條款，最初為 Apache http 伺服器而撰寫。Apache 授權條款要求被授權者保留著作權和放棄權利的聲明，但它不是一個反著作權的授權條款。

此授權條款最新版本為「版本 2」，於 2004 年 1 月釋出。

Apache 授權條款在 Apache 社群內外被廣泛使用。Apache 基金會下屬所有專案都使用 Apache 授權條款，許多非 Apache 基金會專案也使用了 Apache 授權條款：據統計，截至 2012 年 10 月，在 sourceforge 上有 8708 個專案使用了 Apache 授權條款。

## 版本歷史

1.0 版是最原始的 Apache 授權條款，只被用在舊版的 Apache 軟體內（像是 Apache Web Server 1.2）。

1.1 版在 2000 年由 Apache 軟體基金會公佈：相較於 1.0 最主要的改變在於「NOTICE 條款」（在 1.0 的第三節），衍生產品只需要在檔案裡註明，而不像 1.0 需要在所有的地方註明。

2004 年 1 月，Apache 軟體基金會公佈了 2.0 版。

## 授權條件

Apache 授權條款是寬容的，因為它不會強制衍生和修改產物使用相同的授權條款進行釋出（與一些著作權授權條款不同，參見比較）。但它仍然要求對所有未修改的部分應用相同的授權條款，並且在每個授權檔案中，必須保留再分發代碼中的任何原始著作權，專利，商標和歸屬通知（不需要包括任何部分的衍生作品）；並且在每個更改的授權檔案中，都必須添加一條通知，說明對該檔案進行了更改。

如果聲明文字檔案作為原始作品釋出的一部分包含在內，則衍生作品必須在包含該通知文字檔案的可讀副本，可以是文件或顯示在軟體中。

聲明檔案的內容不會修改授權條款，因為它們僅用於提供資訊，並且可以在授權條款文字中添加更多屬性聲明，前提是這些聲明不能被理解為修改授權條款。修改可能有適當的著作權聲明，並可能為修改提供不同的授權條款。

除非另有明確規定，否則授權條款持有者向授權者提交的任何文稿將根據授權條款的條款進行，沒有任何條款和條件，但這並不排除與授權者有關的這些貢獻有單獨的協定。

## 與 GPL 的相容

Apache 軟體基金會與自由軟體基金會都同意 Apache 授權條款屬於自由軟體授權條款，且相容於第三版的 GNU 通用公眾授權條款；不過，雙方也都同意，第一版與第二版的 GNU 通用公眾授權條款並不相容於 Apache 授權條款。

## 參考文獻

## 外部連結

* （英文）Apache 授權條款（頁面存檔備份，存於網際網路檔案館）
ApacheBench

**ApacheBench** 是一個指令列程式，專門用來執行網站伺服器的運行效能，特別是針對 Apache 網站伺服器。這原本是用來檢測 Apache 網站伺服器能夠提供的效能，特別是可以看出 Apache 能提供每秒能送出多少網頁。

ApacheBench( ab ) 工具程式是標準 Apache 網站伺服器發佈的一部份，跟 Apache 網站伺服器一樣，也是免費軟體，並可以用 Apache 許可證 的規範下散佈此軟體。

## 偵測 ApacheBench

ApacheBench 所使用的 User Agent 字串如下：

ApacheBench/MAJV.MINV

其中 MAJV and MINV 分別代表此程式的主要版本編號與次要版本編號，它通常沒有被網站紀錄分析軟體正確的分類，例如說：Webalizer 或 AWStats，所以若你執行 ApacheBench 可能會影響到你原本分析流量紀錄的報表。

## 相關連結

* Apache HTTPD official website（頁面存檔備份，存於網際網路檔案館）
* Manual page for the 'ab' tool（頁面存檔備份，存於網際網路檔案館）
Apache_2

**Apache HTTP Server**（簡稱 **Apache**）是 Apache 軟體基金會的一個開放原始碼的網頁伺服器軟體，可以在大多數電腦作業系統中運行。由於其跨平台和安全性，被廣泛使用，是最流行的 Web 伺服器軟體之一。它快速、可靠並且可通過簡單的 API 擴充，將 Perl／Python 等直譯器編譯到伺服器中。

## 歷史

Apache 起初由伊利諾大學香檳分校的國家超級電腦應用中心（NCSA）開發。此後，Apache Httpd 被開放原始碼團體的成員不斷的發展和加強。Apache Http 網站伺服器擁有牢靠可信的美譽，已經在全球超過半數的網站中被使用－特別是幾乎所有最熱門和瀏覽量最大的網站。例如維基百科網站的伺服器就使用了 Apache。

剛開始發展時，Apache 只是網景網頁伺服器（現在是 Sun ONE）之外的開放原始碼選擇之一。慢慢地，它開始在功能和速度超越其他基於 Unix 的 HTTP 伺服器。到了 Apache 2.x 的時代，實際效率又比 Apache 1.x 更快，2.x 比 1.x 能同時服務更多的網頁連線數。

1996 年 4 月以來，Apache 一直是網際網路上最流行的 HTTP 伺服器：1999 年 5 月它在 57% 的網頁伺服器上運行，到了 2005 年 7 月這個比例上升到了 69%。在 2005 年 11 月最風光的時候達到接近 70% 的市佔率，不過在部份擁有大量域名的主機域名商轉換為微軟網際網路資訊服務平台後，Apache 市佔率近年來呈現些微下滑。同時搜尋引擎巨擘 Google 自己的網頁伺服器平台 Google 網頁伺服器推出後（也可說是一種修改版的 Apache），再加上 nginx、Lighttpd 等輕量化網頁伺服器軟體在市場上有一些能見度，這些因素都反應在整體網頁伺服器市佔率的消長，Apache 的市佔率就隨之滑落。

根據 Netcraft 在 2009 年 12 月的最新統計數據，Apache 的市佔率已經降為 53.67％，網際網路資訊服務降為 18.26％，Google 網頁伺服器 13.53％，nginx8.75％。儘管如此，Apache 及其各種分支版本仍舊是當前網際網路市場上，市佔率最高的網頁伺服器軟體。

2020 年 4 月，Netcraft 估計在全球最繁忙的一百萬個網站中，使用 Apache 的有 29.12%，使用 Nginx 的有 25.54%; 而 W3Techs 的數據則顯示，在全球最繁忙的一千萬個網站中，使用阿帕契族的有 39.5%，使用 Nginx 的有 31.7% 。

## 命名

作者宣稱因為 Apache 這個名字好記，所以才在最初選擇它，但是流傳最廣的解釋是（也是最顯而易見的）：這個名字來自於一個事實：當 Apache 在 1995 年初開發的時候，它是由當時最流行的 HTTP 伺服器國家超級計算應用中心超文字傳輸協定守護程式 1.3 的代碼修改而成的，因此是「一個修補的（a patchy）」伺服器。然而，在 Apache 伺服器官方網站的 FAQ 中是這麽解釋的：「Apache 這個名字是為了紀念名為 Apache 的美洲原住民印第安人的一支，眾所周知他們擁有高超的作戰策略和無窮的耐性。」貝倫多夫說：「我選擇阿帕契這個名字是取其積極含義。阿帕契族是最後一個屈服於美國政府的民族。當時我們擔心大公司遲早會參與競爭並『教化』這塊最早的網路之地，所以在我看來，阿帕契是個很好的名稱，也有人說這個詞一語雙關 - 因為正如 Apache（與 "a patchy" 諧音）的名字所表明的那樣，他們確實是在給伺服器打修補程式。」無論如何，Apache 2.x 分支不包含任何 NCSA 的程式碼。

## 特性

Apache 支援許多特性，大部分通過編譯的模組實現。這些特性從伺服器端的程式語言支援到身分認證方案。一些通用的語言介面支援 Perl，Python，Tcl， 和 PHP。流行的認證模組包括 mod\_access，mod\_auth 和 mod\_digest。其他的例子有 SSL 和 TLS 支援（mod\_ssl），代理伺服器（proxy）模組，很有用的 URL 重寫（由 mod\_rewrite 實現），客製化紀錄檔檔案（mod\_log\_config），以及過濾支援（mod\_include 和 mod\_ext\_filter）。Apache 紀錄檔可以通過網頁瀏覽器使用免費的指令碼 AWStats 或 Visitors 來進行分析。

## 2.x 版本

Apache 的 2.x 版本核心在 Apache 1.x 版本之上作出了重要的加強。這包括：多執行緒，更好的支援非 UNIX 平台（例如 Windows），MPM，新的 Apache API，以及 IPv6 支援。

## 評價

* 《PC Magazine》2004 年 8 月評出了近 30 年以來的 10 款最佳軟體產品。他們其中或者是有過最輝煌的歷史，或者是最具創意。其對 Apache 的評價是：第三名：Apache（1995 年推出），目前已經演變成了「LAMP」，即 Linux、Apache、MySQL 和 PHP 的聯合體。這是一個開放原始碼軟體項目，已經對微軟的「.NET」戰略構成嚴重威脅。尤其是 Apache 網路伺服器，讓使用者充分體驗到開放原始碼軟體的穩定性、可靠性和可定製性。
* Apple.com 評價 Apache 時說：Apache 是伺服器軟體始終不斷進化的大型元件，它免費但又是無價之寶。Apache 是在開源運動中出現的絕對珍品，因為不屬於個人專利而是對公共免費。一旦擁有這些原始碼，程式員能夠自由完成所想 —— 能在其它程式員接替工作時被賦予同樣的權限來改變和修改自己的原始碼。

## 註釋

## 參考文獻

## 外部連結

* Apache 伺服器官方網站（頁面存檔備份，存於網際網路檔案館）
* Apache 軟體基金會官方網站（頁面存檔備份，存於網際網路檔案館）
Apache_AXIS2

**Apache Axis2** 是一個 Web 服務的核心支援引擎。AXIS2 對舊有的 AXIS 重新設計及重寫，並提供兩種語言 Java 及 C 的開發版本。

事實上 AXIS2 不只為 WEB 應用程式提供 Web 服務的介面，而且它也可以作為一個單獨的伺服器看待，而且很簡單就能跟 Apache Tomcat 整合，目前 AXIS2 的最新版本是 1.6.2。

## AXIS2 項目

Apache AXIS2 是一個 SOAP（"Simple Object Access Protocol 簡單物件存取恊定"）的實作並已經提交 W3C。

來自 W3C 的規格：

"SOAP 是一個輕量級協定使一個有結構好的訊息（well-formated）在分佈式環境裡裡互相交換，它是基於 XML 協定
包括三部份的：
1 定義一個信封框架描述信封內的是什麼訊息和怎麼處理它。
2 一套編碼規則使應用程式能夠定義 datatypes 以表達訊息。
3 以及如何恊調及說明遠端程式調用和作出回應。"

這個 AXIS2 項目是基於 Apache SOAP 計劃。

## 為什麼要 AXIS2

新的架構是在 2004 年 8 月的首腦會議在斯里蘭卡首都科倫坡提出的。新結構的 axis2 是建築在 axis1.x 比較 axis1, Axis2 以更加靈活，高效和更好的組態。一些好的觀念亦從 axis 1.X 被儲存在新的結構中。阿帕奇 axis2 不僅支援 SOAP1.1 和 SOAP1.2，而且它也對於 REST 風格的 Web 服務也有綜合性的支援，相同的業務邏輯實作可以同步利用 WS\* 式的介面以及 REST 介面。

阿帕奇 axis2 較舊的版本是更有效率，更加模組化和更多的 XML 類型。它是經過精心設計，支援輕鬆添加外掛程式 "模組 module"，以提升現有的功能特徵，例如安全性和可靠性，模組現有或正在發展的包括：

- WS 可靠訊息服務由 Apache sandesha2 支援
- WS-Coordination and WS-AtomicTransaction 由 Apache Kandula2 支援
- WS-Security 由 Apache Rampart 支援 
- WS-Addressing 已包括作 axis2 在為核心模組

Axis2 有許多新的特點，以加強對行業規範的實施，主要點如下：

* 速度：Axis2 使用自己的物件模型和 stax（串流 API 的 XML）的來解析，比較早版本的 Apache AXIS2 以達到更明顯的速度。
* 低記憶體：Axis2 設計保持了低記憶體。
* AXIOM: Axis2 訊息處理有自己的輕量物件模型 AXIOM,，具有可擴展性，高效能及開發方便的優點。
* 熱部署：Axis2 能夠在已建立和運轉時有能力部署 Web 服務。 換言之，新的服務可以添加到系統無需關閉伺服器，乾脆把所需的 WebService 的檔案放入服務目錄，版本和部署模型將自動部署服務以供使用。
* 異步 Web 服務：Axis2 現在支援異步 Web 服務和異步 Web 服務調用並使用非阻塞的客戶端。
* MEP 支援：Axis2 現在是簡便與靈活的支援訊息交換模式（MEP），內建支援 WSDL 的 2.0 定義的基本 MEP。
* 靈活性 - Axis2 構築給開發人的發展完全自由地插入延伸到引擎定製頭處理，系統管理，以及任何你可以想像的東西。
* 穩定：Axis2 界定一套出版介面其變化對比 AXIS 可說改變相對比較慢。
* 面向組件的部署 - 你可以很容易界定重用網路處理器，實施的共同模式處理您的請求，或發給你的夥伴。
* WSDL 的支援：axis2 支援 WebService 描述語言（版本 1.1 和 2.0），讓您輕鬆地建立 STUB 來連結遠端服務，並自動向其他機器說明你的服務部署。
* 新增：Web Services 的多個技術已被納入， 包括 WSS4J 的保安技術 (Apache Rampart),Sandesha 的可靠訊息服務，Kandula 一個 WEB 服務的協調整合，WEB 服務自動傳送。
* 組合和擴展：模組用來加強 AXIS2 延展性，但模組不可以熱部署，因為模組改變 AXIS2 整體行為及制度。

## 相關技術

* Apache Axis
* Web 服務
* Java Web 服務開發架構 - web services framework
* XML 網路服務介面 - RPC/web services framework
* Web 服務參照架構 - Java API for invoking Web services

## 外部連結

* Apache AXIS 主頁（頁面存檔備份，存於網際網路檔案館） Apache 軟體基金會
* Apache Axis2/Java（頁面存檔備份，存於網際網路檔案館） Apache 軟體基金會
* Apache Axis2/C（頁面存檔備份，存於網際網路檔案館） Apache 軟體基金會
Apache_ActiveMQ

**Apache ActiveMQ** 是 Apache 軟體基金會所研發的開放原始碼訊息中間件；由於 ActiveMQ 是一個純 Java 程式，因此只需要作業系統支援 Java 虛擬機，ActiveMQ 便可執行。

## 特色

* 支援 Java 訊息服務 (JMS) 1.1 版本
* Spring Framework
* 叢集 (Clustering)
* 支援的程式語言包括：C、C++、C#、Delphi、Erlang、Adobe Flash、Haskell、Java、JavaScript、Perl、PHP、Pike、Python 和 Ruby
* 協定支援包括：OpenWire、REST、STOMP、WS-Notification、MQTT、XMPP 以及 AMQP

## 參見

* HornetQ － JBoss 社區所研發的訊息中間件

## 註釋

## 外部連結及相關影片

* Apache ActiveMQ 官方網站（頁面存檔備份，存於網際網路檔案館）
* Introduction to Messaging With Apache ActiveMQ（頁面存檔備份，存於網際網路檔案館）示範教學
Apache_Ant

**Apache Ant**，是一個將軟體編譯、測試、部署等步驟聯絡在一起加以自動化的一個工具，大多用於 Java 環境中的軟體開發。由 Apache 軟體基金會所提供。默認情況下，它的 buildfile (XML 檔案) 名為 build.xml。每一個 buildfile 含有一個 <project> 和至少一個預設的 <target>，這些 targets 包含許多 task elements。每一個 task element 有一個用來被參考的 id，此 id 必須是唯一的。

## build.xml 範例

## 參見

* Jakarta 專案
* Apache Maven
* Make

## 外部連結

* Official website of Apache Ant（頁面存檔備份，存於網際網路檔案館）
* Apache Ant wiki
* WinAnt - Windows installer for Apache Ant（頁面存檔備份，存於網際網路檔案館）
* Introduction to Ant (slide show)
* Linguine Maps visualization library will automatically produce easy to read diagrams from Ant build files.
* antro - a profiler for Ant scripts（頁面存檔備份，存於網際網路檔案館）
* Wiki Book on learning Apache Ant
* Ant tutorial（頁面存檔備份，存於網際網路檔案館）
* Ant Automation（頁面存檔備份，存於網際網路檔案館）, a good handy example of automation with Ant.
* A simple Windows GUI for running Ant.
Apache_Arrow

**Apache Arrow** 是一種與語言無關的軟體框架，用於開發處理欄式資料庫的數據分析應用程序。Apache Arrow 包含一個標準化的物件欄內存格式，且能夠表示平面及層級化數據，以便在現代 CPU 和 GPU 硬體上進行高效率的分析操作。這種功能反而會減少或則消除限制使用大型數據集的可行性因素，比如動態隨機存取存儲器的成本、易變性或則物理性的約束。

## 註釋

## 參閱

* 屬性值系統
* 語言無關

## 外部連結

* Apache Arrow （頁面存檔備份，存於網際網路檔案館） project web site
* Apache Arrow GitHub （頁面存檔備份，存於網際網路檔案館） project source code
Apache_Attic

**Apache Attic**（阿帕奇閣樓）是 Apache 軟體基金會的一個專案，為已終止的 Apache 專案提供解決方案。Attic 專案成立於 2008 年 11 月。已退休的專案也可以被保留。

## 目前的子專案

## 參考文獻

## 外部連結

* 專案首頁（頁面存檔備份，存於網際網路檔案館）
Apache_Avalon

**Apache Avalon** 是自 1999 年以來開發的一個電腦軟體框架，為容器（伺服器）應用程式提供一個可重用的組件框架。Avalon 率先使用了如關注點分離和控制反轉（IoC）的設計模式。

到了 2004 年，Avalon 已經成長為多個子專案：

* Excalibur：Apache Excalibur 包含了 Avalon 4.x Framework、Fortress IoC 容器，和幾個 Avalon 相關的組件和實用程式，例如 LogKit 和 Cornerstone 組件集合。
* Loom: 繼 Avalon Phoenix 後，Codehaus Loom 繼續開發一個微核心容器。
* Metro：DPML Metro 專案使用開放式參與軟體模型開發下一代 Merlin 服務平台。
* Castle：一個針對 C# 和.NET 平台的 IoC 框架和容器。基於 C# 的 Avalon 實現。

Excalibur、Avalon 框架於 2010 年 12 月 15 日退休，目前這兩個專案都在 Apache Attic 下。

## 參考文獻

## 外部連結

* Apache Avalon 官方網站（頁面存檔備份，存於網際網路檔案館）
Apache_Avro

**Avro** 是一種遠端程序呼叫和資料序列化框架，是在 Apache 的 Hadoop 專案之內開發的。它使用 JSON 來定義資料類型和通訊協定，使用壓縮二進位格式來序列化資料。它主要用於 Hadoop，它可以為持久化資料提供一種序列化格式，並為 Hadoop 節點間及從客戶端程式到 Hadoop 服務的通訊提供一種電報格式。

它類似於 Thrift，但當資料庫模式改變時，它不要求執行代碼生成程式，除非是對靜態型別的語言。

## 已有 API 的語言

雖然理論上任何語言都可以使用 Avro，但是以下語言有專門為其編寫的 API：

* C
* C++
* C#
* Go
* Java
* Perl
* PHP
* Python
* Ruby
* Scala

## Avro IDL

為進一步支援 JSON 在類型及協定定義中使用，Avro 包含了一種試驗性的替代性支援，它針對一種介面描述語言（IDL）語法，被稱作 Avro IDL。它以前被稱為 GenAvro，它設計了一種語法類似於 C/C++、Protocol Buffers 等的格式，以吸引那些熟悉傳統 IDL 和程式語言的使用者。

## 參見

* 資料序列化格式比較
* Apache Thrift
* Google 的 Protocol Buffers
* Cisco 的 Etch
* ZeroC 的 ICE
* MessagePack

## 參考文獻

## 擴充閱讀

* White, Tom. Hadoop：最终指南. 2010 年 11 月. ISBN 978-1-4493-8973-4.
Apache_Axis

**阿帕奇 Axis** 是一個開源、建基於 XML 的 Web 服務架構。它包含了 Java 和 C++ 語言實現的 SOAP 伺服器，以及各種公用服務及 API 以生成和部署 Web 服務應用。用阿帕奇 Axis 開發者能夠創造可互操作的，分佈式的計算應用。Axis 由 Apache 軟體基金會主持下制訂的。

## Axis Java

當利用 Java 版 Axis 有兩個途徑，以 Java 碼作為 Web 服務。最簡單的一種是使用原生的 jws（Java Web Service 的文件）。另一種方法是使用定製的部署文件。定製部署讓您能自選資源，什麼要予以曝光。

 
參見 Apache AXIS2。

### JWS Webservice 創作

jws 文件包含 Java 類的源代碼要予以作為 Web Service。一個普通的 Java 文件與 jws 文件主要區別是擴展名。另一個區別是，jws 檔案部署源代碼，而不是編譯的類文件。

 

下面的例子是取自 http://ws.apache.org/axis/java/user-guide.html#PublishingWebServicesWithAxis（頁面存檔備份，存於網際網路檔案館）.
它將揭露方法加減類計算器。

#### JWS webservice 的部署

一個 Axis Servlet 的部署，你只需要拷貝 jws 檔案 到伺服器的 Axis 目錄。如果你使用的是 Apache 的 container 如 tomcat。

#### JWS webservice 進入

進入 jws Web Service 是方便使用的 URL"http://localhost:8080/axis/Calculator.jws". 如果您正在運行一個定製配置踞是 tomcat 或者不同的容器中，URL 中可能會不同。

## 相關技術

* Apache Axis2 - 重寫及重新設計的 Axis
* Java 的 Web 服務開發套件 - Java 的 Web 服務開發套件
* XML 界面，對網絡服務 - RPC/web services 技術架構
* Web 服務調用框架 - JavaAPI 引用 Web 服務

## 外部連結

* Apache AXIS Homepage（頁面存檔備份，存於網際網路檔案館） 在 Apache 軟體基金會
* Apache AXIS C++ Homepage（頁面存檔備份，存於網際網路檔案館） 在 Apache 軟體基金會
* [1]（頁面存檔備份，存於網際網路檔案館） Axis-C++ 語言補習班於 Apache 軟體基金會
* Apache Axis2/Java（頁面存檔備份，存於網際網路檔案館） 在 Apache 軟體基金會
* Apache Axis2/C（頁面存檔備份，存於網際網路檔案館）在 Apache 軟體基金會
Apache_Beam

**Apache Beam** 是一個開源統一編程模型，用於定義和執行資料處理管道，包括 ETL、批次處理和流（連續）處理。 Beam 管線是使用提供的 SDK 之一定義的，並在 Beam 支援的一個執行器（分散式處理後端）中執行，包括 Apache Apex、Apache Flink、Apache Gearpump（孵化中）、Apache Samza、Apache Spark 和 Google Cloud Dataflow。

它被稱為「大數據的超級 API」。

## 歷史

Apache Beam 是資料流模型檔案的一種實現。資料流模型基於以前關於 Google 的分散式處理抽象的工作，特別是 FlumeJava 和 Millwheel。

Google 於 2014 年釋出了資料流模型的開放式 SDK，以及在本地（非分散式）和 Google 雲平台服務中執行資料流的環境。

2016 年，Google 向 Apache 軟體基金會捐贈了核心 SDK 以及本地執行程式的實現，以及用於存取 Google 雲平台資料服務的一組 IO（資料連接器）。其他公司和社群成員為現有的分散式執行平台提供了執行器，以及新的將 Beam Runners 與現有資料庫、鍵值儲存和訊息系統整合的 IO。此外，還提出了新的 DSL，以支援 Beam 模型之上的特定領域需求。

### 時間線

## 參見

* Apache 軟體基金會的專案列表

## 參考文獻
Apache_CXF

**Apache CXF** 是一個開源的，全功能的，容易使用的 Web 服務框架。CXF 是兩個項目的結合：由 IONA 技術公司（現在是 Progress 的一部分）開發的 Celtix 和由 Codehaus 主持的團隊開發的 XFire，合併是由人們在 Apache 軟體基金會共同完成的。CXF 的名字來源於 "Celtix" 和 "XFire" 的首字母。

CXF 的關鍵的設計考慮因素包括：

* 前端，如 JAX-WS，與核心代碼的徹底分離。
* 簡單易用，例如，創建客戶端和端點不需標註。
* 高性能，最少的計算開銷。
* 可嵌入的 Web 服務組件：例如可以嵌入到 Spring Framework 和 Geronimo 中。

在面向服務的架構（SOA）基礎設施項目中，CXF 通常和 Apache ServiceMix，Apache Camel 以及 Apache ActiveMQ 一起使用。

## 特性

CXF 支持的特性非常廣泛，但特性主要在以下一些方面：

* 支持的 Web 服務標準包括：
  * SOAP
  * WS-Addressing
  * WS-Policy
  * WS-ReliableMessaging
  * WS-Security
  * WS-SecurityPolicy
  * WS-SecureConversation
* JAX-WS API，用於 Web 服務開發
  * WSDL 優先工具
  * Java 優先支持
* JAX-RS (JSR 311 1.0) API，用於 RESTfulWeb 服務開發
* JavaScript 編程模型，用於客戶端和服務端開發
* Maven 工具
* 支持 CORBA
* HTTP 和 JMS 傳輸層
* 可嵌入的開發：
  * ServiceMix 或其他 JBI 容器
  * Geronimo 或其他 Java EE 容器
  * Tomcat 或其他 Servlet 容器
  * OSGi
* 引用 OSGi 遠程服務實現

## 商業支持

包括 FuseSource（頁面存檔備份，存於網際網路檔案館）在內的軟體廠商提供 CXF 的企業支持。FuseSource 提供一個 CXF 的企業版本，稱作 FUSE Services Framework（頁面存檔備份，存於網際網路檔案館），該版本是經過測試，認證並提供支持的。

## 參見

* Axis Web 服務框架
* JAX-WS RI JAX-WS 規範的參考實現，是 Glassfish 開源 JEE 應用伺服器的一部分，由 Sun 公司支持
* JAX-RS 規範

## 參考文獻

## 外部連結

* Apache CXF 網站（頁面存檔備份，存於網際網路檔案館）
* 企業版 CXF（FUSE）網站（頁面存檔備份，存於網際網路檔案館）
* CXF 的企業支持（頁面存檔備份，存於網際網路檔案館）
* Apache CXF 提交者列表（頁面存檔備份，存於網際網路檔案館）
Apache_Camel

**Apache Camel** 是一個基於規則路由和中介引擎，提供企業集成模式的 Java 對象 (POJO) 的實現，通過應用程式接口（或稱為陳述式的 Java 領域特定語言（DSL））來配置路由和中介的規則。領域特定語言意味著 Apache Camel 支持你在的集成開發工具中使用平常的，類型安全的，可自動補全的 Java 代碼來編寫路由規則，而不需要大量的 XML 配置文件。同時，也支持在 Spring 中使用 XML 配置定義路由和中介規則。

在面向服務的體系結構的項目中，Camel 通常與 Apache ServiceMix, Apache ActiveMQ 以及 Apache CXF 一同使用。

一些獨立的提供商，包括 FuseSource（頁面存檔備份，存於網際網路檔案館），為 Camel 提供企業級的支持。 FuseSource 提供 Camel 的經測試、認證並提供支持的企業級版本，稱作 FUSE Mediation Router（頁面存檔備份，存於網際網路檔案館）。

## 參見

* 企業消息系統
* 面向消息的中間件
* Apache ActiveMQ
* Apache CXF
* Apache MINA
* Apache ServiceMix
* FUSE Mediation Router
* Open ESB
* 企業服務匯流排
* 面向服務的體系結構
* 事件驅動的 SOA

## 圖書

## 外部連結

* Apache Camel 主頁（頁面存檔備份，存於網際網路檔案館）
* Free chapter of Camel in Action（頁面存檔備份，存於網際網路檔案館）
* CamelOne 2012 Conference（頁面存檔備份，存於網際網路檔案館）
* Fuse Mediation Router based on Apache Camel（頁面存檔備份，存於網際網路檔案館）
* Methods & Tools article - Camel, an Open Source Routing Framework（頁面存檔備份，存於網際網路檔案館）
* JDJ article - SOA Made Easy with Open Source Apache Camel
* DZone article - Apache Camel: Integration Nirvana
* Enterprise Integration Patterns with Apache Camel Refcard
* Apache Camel JBI Service Engine
* Apache Apache Qpid（頁面存檔備份，存於網際網路檔案館）
* Talend ESB based on Apache Camel（頁面存檔備份，存於網際網路檔案館）
Apache_Commons

**Apache Commons** 是 Apache 軟體基金會的專案，曾隸屬於 Jakarta 專案。Commons 的目的是提供可重用的、開源的 Java 代碼。Commons 由三部分組成：Proper（是一些已發布的專案）、Sandbox（是一些正在開發的專案）和 Dormant（是一些剛啟動或者已經停止維護的專案）。

## Commons Proper

Commons Proper 的目的是建立和維護可重用的 Java 組件庫。Commons Proper 是一個協同運作與共享的地方，Commons 的開發者努力確保其組件對其他的軟體庫的依賴最少，以便可以輕鬆地部署這些組件。此外，Commons 組件會儘可能的保持其介面的穩定，因而 Apache 使用者以及其他 Apache 專案可以實現這些組件，而無需擔心未來介面的變化。

截至 2006 年 8 月，Commons Proper 上有三十多個專案，分為五大類。

## Commons Sandbox

Commons Sandbox 是 Java 組件開發的工作區，在 Sandbox 中 Commons 的貢獻者協同運作和檢驗那些被未列入 Commons Proper 的專案。Sandbox 專案在 Commons 成員的支援下晉升為 Commons Proper 專案；大量的開發者協同運作強化 Sandbox 專案，直到它們符合推廣的標準。

可在 Commons Sandbox 計畫頁面上檢視當前 Commons Sandbox 專案的列表。

## Commons Dormant

Commons Dormant 是一個當前處於非活動狀態的組件庫。使用者也可以使用這些組件，但必須自己進行組件的構建。一般而言，這些組件不會在近期發布。

可在 Commons Dormant 計畫頁面上檢視當前 Commons Dormant 專案的列表。

## 參見

* Google Guava

## 參考文獻

## 外部連結

* Apache Commons（頁面存檔備份，存於網際網路檔案館）
* Components 計畫頁（頁面存檔備份，存於網際網路檔案館）
* Sandbox 計畫頁（頁面存檔備份，存於網際網路檔案館）
* Dormant 計畫頁（頁面存檔備份，存於網際網路檔案館）
Apache_Cordova

**Apache Cordova**，舊稱 **PhoneGap** 是一款開放原始碼的行動裝置開發框架，旨在讓開發者使用 HTML、Javascript、CSS 等 Web APIs 開發跨平臺的行動裝置應用程式。原本由 Nitobi 公司開發，現在由 Adobe Systems 擁有。

## 發展歷程

最早的 PhoneGap 起步於 2009 年在舊金山召開的 iPhoneDevCamp 大會，Nitobi 的工程師 Brock Whitten、Rob Ellis 和 Andre Charland 在 iOS 系統內架設起 Web 介面和 Objective-C 之間的橋梁，讓開發人員得以使用 HTML5、JavaScript、CSS 等 web 標準技術便捷開發原生程式，實現一次編譯到處執行。其「橋接 Web 與 iPhone SDK 之間縫隙」的理念得到歡迎。

2011 年 10 月 4 日，Adobe 正式宣布收購 Nitobi 軟體。PhoneGap 的代碼貢獻給了 Apache 軟體基金會，但保留了 PhoneGap 的商標所有權，並命名為 Apache Callback。1.4 版釋出後，接著 Apache Callback 的名稱變更為 **Apache Cordova**。Cordova 是街道的名字，在開發團隊附近。Adobe Dreamweaver 5.5 版本為 phonegap 提供開發環境。

早期版本的 PhoneGap 需要使用蘋果電腦來開發 iOS 應用程式，而 Windows Mobile 應用程式則是使用 Windows 平台開發出來的。2012 年 9 月之後，「 PhoneGap Build」服務推出，可以讓程式員將他的原始碼上傳到「雲編譯器」，產生應用程式每一個所支援平台的安裝包。

## 設計理念

PhoneGap 是一個行動裝置的 API 介面集，利用 JavaScript 存取這些介面可以調用諸如攝影機、羅盤等硬體系統資源。配合上一些基於 HTML5、CSS3 技術的 UI 框架，如 jQuery Mobile、Dojo Mobile 或 Sencha Touch，開發者得以快速地開發跨平台 App 而不需要編寫任何的原生代碼。

注意到因為 PhoneGap 本身仍是一個原生程式，為 App 打包時依然需要用到這些系統平台的 SDK。

PhoneGap Framework 可以用多種行動應用程式平台開發，例如：ViziApps、 Worklight、Convertigo、Tiggr 和 appMobi ，也可以選擇 PhoneGap Build 編譯工具。

由於使用 Web 技術，PhoneGap 程式的載入和 UI 介面的反應都比原生的程式慢。Adobe 警告開發者，由於使用 PhoneGap 框架開發的程式執行速度可能會太慢或使用體驗不夠「原生」，而被蘋果應用商店拒絕上架。

## 支援平台

PhoneGap 目前支援的作業系統包含蘋果的 iOS、Google 的 Android、Blackberry、LG 的 WebOS、微軟的 Windows Phone、Nokia 的 Symbian、三星的 Tizen 和 bada、Firefox OS 和 Ubuntu Touch。

## 參見

* 多樣化網際網路應用程式開發框架列表

## 注釋

## 外部連結

* Adobe PhoneGap 官方網站（頁面存檔備份，存於網際網路檔案館）（英文）
Apache_ECharts

**Apache ECharts** 是一個使用 TypeScript 實現的視覺化圖表庫，由 Apache 軟體基金會提供，可以執行在主流桌面及行動瀏覽器上，包括 Internet Explorer 8/9/10/11、Google Chrome、Firefox、Safari 等，其底層依賴向量圖形庫 ZRender。

Apache ECharts 的前身是百度 Echarts。2018 年 1 月 16 日，ECharts 進入 Apache Incubator 進行孵化。2020 年 12 月 16 日，ECharts 在孵化器畢業，成為 Apache 軟體基金會的頂級專案。

## 參考文獻
Apache_Flex

**Apache Flex**（前稱 **Adobe Flex**）是一個基於 AdobeFlash 平台的，用以開發和部署 RIA（Rich Internet Applications）的 SDK（Software Development Kit）。最初由 Macromedia 公司於 2004 年 3 月發布，並且後來由 Adobe 收購，並由 Adobe 於 2011 年將之捐獻給 Apache 軟體基金會，在 2012 年推動成為首要項目。

Flex 3 SDK 在 2008 年以開放原始碼的 Mozilla 公共許可證釋出。因此，可以用通用的集成開發環境開發 Flex 應用，如 IntelliJ IDEA、Eclipse、自由及開放原始碼的 IDE FlashDevelop，以及專屬軟體 Adobe Flash Builder。最新版的 SDK 版本是 4.16.1，採用第 2 版的 Apache 許可證釋出。

## 成因

傳統的程式設計師在開發動畫應用方面存在困難，Flex 平台最初就是因此而產生。Flex 試圖通過提供一個程式設計師們已經熟知的工作流和編程模型來改善這個問題。

Flex 最初是作為一個 J2EE（Java 2 Platform, Enterprise Edition）應用，或者可以說是 JSP（JavaServer Pages）標籤庫而發布的。它可以把運行中的 MXML（Flex 標記語言）和 ActionScript 編譯成 FLASH 應用程式（即二進位的 SWF 文件）。最新版的 FLEX 支持創建靜態文件，該文件使用解釋編譯方式並且不需要購買伺服器許可證就可以在線部署。

Flex 的目標是讓程式設計師更快更簡單地開發 RIA 應用。在多層式開發模型中，Flex 應用屬於表現層。

Flex 採用 GUI 界面開發，使用基於 XML 的 MXML 語言。Flex 具有多種組件，可實現 Web Services，遠程對象，drag and drop，列排序，圖表等功能；FLEX 內建動畫效果和其它簡單互動界面等。相對於基於 HTML 的應用（如 PHP、ASP、JSP、ColdFusion 及 CFMX 等）在每個請求時都需要執行伺服器端的模板，由於客戶端只需要載入一次，FLEX 應用程式的工作流被大大改善。FLEX 的語言和文件結構也試圖把應用程式的邏輯從設計中分離出來。

Flex 伺服器也是客戶端和 XML Web Services 及遠程對象（Coldfusion CFCs，或 Java 類，等支持 Action Message Format 的其他對象）之間通訊的通路。

一般被認為可能是 Flex 替代品的是 OpenLaszlo 和 AJAX 技術。

但在 2014 後重大的變革：由原先 MXML+CSS+AS 的發展路線，另外追加產生 jｓ發展路線，在移動平台發展動盪的 2014 年隨著ＡＩＲ跨平台的支援上，產生了更彈性的變數
目前普遍認為相較於 HTML 更合適在移動平台 App 發展更有前瞻性

## Flex 和 ColdFusion

Macromedia 把一部份 Flex 1.5 的子集嵌入到了它的 ColdFusion MX 7 中間件平台中以供在 Flash 表單中使用。雖然可以使用這個平台來開發 RIA，但是它原來的目的只是為了開發豐富的表單應用，所以這個功能並不為 Macromedia 所支持。

## Flex 應用開發步驟

* 使用 Flash Builder
* 使用一系統預定義組件（窗口，按鈕等）來定義一個開發界面。
* 組織安排組件，現在用戶自定義的界面設計。
* 使用風格和主題來定義可見設計。
* 增加動態動作，如應用程式之間的互動。
* 定義並在需要時連接上一個數據服務。
* 從原始碼轉換成各種平台安裝文件。

## 版本歷史

## 相關術語

* XUL
* Thin client
* XAML
* Flash Player
* OpenLaszlo
* MXML

## 技術郵件列表

* Flexcoders - Flex Developer Mailing List（頁面存檔備份，存於網際網路檔案館）
* ColdFusion Flex List at House of Fusion.

## 參考資料

## 外部連結

* Official Adobe Flex site（頁面存檔備份，存於網際網路檔案館）
* Flex 官方起始頁
* 官方中文 Flex 摘要頁（頁面存檔備份，存於網際網路檔案館）
* 中文 Flex 範例
* CFlex - Community Driven Adobe Flex Developer site（頁面存檔備份，存於網際網路檔案館）
* Flex Authority - Adobe Flex Developer site（頁面存檔備份，存於網際網路檔案館）
* Jesse Warden - Adobe Flex Developer Blog Site（頁面存檔備份，存於網際網路檔案館）
* Renaun Erickson - Adobe Flex Developer Blog Site（頁面存檔備份，存於網際網路檔案館）
* 完全利用 FLEX 開發的線上 GIS 網站（頁面存檔備份，存於網際網路檔案館）
* ReflexUtil（頁面存檔備份，存於網際網路檔案館） - 測試工具 (開源) 運行時 為 Flex
* 緯度網 Flex 知識庫 - 提供圍繞 ActionScript，Flash，Flex 技術開發為主題的問答形知識庫（中文）
Apache_Giraph

**Giraph** 是一個迭代的圖計算系統。
Apache Giraph 是一個 Apache 項目，用於對大數據執行圖形處理。 Giraph 的目的是為了解決大規模圖的分布式計算問題，能夠通過隱藏分布式和並行計算的細節以及提供一套用於描述圖算法的 API，總的來說，Giraph 不僅擁有了相對好的可擴展性，也能夠一定程度降低分布式圖計算的使用門檻。

## 概述

Giraph 計算的輸入是由點和兩點之間直連的邊所組成的圖，例如，點可以表示人，邊可以表示朋友請求。每個頂點保存一個值，每個邊也保存一個值。輸入不僅取決於圖的拓撲邏輯，也取決於定點和邊的初始值。

計算過程由一序列的迭代進行，在 BSP 中叫做 supersteps。每個頂點都 active。在每個 superstep 中，每個 active 的頂點觸發用戶提供的計算方法。這些方法實現了將要輸入的圖中執行的圖算法。直觀說，在設計 Giraph 算法的時候要像頂點一樣思考。計算方法如下：

- 接受上一個 superstep 發送給頂點的消息；

- 用消息、定點和伸出的邊的值，可能導致值被修改，發送消息給其它頂點；

計算方法並沒有直接獲取其它頂點的值以及他們的伸出的邊。頂點之間通過傳遞消息來通信。

在我們的單源最短路徑的例子中，一個計算方法是：

（1）從所有收到的消息中計算最小的值；

（2）確定各個節點的當前值大小；

（3）最小的值被接受作為頂點的值；

（4）值和邊的值沿著每一個外出的邊發送。

```
 public void compute(Iterable<DoubleWritable> messages) {
     double minDist = Double.MAX_VALUE;
     for (DoubleWritable message : messages) {
         minDist = Math.min(minDist, message.get());
     }
     if (minDist < getValue().get()) {
         setValue(new DoubleWritable(minDist));
         for (Edge<LongWritable, FloatWritable> edge : getEdges()) {
             double distance = minDist + edge.getValue().get();
             sendMessage(edge.getTargetVertexId(), new DoubleWritable(distance));
         }
     }
     voteToHalt();
 }
```

## 系統架構

系統架構包括 Master、Worker、以及 Zookeeper。

-Master

Master 實質上運行在 Hadoop 的 MapTask 上， 其主要作用是對輸入圖進行分區、協調 Worker 的活動、維護一份存活的 Worker 列表（包括 Worker 的標識符、地址信息等）以及更新 Job 的狀態。

-Worker

Worker 也同樣運行在 Hadoop 的 MapTask 上，其主要作用是維護已分配圖的狀態。

-Zookeeper

Zookeeper 在 Giraph 中的主要作用是 Master 選舉、命名服務以及協調服務。

## 基礎原理

Giraph 基於 Hadoop 而建，將 MapReduce 中 Mapper 進行封裝，未使用 reducer。在 Mapper 中進行多次迭代，每次迭代等價於 BSP 模型中的 SuperStep。一個 Hadoop Job 等價於一次 BSP 作業。

## 參考資料

## 外部連結

官方網站

Giraph 基礎介紹 - Hama White 的博客 （頁面存檔備份，存於網際網路檔案館）

Giraph 簡介 - Ikroal 的博客
Apache_Groovy

Apache 的 **Groovy** 是 Java 平台上設計的物件導向程式設計語言。這門動態語言擁有類似 Python、Ruby 和 Smalltalk 中的一些特性，可以作為 Java 平台的手稿語言使用，Groovy 代碼動態地編譯成執行於 Java 虛擬機器（JVM）上的 Java 位元組碼，並與其他 Java 代碼和庫進行互操作。由於其執行在 JVM 上的特性，Groovy 可以使用其他 Java 語言編寫的庫。Groovy 的語法與 Java 非常相似，大多數 Java 代碼也符合 Groovy 的語法規則，儘管可能語意不同。
Groovy 1.0 於 2007 年 1 月 2 日釋出，並於 2012 年 7 月釋出了 Groovy 2.0。從版本 2 開始，Groovy 也可以靜態編譯，提供類型推論和 Java 相近的效能。Groovy 2.4 是 Pivotal 軟體贊助的最後一個主要版本，截止於 2015 年 3 月。Groovy 已經將其治理結構更改為 Apache 軟體基金會的專案管理委員會（PMC）。

## 特性

大部分有效的 Java 檔案也是有效的 Groovy 檔案。Groovy 代碼比 Java 代碼更加緊湊，因為它不需要 Java 需要的所有元素。這兩種語言的相似性，讓 Java 程式設計師可以先從熟悉的 Java 語法開始逐步學習 Groovy。
Groovy 特性包括了 Java 中不支援的靜態和動態型別（使用關鍵字 def），運算子多載，提供了 lists（列表）和關聯陣列 (maps) 提供了原生語法，原生支援正規表示式，多型迭代，字串內嵌表達式，添加幫助方法以及 Null 條件運算子，自動空指標檢查（列：`variable?.method()`, 或 `variable?.field`）。

從 Groovy 2 開始，支援模組化（能只根據專案需要添加所需的 jar 包，從而減少 Groovy 庫的大小），使用 JDK7 的型別檢查，靜態編譯，Project Coin 語法增強，多塊模組和持續的效能增強 呼叫動態指令。

Groovy 透過行內文件物件模型（DOM）語法對各種標記式語言（如 XML 和 HTML）的提供原生支援。該功能實現了使用統一簡潔的語法和編程方法來定義和操縱許多類型的異構資料資源。

與 Java 不同的是，Groovy 原始碼檔案可以當作（未編譯的）指令碼執行，如果它含有任何類別定義之外的代碼，或者它是具有 main 方法的類，或者它是 Runnable 或 GroovyTestCase。 Groovy 指令碼在執行之前完成解析，編譯和生成（類似於 Perl 和 Ruby）。這發生在下一個層次，編譯後的版本不會儲存為行程的組件

## 程式範例

下面是來自於 https://web.archive.org/web/20140302111159/http://groovy.codehaus.org/ 的一個範例程式：

## IDE 支援

已經有許多的整合式開發環境支援了該門語言：

* Eclipse，外掛程式 Groovy-Eclipse
* IntelliJ IDEA，預設就支援 Groovy 開發。
* NetBeans 預設支援

## 參考資訊

## 外部連結

* Groovy 官方網站 （頁面存檔備份，存於網際網路檔案館）
* Groovy++ （頁面存檔備份，存於網際網路檔案館）
Apache_HBase

**HBase** 是一個開源的非關係型分散式資料庫（NoSQL），它參考了 Google 的 BigTable 建模，實現的程式語言為 Java。它是 Apache 軟體基金會的 Hadoop 專案的一部分，執行於 HDFS 檔案系統之上，為 Hadoop 提供類似於 BigTable 規模的服務。因此，它可以對稀疏檔案提供極高的容錯率。

HBase 在列上實現了 BigTable 論文提到的壓縮演算法、記憶體操作和布隆過濾器。HBase 的表能夠作為 MapReduce 任務的輸入和輸出，可以通過 Java API （頁面存檔備份，存於網際網路檔案館）來存取資料，也可以通過 REST、Avro 或者 Thrift 的 API 來存取。

雖然最近效能有了顯著的提升，HBase 還不能直接取代 SQL 資料庫。如今，它已經應用於多個資料驅動型網站，包括 Facebook 的訊息平台。

在 Eric Brewer 的 CAP 理論中，HBase 屬於 CP 類型的系統。

## 歷史

Apache HBase 最初是 Powerset 公司為了處理自然語言搜尋產生的海量資料而開展的專案。不過現在它已經是 Apache 基金會的頂級專案，並且引起了廣泛的關注。

Facebook 在 2010 年 11 月選用了 HBase 來實現它新的訊息平台。

## 參考資料

## 參考書目
Apache_HTTP_Server

**Apache HTTP Server**（簡稱 **Apache**）是 Apache 軟體基金會的一個開放原始碼的網頁伺服器軟體，可以在大多數電腦作業系統中運行。由於其跨平台和安全性，被廣泛使用，是最流行的 Web 伺服器軟體之一。它快速、可靠並且可通過簡單的 API 擴充，將 Perl／Python 等直譯器編譯到伺服器中。

## 歷史

Apache 起初由伊利諾大學香檳分校的國家超級電腦應用中心（NCSA）開發。此後，Apache Httpd 被開放原始碼團體的成員不斷的發展和加強。Apache Http 網站伺服器擁有牢靠可信的美譽，已經在全球超過半數的網站中被使用－特別是幾乎所有最熱門和瀏覽量最大的網站。例如維基百科網站的伺服器就使用了 Apache。

剛開始發展時，Apache 只是網景網頁伺服器（現在是 Sun ONE）之外的開放原始碼選擇之一。慢慢地，它開始在功能和速度超越其他基於 Unix 的 HTTP 伺服器。到了 Apache 2.x 的時代，實際效率又比 Apache 1.x 更快，2.x 比 1.x 能同時服務更多的網頁連線數。

1996 年 4 月以來，Apache 一直是網際網路上最流行的 HTTP 伺服器：1999 年 5 月它在 57% 的網頁伺服器上運行，到了 2005 年 7 月這個比例上升到了 69%。在 2005 年 11 月最風光的時候達到接近 70% 的市佔率，不過在部份擁有大量域名的主機域名商轉換為微軟網際網路資訊服務平台後，Apache 市佔率近年來呈現些微下滑。同時搜尋引擎巨擘 Google 自己的網頁伺服器平台 Google 網頁伺服器推出後（也可說是一種修改版的 Apache），再加上 nginx、Lighttpd 等輕量化網頁伺服器軟體在市場上有一些能見度，這些因素都反應在整體網頁伺服器市佔率的消長，Apache 的市佔率就隨之滑落。

根據 Netcraft 在 2009 年 12 月的最新統計數據，Apache 的市佔率已經降為 53.67％，網際網路資訊服務降為 18.26％，Google 網頁伺服器 13.53％，nginx8.75％。儘管如此，Apache 及其各種分支版本仍舊是當前網際網路市場上，市佔率最高的網頁伺服器軟體。

2020 年 4 月，Netcraft 估計在全球最繁忙的一百萬個網站中，使用 Apache 的有 29.12%，使用 Nginx 的有 25.54%; 而 W3Techs 的數據則顯示，在全球最繁忙的一千萬個網站中，使用阿帕契族的有 39.5%，使用 Nginx 的有 31.7% 。

## 命名

作者宣稱因為 Apache 這個名字好記，所以才在最初選擇它，但是流傳最廣的解釋是（也是最顯而易見的）：這個名字來自於一個事實：當 Apache 在 1995 年初開發的時候，它是由當時最流行的 HTTP 伺服器國家超級計算應用中心超文字傳輸協定守護程式 1.3 的代碼修改而成的，因此是「一個修補的（a patchy）」伺服器。然而，在 Apache 伺服器官方網站的 FAQ 中是這麽解釋的：「Apache 這個名字是為了紀念名為 Apache 的美洲原住民印第安人的一支，眾所周知他們擁有高超的作戰策略和無窮的耐性。」貝倫多夫說：「我選擇阿帕契這個名字是取其積極含義。阿帕契族是最後一個屈服於美國政府的民族。當時我們擔心大公司遲早會參與競爭並『教化』這塊最早的網路之地，所以在我看來，阿帕契是個很好的名稱，也有人說這個詞一語雙關 - 因為正如 Apache（與 "a patchy" 諧音）的名字所表明的那樣，他們確實是在給伺服器打修補程式。」無論如何，Apache 2.x 分支不包含任何 NCSA 的程式碼。

## 特性

Apache 支援許多特性，大部分通過編譯的模組實現。這些特性從伺服器端的程式語言支援到身分認證方案。一些通用的語言介面支援 Perl，Python，Tcl， 和 PHP。流行的認證模組包括 mod\_access，mod\_auth 和 mod\_digest。其他的例子有 SSL 和 TLS 支援（mod\_ssl），代理伺服器（proxy）模組，很有用的 URL 重寫（由 mod\_rewrite 實現），客製化紀錄檔檔案（mod\_log\_config），以及過濾支援（mod\_include 和 mod\_ext\_filter）。Apache 紀錄檔可以通過網頁瀏覽器使用免費的指令碼 AWStats 或 Visitors 來進行分析。

## 2.x 版本

Apache 的 2.x 版本核心在 Apache 1.x 版本之上作出了重要的加強。這包括：多執行緒，更好的支援非 UNIX 平台（例如 Windows），MPM，新的 Apache API，以及 IPv6 支援。

## 評價

* 《PC Magazine》2004 年 8 月評出了近 30 年以來的 10 款最佳軟體產品。他們其中或者是有過最輝煌的歷史，或者是最具創意。其對 Apache 的評價是：第三名：Apache（1995 年推出），目前已經演變成了「LAMP」，即 Linux、Apache、MySQL 和 PHP 的聯合體。這是一個開放原始碼軟體項目，已經對微軟的「.NET」戰略構成嚴重威脅。尤其是 Apache 網路伺服器，讓使用者充分體驗到開放原始碼軟體的穩定性、可靠性和可定製性。
* Apple.com 評價 Apache 時說：Apache 是伺服器軟體始終不斷進化的大型元件，它免費但又是無價之寶。Apache 是在開源運動中出現的絕對珍品，因為不屬於個人專利而是對公共免費。一旦擁有這些原始碼，程式員能夠自由完成所想 —— 能在其它程式員接替工作時被賦予同樣的權限來改變和修改自己的原始碼。

## 註釋

## 參考文獻

## 外部連結

* Apache 伺服器官方網站（頁面存檔備份，存於網際網路檔案館）
* Apache 軟體基金會官方網站（頁面存檔備份，存於網際網路檔案館）
Apache_Hadoop

**Apache Hadoop** 是一款支援數據密集型分佈式應用程式並以 Apache 2.0 許可協定發佈的開源軟體框架，有助於使用許多電腦組成的網路來解決資料、計算密集型的問題。基於 MapReduce 計算模型，它為大數據的分散式儲存與處理提供了一個軟體框架。所有的 Hadoop 模組都有一個基本假設，即硬體故障是常見情況，應該由框架自動處理。

Apache Hadoop 的核心模組分為儲存和計算模組，前者被稱為 Hadoop 分散式檔案系統（HDFS），後者即 MapReduce 計算模型。Hadoop 框架先將檔案分成資料塊並分散式地儲存在叢集的計算節點中，接著將負責計算任務的代碼傳送給各節點，讓其能夠並列地處理資料。這種方法有效利用了資料局部性，令各節點分別處理其能夠存取的資料。與傳統的超級電腦架構相比，這使得資料集的處理速度更快、效率更高。

Apache Hadoop 框架由以下基本模組構成：

* _Hadoop Common_ – 包含了其他 Hadoop 模組所需的庫和實用程式；
* _Hadoop Distributed File System (HDFS)_ – 一種將資料儲存在叢集中多個節點中的分散式檔案系統，能夠提供很高的頻寬；
* _Hadoop YARN_ – （於 2012 年引入） 一個負責管理叢集中計算資源，並實現使用者程式排程的平台；
* _Hadoop MapReduce_ – 用於大規模資料處理的 MapReduce 計算模型實現；
* _Hadoop Ozone_ – （於 2020 年引入） Hadoop 的物件儲存。

_Hadoop_ 一詞通常代指其基本模組和子模組以及生態系統，或可以安裝在 Hadoop 之上的軟體套件的集合，例如 Apache Pig、Apache Hive、Apache HBase、Apache Phoenix、Apache Spark、Apache ZooKeeper、Cloudera Impala、Apache Flume、Apache Sqoop、Apache Oozie 和 Apache Storm。

Apache Hadoop 的 MapReduce 和 HDFS 模組的靈感來源於 Google 的 MapReduce 和 Google File System 論文。

Hadoop 框架本身主要是用 Java 程式語言編寫的，也包括了一些 C 語言編寫的本機代碼和 Shell 指令碼編寫的命令列實用程式。儘管 MapReduce Java 代碼很常見，但任何程式語言都可以與 Hadoop Streaming 一起使用來實現使用者程式的 map 和 reduce 部分。Hadoop 生態系統中的其他專案實現了更為豐富的使用者介面。

## 主要子專案

* Hadoop Common：在 0.20 及以前的版本中，包含 HDFS、MapReduce 和其他專案公共內容，從 0.21 開始 HDFS 和 MapReduce 被分離為獨立的子專案，其餘內容為 Hadoop Common
* HDFS：Hadoop 分佈式檔案系統（Distributed File System）－HDFS（Hadoop Distributed File System）
* MapReduce：平行計算框架，0.20 前使用 org.apache.hadoop.mapred 舊介面，0.20 版本開始引入 org.apache.hadoop.mapreduce 的新 API

## 相關專案

* Apache HBase：分散式 NoSQL 列資料庫，類似 Google 公司 BigTable。
* Apache Hive：構建於 hadoop 之上的資料倉儲，通過一種類 SQL 語言 HiveQL 為使用者提供資料的歸納、查詢和分析等功能。Hive 最初由 Facebook 貢獻。
* Apache Mahout：機器學習演算法軟體套件。
* Apache Sqoop：結構化資料（如關聯式資料庫）與 Apache Hadoop 之間的資料轉換工具。
* Apache ZooKeeper：分散式鎖設施，提供類似 Google Chubby 的功能，由 Facebook 貢獻。
* Apache Avro：新的資料序列化格式與傳輸工具，將逐步取代 Hadoop 原有的 IPC 機制。

## 知名使用者

### Hadoop 在 Yahoo! 的應用

2008 年 2 月 19 日，雅虎使用 10,000 個微處理器核心的 Linux 電腦叢集運行一個 Hadoop 應用程式。

### 其他使用者

其他知名使用者包括：

## Hadoop 與 Sun Grid Engine

昇陽電腦的 Sun Grid Engine 可以用來排程 Hadoop Job。

## Hadoop 與 Condor

威斯康辛大學麥迪遜分校的 Condor 計算機叢集軟體也可以用作 Hadoop Job 的排程。

## 參見

* 大數據
* 雲端運算
* 高效能計算叢集
* OpenStack－以 Apache 授權條款授權的雲端運算軟體。
* Apache Spark

## 參考文獻

## 外部連結

* Hadoop 官方網站（頁面存檔備份，存於網際網路檔案館）
Apache_Harmony

**Apache Harmony** 是 Apache 軟體基金會主導的開放原始碼專案，是自由 Java 實作計劃（Free Java implementations）的一部份。基於 Java SE 5 與 6，目標是以開放原始碼方式，實作出 Java SDK。該專案已於 2011 年 10 月宣布停止開發。

這個專案的目標是營造一個大型的、健康的社群，這個社群由那些對執行時平台感興趣的人組成。他們的任務是完成：

1. 一個相容的、獨立的 Java SE 5 JDK 的實現，並根據 Apache License v2 發布；
2. 一個由社群開發的模組化的執行時（包括 Java 虛擬機器和類別館）體系結構。

該專案期望支援儘可能多的不同平台。一個特定的平台是否被支援，主要取決於參與者能在這個平台上定期執行測試、報告編譯安裝的情況，以及為該平台除蟲，等等。

## 歷史

Apache Harmony 專案建立於 2005 年 5 月。到 2006 年 10 月 25 日，Apache 董事會投票決定 Apache Harmony 成為頂級專案。10 月 29 日，Apache 孵化器管理委員會（Incubator PMC）投票決定 Harmony 完成孵化，認為它符合孵化器對社群管理和 IP 監管的要求。

## 開發者

Apache Harmony 擁有 32 名貢獻者，其中 28 位元處於活躍期。此外，還擁有大量的其他興趣愛好者和開發人員。

## 最近發展

Apache Harmony 一直在穩步前進：

1. Apache Harmony 已經發布了 5 個 milestone build
2. JRE 可以執行一些流行的應用如 Apache Tomcat, Eclipse, Maven, Derby, Ant
3. 完成了 99% 的 Java 5 API
4. 超過 125 萬行的代碼
5. Harmony 類別館於 2007 年底被 Google Android 採用為其類別館
6. 2007 年，IBM 宣布在其 JDK6.0 中使用了部分 Harmony 代碼

### Android

Dalvik 虛擬機，Google Android 平台所使用的虛擬機，使用了 Harmony 部份的子集，作為它核心的類別函式庫。

## TCK 的紛爭

如果需要成為一個帶有 Java logo 標誌的，可以聲稱自己相容 Sun 公司實現的 JDK，需要通過 JCP（Java Community Process）對其擁有的 TCK（Technology Compatibility Kit）的測試。Apache Harmony 專案一直在努力爭取獲得 JCP 的授權。

但是，由於 Sun 公司的態度，JCP 並沒有給 Harmony 授予 TCK 許可，而且 SUN 發布 OpenJDK 之後，還規定只有衍生自 OpenJDK 的採用 GPL 協定的開源實現才能執行 OpenJDK 的 TCK，

但 Apache 的 Harmony 是 Apache 協定的，與 OpenJDK 的 GPLv2 協定不相容，Apache 董事會和 Harmony 專案工作人員堅決反對這種帶有條件的授權，認為這種是在開源社群里不可接受的。因此，兩者談判破裂。直到現在，Harmony 一直沒有獲得 TCK 的授權。有批評稱，Sun 無視它簽署的 JCP 法律協定，這摧毀了全部的信任。

但該專案參與者依然認為，即使沒有 TCK，即無法「聲稱」自己相容 Sun 的實現，他們依然可以做出一個好的產品並為業界所接受。

## 未來展望

Apache Harmony 計劃每 2 個月做一個 milestone 的 build，並計劃於今年正式發布一個 5.0（即期望與 Sun jdk 5.0 相容的）的發布版。

## 參考文獻

## 外部連結

* 官方網站
Apache_Hive

**Apache Hive** 是一個建立在 Hadoop 架構之上的數據倉庫。它能夠提供數據的精煉，查詢和分析。Apache Hive 起初由 Facebook 開發，目前也有其他公司使用和開發 Apache Hive，例如 Netflix 等。亞馬遜公司也開發了一個定製版本的 Apache Hive，亞馬遜網絡服務包中的 Amazon Elastic MapReduce 包含了該定製版本。

hive（頁面存檔備份，存於網際網路檔案館）是基於 Hadoop 的一個數據倉庫工具，可以將結構化的數據文件映射為一張資料庫表，並提供簡單的 SQL 查詢功能，可以將 SQL 語句轉換為 MapReduce 任務進行運行。其優點是學習成本低，可以通過類 SQL 語句快速實現簡單的 MapReduce 統計，不必開發專門的 MapReduce 應用，十分適合數據倉庫的統計分析。
Apache_Incubator

**Apache Incubator**（阿帕奇孵化器）是旨在成為完全成熟的 Apache 軟體基金會專案的開源專案的通道。

Incubator 專案成立於 2002 年 10 月，為那些意圖成為 Apache 基金會努力的一部分的專案和代碼庫，提供一個進入到 Apache 軟體基金會的路徑。那些從外部組織捐贈的所有代碼，以及意圖移動到 Apache 的現有外部專案，都必須進入 Incubator。

Apache Incubator 專案一方面充當一個臨時容器專案，直到孵化專案被接受並成為 Apache 軟體基金會的一個頂級專案，或變成適當專案的子專案（如 Jakarta 和 Apache XML）。另一方面，孵化器專案生成文件，介紹基金會是如何工作的，以及如何在 Apache 的架構內把事情做完。這意味著記錄 Apache 軟體基金會及其成員專案的過程、 角色、和策略。

## 參考資料

## 外部連結

* Apache Incubator（頁面存檔備份，存於網際網路檔案館）
  * 孵化器中的所有專案（頁面存檔備份，存於網際網路檔案館）
* Apache Incubator OpenOfficeProposal
* HCatalog 郵寄清單存檔
Apache_Kafka

**Kafka** 是由 Apache 軟體基金會開發的一個開源流處理平台，由 Scala 和 Java 編寫。該專案的目標是為處理即時資料提供一個統一、高吞吐、低延遲的平台。其持久化層本質上是一個「按照分散式事務紀錄檔架構的大規模釋出 / 訂閱訊息佇列」，這使它作為企業級基礎設施來處理串流資料非常有價值。此外，Kafka 可以通過 Kafka Connect 連接到外部系統（用於資料輸入 / 輸出），並提供了 Kafka Streams—— 一個 Java 串流處理庫。

該設計受事務紀錄檔的影響較大。

## Kafka 的歷史

Kafka 最初是由領英開發，並隨後於 2011 年初開源，並於 2012 年 10 月 23 日由 Apache Incubator 孵化出站。2014 年 11 月，幾個曾在領英為 Kafka 工作的工程師，建立了名為 Confluent 的新公司，，並著眼於 Kafka。根據 2014 年 Quora 的貼文，Jay Kreps 似乎已經將它以作家弗朗茨・卡夫卡命名。Kreps 選擇將該系統以一個作家命名是因為，它是「一個用於最佳化寫作的系統」，而且他很喜歡卡夫卡的作品。

## Kafka 的架構

Kafka 儲存的訊息來自任意多被稱為「生產者」（Producer）的行程。資料從而可以被分配到不同的「分割區」（Partition）、不同的「Topic」下。在一個分割區內，這些訊息被索引並連同時間戳儲存在一起。其它被稱為「消費者」（Consumer）的行程可以從分割區查詢訊息。Kafka 執行在一個由一台或多台伺服器組成的叢集上，並且分割區可以跨叢集結點分布。

Kafka 高效地處理即時串流資料，可以實現與 Storm、HBase 和 Spark 的整合。作為群集部署到多台伺服器上，Kafka 處理它所有的釋出和訂閱訊息系統使用了四個 API，即生產者 API、消費者 API、Stream API 和 Connector API。它能夠傳遞大規模串流訊息，內建容錯功能，已經取代了一些傳統訊息系統，如 JMS、AMQP 等。

Kafka 架構的主要術語包括 Topic、Record 和 Broker。Topic 由 Record 組成，Record 持有不同的資訊，而 Broker 則負責複製訊息。Kafka 有四個主要 API：

* **生產者 API**：支援應用程式釋出 Record 流。
* **消費者 API**：支援應用程式訂閱 Topic 和處理 Record 流。
* **Stream API**：將輸入流轉換為輸出流，並產生結果。
* **Connector API**：執行可重用的生產者和消費者 API，可將 Topic 連結到現有應用程式。

## 相關術語

* Topic 用來對訊息進行分類，每個進入到 Kafka 的資訊都會被放到一個 Topic 下
* Broker 用來實現資料儲存的主機伺服器
* Partition 每個 Topic 中的訊息會被分為若干個 Partition，以提高訊息的處理效率
* Producer 訊息的生產者
* Consumer 訊息的消費者
* Consumer Group 訊息的消費群組

## 設計目標

## Kafka 的效能

由於其廣泛整合到企業級基礎設施中，監測 Kafka 在規模執行中的效能成為一個日益重要的問題。監測端到端效能，要求跟蹤所有指標，包括 Broker、消費者和生產者。除此之外還要監測 ZooKeeper，Kafka 用它來協調各個消費者。目前有一些監測平台可以追蹤 Kafka 的效能，有開源的，如領英的 Burrow；也有付費的，如 Datadog。除了這些平台之外，收集 Kafka 的資料也可以使用工具來進行，這些工具一般需要 Java，包括 JConsole。

## Consumer Group

## Kafka 檔案格式

00000000000000000000.index
00000000000000000000.log
00000000000000000000.timeindex
00000000000000782248.snapshot
leader-epoch-checkpoint

## 使用 Kafka 的企業

下面的列表是曾經或正在使用 Kafka 的知名企業：

## 參見

## 參考資料

## 外部連結

* Apache Kafka 網站（頁面存檔備份，存於網際網路檔案館）（英文）
* 專案設計討論（頁面存檔備份，存於網際網路檔案館）（英文）
* Github 鏡像 （頁面存檔備份，存於網際網路檔案館）
* Morten Kjetland 對 Apache Kafka 的介紹（頁面存檔備份，存於網際網路檔案館）（英文）
* Quora 上與 RabbitMQ 的對比（英文）
* Kafka 開發者郵寄清單中與 RabbitMQ 的對比（頁面存檔備份，存於網際網路檔案館）（英文）
* Stackoverflow 上與 RabbitMQ 和 ZeroMQ 的對比（頁面存檔備份，存於網際網路檔案館）（英文）
* Apache Kafka 中的叢集內部回應（頁面存檔備份，存於網際網路檔案館）（英文）
* Kafka 使用者郵寄清單討論（英文）
Apache_License

**Apache 授權條款**（英語：Apache License），是一個由 Apache 軟體基金會釋出的自由軟體授權條款，最初為 Apache http 伺服器而撰寫。Apache 授權條款要求被授權者保留著作權和放棄權利的聲明，但它不是一個反著作權的授權條款。

此授權條款最新版本為「版本 2」，於 2004 年 1 月釋出。

Apache 授權條款在 Apache 社群內外被廣泛使用。Apache 基金會下屬所有專案都使用 Apache 授權條款，許多非 Apache 基金會專案也使用了 Apache 授權條款：據統計，截至 2012 年 10 月，在 sourceforge 上有 8708 個專案使用了 Apache 授權條款。

## 版本歷史

1.0 版是最原始的 Apache 授權條款，只被用在舊版的 Apache 軟體內（像是 Apache Web Server 1.2）。

1.1 版在 2000 年由 Apache 軟體基金會公佈：相較於 1.0 最主要的改變在於「NOTICE 條款」（在 1.0 的第三節），衍生產品只需要在檔案裡註明，而不像 1.0 需要在所有的地方註明。

2004 年 1 月，Apache 軟體基金會公佈了 2.0 版。

## 授權條件

Apache 授權條款是寬容的，因為它不會強制衍生和修改產物使用相同的授權條款進行釋出（與一些著作權授權條款不同，參見比較）。但它仍然要求對所有未修改的部分應用相同的授權條款，並且在每個授權檔案中，必須保留再分發代碼中的任何原始著作權，專利，商標和歸屬通知（不需要包括任何部分的衍生作品）；並且在每個更改的授權檔案中，都必須添加一條通知，說明對該檔案進行了更改。

如果聲明文字檔案作為原始作品釋出的一部分包含在內，則衍生作品必須在包含該通知文字檔案的可讀副本，可以是文件或顯示在軟體中。

聲明檔案的內容不會修改授權條款，因為它們僅用於提供資訊，並且可以在授權條款文字中添加更多屬性聲明，前提是這些聲明不能被理解為修改授權條款。修改可能有適當的著作權聲明，並可能為修改提供不同的授權條款。

除非另有明確規定，否則授權條款持有者向授權者提交的任何文稿將根據授權條款的條款進行，沒有任何條款和條件，但這並不排除與授權者有關的這些貢獻有單獨的協定。

## 與 GPL 的相容

Apache 軟體基金會與自由軟體基金會都同意 Apache 授權條款屬於自由軟體授權條款，且相容於第三版的 GNU 通用公眾授權條款；不過，雙方也都同意，第一版與第二版的 GNU 通用公眾授權條款並不相容於 Apache 授權條款。

## 參考文獻

## 外部連結

* （英文）Apache 授權條款（頁面存檔備份，存於網際網路檔案館）
Apache_Lucene

**Lucene** 是一套用於全文檢索和搜尋的開放原始碼程式庫，由 Apache 軟體基金會支援和提供。Lucene 提供了一個簡單卻強大的應用程式介面，能夠做全文索引和搜尋。Lucene 被廣泛應用作搜尋應用的標準基礎庫。

Lucene 現已被移植到其他程式語言，包括 Object Pascal、Perl、C#、C++、Python、Ruby 和 PHP。

## 歷史

Doug Cutting 在 1999 年編寫了 Lucene，他是一位資深的全文索引及檢索專家，曾經是 V-Twin 搜尋引擎的主要開發者，後來在 Excite 擔任高級系統架構設計師，目前從事於一些網際網路底層架構的研究。他貢獻出 Lucene 的目標是為各種中小型應用程式加入全文檢索功能。Lucene 最初可以從 SourceForge 網站的首頁下載，它於 2001 年 9 月加入 Apache 軟體基金會的 Jakarta 開源 Java 產品家族，並於 2005 年 2 月成為獨立的頂級 Apache 專案。Lucene 這個名字是 Doug Cutting 妻子的中間名，也是她外祖母的名字。

Lucene 以前包含了許多子專案，例如 Lucene.NET、Mahout、Tika and Nutch。這三個現在已經成為了獨立的頂級 Apache 專案。

2010 年 3 月，Apache Solr 搜尋伺服器作為 Lucene 子專案加入，合併了開發者社群。

4.0 版於 2012 年 10 月 12 日釋出。

2021 年 3 月，Lucene 更改了 logo，Apache Solr 再次成為頂級 Apache 專案，獨立於 Lucene。

## 功能和常見用途

雖然理論上 Lucene 適用於任何需要全文索引和搜尋功能的應用程式，但其主要是因為在 Internet 搜尋引擎和本地單站點搜尋實現中的實用性而受到認可。

Lucene 包含了基於編輯距離執行模糊搜尋的功能。

Lucene 也被用於實現推薦系統。例如，Lucene 的 'MoreLikeThis' 類可以生成相似文件的推薦。在將「MoreLikeThis」基於向量的相似性方法與基於參照的文件相似性度量（例如共引和共引鄰近度分析）進行比較時，Lucene 的方法在推薦具有非常相似的結構特徵和更窄相關性的文件上表現出色。相比之下，基於參照的文件相似性度量往往更適合推薦更廣泛相關的文件。

## 基於 Lucene 的項目

Lucene 本身只是一個索引和搜尋庫，不包含爬取和 HTML 解析功能。但是，以下的專案擴充了 Lucene 的功能：

* Apache Nutch — 提供成熟可用的網路爬蟲
* Apache Solr — 基於 Lucene 核心的高效能搜尋伺服器，提供 JSON/Python/Ruby API
* Compass – Elasticsearch 的前身
* CrateDB – 基於 Lucene 構建的開源分散式 SQL 資料庫
* DocFetcher — 跨平台的本機檔案搜尋桌面程式
* Elasticsearch — 企業搜尋平台，目的是組織資料並使其易於取得
* Kinosearch – 用 Perl 和 C 語言實現的搜尋引擎與 Lucene 的移植。Socialtext wiki 和 MojoMojo wiki 均使用了這一搜尋引擎。 它在人類代謝物組資料庫（HMDB） 和毒素與毒素目標資料庫 (T3DB) 中亦有應用。
* MongoDB Atlas Search – 基於 MongoDB 和 Apache Lucene 的雲原生企業搜尋應用程式
* OpenSearch – 基於 Elasticsearch 7 的開源企業級搜尋伺服器
* Swiftype — 基於 Lucene 的企業級搜尋
* Lucene.NET — 提供給.Net 平台使用者的 Lucene 類別館的封裝
* Apache Lucy — 為動態語言提供全文搜尋的能力，是 Lucene Java 庫的 C 介面
* Luke — Java 編寫的使用者介面用於編輯 Lucene 的索引，此專案已停止開發

## 參見

* Solr － 使用 Lucene 的企業搜尋伺服器，亦由 Apache 軟體基金會所研發。

## 參考資料

## 外部連結

* Lucene homepage （頁面存檔備份，存於網際網路檔案館）
* Article "Behind the Scenes of the SourceForge.net Search System" by Chris Conrad
* Schmidt, Marco. Lucene Wikipedia indexer. 2005 [2021-02-07]. （原始內容存檔於 2006-07-15）. Introductory article with Java code for search
* Simple Lucene Examples
* Apache Lucene popular APIs （頁面存檔備份，存於網際網路檔案館） in GitHub
Apache_MXNet

**Apache MXNet** 是一個開源深度學習軟體框架，用於訓練及部署深度神經網路。MXNet 具有可延伸性，允許快速模型訓練，並支援靈活的編程模型和多種程式語言（包括 C++、Python、Java、Julia、Matlab、JavaScript、Go、R、Scala、Perl 和 Wolfram 語言）。

MXNet 庫可以擴充到多 GPU 和多台機器，並可移植。MXNet 由公共雲提供商亞馬遜雲端運算服務（AWS）和 Microsoft Azure 支援。亞馬遜把 MXNet 選為 AWS 的首選深度學習框架。目前，MXNet 受到英特爾、Dato、百度、微軟、沃爾夫勒姆研究公司以及卡內基・梅隆大學、麻省理工學院、華盛頓大學和香港科技大學等研究機構的支援。

## 特色

Apache MXNet 是一個極簡、靈活、可延伸的深度學習框架，支援深度學習模型，包括卷積神經網路（CNN）和長短期記憶網路（LSTM）。

### 可延伸性

MXNet 分布於動態雲基礎架構上，使用分散式參數伺服器（基於卡內基・梅隆大學、百度和 Google），並且可以使用多 GPU 或多 CPU 實現近乎線性的擴充。

### 靈活性

MXNet 支援命令式和符號式編程，讓使用指令式程式設計的開發者可以更輕鬆地上手深度學習，還可以更容易地跟蹤、除錯、儲存斷點，修改學習率等超參數或執行早停。

### 多程式語言支援

MXNet 支援 C++ 用於最佳化後端，以獲得大部分可用的 GPU 或 CPU，以及支援 Python、R 語言、Scala、Julia、Perl、MATLAB 和 JavaScript，用於為開發人員提供簡單的前端。

### 可移植性

MXNet 支援將受過訓練的模型高效部署到低階裝置，例如行動裝置（使用 Amalgamation）、物聯網裝置（使用 AWS Greengrass）、無伺服器計算（使用 AWS Lambda）或容器。這些低階環境只有效能較弱的 CPU 或有限的記憶體（RAM），並且應能使用在更高端環境（如基於 GPU 的叢集）上訓練的模型。

## 參見

* 深度學習軟體比較

## 參考資料
Apache_Maven

**Apache Maven**，是一個軟體（特別是 Java 軟體）專案管理及自動構建工具，由 Apache 軟體基金會所提供。Maven 也可被用於構建和管理各種專案，例如 C#，Ruby，Scala 和其他語言編寫的專案。Maven 曾是 Jakarta 專案的子專案，現為由 Apache 軟體基金會主持的獨立 Apache 專案。

Maven 解決了軟體構建的兩方面問題：一是軟體是如何構建的，二是軟體的依賴關係。不同於 Apache Ant 等早期工具，Maven 設定了構建流程的標準，在此之外只需要指定例外情況。XML 檔案描述了正在構建的軟體專案、它對其他外部模組和組件的依賴關係、構建順序、目錄和所需的外掛程式。該檔案通常有預設的目標任務，例如代碼編譯和打包。Maven 從一個或多個代碼倉庫（例如 Maven 2 Central Repository）動態地下載 Java 庫與 Maven 外掛程式，並將其儲存在本地快取區中。

Maven 是以基於外掛程式的架構構建的，這使其能夠使用任何能用標準輸入控制的應用程式。Maven 2 同時維護了為 C/C++ 準備的原生外掛程式。

儘管 Gradle 和 sbt 等替代技術並不依賴於 XML，但他們仍然保留了 Maven 引入的關鍵概念。Apache Ivy 還開發了一個專用的依賴管理器，同時支援 Maven 倉庫。

Apache Maven 也包括對可重現構建的支援。

## 範例

Maven 專案使用專案物件模型（Project Object Model，POM）來組態。

專案物件模型儲存在名為 pom.xml 的檔案中。

以下是一個簡單的範例：

## 參見

* Apache Continuum，一種與 Maven 緊密結合的持續整合伺服器
* Apache Jelly 一種將 XML 轉為可執行代碼的工具
* Apache Ivy，可作為替代的 Java 依賴管理工具
* Gradle，一種基於約定優於組態的編譯工具
* Hudson
* 構建自動化軟體列表

## 補充閱讀

* Van Zyl, Jason, Maven：明确的指南 first, 奧萊利: 468, 2008-10-01 [2011-07-24], ISBN0596517335, （原始內容存檔於 2010-08-27） （英文）

　
: 有免費的 PDF 供下載和線上閱讀：http://www.sonatype.com/documentation/books（頁面存檔備份，存於網際網路檔案館） （英文）

## 參考資料

## 外部連結

* Maven 專案官方網站（頁面存檔備份，存於網際網路檔案館）（英文）
* Maven 2 新手教程：Maven 2 使用者練習指南 - 教程在 （頁面存檔備份，存於網際網路檔案館）（英文）
* 完整參考（頁面存檔備份，存於網際網路檔案館），一本已出版的並可免費線上閱讀的書（英文）
* 用 Maven 2 構建 Web 應用程式（英文）
* Maven 2 POM 揭秘（頁面存檔備份，存於網際網路檔案館） - 文章在 JavaWorld（英文）
* 在你的 POM 中驗證依賴（英文）
* Maven 的歷史（頁面存檔備份，存於網際網路檔案館）（英文）
* 用於 PHP 的 Maven（頁面存檔備份，存於網際網路檔案館）（英文）
Apache_Mesos

**Apache Mesos**，一個開放原始碼軟體專案，是一種叢集電腦管理工具，由加州大學柏克萊分校開發。能夠將資料中心電腦系統中的 CPU、記憶體、儲存裝置以及其他運算資源，全部加以虛擬化，並進行管理。在 2013 年，Apache Mesos 成為 Apache 計劃中的首要開發目標。

包括 Twitter、Airbnb 的伺服器及蘋果電腦的 Siri 資料庫都是以 Apache Mesos 進行管理。

## 歷史

## 技術架構

## 外部連結

* Open source datacenter computing with Apache Mesos（頁面存檔備份，存於網際網路檔案館）
Apache_POI

**Apache POI** 是 Apache 軟體基金會的開放原始碼函式庫，POI 提供 API 給 Java 程式對 Microsoft Office 格式檔案讀和寫的功能。
.NET 的開發人員則可以利用 NPOI（POI for .NET）來存取 POI 的功能。

## 結構

* HSSF － 提供讀寫 Microsoft Excel XLS 格式檔案的功能。
* XSSF － 提供讀寫 Microsoft Excel OOXML XLSX 格式檔案的功能。
* HWPF － 提供讀寫 Microsoft Word DOC 格式檔案的功能。
* XWPF － 提供讀寫 Microsoft Word DOCX 格式檔案的功能。
* HSLF － 提供讀寫 Microsoft PowerPoint 格式檔案的功能。
* HDGF － 提供讀 Microsoft Visio 格式檔案的功能。
* HPBF － 提供讀 Microsoft Publisher 格式檔案的功能。
* HSMF － 提供讀 Microsoft Outlook 格式檔案的功能。

## 參見

* POI 官方網站 \* （頁面存檔備份，存於網際網路檔案館）
* NPOI 元件（頁面存檔備份，存於網際網路檔案館）
Apache_Pig

**Pig** 是一個基於 Apache Hadoop 的大規模數據分析平台，它提供的 SQL-LIKE 語言叫 Pig Latin，該語言的編譯器會把類 SQL 的數據分析請求轉換為一系列經過優化處理的 MapReduce 運算。Pig 為複雜的海量數據並行計算提供了一個簡單的操作和編程接口，使用者可以透過 Python 或者 JavaScript 編寫 Java，之後再重新轉寫。

## 外部連結

* Official site（頁面存檔備份，存於網際網路檔案館）
Apache_Portable_Runtime

**Apache 可移植執行時**（**Apache Portable Runtime**，簡稱 APR）是 Apache HTTP 伺服器的支援庫，提供了一組對映到下層作業系統的 API。如果作業系統不支援某個特定的功能，APR 將提供一個類比的實現。這樣程式設計師使用 APR 編寫真正可在不同平台上移植的程式。

最初，APR 是作為 Apache HTTP 伺服器的一部分而存在的，但是 Apache 軟體基金會將其延伸成一個單獨的專案。其他的應用程式可以使用 APR 來實現平台無關性。

## 功能特性

Apache 可移植執行時提供的一系列平台無關的功能特性包括：

* 記憶體管理和記憶體池功能
* 原子操作（Linearizability）
* 動態庫處理
* 檔案 I/O
* 命令參數解析
* 鎖機制
* 雜湊表和陣列
* mmap 功能
* 網路通訊端和協定
* 執行緒，行程和互斥鎖功能
* 共享記憶體功能
* 時間子程式
* 使用者和組 ID 服務

## 類似的專案

* Glib 提供類似的功能特性。 支援更多的資料結構和作業系統無關的函式，但行程間通訊相關的函式要少一些（Glib 缺少本地和全域鎖機制以及共享記憶體管理）。
* 網景可移植執行時（NSPR）是 Mozilla 專案所使用的跨平台抽象庫。也被 Mozilla 應用程式框架（XPFE）的其他子專案所使用，以提供跨平台圖形化使用者介面（GUI）功能特性。
* 自適配通信環境 （ACE）是用 C++ 編寫的功能與 APR 相似的物件導向庫，廣泛應用於商業產品。
* commonc++ 是系統編程的跨平台 C++ 類別庫，具有許多與 APR 的相同的特性。
* POCO 是概念上與 APR 類似的現代 C++ 框架，但比 APR 具有更好的擴充性。
* WxWidgets 是物件導向的跨平台 GUI 庫，也提供資料庫通訊，行程間通訊和網路的抽象類。
* Qt 是具有類似功能的應用開發框架，同時支援圖形化使用者介面開發。

## 參考文獻

## 外部連結

* 官方網站
* Apache 軟體基金會網站（頁面存檔備份，存於網際網路檔案館）
* APR 編程教程（頁面存檔備份，存於網際網路檔案館）
Apache_Qpid

**Apache Qpid** 是一個開源的消息系統 ，它實現了高級消息隊列協議 （AMQP）。 它提供事務管理，隊列，分發，安全性，管理，集群， 互聯以及異構多平台支持。

## 歷史

2005 年摩根大通推動其他企業組成的一個工作組，其中包括了思科系統、IONA 技術、iMatix、紅帽公司以及事務工作流創新標準團隊（簡稱 TWIST）。同年，摩根大通與紅帽合作創建了 Apache Quid 項目，最初使用 Java 開發，不久後轉而使用 C++。

## 參見

* 面向服務的體系結構

## 外部連結

* 官方網站
Apache_RocketMQ

**RocketMQ** 是一個分布式消息和流數據平台，具有低延遲、高性能、高可靠性、萬億級容量和靈活的可擴展性。RocketMQ 是 2012 年阿里巴巴開源的第三代分布式消息中間件，2016 年 11 月 21 日，阿里巴巴向 Apache 軟體基金會捐贈了 RocketMQ；第二年 2 月 20 日，Apache 軟體基金會宣布 Apache RocketMQ 成為頂級項目。

## 歷史

RocketMQ 的發展可分為三個階段。

第一代在數據傳輸中使用 push 模式，在數據存儲中使用關係型資料庫。它展現了消息傳遞的低延遲，並且滿足了具有分布式事務的典型電子商務平台 的用途。

第二代在數據傳輸中使用 pull 模式，在數據存儲中使用文件系統。它更注重穩定性和可靠性，並顯示出與第一代響應時間和 Kafka 日誌收集相當的性能。

第三代將 pull 模式與一些 push 操作相結合。它繼承了第一代和第二代的優點，並在並發性和大量數據場景中表現出高性能。

## 功能

各種消息傳遞解決方案之間已經進行了很多比較，眾所周知，當主題數量急劇增加時，RocketMQ 的吞吐量下降幅度遠小於 Kafka。由於具有高性能、高可靠性和高實時性的特點，RocketMQ 與其他協議組件在 MQTT 等各種消息場景中的結合也越來越多。

## 架構

RocketMQ 由四部分組成：命名伺服器（Name Server）、代理（Broker）、生產者（Producer）和消費者（Consumer），其中每一個都可以水平擴展而沒有單點故障，如上圖所示。

### 命名伺服器集群

命名伺服器集群是用於服務發現的輕量級組件，它們可用於讀取和寫入路由信息。每個命名伺服器可以記錄全局信息，並支持快速存儲擴展。

### 代理集群

代理集群使用輕量級主題（topic）和隊列（queue）機制來管理數據存儲。為了實現容錯，代理提供 2 份或 3 份數據。客戶端可以在 Push 和 Pull 模型中獲取消息。此外，還支持災難恢復和豐富的指標統計信息。

### 生產者集群

生產者（Producer）可以分布式部署，從生產者到代理的消息可以通過多路徑進行平衡。此外，還支持快速故障恢復和低延遲。

### 消費者集群

消費者也可以在 Push 和 Pull 模型中進行分布式部署，他們可以實時訂閱消息，以集群為單位消費消息，同時還支持消息廣播。

## 應用

Apache RocketMQ 至少可以應用到以下五個方面：

* 異構系統的集成；
* 應用程式之間的分離；
* 在事件驅動機制和複雜事件架構模型中的骨幹；
* 數據複製渠道；
* 與流計算引擎集成。

## 社區維護

RocketMQ 團隊為活躍社區做了很多工作。聚會、研討會、ApacheCon 和 Code Marathon 定期在北京、深圳、杭州等地舉行，以吸引新的貢獻者和提交者。OpenMessaging 基準測試套件目前可用於 RocketMQ，它使 RocketMQ 與分布式消息傳遞的全球標準保持同步。對於版本管理，採用了一系列標準化的軟體開發過程。最新版本是 4.2.0，4.3.0 即將推出。可在此處（頁面存檔備份，存於網際網路檔案館）獲取更多信息。

## 獲獎

2016 年度最受歡迎中國開源軟體獎（頁面存檔備份，存於網際網路檔案館）

2017 年度最受歡迎中國開源軟體獎（頁面存檔備份，存於網際網路檔案館）

第 12 次中日韓 (中國 - 日本 - 韓國) 開源軟體優秀技術獎（頁面存檔備份，存於網際網路檔案館）

2018 年度最受歡迎中國開源軟體獎（頁面存檔備份，存於網際網路檔案館）

## 參見

## 參考文獻

## 外部連結

* Apache RocketMQ 網站（頁面存檔備份，存於網際網路檔案館）
* Apache RocketMQ Externals（頁面存檔備份，存於網際網路檔案館）
* 基於 RocketMQ 的 MQTT 協議消息推送伺服器（頁面存檔備份，存於網際網路檔案館）
Apache_Shiro

**Apache Shiro**（讀作「sheeroh」，即日語「城」）是一個開源安全框架，提供身分驗證、授權、密碼學和對談管理。Shiro 框架直觀、易用，同時也能提供健壯的安全性。

## 歷史

Shiro 的前身是 JSecurity。

2004 年，Les Hazlewood 和 Jeremy Haile 創辦了 Jsecurity。當時他們找不到適用於應用程式級別的合適 Java 安全框架，同時又對 JAAS 非常失望。2004 年到 2008 年期間，JSecurity 代管在 SourceForge 上，貢獻者包括 Peter Ledbrook、Alan Ditzel 和 Tim Veil。

2008 年，JSecurity 專案貢獻給了 Apache 軟體基金會（ASF），並被接納成為 Apache Incubator 專案，由導師管理，目標是成為一個頂級 Apache 專案。期間，Jsecurity 曾短暫更名為 Ki（讀作「Key」），隨後因商標問題被社群更名為「Shiro」。

隨後專案持續在 Apache Incubator 中孵化，並增加了貢獻者 Kalle Korhonen。2010 年 7 月，Shiro 社群發布了 1.0 版，隨後社群建立了其專案管理委員會，並選舉 Les Hazlewood 為主席。2010 年 9 月 22 日，Shrio 成為 Apache 軟體基金會的頂級專案（TLP）。

## 版本

* 1.9.1 on 2022-06-28 (最新版本)，修復了 CVE-2022-32532 （頁面存檔備份，存於網際網路檔案館）
* 1.9.0 on 2022-03
* 1.4.1 on 2019-05
* 1.4.0 on 2016-11
* 1.3.2 on 2016-09-11
* 1.3.1 on 2016-08-29
* 1.3.0 on 2016-07-25
* 1.2.6 on 2016-06-28
* 1.2.5 on 2016-05-24
* 1.2.4 on 2015-07-07
* 1.2.3 on 2014-02-25
* 1.2.2 on 2013-05-15
* 1.2.1 on 2012-07-28
* 1.2.0 on 2012-01-24
* 1.1.0 on 2010-11-01

## 參見

* 應用程式安全
* JAAS（Java 認證和授權服務）
* EJB# 安全（EJB 容器管理的安全）
* JGuard（頁面存檔備份，存於網際網路檔案館），一個 LGPL 許可證授權的安全框架
* Spring Security，一個 Apache 許可證授權的 Java 安全框架

## 參考文獻

## 外部連結

* 官方網站
* Apache Shiro 介紹
* JSecurity 指南（Bruce Philips 著）（頁面存檔備份，存於網際網路檔案館）
* tapestry-security，一個基於 Apache Shiro 的 Apache Tapestry 安全模組
Apache_Solr

**Solr**（讀作「solar」）是 Apache Lucene 專案的開源企業搜尋平台。其主要功能包括全文檢索、命中標示、分面搜尋、動態聚類、資料庫整合，以及富文字（如 Word、PDF）的處理。Solr 是高度可延伸的，並提供了分散式搜尋和索引複製。Solr 是最流行的企業級搜尋引擎，Solr 4 還增加了 NoSQL 支援。

Solr 是用 Java 編寫、執行在 Servlet 容器（如 Apache Tomcat 或 Jetty）的一個獨立的全文搜尋伺服器。 Solr 採用了 Lucene Java 搜尋庫為核心的全文索引和搜尋，並具有類似 REST 的 HTTP/XML 和 JSON 的 API。 Solr 強大的外部組態功能使得無需進行 Java 編碼，便可對其進行調整以適應多種類型的應用程式。Solr 有一個外掛程式架構，以支援更多的進階客製化。

因為 2010 年 Apache Lucene 和 Apache Solr 專案合併，兩個專案是由同一個 Apache 軟體基金會開發團隊製作實現的。提到技術或產品時，Lucene/Solr 或 Solr/Lucene 是一樣的。

## 歷史

2004 年，Solr 作為 CNET Networks 為公司網站添加搜尋功能的一個內部專案，由 Yonik Seeley 建立。
後來 Yonik Seeley 隨 Grant Ingersoll 和 Erik Hatcher 建立了 LucidWorks（原名 Lucid Imagination），公司提供商業支援、諮詢和 Apache Solr 搜尋技術的培訓。

2006 年 1 月，CNET Networks 決定捐贈其到 Apache 軟體基金會頂級專案 Lucene，公開發布其原始碼。像在 Apache 軟體基金會的任何新專案一樣，其進入了一個潛伏期，以助於解決組織、法律和金融問題。

2007 年 1 月，Solr 結束孵化狀態，穩步成長，累積功能，從而形成聚集了使用者、參與者和提交者的強大社群。作為一個新的開源專案，Solr 已被應用於一些流量很高的網站。

2008 年 9 月，Solr 1.3 釋出了許多增強功能，包括分散式搜尋功能和效能增強等。

2009 年 11 月，Solr 1.4 釋出。此版本對索引、搜尋和分面做了增強，並有許多其它改進，例如富文字（PDF、Word 和 HTML）的處理，基於 Carrot 2 的搜尋結果聚簇，與資料庫整合的改進。該版本還提供了許多外掛程式。

2010 年 3 月，Lucene 和 Solr 專案合併。產品現在由同一組參與者共同開發。

在 2011 年，Solr 改變了版本編號方案，以便與 Lucene 的匹配。為了使 Solr 和 Lucene 有相同的版本號，Solr 1.4 的下一版本號為 3.1。

2012 年 10 月，Solr 4.0 版本釋出，包括新的 SolrCloud 功能。

## 特色

* 全文檢索
* HTTP 管理介面
* 分佈式搜尋
* 快取

## 參見

* 面向搜尋架構
* eGranary 數字圖書館
* 資訊檢索函式庫列表

## 參考文獻

## 外部連結

* Solr 官方網站（頁面存檔備份，存於網際網路檔案館）
* Solr 指南（頁面存檔備份，存於網際網路檔案館）
* Solr wiki（頁面存檔備份，存於網際網路檔案館）
* Apache Solr 測試文件