Cuando está escribiendo programas para un entorno en clúster, mantiene el estado en una ubicación central que es accesible para todos los nodos de trabajo en el clúster, O fragmenta el estado y lo almacena en el clúster, y hace que cada nodo funcione solo en él propia porción de datos.
La primera estrategia es la que usan comúnmente las aplicaciones de 3 niveles.
- ¿Alguien ha tenido éxito con Agile en el desarrollo de productos SaaS?
- ¿Cuáles son los sitios de revisión de software SaaS más populares e influyentes en los Estados Unidos?
- Como empresa, ¿cómo se ve su proceso para suscribirse a una suscripción SaaS?
- ¿Cuáles son las características del software de gestión de proyectos basado en la web?
- ¿Cuál es la mejor manera de capacitar y monetizar una red de consultores para una plataforma SaaS?
La capa de presentación es responsable de mostrar los datos al usuario. La capa de Servidor / Aplicación tiene la lógica de negocios, y la capa de la base de datos tiene estado. Esto permite que la aplicación se amplíe agregando más servidores en la capa de aplicación a medida que aumenta el número de solicitudes, y que se amplíe agregando más servidores a la capa de base de datos a medida que aumentan los datos. El problema con esta arquitectura es que incurre en IO entre la aplicación y las capas de datos, y no puede escalar IO agregando hardware. Además, la contención de datos en la capa de datos puede agregar cuellos de botella
Esta arquitectura es una buena opción para las aplicaciones web, ya que las aplicaciones web generalmente no procesan una gran cantidad de datos en cada solicitud, y puede diseñar su capa de datos de una manera que minimice la contención entre solicitudes
La segunda estrategia es utilizada por muchas aplicaciones de análisis de datos / big data. Los marcos como Apache Hadoop y Apache Spark se construyen alrededor de esto
Aquí, la capa HDFS almacena los datos de manera distribuida al particionar los datos y almacenarlos en los nodos Slave. La capa Map Reduce es responsable de hacer el análisis. Lo hace enviando la ejecución a los nodos esclavos, y cada nodo trabaja en su propio segmento de datos y lo devuelve al nodo maestro. El nodo maestro acepta los datos recibidos de todos los esclavos. La ventaja aquí es que no hay ningún costo de E / S incurrido entre el código que procesa datos y el código que almacena datos. Esto se escala mucho mejor para aplicaciones que necesitan muchos datos.
Una cosa que es común en ambas arquitecturas es que mantiene el código que procesa los datos separados del código que mantiene el estado . Esto es lo que se entiende por construir aplicaciones sin estado. En el caso de arquitecturas de 3 niveles, el código que procesa los datos está físicamente separado del código que almacena los datos. Esto le permite ampliar el procesamiento fácilmente. En el caso de arquitecturas similares a Hadoop, el código analítico está separado lógicamente de los datos. Esto se debe a que cuando los datos crecen, puede agregar más nodos y volver a fragmentarlos.
Entonces, no es que cubrimos arquitecturas, hablemos de OOP y cómo se relaciona con el diseño de estas capas. En ambas arquitecturas, los datos fluyen a través de capas sucesivas, y todas las capas no tienen estado hasta la última capa, que es la capa de datos, y es responsable de mantener el estado. Es un error decir que OOP tiene estado. No. En OOP, cada clase encapsula su estado . Hay una diferencia muy sutil pero importante aquí. La encapsulación no implica necesariamente mantener el estado .
La razón principal por la que desea utilizar OOP es porque desea modelar el software para que coincida con los conceptos del mundo real. Además, desea hacerlo de manera que las clases sean plug-and-play. Debería poder reemplazar una implementación de la clase por otra fácilmente. Es por eso que necesita encapsulación porque proporciona ocultación de datos . Una clase oculta toda la lógica necesaria para mantener sus propios datos, por lo que puede cambiar la lógica fácilmente sin afectar a nadie más.
Una forma ingenua de encapsular datos es simplemente mantener los datos en la memoria. Y si abre la mayoría de los libros de texto de OOP para principiantes, esto es lo que muestran, porque es más simple ilustrar la encapsulación. Sin embargo, una clase también puede encapsular datos almacenando los datos en el almacén de datos. Aún obtiene los beneficios de ocultar datos si una clase encapsula todo el acceso a los datos.
La encapsulación consiste en ocultar la lógica, no retener datos. Puede ser apátrida y flexible asegurándose de que todo el acceso a los datos se realice a través de una clase responsable de administrar el estado en la capa de datos.