Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

31.2. 開發語言及平台

語言只是一個工具,一種實現我們需要的工具,每種每言都有它的優點和缺點和,在不同領域發揮各自的長處,並且都有它存在的意義。

語言不段地發展,市場決定它們是生存還是沒落走向死亡。只有最活越,生命力強的語言才能生存下來。.net與java後面是強大的財團做後盾,大量被捆綁的客戶支持他,並有完備的客服,從商業角度選擇它是沒有錯誤的。

但不要拘泥與語言,使用你最熟悉的語言,選擇你最擅長的資料庫和操作系統。

目前大型網站都不會單一選擇一種語言和資料庫,一種操作系統。例如:

像php/perl/python這種動態語言,開發速度快,周期端,對伺服器性能要求低,出錯率低,他們的設計這希望它能儘量使代碼運行下去, 而不是拋出異常,終止執行或崩潰。而行對於開發者要求門檻比較低。 php 無論怎麼開發都不會使web server 崩潰。而 Java 則不同,很容易崩潰。

Java 我認為java是個非常不錯的語言,錯在JVM上。這是一個垃圾的解釋器,效率極差。不加優化的,把所有東東全部load進內存。採用java技術,開發成本相當高,對開發人員要求很高,而且需要一個穩定的團隊。國內資深java開發人員大多轉向管理層。 只有細心的人才能駕馭Java,否則不能保證軟件質量,我在工作中發現php團隊開發的代碼質量明顯比java高,bug 數量上比Java代碼的 bug少很多。 我個人認為少於5年工作經驗程序員很難寫出一流的Java程序。 Java 架構最不能容忍的是有時不得不restart才能生效。而寫的很爛程序你不得不採用restart來保證系統正常。

.net 不是很熟悉,.net 開發環境最好,速度比java快,只要有錢,全用正版,選擇微軟的產品很不錯。很多linux愛好者鄙視M$, 對windows系統很有很大偏見,偏激。 window系統很穩定,並非像網上傳的那樣不堪一擊,很多引起windows崩潰的原因是硬件問題。我在工作中發現國產伺服器在板卡介面上做工不過關。 沒有鍍金或防氧化處理,導致內存丟失,cpu丟失,RAID丟失... 等等引起系統崩潰。但linux系統確能運行下去,不過一旦重啟,將不能恢復。

31.2.1. 分層架構

31.2.1.1. 中間件 Middleware

http://en.wikipedia.org/wiki/Middleware

很多人談到java就會涉及到三層架構即:web 容器 -> application server 應用伺服器,中間件 ->資料庫

三層架構其實不是什麼新鮮東西,J2EE僅僅是對象請求代理體繫結構的一種,任何語言都能實現三層架構。中間件不是Java專利

  • 編譯執行的語言基本都支持Corba

  • python 則有Zope,Zope是一個很成功App Server。足以比肩J2EE. python 也支持corba庫,我嘗試過python -> corba -> PostgreSQL.但性能不佳。

php/perl 一樣可做到,採用SOAP,XML-RPC等技術,可以實現部分功能。但我們可以在架構上做些改變。

總之,不要拘泥于三層架構,僅僅是實現方式的一種。沒有最合理,也沒有最好的,根據你的需求作出調整,最終是看結果,而不是實現過程。

31.2.1.2. 分層

中間件的概念

			
         /--> app server ---\
web ---> ---> app server ----> Database
         \--> app server ---/
			
			

php 分層

			
                 /--> web server ---\
load balance ---> --> web server ----> -> Database
                 \--> web server ---/

                 /--> web server ---\                   /--> app server ---\
load balance ---> --> web server ----> -- SOAP/XMLRPC--> --> app server ----> Database
                 \--> web server ---/				    \--> app server ---/
			
			

你可以採用覆核型架構,我曾經就做過這樣的項目php -> soap -> .net framework

			
                 /--> module ---\
apache ---> php ----> module ----> MySQL Database
                 \--> module ---> soap ---> IIS ---> DCOM ---> C# script  ---> SQL Server
                  \-> module ---> tomcat ---> jasper report ---> Oracle
			
			

我們系統有一個需求是,在php中創建word,excel文檔,編輯文檔,比較文檔..., 我們需要調用office.dll實現

同時我們有一個報表系統,是通過jasper report 實現的

另外fastcgi

			
			    .--> fastcgi process ---.
			   /                         \
