給初學者的建議(中)
說過了硬體就該是軟體了
這篇是這個系列的重中之重
首先我們來說說什麼是軟體,統一一下概念
所謂軟體通俗地說就是一套計算機程序
實現了某些功能的計算機程序
在很早很早以前,一台計算機的軟體是不分層次結構的
一台計算機只有一個系統,這個系統既是操作系統又是應用軟體,與硬體緊密綁定
後來經過許多年的發展發展發展
人們把一些與硬體緊密相連的又經常用到必不可少的功能做到一套程序中去
這一套程序就被人們稱做操作系統
另外一些可有可無的,不同工作適應不同環境的功能封裝到另外一套程序中去
而這一系列程序被人們稱作應用軟體
如下圖:
-------------------------------------------
|應用軟體: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中的靜態綁定和動態綁定
※Java初學者的建議(上)
※Java 新手問題匯總
※影響Java EE性能的十大問題
TAG:java學習吧 |
※給初學佛者的建議
※給瑜伽初學者的建議
※初學者看過來,這是給初學拳友的七點建議(中)
※給瑜伽初學者的一些建議
※初學者看過來,這是給初學拳友的七點建議(下)
※初學者看過來,這是給初學拳友的七點建議(上)
※給初學寫詩的同學的幾點建議
※【開卷有益】肖宏宇、李楠新譯著《美國智庫與政策建議:學者、諮詢顧問與倡導者》出版
※我的相冊(建議收藏)
※生辰八字中的基礎知識:十神詳解(建議初學者收藏)
※給易學愛好者的三點建議
※對初學機器學習的三點建議
※英語學習的建議
※《給教師的建議》
※自學中醫的一點建議
※弘一大師給青年學佛者四點建議
※對初學桃核雕的幾點建議
※給微距攝影初學者的10條小建議
※數字中國研究中心成立 王新哲提三點建議
※居家學佛的八點建議