2011-05-11 73 views
0

我目前正在開發一個java web應用程序,並且正在研究如何組合不同類型的技術以便最大限度地利用單個web服務器。什麼是Java應用程序的常見Web架構?

我的計劃至今有以下架構設定

Internet -> 
Varnish (reverse proxy) -> 
Apache2 (mod_pagespeed, mod_jk) -> 
Ehcache-web (caching html page fragments,spring-cache) -> 
Tomcat (java appsrv) -> 
Ehcache (cache layer) -> 
MySQL (persistance layer) 

是否有這樣的設計有問題嗎?當涉及到擴展和集羣時,怎麼辦?有沒有其他(更好的)解決方案?

謝謝!

+0

這取決於 - 我不會考慮使用Varnish第1天,除非您正在構建的應用程序會受到嚴重打擊。你也可以考慮在Tomcat和MySQL之間使用memcached(緩存層)。 – lobster1234 2011-05-11 08:37:21

+0

啊忘了,我有eclipse之間的tomcat和mysql – netbrain 2011-05-11 08:41:17

回答

1

我沒有以傳統的方式設想一個web應用程序 - 但是在服務提供商和消費者方面。在工作中,我們有一個在Tomcat下運行的RESTful API層,通過實現Shindig接口來構建。該層與MySQL以及MongoDB進行交互。我們使用Memcached進行近/遠緩存,因爲我們使用了很多列表和基於集合的操作,所以我們計劃遷移到Redis。此層還與Twitter和Facebook連接,用於某些API(例如推出狀態更新)。所有端點都可以作爲OpenSocial兼容的REST/XML調用訪問。我們使用NewRelic來監控服務性能和SLA。目前我們正在做一個超過30K RPM的響應時間爲10ms。我們有4個Tomcat,3個memcached,3個MySQL(1M 2S)和3個MongoDB(replicaset)。所有堆棧都在運行Centos的XenServer託管的虛擬機上運行。我們使用RabbitMQ進行消息/異步操作,比如發送通知或與第三方(Twitter/Facebook)交談,以便不阻止VM線程。隨着平臺的普及,我們計劃在不久的將來轉移到HornetQ + Scala Actors。搜索在Solr上運行,但我們正在主動遷移到ElasticSearch。

我們在這個基於API /服務的模型中構建了系統,以便我們可以服務於多個客戶端平臺。所以當我們的移動應用程序啓動時,它可以重新使用API​​,而不是爲移動設備單獨設置一組相同的堆棧。該體系結構將後端產品抽象爲與前端沒有耦合。我們擁有的前端是PHP/Zend,它廣泛地使用了JQuery。我們正在使用HTML5,Phonegap和Sencha touch構建移動前端。

爲了安全起見,我們已經打開GETs,但是寫操作通過雙腿oauth進行保護。一旦我們向外部消費者和應用程序開發人員開放API,我們將需要提供三方oauth。

我希望這個總結有所幫助。如果您需要進一步的信息或有任何問題,請不要猶豫,評論。

+0

確實很有趣。感謝您對平臺和技術選擇以及其他實用程序的意見。 – netbrain 2011-05-12 07:15:36

1

我們正在使用我們的高流量門戶(大約55 mil。PI /月)3個光漆代理,3個Apache(2)負載均衡器,6臺服務器專業服務器4個tomcats通過mod_jk與apaches進行通信。作爲RDBMS,我們有Oracles。我認爲數據庫選擇至關重要。我們的內容是我們的存在,因此我們需要一款數據庫產品,它的響應能力強,可靠,可靠,可用性高等等。在最壞的情況下我們可能需要支持。出於這個原因,我們選擇了Oracle。

Tomcat /應用程序服務器選擇取決於您的應用程序體系結構。 在我們的例子中,我們有Coremedia CMS(基於Spring的CMS包含內容服務器,主服務器,饋線等分佈式服務,通過CORBA進行通信)和集羣雄貓就足夠了。

我認爲你的清單/設置和這個組合對於大多數情況來說似乎非常好和足夠。

相關問題