Pregunta Despliegue de aplicaciones web: una versión para todos los clientes o cada una suya.


Tengo una pregunta general sobre la implementación de software. En el trabajo, diseñamos un CRM que se utiliza a través de navegadores web. Recientemente me dijeron que cada cliente específico tiene su propio servidor (aunque los servidores son propiedad de mi empresa, no son suyos ni se encuentran en sus oficinas).

Eso me preocupa un poco. Desde mi punto de vista, cuando diseña una aplicación web, debe tener en cuenta que podrá mantener una ejecución "suave" para todos sus clientes (sin hablar de replicación o balanceo de carga), con tal vez diferentes bases de datos para cada uno, pero una aplicación ... Ayuda especialmente a mantener y mantener a todos al día con parches y actualizaciones. Me equivoco ?? Permítame que me ayude a comprender mejor esta pregunta con recursos (debo faltar las palabras clave adecuadas para encontrarlas). En realidad no entiendo por qué pasaron por "la tercera vía" entre "una aplicación web centralizada para todos" y "una aplicación de escritorio distribuida para cada una".

Gracias !


7
2017-07-13 07:19


origen




Respuestas:


Depende del enfoque. Es mucho más fácil mantener miles de servidores que son iguales a los de las tecnologías actuales (herramientas para la automatización de trabajos, tales como docker, puppet, chef, ansible, etc., cientos de ellos).

Tener un solo servidor para cada cliente le brinda la capacidad de planificar los recursos para cada cliente de manera más precisa y permitirles pagar por lo que realmente usan. También hace que su problema sea más pequeño, lo que también tiene algunas ventajas.

Imagina que tendrías 1000 clientes en una base de datos con 2 TB de datos en total. Sus desarrolladores tendrían que escribir consultas SQL perfectamente para tener dicha base de datos lo suficientemente rápido. Este problema es mucho más pequeño con una pequeña base de datos para cada cliente.

Otra pregunta para pensar podría ser la seguridad. Si tiene que separar a sus clientes en el nivel de aplicación, sus desarrolladores deben tener mucho cuidado con los datos que seleccionan. Si tiene una base de datos por cliente, hay menos posibilidades de filtrar datos de otros clientes.

Por otro lado, tener una instancia única para todos los clientes le brinda la posibilidad de compartir recursos entre sus clientes y ahorrar algo de dinero en hardware.

Por lo tanto, esta decisión debe tomarse al inicio del proyecto, después de hacer una lista de ventajas y desventajas. También sugeriría crear algunos prototipos, para que sepa, por ejemplo, El proceso de implementación, las migraciones de bases de datos, etc. no serán un problema para usted.

Desde mi experiencia, personalmente sugiero tener una instancia para cada cliente si puede manejar la gestión de muchas instancias.


6
2017-07-13 07:46



Tiene sentido para mí y es mejor que comprenda todo el panorama ... Sin embargo, me plantea otras preguntas ... En cuanto a las bases de datos, ¿no hay soluciones para replicar / parcelar bases de datos de tal manera que las bases de datos no lo sean? Se asigna a los clientes, pero los clientes se asignan a las bases de datos (lo que permitiría agrupar "pequeños clientes", mientras que los más grandes podrían compartir algunos otros casos en pocos números (o solo). Es realmente porque todo el mundo de TI parece moverse de programas distribuidos a la aplicación web centralizada (especialmente Google ... con Chrome OS). - Shirraz


Tener servidores separados para cada cliente brinda beneficios al aislar los datos de los clientes y le permite tener varias versiones de la aplicación. Pero hay algunos inconvenientes. Gastará más dinero en servidores (porque no puede compartir recursos entre clientes fácilmente) y tiene que administrar la implementación bastante bien. Además, si solo tiene una base de datos en todos los clientes, debe asegurarse de que no habrá cambios de última hora en la estructura de datos o los requisitos de las bibliotecas. Necesitas tener algún cliente de mapas - versión de la aplicación para administrar también.

Tengo la misma versión de software para cada cliente en mi entorno, lo que nos ayuda a mantener y escalar servidores (solo puedo implementar un nuevo servidor que sea idéntico a los demás y simplemente agregarlo a loadbalancer). Además, no tengo que trabajar con diferentes puntos finales para cada cliente.


3
2017-07-13 08:03



¿Una configuración de virtualización adecuada no permitiría la mayoría de los beneficios de compartir recursos al tiempo que reduce (no elimina) la desventaja del costo? - α CVn


Creo que esta es una configuración bastante temprana y aquí hay algunas razones por las que creo que es una mala idea mantener servidores separados sobre la sobrecarga de recursos:

  • existe un riesgo significativo de que se desarrollen extensiones para uno y otro cliente, lo que causa conflictos en el futuro. Por motivos comerciales a corto plazo, esto puede manifestar una deuda técnica que nunca podrá deshacerse de ella. Es posible que sea demasiado difícil fusionar estas características conflictivas en el futuro y puede terminar con la opción de abandonar estos clientes de personalización en una versión antigua o quedarse con ellos cuando no lo desee.

  • un cliente multinacional o multiestatal o incluso una serie de adquisiciones en una industria pueden exigir un sistema donde los datos se separan, pero se pueden informar a través de la oficina central. Esto obligaría a tener una versión de varios inquilinos en cualquier caso, negando los beneficios de la separación de bases de datos.

  • todas las compañías Saas exitosas finalmente usan los datos agregados para funciones anónimas combinadas, como estadísticas de la industria, oportunidades de aprendizaje, etc. He visto esto utilizado con éxito por Xero y Mailchimp y me imagino que esta información es muy valiosa.


1
2017-07-14 08:25