web server ---> ---> fastcgi process -----> Database
			   \                         /
			    `--> fastcgi process----'
			
			

31.2.2. Web 2.0

商業炒作產物,對於純高技術的人來說,虛頭

31.2.3. 雲計算

雲計算還是個概念,但在雲計算大潮中,不支持雲計算,顯得沒有技術含量。

被網絡炒得“神乎其神”。起初我誤以為是分散式計算的下一代,後來發現和分散式計算根本兩個不同的東西。與網格計算/分散式計算扯不上邊。

"雲計算"這個詞已經被氾濫使用,

比較靠譜是亞馬遜EC2 其實就是一堆Xen虛擬機, Dell說他的刀片伺服器是雲計算,Vmware 也說是雲計算,Oracle 說他的VirtualBox是雲計算,說ZFS是雲存儲。我也說不清楚,自己斟酌。

31.2.3.1. 雲計算的三種服務模式

IaaS,PaaS,SaaS

31.2.4. 跨平台

沒有真正的跨平台語言,所謂跨平台都是忽悠人。

只要提供不同平台的編譯器加條件編譯,即可實現跨平台。或提供不同平台的解釋器,也可一實現跨平台。

例如大家都很看中Java的跨平台,但想一下,這個“跨平台”是要打引號的,實際上這個跨平台準確的說是跨Sun提供的標準JVM平台,而非OS平台。只要某個JVM支持某個OS,你的程序才可以跨過去。如果JVM不支持這個OS平台,Sorry,你的程序不可能跨過去。 不信你去java.sun.com下載jre你會發現僅僅提供四個平台版本Linux,Mac OS X,Solaris,Windows

很多OS都不支持Java。如FreeBSD 就不支持Java,必須使用Linux glib 運行Java,效率很低,IBM用的是IBM 自己開發 JVM 至於他和Sun Java有什麼關係,可能是授權。

只要能讓你的程序翻譯成JVM位元組碼,你的程序就可運行在JVM上。如:

php通過Quercus(http://quercus.caucho.com/)把PHP檔案編譯成.java檔案,讓後javac編譯成class檔案後在一些JavaEE應用容器中運行PHP程序

Jython可以將Python編譯成java檔案

JRuby可以將Ruby編譯成java檔案

虛擬機並非只有JVM,還有Parrot, Perl6 就是在Parrot虛擬機上實現的。

另外開發一種新語言也並非難事,只要你有時間精力投入我想不出3年,就可以打造一門新語言。

開發新語言也並非難事,只要你有時間精力投入我想不出3年,就可以打造一門新語言。

31.2.5. 編譯語言比腳本語言安全

錯!

編譯不能保證代碼安全,僅僅能保證你的代碼不被人使用。

但目前中國人力成本相當的便宜,重新實現你的功能邏輯並非難事。所以只要你的網站上線,在很短的時間內就可以出現很多山寨版。

編譯流行的原因是為瞭解決微機的速度以及存儲問題,隨着微機處理器技術突破,你根本不用擔心速度問題。中型機與大型機領域腳本語言站多數。

31.2.6. 封裝重用

重用可以減輕勞動,但過分重用,會牽一髮動全身。

尤其對於二次開發者不熟悉你的系統,導致修改一個bug,又產生新的bug。

另外模板也不宜拆分的過于零碎。模本的組裝,需要很多時間並很消耗你的資源。

31.2.7. 相關的工具

31.2.7.1. 開發工具

Mozilla Firefox 及擴展

  • Web Developer

  • Firebug 調試必備工具

  • YSlow 性能分析工具

  • Live HTTP Headers 相當於HTTP Sniffer嗅探器,可以跟蹤HTTP協議頭,調試cache時比較有用。

  • IE Tab 用於IE/Firefox之間切換

  • FoxClocks 如果開發工作跨時區,這個很有用

  • Foxmarks Bookmark Synchronizer/Weave 將開發資源放入書籤,同時在開發團隊中保持同步

  • Fasterfox 可以一顯示頁面載入時間,方便頁面優化. 如果安裝了YSlow可以不裝這個插件。

  • FireFTP

  • Adblock Plus

  • flash block

  • Chat Zilla

  • Super DragAndGo

開發工具

  • visual studio 不必多說

  • eclipse 出身于Java但他不單單是Java開發工具,目前他已經是一個通用的語言IDE,我一直用eclipse寫PHP,Python,Perl還有Docbook XML

  • TortoiseSVN 版本控制工具.

  • WinMerge 檔案差異比較與合併 , Beyond Compare 我用過最好的比較合併工具。