colaboração em tempo real com clojure · pdf filecluster? para onde encaminhamos...
TRANSCRIPT
![Page 1: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/1.jpg)
Colaboração em tempo real com Clojure
QCon - São Paulo, 2016
Leonardo Borges @leonardo_borges www.atlassian.com www.leonardoborges.com
![Page 2: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/2.jpg)
Sobre‣ Líder de equipe / Desenvolvedor Clojure na Atlassian ‣ Fundador do Grupo de Usuários Clojure de Sydney ‣ Autor do livro Clojure Reactive Programming
![Page 3: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/3.jpg)
Colaboraçãoco.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
que trabalham juntas para produzir ou utilizar uma aplicação multimídia.
![Page 4: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/4.jpg)
Colaboração em tempo real
![Page 5: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/5.jpg)
Colaboração em tempo real
![Page 6: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/6.jpg)
Operational Transformation 101
lá QQCon São Paulo!
user server
lá QQCon São Paulo!
![Page 7: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/7.jpg)
Operational Transformation 101
user server
(ins 0 “O”)
lá QQCon São Paulo! lá QQCon São Paulo!
Olá QQCon São Paulo!
![Page 8: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/8.jpg)
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!
![Page 9: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/9.jpg)
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!
(del 3) (ins 0 “O”)
![Page 10: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/10.jpg)
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!
(del 3) (ins 0 “O”)
![Page 11: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/11.jpg)
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!
(del 4) (ins 0 “O”)
![Page 12: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/12.jpg)
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!
(del 4) (ins 0 “O”)
![Page 13: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/13.jpg)
user
user
user
user
user
web server
state
![Page 14: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/14.jpg)
user
user
user
user
user
web server
state
user
user user
user
web server
web server
load balancer
![Page 15: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/15.jpg)
user
user
user
user
user
DB
user
user user
user
web server
load balancer
state web server state web server state
![Page 16: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/16.jpg)
Para onde encaminhamos as requisições?
![Page 17: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/17.jpg)
Para onde encaminhamos as requisições?
Como os servidores falam um com o outro?
![Page 18: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/18.jpg)
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
cluster?
![Page 19: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/19.jpg)
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
cluster?
![Page 20: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/20.jpg)
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
cluster?
![Page 21: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/21.jpg)
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
cluster?
![Page 22: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/22.jpg)
Vert.x
![Page 23: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/23.jpg)
Vert.x
-SockJS -Clustering -Distributed Event Bus
![Page 24: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/24.jpg)
Vert.x
-SockJS -Clustering -Distributed Event Bus
![Page 25: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/25.jpg)
Vert.x
-SockJS -Clustering -Distributed Event Bus
![Page 26: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/26.jpg)
Actors
![Page 27: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/27.jpg)
Actors
-State -Location Transparency -“At least once” delivery semantics -Ordering guarantees
![Page 28: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/28.jpg)
Actors
-State -Location Transparency -“At least once” delivery semantics -Ordering guarantees
![Page 29: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/29.jpg)
Actors
-State -Location Transparency -Garantias de entrega “At least once” e garantia de ordem
![Page 30: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/30.jpg)
Akka and Pulsar
-Usar Akka desde Clojure é tedioso -Clustering (in Pulsar) -JVM only -Fairness
![Page 31: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/31.jpg)
Akka and Pulsar (Quasar)
-Usar Akka desde Clojure é tedioso -Clustering (in Pulsar) -JVM only -Fairness
![Page 32: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/32.jpg)
-Usar Akka desde Clojure é tedioso -Clustering (in Pulsar) -JVM only -Fairness
Akka and Pulsar (Quasar)
![Page 33: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/33.jpg)
-Usar Akka desde Clojure é tedioso -Clustering (in Pulsar) -JVM only -Fairness
Akka and Pulsar (Quasar)
![Page 34: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/34.jpg)
user
web server state entity
Fairness
user
![Page 35: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/35.jpg)
useruser
web server stateentity entity
Fairness
user
user
useruser
![Page 36: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/36.jpg)
Fairness
![Page 37: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/37.jpg)
Sumário das opçõesEntrega Ordem Fairness End-to-End
Vert.x
Akka / Pulsar
Distributed core.async
(custom code)
![Page 38: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/38.jpg)
Certo. Então o que desenvolvemos?
![Page 39: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/39.jpg)
Multiplexer
![Page 40: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/40.jpg)
Multiplexer
Multiplexer
![Page 41: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/41.jpg)
Multiplexer
Multiplexer
endpoint duplex channel
![Page 42: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/42.jpg)
Multiplexer
Multiplexer
endpoint
web server state
duplex channel
duplex channel
![Page 43: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/43.jpg)
Multiplexer
Multiplexer
endpoint
endpoint
web server state
web server state
duplex channel
duplex channel
duplex channel
duplex channel
![Page 44: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/44.jpg)
web server state
Multiplexer
Multiplexer
endpoint
endpoint
web server state
web server state
duplex channel
duplex channel
duplex channel
duplex channel
![Page 45: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/45.jpg)
Multiplexer
user load balancer
web serverstate
Multiplex
web serverstate
Multiplex
web serverstate
Multiplex
![Page 46: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/46.jpg)
Multiplexer
user load balancer
web serverstate
Multiplex
web serverstate
Multiplex
web serverstate
Multiplex
![Page 47: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/47.jpg)
Multiplexer
user load balancer
web serverstate
Multiplex
web serverstate
Multiplex
web serverstate
Multiplex
![Page 48: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/48.jpg)
Multiplexer
user load balancer
web serverstate
Multiplex
web serverstate
Multiplex
web serverstate
Multiplex
![Page 49: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/49.jpg)
Multiplexer
user load balancer
web serverstate
Multiplex
web serverstate
Multiplex
web serverstate
Multiplex
![Page 50: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/50.jpg)
Multiplexer
user load balancer
web serverstate
Multiplex
web serverstate
Multiplex
![Page 51: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/51.jpg)
Aleph cluster
-Client and Server network programming -Built on Netty and therefore asynchronous -Hazelcast for group membership
![Page 52: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/52.jpg)
Aleph cluster
-Client and Server network programming -Desenvolvido com Netty (async #FTW) -Hazelcast for group membership
![Page 53: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/53.jpg)
Aleph cluster
-Client and Server network programming -Desenvolvido com Netty (async #FTW) -Hazelcast for group membership
![Page 54: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/54.jpg)
Aleph cluster + multiplexer
-Distributed, end-to-end core.async channels -Message delivery and ordering guarantees -Fault tolerance -Fairness -Backpressure
![Page 55: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/55.jpg)
Aleph cluster + multiplexer
-Distributed, end-to-end core.async channels -Message delivery and ordering guarantees -Fault tolerance -Fairness -Backpressure
![Page 56: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/56.jpg)
Isso parece bastante trabalho. Por que não usar Erlang/Akka
mesmo?
![Page 57: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/57.jpg)
Stack
OT diff, materialise,
etc…
Networking multiplexer,
aleph, hazelcast, etc…
![Page 58: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/58.jpg)
Stack
OT diff, materialise,
etc…
Networking multiplexer,
aleph, hazelcast, etc…
Browser Server
![Page 59: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/59.jpg)
Clojurescript
-Compila código Clojure para Javascript -Permite testar as funções apenas uma vez
![Page 60: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/60.jpg)
(ns hello.core #?(:clj (:import (org.joda.time DateTime))))
(defn now [] #?(:clj (DateTime/now) :cljs (js/Date.now)))
(defn tomorrow [] (+ (now) 86400000))
ClojurescriptCljc
![Page 61: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/61.jpg)
(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))
ClojurescriptClj Cljs
![Page 62: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/62.jpg)
Async
![Page 63: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/63.jpg)
Async
-core.async implementa CSP (Communicating Sequential Processes) -Funciona tanto na JVM como no browser
![Page 64: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/64.jpg)
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))] (merge person {:friends friends}))))
![Page 65: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/65.jpg)
Programação funcional
-Funções puras -First-class e higher-order functions -Programação declarativa
![Page 66: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/66.jpg)
Clojure
-Imutabilidade por padrão -Polimorfismo via records, protocols e multimethods -Extensibilidade via macros -Ciclo de desenvolvimento extremamente curto dada a integração avançada com o REPL (Read Eval Print Loop)
![Page 67: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/67.jpg)
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?
![Page 68: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/68.jpg)
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
![Page 69: Colaboração em tempo real com Clojure · PDF filecluster? Para onde encaminhamos ... -Hazelcast for group membership. Aleph cluster ... Vert.x Aleph](https://reader031.vdocuments.mx/reader031/viewer/2022022503/5ab312fb7f8b9aea528deb92/html5/thumbnails/69.jpg)
Obrigado!Perguntas?
Leonardo Borges @leonardo_borges www.atlassian.com www.leonardoborges.com