Arquitectura de software
Se refiere a una planificación basada en modelos, patrones y abstracciones teóricas, a la hora de realizar una pieza de software de cierta complejidad y como paso previo a cualquier implementación. De esta forma se dispone de una guía teórica detallada que nos permite entender cómo van a encajar cada una de las piezas de nuestro producto o servicio.

La arquitectura del software es una fase de planificación crítica a la hora de comenzar cualquier proyecto para cualquier pieza de software, ya que nos proporciona una hoja de ruta clara sobre el camino a seguir en el desarrollo, dándonos instrucciones sobre qué componentes formarán parte de nuestro producto, cómo se distribuirán y cuál será la forma en la que se comuniquen entre sí.
Patrones de arquitectura de software
cliente-servidor
Muy usado sobre todo en el diseño de webs y servicios online, y se basa en el concepto de la existencia de un servidor (que proporciona el servicio) y una serie de clientes, que piden al servidor y reciben una respuesta del mismo.

De capas
se subdivide la estructura del programa en un número de capas que representan una subtarea, cada una perteneciendo a un nivel de abstracción diferente. Cada capa está diseñada para proporcionar un servicio a la siguiente capa de mayor nivel. Generalmente se utilizan las siguientes capas:

modelo-vista-controlador (MVC)
Modelo: Contiene la funcionalidad central y los datos.
Vista: Muestra la información al usuario, siempre es posible definir una o más vistas para una misma aplicación.
Controlador: Maneja la entrada del usuario. Esto se hace para separar las representaciones internas de la información de las formas en que se presenta y se acepta la información del usuario. De esta manera se desacopla los componentes y permite una reutilización eficiente del código.

master-slave
consiste en dos grupos, el primero es llamado el maestro (master) y el otro el grupo de esclavos (slaves). Los esclavos realizan la tarea propuesta por el maestro, computan los resultados y los envían de nuevo a este, quien los presenta, almacena o procesa.

Importancia
A la hora de elegir un patrón de arquitectura siempre es necesario pensar en una serie de cuestiones que determinan el uso final que vamos a darle a nuestro software:
Coste - ¿Cuánto estamos dispuestos a invertir en el desarrollo y mantenimiento de nuestro sistema?
Tiempo de desarrollo - Igualmente, y muy relacionado con lo anterior, debemos de preguntarnos cuanto tiempo disponemos para desarrollar el producto, y cómo de cerca se encontraría la fecha de entrega o de salida al mercado.
Número de usuarios - Qué tipo de producto es y cuantos usuarios soporta ¿Funciona a través de web? ¿Es stand-alone? ¿Debe de soportar cargas elevadas por diseño?
Nivel de aislamiento - tener en cuenta es si el producto funciona de forma aislada al resto de productos del usuario o si debe de integrarse o permitir integraciones de terceros.
