什麼是EEP Cloud
EEP
Cloud是一個開放原始碼、跨平台的、可用於伺服器端和網路應用的一個執行環境(Runtime environment)。在EEP Cloud執行環境是以JavaScript語言來開發Server端的程式,透過Google的V8引擎來編譯並放在EEP Cloud中高效執行,具有強大的跨平台能力,目前已知可以在WindowsX、Linux、FreeBSD、Mac OSX、NonStop、IBM Unix等不同平台上執行。
EEP
Cloud還提供事件驅動的架構和非阻塞I/O API,可以最佳化應用程式的吞吐量和規模,這些技術通常被用在即時的應用系統中,目的是要可以承受更多的服務需求與用戶連線數。EEP Cloud並含有一系列內建核心模組及數千個第三方擴充模組,使得程式可以作為獨立伺服器執行,從而脫離Apache Server或IIS,讓Web Server與中間層的Application
Server可以合併帶來更多的效應。
為何要用EEP Cloud
為了解決效能的問題,尤其是大量的終端用戶湧進網站時,經常會使服務器處於癱瘓的狀態,EEP Cloud使用了事件驅動或回調(Callback)的特性,來解決大量用戶提出請求時無法回應的問題。另一方面不管是JAVA或.NET的服務器通常基礎核心架構就很大(當然較為嚴謹),光只是單純作為一個網站服務器來說,一個服務請求一個執行緒(Thread)方式耗費了太多的系統資源,包括CPU與記憶體,而EEP Cloud是一個非常輕量化的系統架構,多個服務請求只一個執行緒在處理,以事件驅動與非阻塞I/O分工委託處理,占用系統資源相對JAVA或.NET平台小非常多。當然還有一個重要因素,就是化繁為簡,利用EEP Cloud來大量瘦身,讓系統架構變得更為單純,EEP Cloud可以把N-Tier的Web Server與Application
Server做個合併,更容易控制與維護,也可以降低營運成本,對資訊服務業與IT部門來說,算是重要的訴求。
EEP Cloud的優劣
EEP
Cloud流行才短短幾年,因為開放原始碼的關係,發展迅速,光是第三方擴展的模塊已經高達上萬個,而且還在快速增長當中,成熟度當然不及JAVA或.NET,存在著相對的優缺點,整理如下:
EEP Cloud優點:
1. 採用非同步(異步)程序:不像同步程序需要等待回應,非同步的回調(Callback)可有效利用CPU及I/O資源,即使單執行緒,也可以大量處理來自網路的大量委託服務,最適合巨量服務的網站架構。
2. 採事件驅動模式:不需要像一般的IIS網站,需要分配一大塊記憶體來執行,Node.js只有在需要的時候(以事件觸發)才會分配記憶體與I/O處理,相對的可以節省更多的系統資源(CPU與記憶體),非常適合來作為網站服務器(Web Server)與中間層的應用服務器(Application Server)。
3. 不錯的執行效率:很多人以為JS語言的執行速度遠遠不及正統Server端Java與C#等,其實Node.js使用Google的V8 Javascript引擎,執行效率並沒有差距過大,如果遇到高量的運算處理也可以整合C++或其他語言來處理。
4. 高度的跨平台能力:如WindowX、Linux、Mac OSX等常用的OS,官方公布的還包括FreeBSD、NonStop、IBM Unix等等。
5. 可以將網頁服務與中間層的服務合併在同一層的服務當中,簡化程序降低冗餘沒用的服務,提升效率。
6. 低門檻高學習度:Node.JS採用JS的語言,與最流行的前端JS開發語言與習慣一致,讓開者可以前後端用一種語言開發與維護,對於新手來說,JS的學習門檻極低,很容易上手開發。
7. 強大的社群力量:Node.JS有強大且活躍的開放原始碼社群,透過NPM(Node Package Manager)可以找到上萬個第三方的擴展模組(很多都是免費的),讓你可以透過社群來擴充架構與彈性應用。
EEP Cloud缺點:
1. 單程序單執行緒:只支援單一CPU,目前的Server隨便都是4核CPU,為人詬病。其實要看開發者的功力,Node.JS官方早在2012年就推出Cluster模組來解決多執行緒多CPU的問題,當然這個Cluster是要開發者自行去監聽端口事件,並妥善管理多個CPU的處理,也非一般人可以寫的。(EEP.JS會幫你架構好,不用擔心)。
2. 採用非同步與調回的程式寫法:很多開發者都會不習慣這個開發方式,寫得很繞,甚至無法適應。需要花點時間去適應與規劃架構,畢竟Node.JS是一個全新的架構與觀念,不能再以傳統程序性程式思維來進行開發,需要花一點時間適應。
3. 變數與記憶體管理鬆散:因為較容易開發與控制,容易不小心就寫出記憶體洩露的程式來,用戶大量使用時記憶體容易爆衝。
4. 不適合耗用CPU過重、大量且高速運算的應用:如影像運算、複雜度很高的商業邏輯、人工智慧等程序;當然需要可靠且交易頻繁的資料庫存取也被列為缺點,但是,這些具有Transaction的大量交易其實有方法改用程序性的寫法來解決的,也可以使用多程序(Process)的方式來分散處理,提升效能。
5. 太新且發展太快:Node.js發展沒幾年,版本變化的很快,開發中小型的網站或商業應用應該可以勝任,但如果要開發大型系統還是必須等待Node.js版本成熟與更多成功案例。