在Azure上構建一個基于Facebook的營銷式應用程序(上)
原創當你的Facebook應用程序點擊率上升的時候,它如何進行擴展呢?如果你是在Windows Azure上構建的這個應用程序,并且是按橫向擴展的思想設計的這個應用程序,那么很高興地告訴,你可以“高枕無憂”了。
我們將會一步一步地為你講述,如何使用Windows Azure Toolkit和Facebook C# SDK(這兩個工具包可以在CodePlex上找到),在Azure上創建一個簡單的基于Facebook的“病毒式”營銷應用程序,這兩個工具包可以讓這個工作變得更加輕松。
Facebook營銷活動的主要目的是讓客戶更多地參與你的業務,類似于這樣:在你的公司的Facebook頁面上,你可以給提供了聯系信息的客戶發放一些獎品。這個活動要有一定的時間限制,因為你的獎品數量是有限的。但是,如果這個活動已經開始了,你必須做好應對指數級增長的準備,因為這個活動會像病毒一樣傳播開來。對于構建一個擁有這樣生命周期的應用程序來說,Windows Azure是一個理想的平臺。你可以從幾個實例開始,限制存儲空間,然后按需進行擴展。當這個活動“降溫”的時候,你可以卸載掉那些多余的實例。
但是,只是簡單地運行在Azure并不能保證可以獲得很好的可擴展性。一個Azure應用程序還需要使用一些方法(例如:分割成多個角色),和簡單的,可擴展的存儲結構,針對擴展來進行設計才能獲得很好的可擴展性。
在本文中,我們將會在Azure上構建一個可擴展的基于Facebook的營銷式應用程序。這個樣例應用程序的靈感來自于獲得巨大成功的Bloomin' Onion Facebook Campaign,這個應用程序是2009年下半年,Thuzi團隊為Outback Steakhouse構建的。它構建在兩個工具包(Windows Azure Toolkit和Facebook C# SDK)基礎之上的,這兩個工具包也是Thuzi團隊的那些開發者構建的。Windows Azure Toolkit開始的時候只是為在Azure上構建基于Facebook的應用程序提供一站式服務而已,但是后來演變成了一個通用的Azure開發工具包。當我們在這個應用程序中使用Windows Azure Toolkit進行存儲和隊列管理的時候,這些技巧可以應用到Azure平臺上的任何一個應用程序中。(關于)(關于Thuzi團隊)
這個應用程序都做些什么
我們會把這個應用程序構建成一個基于Fackbook的canvas應用程序,把canvas URL指向運行在Azure上的那個應用程序。客戶第一次運行這個應用程序("AzureSample")的時候,他們會看到一個權限請求窗體,詢問這個應用程序是否可以從Facebook中讀取信息(例如:客戶的出生日期)。
(圖1 因為這個應用程序需要訪問客戶的出生日期,所以Facebook會在這個應用程序啟動前,顯示一個權限窗體。這個應用程序通過一個由Facebook C# SDK提供的特性(attribute)來聲明它需要哪些權限。)
假設這個客戶給我們授予了必要的權限,我們啟動了AzureSample,然后開始收集客戶的信息。
(圖2 第一個頁面來自于這個應用程序的canvas URL,用來收集客戶的信息。當這個頁面打開的時候,“First Name”, “Last Name”, 和“Date of Birth”都已經用從Facebook讀取到的信息提前填充好了。)
這個客戶的“First Name”, “Last Name”, 和“Date of Birth”都是從Facebook中讀取到的,然后提前填充到窗體的相應字段中。這個客戶只需填充“Email Address”和“Zip Code”字段就可以繼續瀏覽下一個頁面了。
(圖3 商店選擇頁面。我們給這個客戶提供了一個包含三個商店的列表,這三個商店是根據他們在前一個頁面中輸入的郵政編碼而列出的,這些商店都在郵政編碼所在地方圓50英里之內。客戶可以選擇一個自己喜歡的商店。)
下一個頁面展示了一個包含三個附近的商店的列表,客戶在上一步輸入的郵政編碼在這里發揮了關鍵性的作用。這三個商店是這個客戶的郵政編碼所在地方圓50英里內最近的商店。(對于這個實例來說,我使用隨機的郵政編碼生成了一個包含1000個商店的列表,作為樣例數據來使用。)在這一步,我們已經收集到了我們需要的所有的用戶信息。“AzureSample”會啟動一個后臺任務,把一封帶有客戶獎品的email發送給那個客戶,然后把這些聯系信息從快速的Azure Table Storage遷移到更加容易查詢的SQL Azure中。接下來,剩下的所有事情就是展示一個完成頁面了。
(圖4 “thank-you”頁面。如果客戶在注冊以后再次運行這個應用程序,他們會被自動地重定向到這個頁面。)
#p#
項目結構
在Facebook上,這個應用程序叫作“AzureSample”,因為在Facebook上的應用程序不能包含“facebook”這個字符串。如果你要安裝這個應用程序,你可以在Facebook上給它起一個更有意義的名字,例如“SignUpFreeX”。在Visual Studio中,這個解決方案叫作“AzureFacebookSample”,它包含4個項目。
(圖5 在Visual Studio的解決方案資源瀏覽器中的“AzureFacebookSample”,如圖所示,這個解決方案包含4個項目)
“AzureFacebookSample.Cloud”是Azure應用程序的主項目。它包含兩個角色,一個Web角色和一個Worker角色。web角色是通過“AzureFacebookSample.Web”項目來實現的,而Worker角色是通過“AzureFacebookSample.Worker”項目來實現的。
Web角色是一個ASP.NET MVC項目,包含了這個應用程序的所有界面的視圖和相關的控制器邏輯。Worker角色負責發送獎品email和把聯系信息從Azure Table Storage遷移到SQL Azure中。
“AzureFacebookSample.Domain”是一個類庫項目,其中包括數據模型,隊列,和被Web角色和Worker角色共享的數據容器。通過域項目,Web角色和Worker角色會保存在Azure Storage, Azure隊列, 和SQL Azure的域對象中。
“AzureFacebookSample”展示了在Azure上,你應該如何組織Facebook應用程序,但是還有幾件你需要做的事情它是無法代勞的,那就是實現一個你自己的“病毒式”的營銷應用程序。首先,Worker角色實際上并不會發送一封email。在真正的應用程序中,Worker角色需要連接一個外部的服務,通過這個外部服務來生成大量的這次營銷活動所必需的email。在“AzureFacebookSample”中,并不包含連接到這個Web服務的代碼。第二,你需要一個額外的Worker角色來處理被郵件服務退回來的email,在Facebook上聯系客戶,嘗試獲取一個正確的email地址(以便于獎品email可以被發送)。最后,“AzureFacebookSample”并不會促使Facebook“likes”到公司頁面上,或者提醒客戶把這個應用程序告訴他們的Facebook好友。
請看《在Azure上構建一個基于Facebook的營銷式應用程序(中)》
和《在Azure上構建一個基于Facebook的營銷式應用程序(下)》
原文名:Building a Facebook Marketing App on Azure 作者:Steve Apiki
【本文乃51CTO精選譯文,轉載請標明出處!】
【編輯推薦】