email management

Node.JS

Griffith Chen 的照片

Node.js 是個架在 Google V8 JavaScript 引擎之少的事件驅動式的輸入輸出模組 (evented I/O),它的設計是根據在其他語言的框架 (framework) 像 Ruby 的 Event Machine 以及 Python 的 Twisted. Node 的目的是能夠提供一個簡單的方式來創作高效能和具擴充性的及時性網站應用程式。

JavaScript一般都是執行瀏覽器上。近年來,CommonJS、Jaxer 或 Narwhal 等等的框架不斷的出現,希望把 JavaScript 帶到伺服端的環境。跟這些選擇比起來 Node 有些不同,因為它是事件導向而不是執行緒導向。像是 Apache 這類用來提供 CGI 執行的網站伺服器是屬於執行緒導向,因為每當有一個請求送達的時候就會觸發一個系統執行緒產生。執行緒導向模式不具備同時處理大量連線的能力,因此也不適合用來設計及時性應用程式。
Node 透過事件循環 (event loop) 的方式取代執行緒,這樣就能夠同時處理上萬的連線。當一個連線請求 (request) 送達的時候作業系統會通知 Node,收到了通知 Node 會執行回呼涵式。每個連線只會佔了小小的堆積配置。然而,在ㄧ個需要處理大量連線的系統下,事件導向的 Node 在記憶體上也比較有效率。在 Node 的框架裡沒有鎖,它的涵式幾乎不會直接用到 I/O,所以程式行程也不會被鎖住。使用 Node 也程式的人也不需要為了死鎖 (deadlock) 而煩惱。

Node 的優點在於因為伺服器大多的時間都利用在等在 I/O 操作,而這些操作都遠比記憶題操作慢。Node 的 I/O 操作都是用非同步的方式,這樣就應許在處理I/O操作的同時程式行程繼續處理連線請求。

以下是一個用 Node 寫的 HTTP 伺服器,它接收的每一個請求都會回 ”Hello World”。

var sys = require(‘sys’), http = require(‘http’);

http.createServer(function(request, response) {
response.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello World\n’);
}).listen(8124);

