當前位置:
首頁 > 知識 > 給初學者的建議 中

給初學者的建議 中

說過了硬體就該是軟體了

這篇是這個系列的重中之重

首先我們來說說什麼是軟體,統一一下概念

所謂軟體通俗地說就是一套計算機程序

實現了某些功能的計算機程序

在很早很早以前,一台計算機的軟體是不分層次結構的

一台計算機只有一個系統,這個系統既是操作系統又是應用軟體,與硬體緊密綁定

後來經過許多年的發展發展發展

人們把一些與硬體緊密相連的又經常用到必不可少的功能做到一套程序中去

這一套程序就被人們稱做操作系統

另外一些可有可無的,不同工作適應不同環境的功能封裝到另外一套程序中去

而這一系列程序被人們稱作應用軟體

如下圖:

-------------------------------------------

|應用軟體:falshgat/IE/realplayer/winamp..|

-------------------------------------------

|操作系統:UNIX/Windows/Linux/Solaris... |

-------------------------------------------

前一篇我們知道,硬體分為伺服器工作站與 pc

其實無論哪種硬體的軟體,都有操作系統與應用軟體

ok,那下面我們來談應用軟體

在現在企業級應用中,我們的應用軟體一般分為三層

三層分別是表示層,業務邏輯層,數據持久層

------------------------------

|表示層|業務邏輯層|數據持久層|

------------------------------

我們來說說三層中的代表軟體

表示層

這一層一般在客戶端 pc 機上,最常見的是 IE 瀏覽器,這就是表示層的軟體

表示層是直接與使用者交互的軟體

業務邏輯層這一層一般在伺服器端,顧名思義,所有業務邏輯處理都在這一層完成

最典型的是 appserver,比如 IBM 的 websphere,BEA 的 weblogic 還有 tomcat/jboss 等

這一層也是三層中的重點,我們要說的大部分內容都是關於這一層的,這個等會再說

這一層就叫做中間層

數據持久層

這一層典型的就是資料庫,一般也在伺服器端

但該伺服器一般與裝業務邏輯層軟體的伺服器分開

當然你也可以用 IO 輸入輸出流往硬碟上寫東西

但沒人會建議你這麼做,因為這樣做你的數據缺乏管理,不管怎樣

這一層要做的就是保存數據,業務邏輯層軟體一般不負責保留數據

或者說業務邏輯層只負責暫時儲存數據,一關機,業務邏輯層數據全部 over 了

那麼數據的持久化(也就是儲存數據)就必須要在這一層完成

下面放著這些概念不談,我們來說說將來的趨勢

趨勢一:

瘦客戶端,很早很早以前,當時 C/S 模式也就是 client/server

客戶端軟體大行其道的年代,一個 pc 用戶,是採用一個傻終端連接到伺服器上

然後進行相應的操作,最典型的就是我們上 bbs 經常用的 c-term

這就是那個時代的產物,同樣還有我國現行的機票定座用的 e-term

後來呢,瀏覽器變得非常流行,人們發現,瀏覽器也能傳遞一些數據

雖然這些數據並不像那些終端那樣準確,但應付大多數日常需求足夠了

於是人們就提出一個瘦客戶端概念,也就是說,將來表示層所有的其他軟體疾揮?

我們唯一需要的就是一個網頁瀏覽器,然後通過瀏覽器輸入 ip 地址連接到伺服器

然後進行相關的操作,由於網頁瀏覽器一般每個操作系統都有自帶一個

這樣做就達到了給我們客戶端瘦身的目的(不需要安裝額外軟體)

這樣模式被稱作 B/S 模式,也就是 browser/server 模式

但需要指出的是,雖然瘦客戶端是趨勢,但並不代表胖客戶端沒有市場

尤其是一些複雜的業務操作,還是瀏覽器這種簡單軟體無法勝任的

趨勢二:

傻資料庫,ok,首先,我承認,這個名詞是我發明的,但我實在無法找到一個更好的表達

什麼是傻資料庫,如果誰對資料庫有所了解的話,就知道,以前的資料庫

有自己的一套管理體系,甚至有自己的客戶端,比如 oracle,mysql,sqlserver 都有

在某個管理工具上寫什麼 sql 語句查詢資料庫是我們以前常做的事

