Desarrollo Full Stack UAM.net

51
Desarrollo Full Stack Una visión personal y sesgada Roberto Luis Bisbé DotnetClub UAM 17 de Marzo de 2017

Transcript of Desarrollo Full Stack UAM.net

DesarrolloFullStackUnavisiónpersonalysesgada

RobertoLuisBisbé

DotnetClub UAM17deMarzo de2017

Acercade

• IngenierodeSoftwareenAmazonBusiness• Antiguoalumnodeestanoblecasa• IIPresidentedeUAM.net

• Twitter:@rlbisbe• Blog:rlbisbe.net

2

Agenda

• Motivación• Viajepersonal• Bloquesdeconstrucción• Arquitecturasalaitaliana

3

Motivación

"Conocerdetallessobreelfuncionamientodelasdiferentescapasdeunsistema nospermitetomarmejoresdecisiones queafectanalmismo"

4

Motivación

"Conocerdetallessobreelfuncionamientodelasdiferentescapasdeunsistema nospermitetomarmejoresdecisiones queafectanalmismo"

Yo,alprepararestacharla

5

Motivación

• "SaberoptimizarunaconsultanospermitemostrarsolamentelainformaciónnecesariaenlaUI"

• "Conocercualeslarepresentación delosdatosenlaUI nospermitemodelarmejornuestrodominio"

• "Conocerdiferentestiposdealmacenamientodedatosnospermitediseñarmejornuesta API"

6

Peroestonoesnuevo

• Enlacarreraestudiamos• Electrónica• Código binario• Álgebra deboole• Ensamblador• Sistemasoperativos• Redes

• Son"capas"deunstack

7

Enter theStack

"Incomputing,asolutionstackorsoftwarestackisasetof [...] componentsneededtocreateacompleteplatformsuchthatnoadditionalsoftwareisneededtosupportapplications.

Applicationsaresaidto"runon"or"runontopof"theresultingplatform."

UnbuensamaritanoenWikipedia8

FullStackDeveloper

• "Alguienquepuedemeterlapataentodaslascapasdelcódigo"

• "Alguien familiarizadoconcadacapa,sindominarningunayconuninterés genuinoenlatecnología.”

9

Laindustrialosnecesita

• +4.000.000 deresultadosen Google• +103.000 resultadosdelibros en Amazon• +34.000 resultados enLinkedIn• +100 ofertasdetrabajoenStackOverflow Carreers

10

MiviajealFullStack

11

2008– 2012StacksacadémicosAlongtimeagoinauniversitysofar

12

Stack1

Acción Capa

Entrada(Texto) Interfaz

Códigoquehacecosas Lógica denegocio

Salida(Texto) Interfaz

13

Stack2

Acción Capa

Entrada(HTTP) Interfaz

Lógicadepetición Controlador

Ejecución deCGIenconsola Lógica denegocio

Recuperación deresultados Controlador

Salida(HTTP) Interfaz

14

Stack 3

Acción Capa

Entrada(HTTP) Interfaz

Análisisdeentrada Controlador

Lógica deljuego Lógica denegocio

Comandooconsultaenbasededatos Datos

Conversióndebasededatosenlógicadeaplicación Lógica denegocio

Formato Controlador

Salida(HTTP) Interfaz

15

2012- ?StacksprofesionalesSnapbacktoreality,oh,theregoesgravity!

16

Stack1Acción Capa

• Línea decomandos• Aplicación escritorio• Dashboard(HTTP)

Interfaz

Análisisdeentrada Controlador

Comunicación conservidor Interfaz

Lógicadeaplicación Lógica denegocio

Comandooconsultaenbasededatos Datos

Conversióndebasededatosenlógicadeaplicación Lógica denegocio

Respuestadeservidor Interfaz

Análisisdesalida Controlador

• Línea decomandos• Aplicación escritorio• Dashboard

Interfaz

17

Stack2

Acción Capa

Entrada:accionesdentrodeunIDE Interfaz

Análisisdeentradaylimpieza Controlador

Comunicación conservidor Interfaz

Sincronización deestado Lógica denegocio

Comunicación conclientes Interfaz

Análisisdesalida Controlador

Salida:accionessobreelIDE Interfaz

18

Leccionesaprendidas

• Todosepuedeexpresarencapas• Divisiónsemántica• Responsabilidadespecífica

19

Bloquesdeconstrucción

20

DesktopStack

• Ejecutable,aplicación deconsola,daemon• APIsdelacapadegráficos• Compiz,Aero,Quartz

• APIsdelSistemaOperativo• Accesoadisco,registro,permisos

• APIsdeHardware• (USB,Sensoresintegrados...)

21

MobileStack

• Aplicación• Presentación• Lógica denegocio• Accesoaservicios

• APIsdelsistemaoperativo• Almacenamientoycaché• Comunicaciónconotrasaplicaciones• Accesoalared

• APIsdehardware• Sensores

22

WebStack

• APIsdelNavegador• Frameworkdeaplicacionesweb• Configuración yAPIsdelservidorweb• Red,firewall,routing...• APIsdelsistemaoperativo(realovirtualizado)

