隨著數(shù)據(jù)時(shí)代的來臨,開源軟件越來越被重視,尤其在Web應(yīng)用服務(wù)器、應(yīng)用程序架構(gòu)和大數(shù)據(jù)處理方面更是應(yīng)用廣泛,其中Hadoop、Apache 、MYSQL等開源軟件更是家喻戶曉,在企業(yè)大型網(wǎng)絡(luò)應(yīng)用中承擔(dān)重要作用。免費(fèi)、運(yùn)行速度快等優(yōu)點(diǎn)使開源軟件迅速發(fā)展,近一年在服務(wù)器領(lǐng)域應(yīng)用更是越加廣泛,下面我們來看一下未來將一段時(shí)間內(nèi)服務(wù)器行業(yè)的軟件主角。
一、HBase
HBase是一個(gè)分布式的、面向列的開源數(shù)據(jù)庫,HBase在Hadoop之上提供了類似于Bigtable的能力。HBase是Apache的Hadoop項(xiàng)目的子項(xiàng)目。HBase不同于一般的關(guān)系數(shù)據(jù)庫,它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫。另一個(gè)不同的是HBase基于列的而不是基于行的模式。
HBase(Hadoop Database)是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群。
HBase是Google Bigtable的開源實(shí)現(xiàn),類似Google Bigtable利用GFS作為其文件存儲(chǔ)系統(tǒng),HBase利用Hadoop HDFS作為其文件存儲(chǔ)系統(tǒng);Google運(yùn)行MapReduce來處理Bigtable中的海量數(shù)據(jù),HBase同樣利用Hadoop MapReduce來處理HBase中的海量數(shù)據(jù);Google Bigtable利用 Chubby作為協(xié)同服務(wù),HBase利用Zookeeper作為對應(yīng)。
上圖描述了Hadoop EcoSystem中的各層系統(tǒng),其中HBase位于結(jié)構(gòu)化存儲(chǔ)層,Hadoop HDFS為HBase提供了高可靠性的底層存儲(chǔ)支持,HadoopMapReduce為HBase提供了高性能的計(jì)算能力,Zookeeper為HBase提供了穩(wěn)定服務(wù)和failover機(jī)制。
此外,Pig和Hive還為HBase提供了高層語言支持,使得在HBase上進(jìn)行數(shù)據(jù)統(tǒng)計(jì)處理變的非常簡單。Sqoop則為HBase提供了方便的RDBMS數(shù)據(jù)導(dǎo)入功能,使得傳統(tǒng)數(shù)據(jù)庫數(shù)據(jù)向HBase中遷移變的非常方便。
Node是一個(gè)Javascript運(yùn)行環(huán)境,實(shí)際上它是對GoogleV8引擎進(jìn)行了封裝。V8引 擎執(zhí)行Javascript的速度非???,性能非常好。Node對一些特殊用例進(jìn)行了優(yōu)化,提供了替代的API,使得V8在非瀏覽器環(huán)境下運(yùn)行得更好。因此,Node不僅僅簡單的使用了V8,還對其進(jìn)行了優(yōu)化,使其在各環(huán)境下更加給力。
Node
V8引擎本身使用了一些最新的編譯技術(shù)。這使得用Javascript這類高級(jí)語言編寫出來的代碼與用C這類高級(jí)語言寫出來的代碼性能相差無幾,卻節(jié)省了開發(fā)成本。對性能的苛求是Node的一個(gè)關(guān)鍵因素。 Javascript是一個(gè)事件驅(qū)動(dòng)語言,Node利用了這個(gè)優(yōu)點(diǎn),編寫出可擴(kuò)展性高的服務(wù)器。Node采用了一個(gè)稱為“事件循環(huán)(event loop)”的架構(gòu),使得編寫可擴(kuò)展性高的服務(wù)器變得既容易又安全。提高服務(wù)器性能的技巧有多種多樣。Node選擇了一種既能提高性能,又能減低開發(fā)復(fù)雜 度的架構(gòu)。這是一個(gè)非常重要的特性。并發(fā)編程通常很復(fù)雜且布滿地雷。Node繞過了這些,但仍提供很好的性能。
Node采用一系列“非阻塞”庫來支持事件循環(huán)的方式。本質(zhì)上就是為文件系統(tǒng)、數(shù)據(jù)庫之類的資源提供接口。當(dāng) 你向文件系統(tǒng)發(fā)送一個(gè)請求時(shí),無需等待硬盤(尋址并檢索文件),硬盤準(zhǔn)備好的時(shí)候非阻塞接口會(huì)通知Node。該模型以可擴(kuò)展的方式簡化了對慢資源的訪問, 直觀,易懂。尤其是對于熟悉onmouseover、onclick等DOM事件的用戶,更有一種似曾相識(shí)的感覺。
雖然讓Javascript運(yùn)行于服務(wù)器端不是Node的獨(dú)特之處,但卻是其一強(qiáng)大功能。不得不承認(rèn),瀏覽器環(huán)境限制了我們選擇編程語言的自由。任 何服務(wù)器與日益復(fù)雜的瀏覽器客戶端應(yīng)用程序間共享代碼的愿望只能通過Javascript來實(shí)現(xiàn)。雖然還存在其他一些支持Javascript在服務(wù)器端 運(yùn)行的平臺(tái),但因?yàn)樯鲜鎏匦?,Node發(fā)展迅猛,成為事實(shí)上的平臺(tái)。
在Node啟動(dòng)的很短時(shí)間內(nèi),社區(qū)就已經(jīng)貢獻(xiàn)了大量的擴(kuò)展庫(模塊)。其中很多是連接數(shù)據(jù)庫或是其他軟件的驅(qū)動(dòng),但還有很多是憑他們的實(shí)力制作出來的非常有用的軟件。
最后,不得不提到的是Node社區(qū)。雖然Node項(xiàng)目還非常年輕,但很少看到對一個(gè)項(xiàng)目如此狂熱的社區(qū)。不管是新手,還是專家,大家都圍繞著項(xiàng)目,使用并貢獻(xiàn)自已的能力,致力于打造一個(gè)探索、支持、分享、聽取建議的樂土。
三、Nginx
Nginx 是一個(gè)高性能的反向代理 服務(wù)器,也是一個(gè)IMAP/POP3/SMTP 代理服務(wù)器。 Nginx是由Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點(diǎn)開發(fā)的,第一個(gè)公開版本0.1.0發(fā)布于2004年10月4日。其將源代碼以類BSD許可證的形式發(fā)布,因它的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名。2011年6月1日,nginx 1.0.4發(fā)布。
優(yōu)點(diǎn):
Nginx可以在大多數(shù)Unix like OS上編譯運(yùn)行,并有Windows移植版。目前 Nginx的1.0.9穩(wěn)定版已經(jīng)于2011年11月1日發(fā)布,開發(fā)版本已完成的為1.1.8,如果新建站點(diǎn),建議使用最新穩(wěn)定版作為生產(chǎn)版本,已有站點(diǎn)升級(jí)急迫性不高。 Nginx的源代碼使用2-clause BSD-like license。
Nginx是一個(gè)很牛的高性能Web和反向代理服務(wù)器,它具有很多非常優(yōu)越的特性:
在高連接并發(fā)的情況下,Nginx是Apache服務(wù)器不錯(cuò)的替代品:Nginx在美國是做虛擬主機(jī)生意的老板們經(jīng)常選擇的軟件平臺(tái)之一。能夠支持高達(dá) 50,000個(gè)并發(fā)連接數(shù)的響應(yīng),感謝Nginx為我們選擇了epoll and kqueue作為開發(fā)模型。
Nginx作為負(fù)載均衡服務(wù)器:Nginx 既可以在內(nèi)部直接支持Rails和PHP程序?qū)ν膺M(jìn)行服務(wù),也可以支持作為 HTTP代理服務(wù)器對外進(jìn)行服務(wù)。Nginx采用C進(jìn)行編寫,不論是系統(tǒng)資源開銷還是CPU使用效率都比Perlbal要好很多。
作為郵件代理服務(wù)器:Nginx同時(shí)也是一個(gè)非常優(yōu)秀的郵件代理服務(wù)器(最早開發(fā)這個(gè)產(chǎn)品的目的之一也是作為郵件代理服務(wù)器),Last. fm 描述了成功并且美妙的使用經(jīng)驗(yàn)。
Nginx是一個(gè)安裝非常的簡單,配置文件非常簡潔(還能夠支持perl語法),Bugs非常少的服務(wù)器:Nginx 啟動(dòng)特別容易,并且?guī)缀蹩梢宰龅?*24不間斷運(yùn)行,即使運(yùn)行數(shù)個(gè)月也不需要重新啟動(dòng)。你還能夠不間斷服務(wù)的情況下進(jìn)行軟件版本的升級(jí)。
四、Hadoop
Hadoop一個(gè)分布式系統(tǒng)基礎(chǔ)架構(gòu),由Apache基金會(huì)開發(fā)。用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序。充分利用集群的威力高速運(yùn)算和存儲(chǔ)。Hadoop實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng)簡稱HDFS。HDFS有著高容錯(cuò)性的特點(diǎn),并且設(shè)計(jì)用來部署在低廉的硬件上。而且它提供高傳輸率來訪問應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集的應(yīng)用程序。HDFS放寬了POSIX的要求這樣可以流的形式訪問文件系統(tǒng)中的數(shù)據(jù)。
Hadoop是一個(gè)能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架。但是 Hadoop 是以一種可靠、高效、可伸縮的方式進(jìn)行處理的。Hadoop是可靠的,因?yàn)樗僭O(shè)計(jì)算元素和存儲(chǔ)會(huì)失敗,因此它維護(hù)多個(gè)工作數(shù)據(jù)副本,確保能夠針對失敗的節(jié)點(diǎn)重新分布處理。Hadoop是高效的,因?yàn)樗圆⑿械姆绞焦ぷ?,通過并行處理加快處理速度。Hadoop還是可伸縮的,能夠處理 PB 級(jí)數(shù)據(jù)。此外,Hadoop依賴于社區(qū)服務(wù)器,因此它的成本比較低,任何人都可以使用。
Hadoop帶有用Java語言編寫的框架,因此運(yùn)行在Linux生產(chǎn)平臺(tái)上是非常理想的。Hadoop上的應(yīng)用程序也可以使用其他語言編寫,比如 C++。
五、Ruby on Rails
Ruby on Rails是一個(gè)可以使你開發(fā),部署,維護(hù)web應(yīng)用程序變得簡單的框架。
當(dāng)然了,所有的web框架都有同樣的目標(biāo)。是什么使得Rails如此不同呢?我們可以通過幾個(gè)途徑來回答這個(gè)問題。
第一是看架構(gòu)。在過去的時(shí)間里,許多開發(fā)者在嚴(yán)謹(jǐn)?shù)膚eb應(yīng)用程序上使用 MVC 架構(gòu)。他們發(fā)現(xiàn)MVC架構(gòu)可以使他們的程序變得更清晰,在java中像Tapestry和 Struts這些框架都是基于MVC 。Rails也是一個(gè)MVC框架。當(dāng)你使用Rails進(jìn)行開發(fā),應(yīng)用程序的所有代碼以一種標(biāo)準(zhǔn)方式互相作用。在開始開發(fā)之前,整個(gè)應(yīng)用程序的骨架已經(jīng)搭好的。
回答這個(gè)問題的第二個(gè)是看編程語言。Rails程序是使用Ruby編寫的,它是一門現(xiàn)代,面向?qū)ο蟮哪_本語言。Ruby簡潔,不難理解。它可以讓你快速地用代碼自然 , 清晰表達(dá)想法。讓你的程序能很簡單被編寫并且在幾個(gè)月后還能很容易讀懂。
Ruby on Rails是一個(gè)Web應(yīng)用程序框架,是一個(gè)相對較新的Web應(yīng)用程序框架,構(gòu)建在Ruby語言之上。它被宣傳為現(xiàn)有企業(yè)框架的一個(gè)替代,而它的目標(biāo),簡而言之,就是讓生活,至少是Web開發(fā)方面的生活,變得更輕松。
J2EE是一種利用Java 2平臺(tái)來簡化企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的復(fù)雜問題的體系結(jié)構(gòu)。J2EE技術(shù)的基礎(chǔ)就是核心Java平臺(tái)或Java 2平臺(tái)的標(biāo)準(zhǔn)版,J2EE體系結(jié)構(gòu)提供中間層集成框架用來滿足無需太多費(fèi)用而又需要高可用性能高可靠性以及可擴(kuò)展性的應(yīng)用的需求。
Java 2平臺(tái)有3個(gè)版本,它們是適用于小型設(shè)備和智能卡的Java 2平臺(tái)Micro版、適用于桌面系統(tǒng)的Java 2平臺(tái)標(biāo)準(zhǔn)版、適用于創(chuàng)建服務(wù)器應(yīng)用程序和服務(wù)的Java 2平臺(tái)企業(yè)版。
Ruby on Rails和 J2EE堆棧的比較
可以看到,Rails堆棧和構(gòu)成普通的基于 J2EE的Web應(yīng)用程序的組件之間的基本區(qū)別很小。兩者都有用來執(zhí)行應(yīng)用程序代碼的容器;都有幫助分離應(yīng)用程序的模型、視圖和控件的MVC框架;以及持久存儲(chǔ)數(shù)據(jù)的機(jī)制。
MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫。由C++語言編寫。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
MongoDB
它的特點(diǎn)是高性能、易部署、易使用,存儲(chǔ)數(shù)據(jù)非常方便。主要功能特性有:
●面向集合存儲(chǔ),易存儲(chǔ)對象類型的數(shù)據(jù)。
●模式自由。
●支持動(dòng)態(tài)查詢。
●支持完全索引,包含內(nèi)部對象。
●支持查詢。
●支持復(fù)制和故障恢復(fù)。
●使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),包括大型對象(如視頻等)。
●自動(dòng)處理碎片,以支持云計(jì)算層次的擴(kuò)展性。
●支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
●文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展)。
●可通過網(wǎng)絡(luò)訪問。
所謂“面向集合”意思是數(shù)據(jù)被分組存儲(chǔ)在數(shù)據(jù)集中,被稱為一個(gè)集合。每個(gè)集合在數(shù)據(jù)庫中都有一個(gè)唯一的標(biāo)識(shí)名,并且可以包含無限數(shù)目的文檔。集合的概念類似關(guān)系型數(shù)據(jù)庫里的表,不同的是它不需要定義任何模式。
模式自由,意味著對于存儲(chǔ)在mongodb數(shù)據(jù)庫中的文件,我們不需要知道它的任何結(jié)構(gòu)定義。如果需要的話,你完全可以把不同結(jié)構(gòu)的文件存儲(chǔ)在同一個(gè)數(shù)據(jù)庫里。
存儲(chǔ)在集合中的文檔,被存儲(chǔ)為鍵-值對的形式。鍵用于唯一標(biāo)識(shí)一個(gè)文檔,為字符串類型,而值則可以是各種復(fù)雜的文件類型。我們稱這種存儲(chǔ)形式為BSON。
MongoDB服務(wù)端可運(yùn)行在Linux、Windows或OS X平臺(tái),支持32位和64位應(yīng)用,默認(rèn)端口為27017。推薦運(yùn)行在64位平臺(tái),因?yàn)镸ongoDB在32位模式運(yùn)行時(shí)支持的最大文件尺寸為2GB。
Tomcat是Apache軟件基金會(huì)的Jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache、Sun 和其他一些公司及個(gè)人共同開發(fā)而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP 規(guī)范總是能在Tomcat 中得到體現(xiàn),Tomcat 5支持最新的Servlet 2.4和JSP 2.0規(guī)范。因?yàn)門omca 技術(shù)先進(jìn)、性能穩(wěn)定,而且免費(fèi),因而深受Java 愛好者的喜愛并得到了部分軟件開發(fā)商的認(rèn)可,成為目前比較流行的Web應(yīng)用服務(wù)器。目前最新版本是7.0。
Tomcat
Tomcat很受廣大程序員的喜歡,因?yàn)樗\(yùn)行時(shí)占用的系統(tǒng)資源小,擴(kuò)展性好,支持負(fù)載平衡與郵件服務(wù)等開發(fā)應(yīng)用系統(tǒng)常用的功能;而且它還在不斷的改進(jìn)和完善中,任何一個(gè)感興趣的程序員都可以更改它或在其中加入新的功能。
Tomcat是一個(gè)輕量級(jí)應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP 程序的首選。對于一個(gè)初學(xué)者來說,可以這樣認(rèn)為,當(dāng)在一臺(tái)機(jī)器上配置好Apache服務(wù)器,可利用它響應(yīng)對HTML頁面的訪問請求。實(shí)際上Tomcat部分是Apache服務(wù)器的擴(kuò)展,但它是獨(dú)立運(yùn)行的,所以當(dāng)你運(yùn)行tomcat時(shí),它實(shí)際上作為一個(gè)與Apache獨(dú)立的進(jìn)程單獨(dú)運(yùn)行的。
這里的訣竅是,當(dāng)配置正確時(shí),Apache為HTML頁面服務(wù),而Tomcat實(shí)際上運(yùn)行JSP 頁面和Servlet。另外,Tomcat和IIS、Apache等Web服務(wù)器一樣,具有處理HTML頁面的功能,另外它還是一個(gè)Servlet和JSP容器,獨(dú)立的Servlet容器是Tomcat的默認(rèn)模式。不過,Tomcat處理靜態(tài)HTML的能力不如Apache服務(wù)器。目前Tomcat最新版本為7.0.22 Released。
MySQL是一個(gè)小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典MySQL AB公司。在2008年1月16號(hào)被Sun公司收購。而2009年,SUN又被Oracle收購。MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi)。這樣就增加了速度并提高了靈活性。MySQL的SQL“結(jié)構(gòu)化查詢語言”。SQL是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL軟件采用了GPL。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫。
MySQL
系統(tǒng)特性:
1.使用C和C++編寫,并使用了多種編譯器進(jìn)行測試,保證源代碼的可移植性。
2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統(tǒng)。
3.為多種編程語言提供了API。這些編程語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
4.支持多線程,充分利用CPU資源。
5.優(yōu)化的SQL查詢算法,有效地提高查詢速度。
6.既能夠作為一個(gè)單獨(dú)的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也能夠作為一個(gè)庫而嵌入到其他的軟件中提供多語言支持,常見的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名。
7.提供TCP/IP、ODBC和JDBC等多種數(shù)據(jù)庫連接途徑。
8.提供用于管理、檢查、優(yōu)化數(shù)據(jù)庫操作的管理工具。
9.可以處理擁有上千萬條記錄的大型數(shù)據(jù)庫。
10.支持多種存儲(chǔ)引擎。
HTTP服務(wù)器軟件之一,可通過簡單的API擴(kuò)展Perl/Python解釋器可被編譯到服務(wù)器中,完全免費(fèi),完全源代碼開放??梢詣?chuàng)建一個(gè)每天有數(shù)百萬人訪問的Web服務(wù)器。
Apache
Apache支持許多特性,大部分通過編譯的模塊實(shí)現(xiàn)。這些特性從服務(wù)器端的編程語言支持到身份認(rèn)證方案。一些通用的語言接口支持Perl,Python, Tcl, 和 PHP。流行的認(rèn)證模塊包括 mod_access, mod_auth 和 mod_digest。Apache日志可以通過網(wǎng)頁瀏覽器使用免費(fèi)的腳本AWStats或Visitors來進(jìn)行分析。
《PC Magazine》2004年8月評出了近30年以來的10款最佳軟件產(chǎn)品。他們其中或者是有過最輝煌的歷史,或者是最具創(chuàng)意。其對Apache的評價(jià)是:第三名:Apache(阿帕奇,1995年推出)Apache目前已經(jīng)演變成了“LAMP”,即Linux、Apache、MySQL和PHP的聯(lián)合體。這是一個(gè)開放源代碼軟件項(xiàng)目,已經(jīng)對微軟的“.NET”戰(zhàn)略構(gòu)成嚴(yán)重威脅。尤其是Apache網(wǎng)絡(luò)服務(wù)器,讓用戶充分體驗(yàn)到開發(fā)源碼軟件的穩(wěn)定性、可靠性和可定制性。
Apple.com評價(jià)Apache時(shí)說:Apache是服務(wù)器軟件始終不斷進(jìn)化的大塊部件,它免費(fèi)但又是無價(jià)之寶。Apache是在資源開放運(yùn)動(dòng)中出現(xiàn)的絕對珍品,因?yàn)椴粚儆趥€(gè)人專利而是對公共免費(fèi)。一旦擁有這些源碼,程序員能夠自由完成所想——能在其它程序員接替工作時(shí)被賦予同樣的權(quán)限來改變 和修改自己的源代碼。
十、 Spring Framework
Spring Framework是什么呢?首先它是一個(gè)開源的項(xiàng)目,而且目前非?;钴S;它是一個(gè)基于IoC和AOP的構(gòu)架多層j2ee系統(tǒng)的框架,但它不強(qiáng)迫你必須在每一層 中必須使用Spring,因?yàn)樗K化的很好,允許你根據(jù)自己的需要選擇使用它的某一個(gè)模塊;它實(shí)現(xiàn)了很優(yōu)雅的MVC,對不同的數(shù)據(jù)訪問技術(shù)提供了統(tǒng)一的 接口,采用IoC使得可以很容易的實(shí)現(xiàn)bean的裝配,提供了簡潔的AOP并據(jù)此實(shí)現(xiàn)Transcation Managment,等等......
特性:
●強(qiáng)大的基于JavaBeans的采用控制翻轉(zhuǎn)原則的配置管理,使得應(yīng)用程序的組建更加快捷簡易。
●一個(gè)可用于從applet到Java EE等不同運(yùn)行環(huán)境的核心Bean工廠。
●數(shù)據(jù)庫事務(wù)的一般化抽象層,允許插件式事務(wù)管理器,簡化事務(wù)的劃分使之與底層無關(guān)。
●內(nèi)建的針對JTA和單個(gè)JDBC數(shù)據(jù)源的一般化策略,使Spring的事務(wù)支持不要求 Java EE環(huán)境,這與一般的JTA或者EJB CMT相反。
●JDBC 抽象層提供了有針對性的異常等級(jí), 簡化了錯(cuò)誤處理, 大大減少了程序員的編碼量. 再次利用JDBC時(shí),你無需再寫出另一個(gè) '終止' 模塊。 并且面向JDBC的異常與Spring通用數(shù)據(jù)訪問對象異常等級(jí)相一致。
●以資源容器,DAO實(shí)現(xiàn)和事務(wù)策略等形式與Hibernate,JDO和iBATIS SQL Maps集成。利用眾多的翻轉(zhuǎn)控制方便特性來全面支持, 解決了許多典型的Hibernate集成問題. 所有這些全部遵從Spring通用事務(wù)處理和通用數(shù)據(jù)訪問對象異常等級(jí)規(guī)范。
●靈活的基于核心Spring功能的MVC網(wǎng)頁應(yīng)用程序框架。開發(fā)者通過策略接口將擁有對該框架的高度控制,因而該框架將適應(yīng)于多種呈現(xiàn)技術(shù),值得注意的是,Spring 中間層可以輕易地結(jié)合于任何基于 MVC 框架的網(wǎng)頁層,
●提供諸如事務(wù)管理等服務(wù)的面向方面編程框架。
在設(shè)計(jì)應(yīng)用程序Model時(shí),MVC 模式(例如Struts)通常難于給出一個(gè)簡潔明了的框架結(jié)構(gòu)。Spring卻具有能夠讓這部分工作變得簡單的能力。程序開發(fā)員們可以使用Spring的 JDBC 抽象層重新設(shè)計(jì)那些復(fù)雜的框架結(jié)構(gòu)。
PostgreSQL是以加州大學(xué)伯克利分校計(jì)算機(jī)系開發(fā)的 POSTGRES,版本 4.2為基礎(chǔ)的對象關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS)。PostgreSQL支持大部分 SQL標(biāo)準(zhǔn)并且提供了許多其他現(xiàn)代特性:復(fù)雜查詢、外鍵、觸發(fā)器、視圖、事務(wù)完整性、多版本并發(fā)控制。同樣,PostgreSQL 可以用許多方法擴(kuò)展,比如, 通過增加新的數(shù)據(jù)類型、函數(shù)、操作符、聚集函數(shù)、索引方法、過程語言。并且,因?yàn)樵S可證的靈活,任何人都可以以任何目的免費(fèi)使用,修改,和分發(fā)PostgreSQL, 不管是私用,商用,還是學(xué)術(shù)研究使用。
PostgreSQL
優(yōu)點(diǎn):
事實(shí)上, PostgreSQL的特性覆蓋了SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以說是目前世界上最豐富的數(shù)據(jù)類型的支持,其中有些數(shù)據(jù)類型可以說連商業(yè)數(shù)據(jù)庫都不具備, 比如 IP 類型和幾何類型等;其次,PostgreSQL是全功能的自由軟件數(shù)據(jù)庫,很長時(shí)間以來,PostgreSQL是唯一支持事務(wù)、子查詢、多版本并行控制系統(tǒng)、數(shù)據(jù)完整性檢查等特性的唯一的一種自由軟件的數(shù)據(jù)庫管理系統(tǒng)。直到最近才有 Inprise的InterBase以及SAP等廠商將其原先專有軟件開放為自由軟件之后才打破了這個(gè)唯一。最后,PostgreSQL擁有一支非常活躍的開發(fā)隊(duì)伍,而且在許多黑客的努力下,PostgreSQL的質(zhì)量日益提高。
從技術(shù)角度來講,PostgreSQL采用的是比較經(jīng)典的C/S(client/server)結(jié)構(gòu),也就是一個(gè)客戶端對應(yīng)一個(gè)服務(wù)器端守護(hù)進(jìn)程的模式,這個(gè)守護(hù)進(jìn)程分析客戶端來的查詢請求,生成規(guī)劃樹,進(jìn)行數(shù)據(jù)檢索并最終把結(jié)果格式化輸出后返回給客戶端。為了便于客戶端的程序的編寫,由數(shù)據(jù)庫服務(wù)器提供了統(tǒng)一的客戶端 C 接口。而不同的客戶端接口都是源自這個(gè)C接口,比如 ODBC,JDBC,Python,Perl ,Tcl,C/C++,ESQL等, 同時(shí)也要指出的是,PostgreSQL 對接口的支持也是非常豐富的,幾乎支持所有類型的數(shù)據(jù)庫客戶端接口。這一點(diǎn)也可以說是PostgreSQL一大優(yōu)點(diǎn)。
缺點(diǎn):
從Postgres開始,PostgreSQL就經(jīng)受了多次變化。
首先,早期的 PostgreSQL繼承了幾乎所有Ingres, Postgres, Postgres95 的問題:過于學(xué)院味,因?yàn)槭紫人哪康氖菙?shù)據(jù)庫研究,因此不論在穩(wěn)定性, 性能還是使用方便方面,長期以來一直沒有得到重視,直到PostgreSQL項(xiàng)目開始以后,情況才越來越好,目前,PostgreSQL已經(jīng)完全可以勝任任何中上規(guī)模范圍內(nèi)的應(yīng)用范圍的業(yè)務(wù)。
目前有報(bào)道的生產(chǎn)數(shù)據(jù)庫的大小已經(jīng)有TB級(jí)的數(shù)據(jù)量,已經(jīng)逼近32位計(jì)算的極限。不過學(xué)院味也給 PostgreSQL帶來一個(gè)意想不到的好處:大概因?yàn)楦鞔髮W(xué)的軟硬件環(huán)境差異太大的緣故,它是目前支持平臺(tái)最多的數(shù)據(jù)庫管理系統(tǒng)的一種,所支持的平臺(tái)多達(dá)十幾種,包括不同的系統(tǒng),不同的硬件體系。至今,它仍然保持著支持平臺(tái)最多的數(shù)據(jù)庫管理系統(tǒng)的稱號(hào)。
其次,PostgreSQL的確還欠缺一些比較高端的數(shù)據(jù)庫管理系統(tǒng)需要的特性,比如數(shù)據(jù)庫集群,更優(yōu)良的管理工具和更加自動(dòng)化的系統(tǒng)優(yōu)化功能 等提高數(shù)據(jù)庫性能的機(jī)制等。
如今的Java Web開發(fā)對于需求來說已經(jīng)變得過于復(fù)雜。當(dāng)今眾多Java領(lǐng)域的Web開發(fā)框架不僅使用復(fù)雜,而且并沒有很好的遵循Don’t Repeat Yourself(DRY)原則。像Rails,Django和TurboGears這樣的動(dòng)態(tài)框架在Web開發(fā)領(lǐng)域開辟了一條新的道路,Grails基于這些概念之上,采用動(dòng)態(tài)方法減小了Java平臺(tái)上進(jìn)行Web開發(fā)的復(fù)雜度,不過與那些框架不同的是,Grails是構(gòu)建在Spring和Hibernate等Java已有的技術(shù)之上的。
Grails
Grails是一個(gè)full-stack框架,它借助于核心技術(shù)與相關(guān)的插件來解決Web開發(fā)中方方面面的問題,其中包括: 易于使用的基于Hibernate的對象-關(guān)系映射(ORM)層 稱為Groovy Server Pages的表現(xiàn)層技術(shù) 基于Spring MVC的控制器層 構(gòu)建于Gant 上的命令行腳本運(yùn)行環(huán)境 內(nèi)置Jetty服務(wù)器,不用重新啟動(dòng)服務(wù)器就可以進(jìn)行重新加載 利用內(nèi)置的Spring 容器實(shí)現(xiàn)依賴注入 基于Spring的MessageSource核心概念,提供了對國際化的支持 基于Spring事務(wù)抽象概念,實(shí)現(xiàn)事務(wù)服務(wù)層 借助于功能強(qiáng)大的Groovy動(dòng)態(tài)語言和領(lǐng)域特定語言,以上那些特性變得非常易用。
十三、Struts
Struts是開源軟件。使用Struts的目的是為了幫助我們減少在運(yùn)用MVC設(shè)計(jì)模型來開發(fā)Web應(yīng)用的時(shí)間。如果我們想混合使用Servlets和JSP的優(yōu)點(diǎn)來建立可擴(kuò)展的應(yīng)用,Struts是一個(gè)不錯(cuò)的選擇。
框架
Struts框架具有組件的模塊化,靈活性和重用性的優(yōu)點(diǎn),同時(shí)簡化了基于MVC的web應(yīng)用程序的開發(fā)。
Struts可以清晰地區(qū)分控制,事務(wù)邏輯和外觀,從而簡化了開發(fā)應(yīng)用程序的過程。Struts提供的類使得開發(fā)工作更加簡單,這些類包括:
●控制程序流程的類
●實(shí)現(xiàn)和執(zhí)行程序事務(wù)邏輯的類
●自定義的標(biāo)記庫使得創(chuàng)建和驗(yàn)證HTML表單更加容易
十四、JBoss
JBoss是全世界開發(fā)者共同努力的成果,一個(gè)基于J2EE的開放源代碼的應(yīng)用服務(wù)器。 因?yàn)镴Boss代碼遵循LGPL許可,可以在任何商業(yè)應(yīng)用中免費(fèi)使用它,而不用支付費(fèi)用。2006年,Jboss公司被Redhat公司收購。JBoss是一個(gè)管理EJB的容器和服務(wù)器,支持EJB 1.1、EJB 2.0和EJB3.0的規(guī)范。但JBoss核心服務(wù)不包括支持servlet/JSP的WEB容器,一般與Tomcat或Jetty綁定使用。
JBoss
優(yōu)點(diǎn)概述:
1、JBoss是免費(fèi)的,開放源代碼J2EE的實(shí)現(xiàn),通過LGPL許可證進(jìn)行發(fā)布。但同時(shí)也有閉源的,開源和閉源流入流出的不是同一途徑。
2、JBoss需要的內(nèi)存和硬盤空間比較小。
3、安裝便捷:解壓后,只需配置一些環(huán)境變量即可。
4、JBoss支持"熱部署",部署B(yǎng)EAN時(shí),只拷貝BEAN的JAR文件到部署路徑下即可自動(dòng)加載它;如果有改動(dòng),也會(huì)自動(dòng)更新。
5、JBoss與Web服務(wù)器在同一個(gè)Java虛擬機(jī)中運(yùn)行 JBoss運(yùn)行后后臺(tái)管理界面,Servlet調(diào)用EJB不經(jīng)過網(wǎng)絡(luò),從而大大提高運(yùn)行效率,提升安全性能。
6、用戶可以直接實(shí)施J2EE-EAR,而不是以前分別實(shí)施EJB-JAR和Web-WAR,非常方便。
7、Jboss支持集群。
GlassFish是一款強(qiáng)健的商業(yè)兼容應(yīng)用服務(wù)器,達(dá)到產(chǎn)品級(jí)質(zhì)量,可免費(fèi)用于開發(fā)、部署和重新分發(fā)。
GlassFish
優(yōu)點(diǎn):
在遵守通用開發(fā)和發(fā)布許可版本 1.0 的前提下,開發(fā)者可以免費(fèi)獲得源代碼,還可以對代碼進(jìn)行更改。要申請 Java Compatibility,商業(yè)分發(fā)的開發(fā)者需要簽署 Java Developer License ,并在重新分發(fā)代碼前驗(yàn)證代碼已通過兼容性測試套件的測試。任何人均可簽署分發(fā)協(xié)議,對代碼進(jìn)行審閱以貢獻(xiàn)更改、錯(cuò)誤修復(fù)和功能。
GlassFish 的更新版本將于每晚發(fā)布。發(fā)布的代碼已經(jīng)過了非常基本的測試以確保它們能夠進(jìn)行構(gòu)建并執(zhí)行,但這些代碼并沒有象產(chǎn)品發(fā)行版那樣經(jīng)過完整測試。
GlassFish 將實(shí)現(xiàn)最新版本的Java EE平臺(tái)Java EE 5,這兩者將大約同時(shí)成為最終版本。同時(shí),Sun 還將基于GlassFish發(fā)行最終的受支持的兼容Sun Java System Application Server PE 9.0。
在2005年6月,Sun將GlassFish項(xiàng)目的Web站點(diǎn)向公眾開放,從而發(fā)布了GlassFish 項(xiàng)目。開發(fā)者可以訪問源代碼、每晚構(gòu)建、討論組和電子郵件列表。這是開發(fā)者首次能夠了解并參與應(yīng)用服務(wù)器的開發(fā)過程。最初,訪問僅限于Web 層,隨著GlassFish 的開發(fā),訪問也將擴(kuò)大到其他模塊。
GlassFish 項(xiàng)目將Java EE呈現(xiàn)在更多愛好者面前,這些人最終將成為 Java EE 許可證持有者的客戶。GlassFish不會(huì)更改許可證持有者的任何許可證條款。在遵守其許可證條款的前提下,許可證持有者仍可以銷售或分發(fā)代碼,并對已通過TCK的產(chǎn)品使用Java Compatibility品牌。在遵守授予開發(fā)者的CDDL許可證條款的前提下,他們可以使用、編輯、更改代碼,并可以分發(fā)代碼或?qū)⑵溆糜谏a(chǎn)。但他們沒有得到使用CTS 的許可,也不能使用Java Compatibility品牌。
GlassFish雖然是一個(gè)標(biāo)準(zhǔn)的JavaEE服務(wù)器,但是它同樣具有輕便的Web容器的優(yōu)點(diǎn),它和Tomcat一樣是優(yōu)秀的Servlet容器,同時(shí),它具備延遲加載的功能,也就是說,GlassFish在啟動(dòng)時(shí)只會(huì)啟動(dòng)一些必需的核心服務(wù)項(xiàng),如LocalJNDI服務(wù),用于管理的JMX服務(wù)等,而對于暫時(shí)用不到的服務(wù)通通不予加載,直到需要的時(shí)候再說,而且這個(gè)特性不需要額外的配置。這樣GlassFish的啟動(dòng)時(shí)間是以前的一半,內(nèi)存占用也只有以前的一半。 GlassFish的另外一個(gè)秘密武器,就是Grizzly,Grizzly是一個(gè)基于JavaNIO技術(shù),并完全以Java實(shí)現(xiàn)的一個(gè)HTTP的Listener,有了Grizzly,GlassFish在靜態(tài)文件傳輸方面的性能比Tomcat要強(qiáng)得多,而且可以支持更多的并發(fā)訪問。我們可以拋棄JBoss+Tomcat和Apache+Tomcat這樣的組合了。
十六、CouchDB
CouchDB是用Erlang開發(fā)的面向文檔的數(shù)據(jù)庫系統(tǒng),最近剛剛發(fā)布了1.0版本(2010年7月14日)。CouchDB不是一個(gè)傳統(tǒng)的關(guān)系數(shù)據(jù)庫,而是面向文檔的數(shù)據(jù)庫,其數(shù)據(jù)存儲(chǔ)方式有點(diǎn)類似lucene的index文件格式,CouchDB最大的意義在于它是一個(gè)面向web應(yīng)用的新一代存儲(chǔ)系統(tǒng),事實(shí)上,CouchDB的口號(hào)就是:下一代的Web應(yīng)用存儲(chǔ)系統(tǒng)。
特點(diǎn):
一、CouchDB是分布式的數(shù)據(jù)庫,他可以把存儲(chǔ)系統(tǒng)分布到n臺(tái)物理的節(jié)點(diǎn)上面,并且很好的協(xié)調(diào)和同步節(jié)點(diǎn)之間的數(shù)據(jù)讀寫一致性。這當(dāng)然也得以于Erlang無與倫比的并發(fā)特性才能做到。對于基于web的大規(guī)模應(yīng)用文檔應(yīng)用,然的分布式可以讓它不必像傳統(tǒng)的關(guān)系數(shù)據(jù)庫那樣分庫拆表,在應(yīng)用代碼層進(jìn)行大量的改動(dòng)。
二、CouchDB是面向文檔的數(shù)據(jù)庫,存儲(chǔ)半結(jié)構(gòu)化的數(shù)據(jù),比較類似lucene的index結(jié)構(gòu),特別適合存儲(chǔ)文檔,因此很適合CMS,電話本,地址本等應(yīng)用,在這些應(yīng)用場合,文檔數(shù)據(jù)庫要比關(guān)系數(shù)據(jù)庫更加方便,性能更好。
三、CouchDB支持REST API,可以讓用戶使用JavaScript來操作CouchDB數(shù)據(jù)庫,也可以用JavaScript編寫查詢語句,我們可以想像一下,用AJAX技術(shù)結(jié)合CouchDB開發(fā)出來的CMS系統(tǒng)會(huì)是多么的簡單和方便 。
其實(shí)CouchDB只是Erlang應(yīng)用的冰山一角,在最近幾年,基于Erlang的應(yīng)用也得到的蓬勃的發(fā)展,特別是在基于web的大規(guī)模,分布式應(yīng)用領(lǐng)域,幾乎都是Erlang的優(yōu)勢項(xiàng)目。