Enviar pesquisa
Carregar
Scala na Nuvem de Som: Escalabilidade, Funcionalidade e Futuros
•
3 gostaram
•
543 visualizações
Título melhorado com IA
Flavio W. Brasil
Seguir
Scala @ soundcloud [scaladores]
Leia menos
Leia mais
Software
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 83
Recomendados
Scala na soundcloud [QCon]
Scala na soundcloud [QCon]
Herval Freire
Spring Capitulo 03
Spring Capitulo 03
Diego Pacheco
Introdução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slides
Derek Willian Stavis
Social TV and the Rise of Companion Screens
Social TV and the Rise of Companion Screens
Steve Weaver
ADR Benchmarking research
ADR Benchmarking research
Michael Hill
Game theory 11
Game theory 11
poundza
Onalytica-CyberSecurity-2015-Top-100-Influencers-And-Brands
Onalytica-CyberSecurity-2015-Top-100-Influencers-And-Brands
Mark W. Bennett
Horses
Horses
gabitaa8
Recomendados
Scala na soundcloud [QCon]
Scala na soundcloud [QCon]
Herval Freire
Spring Capitulo 03
Spring Capitulo 03
Diego Pacheco
Introdução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slides
Derek Willian Stavis
Social TV and the Rise of Companion Screens
Social TV and the Rise of Companion Screens
Steve Weaver
ADR Benchmarking research
ADR Benchmarking research
Michael Hill
Game theory 11
Game theory 11
poundza
Onalytica-CyberSecurity-2015-Top-100-Influencers-And-Brands
Onalytica-CyberSecurity-2015-Top-100-Influencers-And-Brands
Mark W. Bennett
Horses
Horses
gabitaa8
Hunting snake
Hunting snake
gabitaa8
The Death of TV? Hardly...
The Death of TV? Hardly...
Steve Weaver
Design process
Design process
sharmiarchitect
Vacanze studio edimburgo 2008
Vacanze studio edimburgo 2008
dany
Game theory 11
Game theory 11
poundza
SyncNI Magazine Spring 2012
SyncNI Magazine Spring 2012
Mark W. Bennett
La riforma scolastica
La riforma scolastica
andymene
Awal sebelum membeli rumah
Awal sebelum membeli rumah
Rahmatian Zaleh
Skyebank TSP August 2011
Skyebank TSP August 2011
yemiolaitan
Front Page
Front Page
agelso
ScalaDays Amsterdam - Don't block yourself
ScalaDays Amsterdam - Don't block yourself
Flavio W. Brasil
Service Master Response
Service Master Response
jaciblain
Electronic voting-system
Electronic voting-system
audienceresponder
Portafolio 4to corte admon
Portafolio 4to corte admon
luisapatriciaviviana
Game theory
Game theory
poundza
Atrodiet atbilstošo literatūras varoņu tēlu
Atrodiet atbilstošo literatūras varoņu tēlu
Dāviņu pagasta bibliotēka
Fall2010 quinnedu261syllabus
Fall2010 quinnedu261syllabus
Peggy Quinn
Leadership in Open Innovation
Leadership in Open Innovation
fwippich
BDO 2011 Biotech Briefing
BDO 2011 Biotech Briefing
rstarkes
Program Engagement Power. Programs Do Affect Ad Engagement
Program Engagement Power. Programs Do Affect Ad Engagement
Steve Weaver
Possibilidades com python
Possibilidades com python
UFPA
JQuery
JQuery
Luciano Borges
Mais conteúdo relacionado
Destaque
Hunting snake
Hunting snake
gabitaa8
The Death of TV? Hardly...
The Death of TV? Hardly...
Steve Weaver
Design process
Design process
sharmiarchitect
Vacanze studio edimburgo 2008
Vacanze studio edimburgo 2008
dany
Game theory 11
Game theory 11
poundza
SyncNI Magazine Spring 2012
SyncNI Magazine Spring 2012
Mark W. Bennett
La riforma scolastica
La riforma scolastica
andymene
Awal sebelum membeli rumah
Awal sebelum membeli rumah
Rahmatian Zaleh
Skyebank TSP August 2011
Skyebank TSP August 2011
yemiolaitan
Front Page
Front Page
agelso
ScalaDays Amsterdam - Don't block yourself
ScalaDays Amsterdam - Don't block yourself
Flavio W. Brasil
Service Master Response
Service Master Response
jaciblain
Electronic voting-system
Electronic voting-system
audienceresponder
Portafolio 4to corte admon
Portafolio 4to corte admon
luisapatriciaviviana
Game theory
Game theory
poundza
Atrodiet atbilstošo literatūras varoņu tēlu
Atrodiet atbilstošo literatūras varoņu tēlu
Dāviņu pagasta bibliotēka
Fall2010 quinnedu261syllabus
Fall2010 quinnedu261syllabus
Peggy Quinn
Leadership in Open Innovation
Leadership in Open Innovation
fwippich
BDO 2011 Biotech Briefing
BDO 2011 Biotech Briefing
rstarkes
Program Engagement Power. Programs Do Affect Ad Engagement
Program Engagement Power. Programs Do Affect Ad Engagement
Steve Weaver
Destaque
(20)
Hunting snake
Hunting snake
The Death of TV? Hardly...
The Death of TV? Hardly...
Design process
Design process
Vacanze studio edimburgo 2008
Vacanze studio edimburgo 2008
Game theory 11
Game theory 11
SyncNI Magazine Spring 2012
SyncNI Magazine Spring 2012
La riforma scolastica
La riforma scolastica
Awal sebelum membeli rumah
Awal sebelum membeli rumah
Skyebank TSP August 2011
Skyebank TSP August 2011
Front Page
Front Page
ScalaDays Amsterdam - Don't block yourself
ScalaDays Amsterdam - Don't block yourself
Service Master Response
Service Master Response
Electronic voting-system
Electronic voting-system
Portafolio 4to corte admon
Portafolio 4to corte admon
Game theory
Game theory
Atrodiet atbilstošo literatūras varoņu tēlu
Atrodiet atbilstošo literatūras varoņu tēlu
Fall2010 quinnedu261syllabus
Fall2010 quinnedu261syllabus
Leadership in Open Innovation
Leadership in Open Innovation
BDO 2011 Biotech Briefing
BDO 2011 Biotech Briefing
Program Engagement Power. Programs Do Affect Ad Engagement
Program Engagement Power. Programs Do Affect Ad Engagement
Semelhante a Scala na Nuvem de Som: Escalabilidade, Funcionalidade e Futuros
Possibilidades com python
Possibilidades com python
UFPA
JQuery
JQuery
Luciano Borges
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
Nelson Glauber Leal
Desenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVA
Willian Magalhães
De a máxima cobertura nos seus testes de API
De a máxima cobertura nos seus testes de API
Elias Nogueira
Além do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completa
Charles Kilesse
Apache NiFi com postgresql
Apache NiFi com postgresql
Gerdan Santos
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Davy Alvarenga Machado
Tdc2010 web
Tdc2010 web
Ramon Oliveira
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPonto
Paulo Morgado
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com Room
Nelson Glauber Leal
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional Interfaces
DevCamp Campinas
LINQ - Language Integrated Query
LINQ - Language Integrated Query
Dalton Valadares
Realtime com node.js e socket.io
Realtime com node.js e socket.io
Caio Ribeiro Pereira
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
Julio Viegas
Workshop Python
Workshop Python
Lucas Castejon
Kotlin no desenvolvimento Mobile - FTSL
Kotlin no desenvolvimento Mobile - FTSL
Lucas Antonio Ramos Sartori
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEB
Luciano Borges
Javascript
Javascript
Ramon Oliveira
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos parte 2
Wilson Júnior
Semelhante a Scala na Nuvem de Som: Escalabilidade, Funcionalidade e Futuros
(20)
Possibilidades com python
Possibilidades com python
JQuery
JQuery
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
Desenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVA
De a máxima cobertura nos seus testes de API
De a máxima cobertura nos seus testes de API
Além do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completa
Apache NiFi com postgresql
Apache NiFi com postgresql
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Tdc2010 web
Tdc2010 web
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPonto
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com Room
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional Interfaces
LINQ - Language Integrated Query
LINQ - Language Integrated Query
Realtime com node.js e socket.io
Realtime com node.js e socket.io
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
Workshop Python
Workshop Python
Kotlin no desenvolvimento Mobile - FTSL
Kotlin no desenvolvimento Mobile - FTSL
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEB
Javascript
Javascript
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos parte 2
Scala na Nuvem de Som: Escalabilidade, Funcionalidade e Futuros
1.
2.
@flaviowbrasil Aficionado por
open source Expert em escalabilidade Mestre Jedi Scala Prefere + uma sessão de profiling do que uma tarde na praia
3.
@herval Fundador de
Startups Dois Easter Eggs publicados Padawan Scala Tem um cachorro com nome de sorvete
4.
A Nuvem de
Som 12 horas de novo conteúdo/ minuto 350 milhões de usuários/mês 12 milhões de horas ouvidas/mês 1 usuário no espaço
5.
Era uma vez
uma startup... Uma base de código Um punhado de construtores
6.
Um milhão de
features Base de código gigante
7.
Move fast and
break things
8.
Quebrando os muros
9.
Muitos vilarejos, muitos
idiomas Microserviços → "tudo é http" Culturas de código Infraestrutura Monitoramento "production ready"
10.
A Torre de
Babel Mais pessoas → mais linguagens N+1 linguagens N = número de linguagens de programação existentes
11.
Move fast without
breaking everything, bitte.
12.
Java Serviços de
base Bibliotecas compartilhadas Monitoria Autenticação/segurança (cross-cutting concerns) INFRAESTRUTURA BÁSICA
13.
JVM-Kit
14.
Estudo de caso
O novo Stream
15.
Reescrever pra quê?
Novas features Latência Vazão Microserviços
16.
API Timeline
17.
API Timeline Roshi
18.
API Timeline Roshi
Autentic. Autoriz. Geo loc.
19.
API Timeline Roshi
Autentic. Autoriz. Geo loc.
20.
API Timeline Roshi
Autentic. Autoriz. Geo loc. Playlists Tracks Usuários
21.
API Timeline Roshi
Autentic. Autoriz. Geo loc. Playlists Tracks Usuários Likes Coment. Promoted Stats
22.
API Timeline Roshi
Autentic. Autoriz. Geo loc. Playlists Tracks Usuários Likes Coment. Promoted Stats ...
23.
Buscar API Agregar
Timeline Roshi Autentic. Autoriz. Geo loc. Playlists Tracks Usuários Likes Coment. Promoted Stats ...
24.
Buscar Latência
25.
API Timeline Roshi
Autentic. Autoriz. Geo loc. Playlists Tracks Usuários Likes Coment. Promoted Stats ...
26.
Agregar Complexidade
27.
API Timeline Roshi
Autentic. Autoriz. Geo loc. Playlists Tracks Usuários Likes Coment. Promoted Stats ...
28.
Scala yay!
29.
Buscar Paralelizar
30.
31.
Futuros
32.
Futuros Referência para
um valor que será disponibilizado no futuro.
33.
Futuros val response:
Future[Int] = … // Não compila response + 1
34.
Futuros val response:
Future[Int] = … // Adiciona um callback response.onSuccess { int => println(int) }
35.
Futuros val response:
Future[Int] = … // Compõe um novo futuro val count: Future[Int] = response.map { int => int + 1 }
36.
Futuros for {
user <- authenticate(request) } yield { }
37.
Futuros for {
user <- authenticate(request) geo <- geoLocationFor(request, user) } yield { }
38.
Futuros for {
user <- authenticate(request) geo <- geoLocationFor(request, user) timeline <- timelineFor(user, geo) } yield { }
39.
Futuros for {
user <- authenticate(request) geo <- geoLocationFor(request, user) timeline <- timelineFor(user, geo) resources <- fetchTracks(timeline) .join(fetchPlaylists(timeline)) .join(fetchComments(timeline)) } yield { }
40.
Futuros for {
user <- authenticate(request) geo <- geoLocationFor(request, user) timeline <- timelineFor(user, geo) resources <- fetchTracks(timeline) .join(fetchPlaylists(timeline)) .join(fetchComments(timeline)) } yield { new EnrichedTimeline(timeline, resources) }
41.
Futuros def handle(request:
Request): Future[EnrichedTimeline] = for { user <- authenticate(request) geo <- geoLocationFor(request, user) timeline <- timelineFor(user, geo) resources <- fetchTracks(timeline) .join(fetchPlaylists(timeline)) .join(fetchComments(timeline)) } yield { new EnrichedTimeline(timeline, resources) }
42.
Futuros + NIO
Escalabilidade
43.
Máquinas
44.
Máquinas Processos
45.
Máquinas Processos Threads
46.
Máquinas Processos Threads
Futuros
47.
Futuros def handle(request:
Request): Future[EnrichedTimeline] = for { user <- authenticate(request) geo <- geoLocationFor(request, user) timeline <- timelineFor(user, geo) resources <- fetchTracks(timeline) .join(fetchPlaylists(timeline)) .join(fetchComments(timeline)) } yield { new EnrichedTimeline(timeline, resources) }
48.
Agregar Funcional
49.
Collections
50.
val timeline: Timeline
= …
51.
val timeline: Timeline
= … val actorsToFetch: List[User] = timeline.items.map(_.actor)
52.
val timeline: Timeline
= … val actorsToFetch: List[User] = timeline.items.map(_.actor) val itemsByActor: Map[User, List[Item]] = timeline.items.groupBy(_.actor)
53.
val timeline: Timeline
= … val actorsToFetch: List[User] = timeline.items.map(_.actor) val itemsByActor: Map[User, List[Item]] = timeline.items.groupBy(_.actor) val numberOfItemsByActor: Map[User, Int] = itemsByActor.mapValues(_.size)
54.
def createEnrichedTimeline( timeline:
Timeline, users: Map[User, EnrichedUser]) = { timeline.items.map { item => new EnrichedItem( item, users.get(item.actor)) } }
55.
Options
56.
Option[T] None Some(value)
57.
Options def findUser(id:
Int): Option[User] // Nao compila render.json(findUser(666).name)
58.
def findUser(id: Int):
Option[User] // Compila findUser(666).map { case Some(user) => render.json(user.name) case None => render.notFound } Options
59.
Pattern Matching
60.
case class User(name:
String, gender: Gender, email: Email)
61.
case class User(name:
String, gender: Gender, email: Email) timelineActors.foreach { }
62.
case class User(name:
String, gender: Gender, email: Email) timelineActors.foreach { case User(name, Female, Email(_, “soundcloud.com”) => println(“mulher trabalhando na soundcloud”) }
63.
case class User(name:
String, gender: Gender, email: Email) timelineActors.foreach { case User(name, Female, Email(_, “soundcloud.com”) => println(“mulher trabalhando na soundcloud”) case User(name, Male, Email(_, “soundcloud.com”) => println(“homem trabalhando na soundcloud”) }
64.
case class User(name:
String, gender: Gender, email: Email) timelineActors.foreach { case User(name, Female, Email(_, “soundcloud.com”) => println(“mulher trabalhando na soundcloud”) case User(name, Male, Email(_, “soundcloud.com”) => println(“homem trabalhando na soundcloud”) case User(name, gender, Email(_, “qconrio.com.br”) => println(“organizador da qconrio”) }
65.
case class User(name:
String, gender: Gender, email: Email) timelineActors.foreach { case User(name, Female, Email(_, “soundcloud.com”) => println(“mulher trabalhando na soundcloud”) case User(name, Male, Email(_, “soundcloud.com”) => println(“homem trabalhando na soundcloud”) case User(name, gender, Email(_, “qconrio.com.br”) => println(“organizador da qconrio”) case _ => println(“pessoa desconhecida”) }
66.
Nem tudo são
flores...
67.
68.
Código denso
69.
70.
Mas e o
Stream...?
71.
Mas e o
Stream...? API Cassandra MySQL
72.
Mas e o
Stream...? API Cassandra MySQL ~400 ms
73.
Mas e o
Stream...? API MySQL Tracks SPelarvyilcisets SPelarvyilcisets Service Timeline Redis Service
74.
Mas e o
Stream...? ~150 ms API MySQL Tracks SPelarvyilcisets SPelarvyilcisets Service Timeline Redis Service
75.
Mas só o
Stream...? Data team Outros servicos em Scala Ferramental jvmkit
76.
Mas só o
Stream...? Stranglers
77.
Mas só o
Stream...? Stranglers
78.
Mas só o
Stream...? Stranglers Novo stream
79.
Mas só o
Stream...? Stranglers Novo stream Cache
80.
Em resumo... Produtivo
como Ruby, typesafe como Java* Move faster, break fewer things
81.
O presente
82.
O futuro! Padrões
de código Bibliotecas mais estáveis Facilidade de inovação "One Scala"
83.
Perguntas? by the
way, we're hiring http://bit.ly/qconrj2014