2012-01-16 66 views
1

將使用Ruby on Rails或Django等標準Web框架構建的海量Web應用程序拆分爲小塊並將其分佈到大量服務器中的最佳方式是什麼?如果我們考慮在RESTful服務分區和service-oriented design或架構,那麼可以採用的方法保羅·迪克斯的名字在他的著作「與Ruby on Rails的面向服務的設計」一:如何將功能劃分爲單獨的服務

  • 分區上的邏輯功能
  • 分區上的讀/寫頻率
  • 分區最小化加入迭代的速度
  • 分區

是否preferrable對LOGI分區校準函數和業務邏輯,在讀/寫頻率上進行分區,還是在最小化連接和數據庫訪問時進行分區?另一種可能的選擇是不同的內容類型:ID,(社交)圖,地圖,文件,圖像等。例如,在Amazon S3中存儲圖像或使用Google地圖獲取地圖很常見。什麼是最佳實踐?

+0

太主觀。對此的「最佳」答案需要比您提供的更多地瞭解您的軟件,系統,數據和意圖。 – SpliFF 2012-01-16 10:32:56

+0

我加了更多的具體信息,希望這有助於澄清問題 – 0x4a6f4672 2012-01-16 17:06:16

+0

@ 0x4a6f4672的問題還是要廣泛的。這真的很難回答。如果你有很少的連接,Miniming連接是沒有意義的,如果你主要讀取,優化寫入是沒有意義的。你可以分享你想要構建的應用程序的想法嗎?如果你可以確定你問題中的性能問題,你可能會得到你的答案。 – 2012-01-16 18:21:47

回答

2

也許值得看看互聯網巨頭。亞馬遜和eBay以面向服務的方式而聞名。這些都是互聯網巨頭,它將一切分割成服務。

易趣: 蘭迪·舒普介紹了一些最佳做法,在易趣建設大型網站,例如在此演示文稿有關eBay's Architectural Principles和相應article about lessons from eBay。易趣分區的一切。每個問題都通過數據,負載和/或使用模式分解爲多個維度的可管理塊。兩種基本的分區模式是(1)功能分割和(2)水平分割,數據庫和應用程序層先按功能分割,然後水平分割。 Randy表示,功能分割和功能分解是最重要的方法,相關的功能部分屬於一起,而不相關的功能部分則屬於不同的部分。 Paul Dix在他的書中也說過這樣的話:「一般來說,你想根據邏輯功能對服務進行劃分。」 ebay's architecture擁有大約200組功能,即「應用程序」。在16,000個應用程序服務器上運行的應用程序層在ebay's architecture中劃分爲220個獨立的應用程序池(銷售,搜索,查看項目,出價,結賬等)。 eBay數據庫層在400個主機上有超過一千個不同的邏輯數據庫,其中數據庫被分割成功能區域。易趣已經編寫了自己的ORM層,稱爲數據訪問層(DAL),負責數據庫拆分。

亞馬遜: 在亞馬遜,一切都分爲服務。面向服務的架構(SOA)是亞馬遜技術的基礎建築抽象。 Amazon.com architecture不僅分爲服務,甚至亞馬遜的開發人員都圍繞服務組織起來。亞馬遜真的是許多內部初創公司的生態系統,它們擁有自己的數據和自己的API。這裏的服務是由一小組開發人員操作和擁有的。 Amazon.com platform由數百種服務構成,從原始的底層基礎服務(存儲,計算,排隊......)到聚合的高級服務,如身份管理,內容生成& Discovery產品和優惠管理,訂單處理,付款或履行&客戶服務。要爲訪問亞馬遜網站的客戶構建產品詳細信息頁面,該軟件會撥打200至300個服務,爲該客戶提供高度個性化的體驗。

Twitter使用對應於不同內容類型,ID,圖形,URL等的服務。它使用Snowflake進行ID生成。 Snowflake是用於在大規模使用中生成唯一ID號的網絡服務。 Twitter使用FlockDB作爲社交圖形存儲。 FlockDB是一個分佈式圖形數據庫,用於存儲Twitter使用的鄰接列表。它使用SpiderDuck作爲URL提取器。 SpiderDuck實時獲取Tweets中共享的所有URL,解析下載的內容以提取感興趣的元數據,並使該元數據可供其他Twitter服務在幾秒鐘內消耗。

相關問題