12.2.開發語言及平臺

玄學醬發表於2017-12-18

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

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

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

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

  • 淘寶,前端展示頁面採用php,後臺管理採用java…
  • Yahoo,主要使用php開發,但搜尋引擎採用java…
  • Ticketmaster,前端展示採用perl開發,後臺管理java, 前臺展示資料庫採用mysql,會員資料庫採用oracle

像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系統確能執行下去,不過一旦重啟,將不能恢復。

12.2.1. 分層架構

12.2.1.1. 中介軟體 Middleware

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

middleware.png

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

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

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

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

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

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

12.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----`
			
			

12.2.2. Web 2.0

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

12.2.3. 雲端計算

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

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

“雲端計算”這個詞已經被氾濫使用,

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

12.2.3.1. 雲端計算的三種服務模式

IaaS,PaaS,SaaS

12.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年,就可以打造一門新語言。

12.2.5. 編譯語言比指令碼語言安全

錯!

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

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

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

12.2.6. 封裝重用

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

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

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

12.2.7. 相關的工具

12.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 我用過最好的比較合併工具。

原文出處:Netkiller 系列 手札
本文作者:陳景峰
轉載請與作者聯絡,同時請務必標明文章原始出處和作者資訊及本宣告。


相關文章