• Nenhum resultado encontrado

Colaboração em tempo real com Clojure

N/A
N/A
Protected

Academic year: 2021

Share "Colaboração em tempo real com Clojure"

Copied!
69
0
0

Texto

(1)

Colaboração em tempo real

com Clojure

QCon - São Paulo, 2016

Leonardo Borges @leonardo_borges www.atlassian.com

(2)

Sobre

‣ Líder de equipe / Desenvolvedor Clojure na Atlassian

‣ Fundador do Grupo de Usuários Clojure de Sydney

‣ Autor do livro Clojure Reactive

(3)

Colaboração

co.la.bo.ra.ção

1 Ato de colaborar; cooperação; ajuda. 2 Trabalho feito pelos colaboradores. 3 Conjunto dos colaboradores. 4 Inform Reunião de duas ou mais pessoas

(4)
(5)
(6)

Operational Transformation 101

lá QQCon São Paulo!

user server

(7)

Operational Transformation 101

user server

(ins 0 “O”)

lá QQCon São Paulo! lá QQCon São Paulo!

(8)

Operational Transformation 101

user server

(del 3) (ins 0 “O”)

lá QQCon São Paulo! lá QQCon São Paulo!

(9)

Operational Transformation 101

user server

(del 3) (ins 0 “O”)

lá QQCon São Paulo! lá QQCon São Paulo!

Olá QQCon São Paulo! lá QCon São Paulo!

(10)

Operational Transformation 101

user server

OláQQCon São Paulo! Olá QCon São Paulo! (del 3)

(ins 0 “O”)

lá QQCon São Paulo! lá QQCon São Paulo!

Olá QQCon São Paulo! lá QCon São Paulo!

(11)

Operational Transformation 101

user server

(del 3) (ins 0 “O”)

lá QQCon São Paulo! lá QQCon São Paulo!

Olá QQCon São Paulo! lá QCon São Paulo!

(12)

Operational Transformation 101

user server

Olá QCon São Paulo! Olá QCon São Paulo!

(del 3) (ins 0 “O”)

lá QQCon São Paulo! lá QQCon São Paulo!

Olá QQCon São Paulo! lá QCon São Paulo!

(13)

user user user user user web server state

(14)

user user user user user web server state user user user user web server web server load balancer

(15)

user user user user user DB user user user user web server load balancer

(16)

Para onde encaminhamos as requisições?

(17)

Para onde encaminhamos as requisições?

Como os servidores falam um com o outro?

(18)

Para onde encaminhamos as requisições?

Como os servidores falam um com o outro?

O que acontece quando um dos servidores cai ou entra no

(19)

Para onde encaminhamos as requisições?

Como os servidores falam um com o outro?

Que tipo de garantias de entrega são necessárias?

O que acontece quando um dos servidores cai ou entra no

(20)

Para onde encaminhamos as requisições?

Que tipo de garantias de ordenação são necessárias?

Como os servidores falam um com o outro?

Que tipo de garantias de entrega são necessárias?

O que acontece quando um dos servidores cai ou entra no

(21)

Para onde encaminhamos as requisições?

Que tipo de garantias de ordenação são necessárias?

Como os servidores falam um com o outro?

Que tipo de garantias de entrega são necessárias?

O que acontece quando um dos servidores cai ou entra no

(22)
(23)

Vert.x

-SockJS

-Clustering

(24)

Vert.x

-SockJS

-Clustering

(25)

Vert.x

-SockJS

-Clustering

(26)
(27)

Actors

-State

-Location Transparency

-“At least once” delivery semantics -Ordering guarantees

(28)

Actors

-State

-Location Transparency

-“At least once” delivery semantics -Ordering guarantees

(29)

Actors

-State

-Location Transparency

-Garantias de entrega “At least once” e garantia de ordem

(30)

Akka and Pulsar

-Usar Akka desde Clojure é tedioso

-Clustering (in Pulsar) -JVM only

(31)

Akka and Pulsar (Quasar)

-Usar Akka desde Clojure é tedioso -Clustering (in Pulsar)

-JVM only -Fairness

(32)

-Usar Akka desde Clojure é tedioso -Clustering (in Pulsar)

-JVM only

-Fairness

(33)

-Usar Akka desde Clojure é tedioso -Clustering (in Pulsar)

-JVM only -Fairness

(34)

user web server state entity

Fairness

(35)

user user

web server entity state entity

Fairness

user

user

user

(36)
(37)

Sumário das opções

Entrega Ordem Fairness End-to-End

Vert.x

Akka / Pulsar

Distributed core.async (custom code)

(38)
(39)
(40)

Multiplexer

(41)

Multiplexer

Multiplexer endpoint duplex

(42)

Multiplexer

Multiplexer endpoint

web server state duplex

channel

duplex channel

(43)

Multiplexer

Multiplexer endpoint

endpoint

web server state

web server state duplex channel duplex channel duplex channel duplex channel

(44)

web server state

Multiplexer

Multiplexer endpoint

endpoint

web server state

