2012-04-26 22 views
9

Ich stelle eine reguläre Java EE-Anwendung auf jboss7 zusammen, die JPA in der Datenebene verwendet. Ich möchte diese Anwendung so gestalten, dass sie mit der Last skaliert. Während es ziemlich klar ist, wie man die Webschicht skaliert: mehr Maschinen erstellen und sie hinter einen Load Balancer werfen, ist das Skalieren der Datenebene weniger so.Skalierung und Clustering JPA

Ich kann wahrscheinlich meine Datenbank (MySQL) Cluster. Stil, bei dem die JPA-Ebene nicht gruppiert bleibt. Im Idealfall wird JPA mithilfe von in (geclustertem) Speichercache, der von MySQL unterstützt wird, erweitert.

Wenn ich mich umschaue, scheinen alle Informationen rund um die JPA-Skalierung 3-4 Jahre alt zu sein. Die Leute reden über Ehcache, Memcached und Infinispan. Ich bin mir nicht sicher, ob das noch aktuell ist.

Kann mir jemand den Stand der Technik in Java EE Clustering und Skalierung sagen, besonders in der Datenebene.

+0

Ich bekam erstaunliche Antworten von Piotr und James.Es ist bedauerlich, dass SOF mich nur als die richtige Antwort markieren lassen wird. Danke an beide. Als nächstes muss ich herausfinden, was beim Caching am besten ist: Warum sollte ich etwas anderes als memcached verwenden? – Raj

Antwort

6

Verschiedene Caching-Strategien sind immer noch die Möglichkeit, JPA/Hibernate zu skalieren (Sie haben im Grunde die beliebtesten Optionen in Ihrer Frage genannt). Nichts Außergewöhnliches ist seit 4-5 Jahren in diesem Bereich passiert, soweit ich weiß. Eine weitere Option, die Sie nicht erwähnt haben, ist JBoss Cache. Der Second-Level-Cache für JPA/Hibernate gilt also weiterhin in diesem Bereich.

Warum kein Fortschritt hier? Meine wilde Vermutung ist, dass vor allem Leute, die eine skalierbare Anwendung benötigen, JPA und Hibernate in Bereichen ignorieren, in denen eine hohe Performance benötigt wird. Normalerweise gehen Leute mit SQL in Spring Framework JDBCTemplate Helfern und Transaktionsverwaltung. Dann ist die Skalierbarkeit die Frage der Datenbankfähigkeiten in diesem Bereich.

Der andere Trend besteht darin, No-SQL-Datenbanken zu verwenden. Es gibt eine Reihe von Lösungen: MongoDB, CouchoDB, Cassandra, Redis, um nur einige zu nennen. Dies sind in der Regel Google BigTable wie Schlüssel-Wert-Speicher (das ist zu stark vereinfacht, aber es ist mehr oder weniger die Idee hinter diesem Ansatz) und sie skalieren wie Hölle, wenn Sie ihre Einschränkungen akzeptieren (Beziehungen sind nicht mehr einfach verwaltet, etc.).

+0

Hallo Piotr, Danke für deine Antwort. Ich bin daran interessiert, mehr über JDBC-Vorlagenhelfer zu erfahren. Gibt es irgendwelche guten Hinweise? – Raj

+0

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/jdbc.html ist ein gutes Buch. Es gibt auch Bücher, "Frühling in Aktion" ist in Ordnung –

+0

Danke für den Link, Piotr. – Raj

6

Es gibt viele Lösungen, die beiden Hauptkategorien von Lösungen sind:

  • die Datenbank
  • mit einem Cluster-Cache-Skalierung Datenbank Last

Eclipselink unterstützt Datenpartitionierung für Sharding Daten zu reduzieren, über einen Satz von Datenbankinstanzen,

siehe: http://java-persistence-performance.blogspot.com/2011/05/data-partitioning-scaling-database.html

Sie auch MySQL Cluster,

siehe

verwenden: http://www.mysql.com/products/cluster/

Oracle TopLink Grid bietet Eclipse JPA Unterstützung für die Integration mit Oracle Coherence als verteiltes Cache,

siehe: http://www.oracle.com/technetwork/middleware/ias/tl-grid-097210.html

Der EclipseLink-Cache unterstützt das Clustering über die Cache-Koordination,

siehe: http://wiki.eclipse.org/EclipseLink/Examples/JPA/CacheCoordination

+0

Hallo James, Danke für deine Antwort. Wir wollen sowohl einzelne Punkte des Scheiterns skalieren als auch vermeiden. Bei all meinen Untersuchungen scheint memcached "best of breed" zu sein: es hat breite Unterstützung und scheint in der Lage zu sein, was jeder andere Cache tun würde. Was denken Sie? – Raj