那麼將來我們提倡的是:將所有的業務邏輯封裝到業務邏輯層去

管理的事情由軟體來做,由業務邏輯層的軟體來做

所謂傻資料庫就是說,將來的資料庫什麼事都不用做

只用把數據給我保存好就行了,那些複雜的業務邏輯什麼外鍵什麼關聯

都沒資料庫什麼事了,都交給業務邏輯層軟體來做

這樣做的好處就是:我們就不需要這些該死難懂又複雜的資料庫系列管理工具了

而且這些工具每個資料庫都有自己的工具,完全不一樣,亂七八糟,沒有人喜歡面對他們

除了資料庫維護人員,也就是 DBA,我們是軟體工程師,維護的事讓他們去做

而且嚴禁資料庫維護人員改動資料庫的數據,他們只做備份,必要時候恢復一下就是了了解了這兩個趨勢之後,是不是有種砍頭去尾保中間的感覺?

沒錯,未來的趨勢就是中間件時代,中間件工程師將是未來計算機應用的主流

那再次統一一下概念,什麼是中間件?

記得我上學的時候,看 ibm 的教材,看了半天中間件定義,就看懂記住一句話

中間件是做別人不願意去做的事情,現在想想,狗屁定義,呵呵

什麼是中間件,中間件是業務邏輯層的應用軟體

是處理業務數據與客戶端之間業務邏輯的一種應用軟體

一種提供網路服務的伺服器端應用軟體

舉個非常簡單的例子,網上銀行,某個人想用 IE 進入工行的賬戶,然後轉帳

在這個例子中,客戶端表示層顯然是 IE,數據持久層顯然是銀行的核心資料庫

那麼中間件是什麼?中間件就是提供這種服務的系統

這三層的劃分如下

------------------------------

|表示層 | 業務邏輯層 | 數據持久層 |

------------------------------

| IE | 網上銀行 | 資料庫 |

------------------------------

給初學者之五:企業級應用之中間件

前面一篇簡單介紹了一下應用軟體的分層

下面重點介紹一下中間件,也就是業務邏輯層的軟體結構

從本系列第二篇我們知道,java 程序是跑在虛擬機之上的

大致結構如下:

------------

| grogram |

------------

| 虛擬機 |

------------

| 操作系統 |

------------

也就是說操作系統先運行一個 java 虛擬機,然後再在虛擬機之上運行 java 程序

這樣做的好處前面也說過了,就是安全,一旦出現病毒或是其他什麼東西

掛掉的是虛擬機,操作系統並不會受多大影響

這時候有人可能會問,為什麼非要虛擬機?把操作系統當成虛擬機為什麼不行?可以,當然可以,但是這樣做某一個應用軟體的 bug 就可能造成整個操作系統的死亡

比如說我們在某個伺服器上安裝了一個收發電子郵件的軟體和 java 虛擬機

那麼一旦黑客通過收發電子郵件的軟體入侵系統,那麼操作系統就整個玩完

那麼如果黑客通過 java 程序進行攻擊的話,那麼死的將會是虛擬機而不是操作系統

大不了虛擬機崩潰,而操作系統正常運行不受任何影響

舉個簡單例子,比如說最常見的是將資料庫(DB)與中間件放在同一台伺服器上

------------------------

| program | |

-----------| DB |

| 虛擬機 | |

------------------------

| 操作系統 |

------------------------

那麼此時如果沒有虛擬機,黑客病毒攻擊中間件系統,就有可能造成操作系統的死亡

那此時資料庫也有可能跟著一起玩完,那損失可就大咯

那如果此時有虛擬機,那麼一旦被攻擊,死的是虛擬機,操作系統與資料庫不受任何影響

嗯,回顧完虛擬機,再來介紹中間件

在很早很早以前,任何一家企業,想要搭建一個區域網系統,他需要請許多個工程師

比如說我們想搭建一個網上銀行,客戶端用瀏覽器,後台資料庫比如說用 oracle

那麼搭建這樣一個網上銀行,可能需要用到多少個工程師,我們來算一算

首先,由於客戶端用的是瀏覽器,我們需要一些了解網路通訊協議以及一些瀏覽器標準的網路工程師

其次,由於後台資料庫用的是 oracle,那我們還需要請 oracle 的工程師,因為資料庫這一層每個資料庫公司