sys.puts(‘Server running at http://127.0.0.1:8124’);

這程式載入了 sys 與 http 模組,然後建立了一個 HTTP 伺服器。被傳遞到http.createServer 的匿名函式會在每一個請求連線的時候被呼叫。當伺服器啟動的時候,它會告訴你它目前監聽埠號 8124。

Node 是一個令人興奮技術建立在另外一個非常了不起的技術上: Google 的V8 JavaScript 引擎。Node 這框架已經被科技界注意到,在加上它的模組化系統,在網路上已經有許多第三方的模組可以使用,來加強這完整框架。

Cassandra 簡介 -- data model

簡介:

隨著越來越多的資料插入和查詢資料庫中,我們可能面臨的情況是我們需要添加新的機器來處理的資料量。但在傳統的 MySQL,這添加一個新的機器需要更多的工作(如shading,我們自己切割資料到不同的機器)。不過有時候我們只需要鍵值查詢而非 JOIN 操作。 所以我們希望如果有一個資料庫,可以幫助我們解決這些問題。 我們需要一個更強大的資料庫幫助我們處理的可擴展性。因此有許多分佈式的鍵值資料庫開發這種情況。 Cassandra 是基於 Java 的分佈式鍵值資料庫。它不像MySQL 包含  JOIN 操作。它幫你處理分佈式資料。您可以考慮整個cluster 是一個很大的 hash table。所有的容錯和資料分割都是由 Cassandra 自己處理。它提供了“增量的可擴展性”(這意味著你可以增加新的機器來容納更多的處理)。Cassandra 還支持 “Column” 功能,使他比純粹鍵值的資料庫更方便的。

以下是區別:


基本的鍵值資料庫:

table['key1'] =value 1

Cassandra

有Column特點:


Table['Key1'] ['column_family'] ['column1'] = Vaule1

資料模型:

在 Cassandra,它可以被認為是一個四,五維 Hash Table。從上到下,層次結構是這樣的。



因此,該查詢將如下所示: 

get <ksp>.<cf>['<key>']['<col>']                             Get a column value.
get <ksp>.<cf>['<key>']['<super>']['<col>']              Get a sub column value.



Key Space:

Cassandra,你可以定義多個 key space。 它就像是 MySQL 裡面的table。 它是一個(Row,[ColumnFamily])的list。 通常每一個應用可以對應到一個 key space。


Row:

對於 row key,你對每個相對應的 column family 都可以儲存資料。 在每一個 column family 資料中是根據 row key 來做排序

Column Family:
在 column family,它包含一個 column list 或 super column list。 你在配置 Cassandra 之前必須定義它 每一個 column family 都儲在一個單獨的文件。 而每一個 column family 都可以存無限多個 column。

Column:
它是最小的元素資料,它僅包含一個 name,一個 value,和一個timestamp。 您可以在任何時候添加新的或刪除 column。

Super Column:
Super column 是一個包含著許多 column 的 list。

架構:

Cassandra 使用 consistent hash 來做 key partition。 每個節點在Cassandra cluster 中將在 ring 中選取一個 token(0 <token<2 ^ 32)。ring  的大小是2 ^ 32。 所以每個節點都會在 ringt 裡有一個相對應的位置, 當新的 key insert 時,它將使用 MD5 hash,找到在 ring 裡面的下一個節點。資料將被儲存在相對應的節點。

下面的例子一樣,key 將被插入到節點 2。


replicate method:
如果你想存儲兩個副本資料 Cassandra cluster 它將資料存儲在未來兩個節點。

adding a new node:
在consistent hash,添加一個新節點只會影響鄰居節點。在這種情況下,我們並不需要重新分配所有資料。以下圖為例,一些資料存儲在節點 1 現在將存儲在新的節點 4。新的節點將隨機選擇一個 token,並根據 MD5 找到相應的位置。

參考:

Gearman Distribute Computing Framework

簡介:
在如今網路發達的現代, 很多網路上面的服務有些是需要依賴電腦的計算能力, 而隨著計算量的增加, 有時候一台電腦是不夠的, 這時候我們就需要一個能夠幫助我們自動分配工作給其他電腦的方法。Gearman 提供了一個通用的框架讓我們能夠跟不同電腦或是不同的程序溝通, 他讓你可以把工作分散下去, 讓不同電腦同時幫你做運算, 也可以做到負載平衡, 對到分散式系統溝通的能力。對於一些網路服務, Gearman 提供簡單的解法來達到分散式運算的結果。

下面提供一些 Gearman 的特點:

  • 負載平衡
  • 提供 C, Perl, Python, PHP 等客戶端程式的 API
  • 目前並沒有廣播的功能
  • 自動分配工作
  • 可以利用 MySQL 等 DataBase 來儲存工作序列, 讓服務就算重新啟動, 資料也不會不見
    • blocking task invoke
    • non-blocking (concurrent multi-task), callback function when complete or fail!
  • worker
    • blocking task handle

在下面這張圖,你可以知道 Gearman 是如何運作的,你的應用程式會運用 Gearman 提供的 API 來發送新的任務給 Gearman Job Server,Job Server 會找到目前最為閒置的工作結點,並且把任務發送給他, 交給他去完成, 等到他完成就會把結果回傳回來。所有的溝通都是透過 Gearman 所提供的 API, 你不需要去處理任何網路通訊的事情。所有的溝通都可以是在不同機器上發生的。

Job Server fail over:
為了達到如果有 Job Server 無法繼續運作, 而不影響到服務, 我們可以跑起多個 Job Server, 並且讓Client 和 Work Node 都連過去,這樣如果有一台 Job Server 掛掉, 至少還有其他台 Job Server 存在,可以繼續提供服務, 而不至於影響到整個服務。

缺點:
目前沒有一套可以監控整個 Cluster 的工具, 還在開發中。

Reference:
http://gearman.org/
http://blog.flier.lu/2010/04/gearman-performance-tunning/

好用的跨平台的 C++ 函式庫介紹

Angus Liu 的照片


長久以來,C++ 的使用者會抱怨寫系統或網路程式沒有現成的函式庫可以用。跟其它物件導向的語言如 Java 和 C# 比起來,有許多現成的內建類別和函式馬上可以使用,C++ 就顯得很不方便。程式設計師要寫這類的應用程式,就只能利用系統的 API 從頭寫起,或者找一些軟體商提供的解決方案。每件事都要從頭來一遍真的很麻煩,尤其是寫程式的人並不全然掌握如何使用作業系統所提供的 API,另外寫出來的程式還不能夠移植到其它平台。就因為這樣,有許多有才華人已經幫我們寫了完整的函式庫來解決這件事。

Adaptive Communication Environment (ACE)

ACE 算是這類型比較久的一個函式庫,一開始是 Douglas C. Schmidt 在加州大學 Irvine 分校就讀時,畢業專題發展出來的。依我的使用經驗,這個函式庫源碼有很多老式的 C++ 寫法,而且大量使用 Macro。再加上一堆數不完的類別和設計模型參雜其中。它算是有些複雜難以駕馭的,精通它需要很長的學習曲線。但是也由於它發展的早,相當有歷史了,所以幾乎現存的作業系統它都可以支援,甚至有些它支援的作業系統你還不曾聽過呢!

Poco C++ Libraries

Poco 你可以想做是一個 ACE 簡潔源碼的翻修版。在某種程式來說,它除了包含所有 ACE 所有的功能外,還加上不少算是標準的 C/C++ 函式庫,如 PCRE 和 zlib。Poco 的文件寫得蠻不錯的,而且源碼也相當的乾淨容易了解。所以我還蠻推薦新手要使用這一類的函式庫,可以先從Poco 開始!

Boost C++ Libraries

Boost 更是 C++ 使用者不能錯過的函式庫。它擁有一堆很好用且超乎你預期多的工具函式庫,而且多數利用了 C++ 的樣版寫成,樣版的彈性和威力會讓你愛不釋手。在最近的版本,Boost 還加入了 ASIO 這樣一個網路的函式庫,也很值得你去嘗試探索。不過呢,也因為源碼含有大量的樣版,在追查程式臭蟲時,可能不是什麼太令你愉快的事。但是如果你是 C++ 的愛好者,你一定不會放過它的!

Cellopoint「雲端郵件安全代管服務」為企業、組織資安委外首選

今日社會中,企業、組織在通訊媒介上仰賴電子郵件的比重越來越高。以近期發生的88水災來說,電子郵件扮演了民眾與媒體、政府溝通重要的橋梁,特別是在請求支援及災情回報方面,電子郵件早已成為不可或缺的通訊工具。然而使用電子郵件所衍伸的問題,如垃圾信、病毒信及其他惡意郵件攻擊,卻也不時造成組織資訊系統的威脅。許多企業、組織為了解決這些資安問題,必須花費大量的時間及成本,同時增加IT管理人員的負擔。Cellopoint「郵件安全代管服務」(SaaS)模式出現解決了上述郵件安全管理問題,因此成為企業、組織資安委外首選。

郵件代管VS郵件安全代管

  • 一般的「郵件代管服務」,指的是代管郵件帳號或郵件主機,客戶將原有的郵件伺服器交由ISP業者代管或使用代管業者所提供的電子郵件帳號。
  • Cellopoint「雲端郵件安全代管服務」是為網際網路上所流通之電子郵件,提供安全過濾機制。Cellopoint 採用「CelloCloud™」的技術,讓垃圾信、病毒信在進入組織原有的郵件伺服器之前,就被阻擋。客戶只要擁有專屬的郵件網域(Domain),不論是自建的郵件伺服器或由 ISP 業者代管的郵件帳號,都可以採用 Cellopoint「雲端郵件安全代管服務」,因為 Cellopoint 所提供的過濾服務包含 Anti-spam、Anti-virus 及 Anti-malware,一次解決所有的郵件安全問題。

「雲端郵件安全代管服務」的三大優勢

  • 成本精省:不需要專屬的IT維護人力,也沒有硬體採購費用。按使用者數量計費,易於掌控成本。
  • 防禦即時:由代管廠商負責系統的維運及 Anti-spam、Anti-virus 資料庫更新,永遠維持最新最即時的防禦能力。
  • 效能優化:在垃圾郵件、病毒郵件進入內部網路之前就予以攔阻,可以有效降低網路頻寬與郵件伺服器資源的佔用。

Cellopoint「雲端郵件安全代管服務」採線上申請、快速開通方式,申請此服務之客戶,只需將自家郵件伺服器的 MX record 轉換到 Cellopoint「雲端郵件安全代管服務」之位址,之後所有寄給該客戶之郵件,將先送至Cellopoint 進行病毒掃瞄、垃圾信過濾後,再轉發至客戶郵件伺服器,以確保郵件安全。

即日起 Cellopoint 推出免費試用活動,想體驗優質的 Cellopoint 雲端郵件安全代管服務,請立即上網申請,活動網址:http://www.cellopoint.com/tw/hosted_security

別怕電子情書藏毒,Cellopoint 提供小錦囊

隨著西洋情人節的到來,隱藏在電子情書中的病毒也開始活躍起來,二月初 Cellopoint 全球反垃圾郵件中心偵測到來自 Waledac 殭屍網路大量的郵件攻擊,偽裝成電子賀卡的型式散播。這類郵件引導收信人點選進入連結網站讀取電子賀卡。若進入連結網址,將被引導下載惡意程式,使電腦被遠端控制,受感染的電腦將成為另一個殭屍網路(botnet),使用者將在不知情的情況下,將病毒和惡意軟體傳送給其他使用者。

Cellopoint 統計這些垃圾郵件標題,包含“Me and You”、“In Your Arms”、“With all my love”及“I give my heart to you” 等等,收到以上及類似標題郵件時,須謹慎處理,不要隨意點開。除此之外,本月份偽裝成退稅通知以及線上訂位確認的垃圾郵件詐騙,也有增加的趨勢。

閱讀全文

Mail Transfer Agent (MTA) 評估比較

Kevin Hsu 的照片

快速評估exim, postfix, qmail, sendmail

熟悉電子郵件運作原理的人應該對 MTA 這個名詞都不陌生, 它是用來傳送email的一個重要關卡, 它能夠幫email找到正確的傳送途徑, 也協助接收email, 一旦MTA停止運作, 你的電子郵件系統可能就出現問題了.

那以現在這麼多元的電子郵件伺服器應用來看, 根據目前mailradar網站的資料(http://www.mailradar.com 統計資料多數來自美國, 資料擷取日期:2009/01/20), 採用開放原始碼為主的email server占總數的71%, 而採用商用的email server (例如Microsoft Exchange,Lotus Domino)約占29%.

同時, 目前在email server的統計資料上, 根據MTA來區分, 最常用的前五名分別是 :

  1. Sendmail (24%)
  2. Postfix (20%)
  3. qmail (17%)
  4. Microsoft Mail (15%)
  5. Exim (13%)

因此本文將著重在 Open source 系列的 MTA, 包括 :

  • exim
  • postfix
  • qmail
  • sendmail
閱讀全文

郵件系統管理--系統帳號與電子郵件帳號的整合

Kevin Hsu 的照片

以Zimbra Collaboration Suite(ZCS)為例

由於SMTP的服務起步相當早, 以目前仍有廣大用戶的sendmail與postfix為例, 他們 都可直接以作業系統上的帳號作為使用者的電子郵件帳號, 這類的使用者為數仍不少. 而電子郵件伺服器的轉移過程中, 最令管理者頭痛的工作莫過於帳號/密碼的轉移 與郵件資料的轉移, 我們將先就帳號與密碼的轉移進行討論. 首先我們必須了解作業系統的帳號與密碼檔案的位置, 以常見Linux系統為例, /etc/passwd 與/etc/shadow就是我們需要的兩個檔案, 而BSD系列的作業系統則是/etc/passwd與 /etc/master.passwd. 探討其格式, 以實例說明 :

閱讀全文