web server state duplex channel duplex channel duplex channel duplex channel

(45)

Multiplexer

user load

balancer

web server state Multiplex

web server state Multiplex

web server state Multiplex

(46)

Multiplexer

user load

balancer

web server state Multiplex

web server state Multiplex

web server state Multiplex

(47)

Multiplexer

user load

balancer

web server state Multiplex

web server state Multiplex

web server state Multiplex

(48)

Multiplexer

user load

balancer

web server state Multiplex

web server state Multiplex

web server state Multiplex

(49)

Multiplexer

user load

balancer

web server state Multiplex

web server state Multiplex

web server state Multiplex

(50)

Multiplexer

user load

balancer

web server state Multiplex

web server state Multiplex

(51)

Aleph cluster

-Client and Server network programming

-Built on Netty and therefore asynchronous -Hazelcast for group membership

(52)

Aleph cluster

-Client and Server network programming -Desenvolvido com Netty (async #FTW)

(53)

Aleph cluster

-Client and Server network programming -Desenvolvido com Netty (async #FTW) -Hazelcast for group membership

(54)

Aleph cluster + multiplexer

-Distributed, end-to-end core.async channels

-Message delivery and ordering guarantees -Fault tolerance

-Fairness

(55)

Aleph cluster + multiplexer

-Distributed, end-to-end core.async channels -Message delivery and ordering guarantees -Fault tolerance

-Fairness

(56)

Isso parece bastante trabalho.

Por que não usar Erlang/Akka

(57)

Stack

OT

diff, materialise, etc…

Networking

multiplexer,

(58)

Stack

OT

diff, materialise, etc…

Networking

multiplexer,

aleph, hazelcast, etc…

(59)

Clojurescript

-Compila código Clojure para Javascript

(60)

(ns hello.core

#?(:clj (:import (org.joda.time DateTime)))) (defn now [] #?(:clj (DateTime/now) :cljs (js/Date.now))) (defn tomorrow [] (+ (now) 86400000))

Clojurescript

Cljc

(61)

(ns hello.core

(:import (org.joda.time DateTime))) (defn now [] (DateTime/now)) (defn tomorrow [] (+ (now) 86400000)) (ns hello.core) (defn now [] (js/Date.now)) (defn tomorrow [] (+ (now) 86400000))

Clojurescript

Clj

Cljs

(62)
(63)

Async

-core.async implementa CSP (Communicating Sequential Processes) -Funciona tanto na JVM como no browser

(64)

core.async

(defn fetch-person [id]

(go (to-person (<! (fetch-resource url))))) (defn fetch-friends [id]

(go (map to-person (<! (fetch-resource url))))) (defn aggregate-person [id]

(go (let [person (<! (fetch-person id))

friends (<! (fetch-friends id))]

(65)

Programação funcional

-Funções puras

-First-class e higher-order functions -Programação declarativa

(66)

Clojure

-Imutabilidade por padrão

-Polimorfismo via records, protocols e multimethods -Extensibilidade via macros

-Ciclo de desenvolvimento extremamente curto dada a

(67)

Conclusão

-Clojurescript está mais que pronto para produção -Programação funcional e Clojure oferecem claros

benefícios para o desenvolvimento de software concorrente -core.async é uma ferramenta poderosa e flexível para

programação assíncrona

-por que não dar Clojure e programação funcional uma chance no seu próximo projeto?

(68)

References

Akka Pulsar Vert.x Aleph Jupiter OT algorithm

Consistent Hashing Ring CRDTs in Riak akka.io bit.ly/actors-pulsar vertx.io/ aleph.io/ bit.ly/jupiterOT bit.ly/HashingRing bit.ly/CRDTRiak

(69)

Obrigado!

Perguntas? Leonardo Borges @leonardo_borges www.atlassian.com www.leonardoborges.com

Referências

Documentos relacionados

A matriz de oportunidades foi desenvolvida a partir da avaliação do posicionamento de cada empresa, tomando como referência os gaps em relação às melhores práticas e o grau de

Nos termos do artigo 219 da IN 77/2015, durante o período de 18 meses em que houver o pagamento do saldo residual, apesar de o segurado continuar mantendo a

Civil do Produtor, Coimbra, Almedina, 1990: pro pugnam a responsabilização directa do produtor

12 ACÍDIA As palavras e o exemplo de São Gaspar Bertoni, que, na sua vida, guiaram espiritualmente centenas de pessoas, possam ressoar também hoje em nosso espírito e nos ajudar

Esta linha completa de produtos formulada para minimizar o risco de reação alérgica e indicada para o cuidado da pele sensível e reativa, conta agora no seu portefólio com o Creme

Novamente, confirmam-se resultados previamente conhecidos a respeito da componente esperada e também da surpresa (estes últimos robustos); verificou-se também significância

139 Tiago Silva 00 Juniores Sporting

O paciente, assim como seus acompanhantes e visitantes, tem o dever de solicitar autorização à direção do hospital, caso queira fotografar e/ou filmar dentro