的介面什麼都不一樣

然後,我們還需要一些操作系統的工程師,因為我們的系統需要跟操作系統直接交互

最後,我們需要一些設計網上銀行系統及其相關業務的工程師

太多了太多了,這樣一個中間件隊伍實在太龐大了,製作維護成本實在太高了

不僅如此,這樣一個中間件就算做出來,他們所寫的代碼也只能滿足這一家公司使用

其它公司統統不能再用,代碼重用率極低,近乎不可能重用

畢竟這個系統中改動任何一個部分都有可能涉及到整個系統的改動

那麼如何降低成本?

我舉出了四組的工程師:

網路工程師,資料庫工程師,操作系統工程師以及設計網上銀行系統的業務工程師除了最後一組設計網上銀行的業務工程師之外,前面三組工程師是不是每一個項目都需要的?

就算不是每一個項目都需要,至少也是絕大多數項目需要的吧?

哪個項目能夠脫離網路,資料庫和操作系統?不可能,在這個時代已經很少很少了

好,那既然每個項目都需要,我們是不是可以用一個產品來取代這三組的工程師呢?

我們的業務工程師只需要遵循這個產品所提供的介面,進行相應的開發就行了

人們提出了一種叫做 appserver 也就是應用伺服器的東西

應用伺服器是幹什麼的?按官方的說法,應用伺服器是包括有多個容器的軟體伺服器

那容器是什麼?容器(Container)到底是個什麼東西我想多數人還是不清楚

在說這個之前,先介紹一下組件

什麼是組件,組件是什麼?組件其實就是一個應用程序塊

但是它們不是完整的應用程序,不能單獨運行

就有如一輛汽車,車門是一個組件,車燈也是一個組件

但是光有車燈車門沒有用,它們不能跑上公路

在 java 中這些組件就叫做 javabean,有點像微軟以前的 com 組件

要特別說明的是,由於任何一個 java 文件編譯以後都是以類的形式存在

所以 javabean 肯定也是一個類,這是毫無疑問的

好,那麼容器里裝載的是什麼呢?就是這些組件

而容器之外的程序需要和這些組件交互必須通過容器

舉個例子,IE 發送了一個請求給容器,容器通過調用其中的一個組件進行相關處理之後

將結果反饋給 IE,這種與客戶端軟體交互的組件就叫做 servlet

但是組件有很多種,那麼如何區分這些組件呢?

有多種管理辦法,比如同是同樣是 servlet,有些是通過 jsp 生成的

而有些是開發人員自己寫的,那麼通過 jsp 生成的 servlet 集中放在一個地方

而開發人員自己寫的則需要在 xml 裡面配置一些基本的參數

同時,不同組件有可能還需要繼承一些特定的父類或者介面,這也是容器管理的需要

還有其他的一些組件,這裡就不一一說明舉例了

那麼容器有很多種,按照他們裝載的組件類型劃分

比如有裝 ejb 的 ejb 容器,有裝 servlet 與 jsp 還有靜態頁面的 web 容器等等

//這種只含有 web 容器的應用伺服器也被叫做 web 伺服器

當表示層的應用軟體通過網路向 appserver 發送一個請求的時候

appserver 自動找到相應容器中的組件,執行組件中的程序塊,把得到結果返還給客戶

而我們要做的事就是寫組件也就是 javabean,然後放到 appserver 裡面去就可以了

至於怎樣與 IE 通訊,怎樣截獲網路上的請求,怎樣控制對象的數量等等這些繁瑣而無味的工作我們都不管,都由 appserver 去做吧,把注意力集中在業務邏輯上

appserver 與其他相關軟體的關係如下圖:

-------------------------------------------------------

| 表示層 | 業務邏輯層 | 數據持久層 |

-------------------------------------------------------

| | ----------------- | |

| IE | | javabean | | |

| -> ----------------- -> DB |

| client

| |-------------------------| |

| | 虛擬機 | |

|--------------|-------------------------|------------|

| Windows | Linux/Saloris |LinuxSaloris|

|--------------|-------------------------|------------|

圖上可以看出:虛擬機負責處理中間件與操作系統之間的交互appserver 則負責組件的管理以及與其他兩層的業務交互

1 附圖: image002.gif ({} 位元組)

