2013-07-22 37 views
3

我有需要我一個大的郵件列表(> 1M客戶)導出到外部電子郵件系統的情況。我有兩個應用程序的源代碼和控制。最佳傳輸機制

我需要一個機制,將數據從一個系統轉移到另一個是:

  • 穩健
  • 快速
  • 安全

到目前爲止,我已經建立了一個標準該響應請求(通過HTTPS)MVC控制器的方法,進行一些定製的安全檢查,然後從DB拉數據。

從數據庫中檢索數據時,控制器方法遍歷結果,並以純文本格式寫入響應,每100條記錄刷新一次響應。接收器讀取響應的每一行並執行存儲和處理邏輯。

我選擇這種方法是因爲它不需要將用戶數據保存到永久文件中,並且以任何語言構建的客戶端都能夠實現接收器邏輯而不依賴於任何專有技術(例如WCF)。

我知道我可以使用.NET的其他傳輸機制,但沒有一個具有整體優勢,考慮到上面列出的要求。

任何深入瞭解哪些技術可能比我的請求/響應更好的解決方案?

+1

爲什麼你不使用共享數據庫? – Sergio

+1

_「我知道我可以使用.NET的其他傳輸機制」 - 請爲其命名,以及爲什麼您認爲它們不足。例如WCF可以通過SOAP 1.1,1.2和REST公開服務,幾乎可以使用任何語言來使用。除此之外,我認爲你的要求不夠聰明。定義「不健壯」,因爲任何網絡互聯解決方案都依賴於TCP。定義「快速」,因爲它取決於您想要傳輸的數據類型以及序列化程度。定義「安全」,你想要消息安全,傳輸安全,身份驗證嗎?您是否考慮過使用證書申請TLS? – CodeCaster

+1

所以,如果你有100萬個客戶,那麼涉及到一個文件有多大?你也計劃支持分頁,還是從開始到結束的迭代?我個人只會分享數據庫,除非這是不可能的,但我會在後端構建一個能夠比MVC應用程序更好地恢復的進程。有時候Windows服務更適合這項工作。 –

回答

2

想到兩個建議,我們在前一段時間發生了類似於此事的事情(獲得的網站每月有超過100萬的活躍用戶和相關數據需要完整的數據中心更改,其中包括仍處於活動狀態的180GB數據庫)。

我們最終通過SSH(SQL Server 2005)設置了一個拉複製,這是最好的黑魔法,並且花了我們大約一個月的時間在研究和失敗的配置之間正確設置。有關於它的各種博客文章,但關鍵部分是:

1)在訂戶數據庫機器上的SQL Server配置管理器中設置一個命名服務器別名,指定localhost:1234(選擇一個更好的數字)。

2)設置putty在步驟1的用戶localhost:1234和發佈db的端口9876之間建立一個ssh隧道(再次選擇一個更好的數字)。另外請確保您在發佈者上啓用了ssh服務器。還保留的端口祕密,找出了SSH權限的安全密碼。

3)在複製數據庫的端口9876的發佈服務器上添加一個服務器別名。 4)如果您的數據集足夠小,請創建發佈並嘗試使用快照初始化啓動訂閱服務器。如果沒有,你需要創建一個發佈啓用「從備份初始化」,並使用FTP傳輸備份文件在在用戶恢復部分備份。此方法比用於較大數據集的快照初始化要快得多。

優點:您不必擔心sql server的身份驗證,「只是」ssh隧道。公佈的情況下可以很容易地修改你意識到你需要更多的列或模式的變化。您可以節省時間編寫一個可能只是暫時的api,並且可能會有更多的安全問題。

缺點:這很奇怪,沒有太多的官方文檔和Windows上的ssh是挑剔的。如果你有一個基於Linux的負載均衡器,它可能會更容易。有很多步驟。

第二個建議:使用ServiceStack和protobuf.NET創建一個非常快速的web服務並通過https公開它。如果你知道如何使用ServiceStack,它應該很快。如果你不這樣做,這需要一點時間,因爲它運行在與Web API和WCF不同的設計理念上。 Protobuf.NET是當前廣泛使用的最緊湊和最快的串行/解串行線格式。鏈接:

ServiceStack.NET

Protobuf.NET

優點:您可以處理安全,只要你喜歡。這也是一個缺點,因爲你必須擔心它。它有更好的記錄。您可以使用或學習一個偉大的框架,以加快其餘與Web服務相關的項目的餘下時間(或者直到更好的事情發生)。

缺點:你必須寫。你必須測試它。你必須支持它。

+0

謝謝,我將看看ServiceStack和Protobuf – gb2d