2012-04-26 26 views
9

Estoy armando una aplicación Java EE regular en jboss7 que usará JPA en el nivel de datos. Me gustaría hacer esta aplicación de modo que se amplíe con la carga. Aunque está bastante claro cómo escalar el nivel web: crear más máquinas y lanzarlas detrás de un equilibrador de carga, escalar el nivel de datos es menor.Escalado y agrupamiento JPA

Probablemente pueda agrupar mi base de datos (MySQL). Stil, eso deja la capa JPA sin agrupar. Idealmente, JPA se ampliará utilizando el almacenamiento en memoria caché (en clúster) respaldado por MySQL.

Cuando miro a mi alrededor, toda la información sobre la escala de JPA parece tener entre 3 y 4 años. La gente habla de ehcache, memcached e infinispan. No estoy seguro de si esto todavía es actual.

¿Puede alguien decirme el estado de la técnica en clústeres y escalas de Java EE, especialmente en el nivel de datos?

+0

Recibí excelentes respuestas de Piotr y James.Es desafortunado que SOF solo me permita marcar uno como la respuesta correcta. Gracias a ambos. A continuación, tengo que averiguar qué es lo mejor de la raza en el almacenamiento en caché: ¿Por qué usaría algo más que memcached? – Raj

Respuesta

6

Varias estrategias de almacenamiento en caché siguen siendo la forma de escalar JPA/Hibernate (básicamente has nombrado las opciones más populares en tu pregunta). No sucedió nada extraordinario desde hace 4-5 años en este campo, hasta donde yo sé. Una opción más que no has mencionado es JBoss Cache. Por lo tanto, la memoria caché de segundo nivel para JPA/Hibernate aún rige en esta área.

¿Por qué no hay progreso aquí? Mi suposición más simple es que, en primer lugar, las personas que necesitan una aplicación escalable tienden a ignorar JPA e Hibernate en áreas donde se necesita un alto rendimiento. Por lo general, las personas van con SQL vestido con Spring Framework JDBCTemplate y administración de transacciones. Entonces la escalabilidad es la cuestión de las capacidades de la base de datos en esta área.

La otra tendencia es utilizar bases de datos No-SQL. Hay un montón de soluciones: MongoDB, CouchoDB, Cassandra, Redis, por nombrar algunos. Estos son generalmente Google BigTable como almacenes de clave-valor (esto es una simplificación excesiva, pero es más o menos la idea detrás de ese enfoque) y escalan como el infierno, si usted acepta sus limitaciones (las relaciones ya no se manejan fácilmente, etc.).

+0

Hola Piotr, gracias por tu respuesta. Estoy interesado en aprender más sobre los ayudantes de plantilla JDBC. ¿Hay algún buen puntero? – Raj

+0

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/jdbc.html es una buena lectura. También hay libros, "Spring in Action" está bien –

+0

Gracias por el enlace, Piotr. – Raj

6

Hay muchas soluciones, las dos categorías principales de soluciones son:

  • escalar la base de datos
  • usando una caché en clúster para reducir la carga de base de datos

EclipseLink admite la partición de datos para sharding datos en un conjunto de instancias de base de datos,

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

También puede usar MySQL Cluster,

véase: http://www.mysql.com/products/cluster/

Oracle TopLink cuadrícula proporciona apoyo EclipseLink APP para la integración con Oracle Coherence como una caché distribuida,

véase: http://www.oracle.com/technetwork/middleware/ias/tl-grid-097210.html

La memoria caché de EclipseLink admite clústeres mediante la coordinación de la memoria caché,

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

+0

Hola James, gracias por tu respuesta. Queremos hacer ambas cosas para escalar y evitar cualquier punto de falla. En toda mi investigación, Memcached parece ser "lo mejor de su clase": tiene amplio respaldo y parece ser capaz de hacer lo que cualquier otro caché haría. ¿Qué piensas? – Raj