要說明的是上圖中還包含有應用程序客戶端容器(Application client container)

管理應用程序客戶端組件的運行,應用程序客戶端和它的容器運行在客戶機

這種情況比較複雜一般說的是兩個 server 之間的通訊

比如 jsp/servlet 容器在一個伺服器上,而 ejb 容器在另外一個伺服器上等等

這是分布式操作系統大面積應用的基礎,這個以後再說下面這張相對簡單:

2 附圖: j2ee.gif (8226 位元組)

嗯,那麼話題再回到中間件上去,什麼是中間件?

appserver 就是所謂的中間件,但是中間件不僅有 appserver,還有其他的東西

換句話說,appserver 只是中間件的一種

而關於中間件有諸多規範以及遵循這些規範的模型

最流行的規範無非兩種,一個是 j2ee 還有一個是.net

但是.net 幾乎只有微軟在用,所以很多人把.net 這個規範就當成是微軟的中間件產品

也不為過,畢竟沒幾個公司喜歡跟著微軟屁股後面跑的

給初學者之六:java java 企業級應用之綜合篇

我們知道中間件有很多種規範以及相關的模型

最流行的一個是 j2ee 還有一個是.net

那麼各大公司關於這兩套規範各有什麼產品以及周邊呢?j2ee:

黃金組合

操作系統:Solaris

應用伺服器:Weblogic

資料庫:Oracle

開發工具:JBuilider/IntelliJ IDEA

優點:性能一級棒,大企業大公司做系統的首選,世界五百強幾乎都是這套組合

缺點:極貴

超級組合,也是最安全最酷的黃金組合,硬體採用 SUN 公司的機器

但是 SUN 的伺服器很貴,同等價格不如去買 IBM 的機器

SUN 的伺服器支持 Solaris 的效果自然不用說,Solaris 號稱是世界上最安全的操作系統

Oracle 也是世界上最安全,性能最優的資料庫,Weblogic 是當今性能最優的 appserver

JBuilder 和 IDEA 各有所長,JBuilder 是 Borland 公司的招牌之一

是當今世界上最流行的 java IDE,用 delphi 寫的,但網路上評價似乎不是很好

IDEA 擁有插件功能,界面在所有 java IDE 中最為漂亮,東歐人開發的產品

東歐人嚴謹的作風在這個產品上體現得尤為突出,用 java 寫的

IDEA 甚至號稱自己被業界公認為是最好的 IDE//個人保留意見,沒有最好只有更好

但我用 JBuilder 的時候發現了不少 bug,而至今還沒有在 IDEA 上發現什麼 bug

個人推薦 IDEA

價格方面,Solaris 開源,但是 SUN 的伺服器比較貴,Weblogic 最高是 34 萬

oracle 標準版要 18.6 萬,企業版要 49 萬,JBuilder 要 2.7 萬左右

IDEA 零售價大概是 500 美金,也就是 5000 多元

另外,雖然理論上這些產品的綜合性能要高於其他選擇,但是必須看到

由於產商之間的利益衝突,比如 oracle 也有自己的 appserver,但是性能不怎樣

使得這幾種產品之間協作的性能要比預想中的要差一點點

--

開源系列

操作系統:-

應用伺服器:JBoss

資料庫:MySql

開發工具:Netbeans

優點:便宜,性能未必最佳,但是對付中小企業足夠了

缺點:出了問題自己抗吧

嗯,這是 java 陣營最大的特色,免費免費,還有在開發工具這一欄 Eclipse 也是免費的但後面要說,算了,換個有代表性的開源產品來

tomcat 僅有 web 容器而沒有 ejb 容器,而 jboss 已經集成了 tomcat

也就是說下載了 jboss 之後,啟動的同時也就啟動了 tomcat

jboss 在 tomcat 基礎之上多加了一個 ejb 容器,使得 jboss+tomcat 成為和 weblogic

websphere 之外又一個得到廣泛應用的 appserver

現在大概是這樣,中小型企業多用 jboss,如果應用小一點就用 tomcat

只有給那些大型企業做的項目,才會花錢去上一個 weblogic 或者 websphere

mysql也是開源的資料庫,做得非常不錯,如果系統對資料庫要求不高

或者安全要求不是非常嚴格,mysql是一個非常不錯的選擇

