Pregunta

¿Cómo se maneja la sustitución / añadir / eliminar nodos memcached en las aplicaciones de producción? Voy a tener una serie de aplicaciones que se clonan y personalizadas, debido a la cada necesidad de los clientes que se ejecutan en un solo y mismo servidor web, así que voy a supongo que habrá un día en que algunos de los nodos serán cambiados.

Así es como memcached está poblada por la normalidad:

$m = new Memcached();

$servers = array(
    array('mem1.domain.com', 11211, 33),
    array('mem2.domain.com', 11211, 67)
);
$m->addServers($servers);

Mi idea inicial, es hacer que la matriz de servidores $ que se rellena a partir de la base de datos, también en caché, pero basado en archivos, realizado una vez al día o algo así, con la opción de forzar una actualización de próxima ejecución de la función que ejerce en la llamada $ addServers. Sin embargo, estoy adivinando que esto podría añadir un poco de sobrecarga adicional ya que los discos de almacenamiento son bastante lento ...

¿Qué opinas?

¿Fue útil?

Solución

Siempre es mejor definir cosas como que en la fuente. Por supuesto, se puede usar parse_ini_file() o algo por el estilo para leer un archivo de configuración. Realmente sin embargo, que pertenece en la fuente. Pero si está definida en un archivo INI, no hay muchos problemas de seguridad, como la inyección de código y los gustos en contraposición a la definición de sus entradas en PHP.

Dado que hay algunas aplicaciones que pueden estar leyendo el mismo archivo INI, se puede poner en un lugar común de que todas las aplicaciones tienen acceso a (usando permisos de grupo, por ejemplo). En realidad, haciendo que no está muy recomendado.

Otros consejos

Usar un archivo de configuración - ya sea por su parse_ini_file o algún otro esquema de configuración de análisis. Si usted está preocupado por el tiempo de análisis, se puede poner esas configuraciones en la trayectoria de carga php ini http://brian.moonspot.net/using-ini-files-for-php-application-settings - este pre-analiza toda la vars que necesita, pero que tendrá que reiniciar Apache para cargar todos los cambios.

Una vez que los archivos se lee lo suficiente (siempre y cuando usted no tiene demasiada paliza en su máquina) el archivo de configuración será asignada en la memoria caché de todos modos, por lo que será muy rápido. Usted puede optimizar mediante el uso de la forma serializada de PHP que carga rápido, e incluso optimizar aún más mediante el uso de la caché de usuario de APC.

Por último, utilizar las bibliotecas de cliente Memcache más nuevos -. Que utilizan los algoritmos hash consistente ahora, y que va a ayudar añadir / eliminar servidores individuales

En función de los requisitos de E haría uso de una lista que soporta auto-expulsión después de algún TTL (modo pasivo) o algún tipo de patrón oyente si usted quiere que esto se actualizará inmediatamente (modo activo). Dondequiera que usted mantenga su fuente primaria (archivo de propiedades, base de datos, etc.) no es realmente importante, siempre y cuando es accesible cuando sea necesario y el TTL es lo suficientemente grande (como se mencionó en su comentario).

Para enfoque pasivo podría utilizar reutilización alguna otra biblioteca de almacenamiento en caché local que apoya TTL (por ejemplo EHCache en Java) poniendo su lista de servidores en la caché bajo una clave conocida. Para enfoque activo, por ejemplo, Java tiene java.util.EventListener. Es (des) afortunadamente muchos años que no tengo nada hecho en PHP por lo que no puede aconsejar sobre eso.

Yo aconsejaría fuertemente en contra de poner los datos de configuración en el código. En el mundo que estoy viviendo hardcoding es un pecado grave.

También puede ser que desee echar un vistazo a last.fm cómo es el uso constante algoritmo de hash por ser capaz de añadir / eliminar servidores a / desde la piscina memcached sin causar una completa de reasignación de todas las claves.

Por lo que udnerstood, la principal preocupación aquí es cómo almacenar en caché la configuración de mantenerla en su mayoría hasta a la fecha cuando cambia.

Bueno, la mejor opción aquí es, obviamente, su almacenamiento en una base de datos y refrescante de DB, por ejemplo, cada 15 segundos. Tener gran carga de la aplicación, la consulta de la base de datos una vez por 15 segundos no cambiará nada en absoluto. Cargando los datos de la propia base de datos es bastante rápido como sea necesario sólo un par de campos.

Otra opción que la fuerza de trabajo aquí - utilizan una separada memcached :) En serio, sólo almacenar en caché la configuración cargada de DB allí, purgar esa clave caché en la actualización de configuración.

En resumen: cualquier esquema de caducidad basada en el tiempo iba a funcionar. La solución más simple - mantener por su cuenta (almacén de tiempo de la última actualización y comprobar que en cada llamada a la función); un poco más avanzado. - usar algo como memcached

actualización : DB es la mejor solución a medida que aumenta bastante bien:. No tiene que copiar configuraciones a través de 20 servidores en cada actualización de la configuración

  • Utilice un localizador de servicio como - https://www.consul.io/ . Añadir o quitar servicios y los consumidores obtienen la información de servicio en tiempo real cónsul.
  • Si cónsul hace más sobrecarga de la gestión de una nueva pieza de software, mover la información en una configuración centralizada. En la actualización vuelva a cargar los eventos de las actualizaciones de configuración o de disparo. Los consumidores detectar eventos y actualizar la información.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top