2011-05-19 119 views
4

我正在構建一個新的SAAS應用程序,並且正在尋找一些關於最適合使用的框架的建議。我意識到,沒有任何一個框架可能能夠做到這一點,但我想我會問社區,並試圖找到解決最難的問題。最適合多租戶/多模板SAAS應用的Web框架

要求

  1. 單碼源。 (每個客戶都會有任何一個子域,或者一個不同的領域,但每個人都應該是逃跑相同的代碼庫和相同的服務器)
  2. 應該可以更新一次節目源,並有所有租戶把它撿起來
  3. 會話信息應該保存在緩存存儲中,或者只保存在cookie中(無共享狀態)
  4. 內置多租戶數據庫功能(基於用於到達應用的域,框架應自動使用數據庫分配給該域的連接信息)
  5. 每個客戶/域可能都有自己的網頁模板。模板需要在每個用戶爲基礎分配,並保持應用程序代碼之外
  6. 安全和快速原型是比速度更重要
  7. 將有大量的CRUD類型的畫面,從而簡單的內置的功能,這是想要的

我有相當長的Java和PHP的經驗,但只會考慮PHP作爲最後的手段。我的斯卡拉,Python和Ruby的體驗有點rust,,但如果它們提供了顯着的優勢,我不介意提速。我看過這個遊戲!框架和喜歡它(很好地滿足#1,#2,#6),但多租戶方面不是很強。我已經使用Grails完成了幾個項目,它處理除#3和#5之外的所有內容,並且可以被黑客攻破。

+0

[什麼是SaaS?](http://izlooite.blogspot.com/2009/05/what-is-saas.html) – 2011-06-10 12:23:12

+0

我不知道我是否正確理解#3。 javax.servlet.http.HttpSession對此有什麼錯誤? – 2012-02-12 18:31:11

回答

1

其實玩!非常適合你要找的東西。

閱讀此篇: http://www.lunatech-research.com/archives/2011/03/04/play-framework-writing-multitenancy-application-hibernate-filters

它的偉大工程。你甚至可以讓這個過濾器的工作,這樣就可以露出CRUD模塊的客戶,他們將只能得到自己的數據...

對於非常大的應用程序,分片似乎還不支持(無休眠碎片尚未處理的我認爲)。 有一個多分貝插件與多個分貝工作,但它似乎不工作得很好......

+0

感謝您的鏈接!就是我一直在尋找的東西。 – Flukey 2012-01-31 16:47:44

3

我會說,第三點是相當獨立於grails/play /任何一般。如果你需要一個共享緩存,這裏有很多提供者,並且Grails中的大多數插件都是插件。

Grails中的多租戶相當成熟,並且比Sebastiens的博客解答中的解決方案少得多。無論您是使用單租戶(多個數據庫)還是多租戶,您的代碼都或多或少都是透明的,大部分頭痛都會被抽象出來。請注意,您需要做一些智能索引(例如在多列索引中包含租戶ID),以便在數據開始增長時不會感到非常悲傷的速度。

至於外化視圖,您可以將它們放在數據庫中或將它們符號鏈接到您的web應用程序中,並將它們保存在單獨編號的文件夾中。然後從租戶插件,您可以使用TenantUtils.getCurrentTenant(),並簡單地從適當的文件夾"/" + (tenantID ?: "default") + "/whatever/view/path"渲染。這樣,佈局等可以在租戶之間共享,如果您願意,並且您只需將租戶特定的東西放入租戶特定的文件夾中即可。

你也可以在遊戲中做到這一點,或者,但是我沒有看到阻礙你在Grails中完成這項工作的任何事情。

我對這個問題的$ 0.02。

0

我聽說Grails的Multi-Tenant plugin爲幾種不同的多租戶方法提供了一些很好的工具。

「每個客戶/域可以有自己的模板網頁。 模板需要分配在每個客戶的基礎上,保持 應用程序代碼之外的」

我想你意味着他們每個人都有自己的佈局/皮膚。有幾種技術可以執行此操作:

  • 您可以根據租戶手動分配layouts<meta name="layout" content="${tenantName}/main" />

  • 寫自己的租賃知道LayoutDecoratorMapper和覆蓋默認GrailsLayoutDecoratorMapper在sitemesh.xml

  • 圖如何覆蓋和提高一些內部工具動態解析(每租戶)的意見或資源(GrailsViewResolver,GrailsConventionGroovyPageLocator, GrailsResourceLoader等)