開發工具方面,netbeans 是 sun 公司極力推廣的一種 IDE

聽說在北美市場使用量已經超過 eclipse 了

操作系統,軟體再不用錢,伺服器也要錢,看這台機器上跑什麼操作系統就用什麼了

--

IBM 套餐

操作系統:Linux

應用伺服器:Websphere

資料庫:DB2

開發工具:Eclipse/WebSphere Studio

優點:服務好,IBM 可以提供全套服務,也可以替客戶承擔風險

缺點:把機器數據全部交給 IBM,安全什麼的都由不得你了

呵呵,IBM 全套產品,甚至包括硬體設備 IBM 的伺服器

由於是一個公司的產品,各產品之間的協作自然不錯

價格方面,Linux,DB2,Eclipse 都是開源產品,Websphere 目前零售價是 33.8 萬人民幣

IBM 伺服器不錯,可以考慮

--

.net:

微軟陣營

操作系統:Windows

應用伺服器:.net 應用伺服器(好像叫 IIS)

資料庫:SqlServer

開發工具:MS Visual Studio

優點:客戶端的用戶體驗良好,和客戶端諸多微軟產品的兼容性強

缺點:離開了微軟,寸步難行,和其他任何一家公司的產品都不兼容

微軟的東西,怎麼說呢,太專橫了

微軟所有的東西都是圍繞著 windows 來做的.net 其實已經可以實現跨平台了,但是微軟出於自身商業考慮

在其應用伺服器跨平台的實現上設置了種種障礙

而且針對 windows,微軟做了大量的優化,可以這麼看

.net 就是與 windows 捆綁的一套產品

所以有些人說,微軟的產品離開了 windows,就是渣

而且.net 開源選擇也少,安全性方面考慮,windows 本身就有一堆補丁要打了

sqlserver 也不安全,至於.net 到底安全不安全我不清楚,畢竟我沒怎麼用過

但整體考慮,感覺.net 不是大企業的首選,鑒於其濃厚的商業背景

也不是中小企業的首選,但是必須看到

客戶端也就是微機 pc 市場已經完全被 windows 所壟斷

所以在一些快速開發,還有和微軟產品兼容性要求較高的領域,.net 還是比較有市場的

最後一個 visual studio 對它之前的版本兼容,且支持 c,c++,c#,vb 等語言

在其傳統領域,比如寫一些桌面軟體等客戶端應用上,.net 還是第一選擇

--

最後要說明的是

這些組合不是固定不變的

由於 J2EE 得到了絕大多數 IT 企業的支持以及 JAVA跨平台的特性

我們可以自由地定製個性化的組合

比如我可以選擇 windows+jboss+eclipse+oracle

也可以選擇 solaris+websphere+IDEA+mysql

等等,這些自由組合都是可以的,但是有一點必須說明

微軟的東西,一般來說離開了 windows 就不能用

比如你選擇了.net 應用伺服器,那操作系統就必須是 windows

你選擇了 sqlserver,那就必須在 windows 上用

還有就是遵循 j2ee 規範的所有的組件都可以在不同的應用伺服器上互相移植

比如你可以在測試的時候用 jboss

而在正式投產上線的時候使用 websphere,只需要在配置文件中作相應改動即可


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java學習吧 的精彩文章:

Java中的靜態綁定和 動態綁定
互聯網大佬們的高考故事,他們是如何走進大學的?

TAG:java學習吧 |

您可能感興趣

給初學佛者的建議
給瑜伽初學者的建議
給瑜伽初學者的一些建議
初學者看過來,這是給初學拳友的七點建議(中)
給初學寫詩的同學的幾點建議
初學者看過來,這是給初學拳友的七點建議(下)
初學者看過來,這是給初學拳友的七點建議(上)
給易學愛好者的三點建議
自學中醫的一點建議
對初學機器學習的三點建議
弘一大師給青年學佛者四點建議
對初學桃核雕的幾點建議
給期望去美國求學的同學們的一點建議
英語學習的建議
瑜伽減肥初學者必看的幾條建議
身為過來人給Linux初學者的建議
萬事開頭難,給初學玉雕者的三點建議
居家學佛的八點建議
給即將畢業的大學情侶的21條建議
我給那些大學選錯專業同學的建議