23

WebStack,aaltonivel

• Lógicadeaplicación• quelaapphagaalgo

• Almacenamientopersistente• almacenarcosas

• Búsqueda• recuperarloquehemosalmacenado

• Caché• tenerlainformacióncuantoantesposible

24

WebStack(StackOverflow)

• Lógicadeaplicación• .NETFramework:C#,ASP.netMVC

• Almacenamientopersistente• Relacional:SQLServer

• Búsqueda• ElasticSearch

• Caché• Redis

25

WebStack(LinkedIn)

• Lógicadeaplicación• Java

• Almacenamiento persistente• Norelacional,basadoendocumentos:Espresso

• Búsqueda• Lucene

• Caché• Producción propia:Voldemort

26

Stacks

• Desktop• Mobile• Web• Hardware(IoT)

27

Arquitecturas"lasaña"Capasobrecapa

28

Arquitecturas"lasaña"

• Presentación• Aplicación• Almacenamiento• Caché• Búsqueda

29

Capadepresentación

• Web• HTML/CSS/JS

• Escritorio• Winforms,Swing,Cocoa,GTK

• Móvil• UIKit,AndroidXML,XAML

• Línea decomandos• STDIN,Argumentos,logs

30

Capadeaplicación

• .NET• C#,VB.net,F#• ASP.net,NancyFX

• JVM• Java,Groovy,Scala,Kotlin• Spring,Play,Grails

• Otros• Ruby,Python,JS,PHP• Rails,Django,Meteor,Symfony

31

Capadealmacenamiento(I)

• Binarios• Imágenes,audio,vídeo,texturas

• Logs• Especialmentecríticoensistemasdeproducciónoasíncronos• AnálisisconherramientascomoSplunk

• Ficherosdeconfiguración• FicherosINI,JSON,yaml

32

Capadealmacenamiento(II)

• Relacional• SQLServer,MySQL,PosgreSQL• Estructuraestablecida:Normalización• Relacionesentretablas• Clavesexternas• Consultas,unionesentretablas,Índices,procedimientosalmacenados

• Basadoendocumentos• DynamoDB,DocumentDB,MongoDB• Estructuranofija:Desnormalización• Nohayrelaciones• OperacionesScanyQuery

33

Capadealmacenamiento(III)

• Clave-valor• Redis• Usadocomocaché

• Almacenamientoengrafos• Neo4J• Motoresderecomendación yderección defraudes

34

Capadealmacenamiento (IV):Caché

• Frescura• Validación• Invalidación

35

Tiposdecaché

• CacheHTTP• Varnish,Nginx,Apache

• Cachéenmemoriadeproceso• PartedeJavayde.Net

• Cachédememoriacompartida• Redis

• Cachédebasededatos• Resultadosdeconsultas

36

Capadealmacenamiento(V):Búsqueda

• IntegradaenDBMS:• selectnamelike'%s'

• Índices• Búsquedadevaloresespecíficosenunatabladeaccesorápido

• Aniveldeaplicación:• Algoritmosdebúsqueda "académicos"

• Motoresdebúsqueda• Lucene• Elasticsearch

37

Arquitecturas"lasaña"

• Presentación• Aplicación• Almacenamiento• Caché• Búsqueda

38

Arquitecturas"ravioli"Muchoselementos,unasalsa

39

Arquitecturas"ravioli"

• Microservicios• Comunicaciones• Directa• Mensajes

40

Microservicios

• Componentesespecializadoseindependientes.• Idealmentecadaunoconsupropioalmacenamiento.• Cadacomponentesepuededesplegarindependientemente.• Ejemplos:Amazon,Spotify

41

Comunicaciones(I):Directa

• GraphQL• REST• HTTP• ODBC• Sockets

42

Comunicaciones(II):Pasodemensajes

• Usadaporelsistemaoperativoparacomunicarseconaplicaciones.• Colas• Topics• Reintentos• DeadletterqueuesoPoisonqueues• SistemasdeColasdemensajes• ZeroMQ,RabbitMQ• AWSSQS,AzureServiceBus,GoogleCloudPubSub

43

Arquitecturas"ravioli"

• Microservicios• Comunicaciones• Directa• Mensajes

44

Arquitecturas"risotto"Eltotalesmayorquelasumadelosgranosdearroz

45

Risotto:Serverlesscomputing

• Funcionesespecíficas,especializadas• Enviarunemail• Redimensionarunafoto• Agregarmetadatosaunfichero

• Desplegadas independientemente• Efímeras• Proveedores• AzureFunctions,AWSLambda,GoogleCloudFunctions

46

Arquitecturas"pizza"

47

Arquitecturas"panetone"

48

Resumen

• Motivación• Ejemplos• Stacks"web","mobile”,"desktop”…• Arquitecturas"lasaña","ravioli","risotto”…• Almacenamiento• Comunicaciones• Frameworks

49

Motivación

"Conocerdetalles sobreelfuncionamientodelasdiferentescapasdeunsistema nospermitetomarmejoresdecisionesqueafectanalmismo"

Yo,alprincipiodeestacharla

50

¿Preguntas?

51