Arquitecturas que crecen y arquitecturas que no

Preview:

DESCRIPTION

Presentación dada en el marco de SHLCON 2010, Puebla, México. http://loseventos.de/springhispano/shlcon2010

Citation preview

Arquitecturas que Crecen y

Arquitecturas que No

Agustín Ramos Fonseca

¿Qué es Arquitectura?

¿De qué formas puede crecer un

sistema de software?

En la cantidad de…

Usuarios que lo usan

Datos que maneja.

Transacciones que procesa.

Funcionalidad que implementa.

Contextos en los que es usado.

Plataformas que soporta.

Metáforas

Un Organismo Vivo

El proceso biológico que lleva a un organismo a desarrollar su forma característica.

Morfogénesis

Se origina (una célula)

Se forma

Madura

Cambia constantemente.

Alcanza la vejez, y muere.

...¿Puede crearse software así?

¿Qué beneficios traería?

Ciclo de vida

Especialización y

restricciones

En las etapas embrionarias, muchas

criaturas son muy parecidas.

Conforme pasa el tiempo, se dan

eventos que dan forma y restringen el

conjunto de eventos que pueden

ocurrir despues, así como las formas

que se pueden alcanzar...

En software… ¿por qué tomar

decisiones anticipadas?

Especialización y

restricciones

El desarrollo depende del

contexto

En software… ¿Cuál es el contexto adecuado?

El entorno socio-económico y tecnológico en el cual se inserta… ¿Moraleja?

¡Release It!

Diseño de Lenguajes

¿Qué constituye un lenguaje?

Un vocabulario

if, for, public, myVar

Una sintaxis

válido: public void do() {}

Inválido: void public do() {}

Una semántica

Dos extremos

Lenguajes con muchas características

(Muy completos).

◦ Un amplio vocabulario.

◦ Una sintaxis muy elaborada.

Lenguajes pequeños pero extensibles.

¿Cuál es mejor?

Growing a Language

Guy Steele, OOPSLA 1998

“A language design can no longer be a thing. It must be a pattern—a pattern for growth—a pattern for growing the pattern for defining the patterns that programmers can use for their real work and their main

goal.”

“So I think the sole way to win is to plan for growth with help from users... Parts of the

language must be designed to help the task of growth. “

Christopher Alexander

y las 15 propiedades

No comprendimos a

Alexander Él hablaba de esto.

No comprendimos a

Alexander Pero interpretamos esto

Esto no puede crecer

Por eso reformuló su teoría

“The Nature of Order” (4 tomos)

"living structure, wherever it appears, is

composed of fundamental structural

features

-- roughly fifteen of them, at least."

Las 15 propiedades

1. Levels of scale.

2. Strong centers.

3. Boundaries.

4. Alternating repetition.

5. Positive space.

6. Good shape.

7. Local symmetries.

8. Deep interlock and ambiguity. .

9. Contrast.

10. Gradients.

11. Roughness.

12. Echoes.

13. The Void.

14. Simplicity and Inner Calm.

15. Not-separateness.

Ejemplo: Niveles de Escala

En software

Una arquitectura micro-kernel

Principios

Modularización

Sin una buena modularización, los sistemasson rígidos (difíciles de cambiar).

¿Qué es una buena modularización?

◦ Modularización Efectiva

http://slidesha.re/9siQFY

◦ Modular Architecture

http://modularity.kirkk.com/

Diseña explícitamente tus módulos, y cuidaque las propiedades esperadas de ellos se mantengan.

Ortogonalidad

Las responsabilidades de los

componentes deben tener fronteras

bien definidas.

Solo de esta manera se logra la

flexibilidad y reversibilidad requerida.

Decisiones Reversibles

Cuando se toma una decisión

tecnológica, es necesario evaluar si

esta podría cambiar en un futuro. De

ser así debemos introducir los

mecanismos necesarios para lograr

revertir la decisión.

◦ Abstracciones.

◦ Componentes débilmente acoplados.

◦ Intermediarios (Adapter, Proxy, etc)

Patrones Arquitectónicos

CQRS

Command Query Responsibility

Segregation

Actores

No hay un solo hilo de control.

“Objetos” que se comunican con mensajesasíncronos.

No hay estado compartido.

Cuando un mensaje es recibido, un actor puede◦ Cambiar su estado interno.

◦ Crear más actores.

◦ Enviar más mensajes

¿Qué ofrece?◦ Escalabilidad. Es un modelo natural de cómputo

distribuido.

◦ Tolerancia a fallas. Cuando un actor no funciona, se crea uno nuevo en su lugar.

Actores

¿Con qué experimentar?

◦ Erlang

◦ Scala

◦ Akka (librería Java)

◦ Gpars (Groovy)

¡Gracias!

Agustín Ramos Fonseca

@MachinesAreUs

zentimental.software@gmail.com