it-swarm-es.com

Distribuyendo nodos en todas drupal Sitios

Estoy investigando cómo crear un escalable drupal donde los nodos se pueden compartir en diferentes sitios. Para respaldar el crecimiento futuro, es probable que necesitemos "enchufar" más servidores/Sitios en la red.

Estaba pensando que esto se lograría mejor con un sitio central para almacenar los registros maestros, usuarios y permisos, y luego los sitios de esclavos mantendrían copias de estos cuando sea relevante. No todos los sitios necesitarán todos los nodos, solo aquellos que están vinculados.

Alternativamente, el sitio central podría almacenar qué sitio tiene el registro maestro. Eso podría hacer que sea más fácil crecer. Pensando en ID de nodo, la solución final debe atender el hecho de que estos números podrían llegar fácilmente a los millones.

Puede ser una idea loca y tal vez Drupal no es la plataforma adecuada para esto también.

¿Algunas ideas?

Actualización: El concepto es similar al de la fragmentación y el mapa, reduce (mi entendimiento básico), pero mi mayor preocupación es la ID del nodo. Si el sistema llega al número de usuarios/grupos/nodos que estamos mirando, podríamos presionar el límite de NID int y experimentamos problemas de rendimiento mucho antes de ese punto. Así que un modelo distribuido parece ser la mejor dirección.

3
lordg

Normalmente, con drupal, no tendría varias bases de datos cada una con su propio fragmento de la base de datos y se combinaron todo lo posible.

Con Drupal 7 , drupal ahora admite maestros de base de datos y esclavos desde dentro de la aplicación. Lo que esto significa ahora es decir que necesita 3 servidores de base de datos para respaldar los requisitos no funcionales de sus sitios (disponibilidad, rendimiento, etc.), ahora puede agregar:

<?php
$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb1',
  'username' => 'username',
  'password' => 'secret',
  'Host' => 'dbserver1',
);
$databases['default']['slave'][] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb2',
  'username' => 'username',
  'password' => 'secret',
  'Host' => 'dbserver2',
);
$databases['default']['slave'][] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb3',
  'username' => 'username',
  'password' => 'secret',
  'Host' => 'dbserver3',
);
?>

Esta definición proporciona un solo servidor "predeterminado" y dos servidores "esclavos". Tenga en cuenta que la clave "esclavo" es una matriz. Si algún objetivo se define como una matriz de información de conexión, se seleccionará uno de los servidores definidos al azar para ese objetivo para cada solicitud de página. Es decir, en una solicitud de página Todas las consultas de esclavos se enviarán a DBSERVER2 mientras que en la siguiente se le enviarán a DBSERVER3.

Lo anterior es directamente de los documentos;)

Recomendaría el enfoque anterior, ya que esto es A admitido Configuración, si decide crear su propia personalización drupal esquema o algoritmo de división de carga, ahora tiene que apoyarlo.

Con Drupal 6 : está bastante forzado a usar PressFlow . PressFlow es una horquilla basada en el rendimiento de la base de código drupal que intenta mantener la compatibilidad con la API del 100% con Drupal. Lullabot escribió un artículo increíble en la replicación de la base de datos con PressFlow 6.

Resulta que Lullabot lanzó su vistas 3 módulo de consulta esclavos en GitHub, ¡Mestión lejos!

4
wiifm