Globalcode – Open4educationGlobalcode – Open4education
Trilha – .NET
Caliel Costa
Nerd, ouvinte de blues, pesquisador, esportista e fotógrafo amador, desenvolvedor e projetista de soluções em TI. Software
Designer no Superplayer.
Globalcode – Open4education
Agenda
• Definições Básicas
• Necessidade
• Problema
• Solução
• Implementando
• Próximos passos
Globalcode – Open4education
escalabilidade
através de
micro
serviços
Globalcode – Open4education
serviços
Substantivo, masculino singular
Com origem no termo latim servitĭum, a palavra serviço define a ação de servir
(estar sujeito a/ser prestável alguém por qualquer motivo, fazendo aquilo que
essa pessoa quer ou pede).
Substantivo utilizado para designar tarefa, trabalho ou obra em execução, a ser
executado ou já realizado
Ato ou efeito de servir
Globalcode – Open4education
micro
Substantivo, masculino singular
A palavra micro provém do idioma grego e significa “pequeno”
Significando também o conjunto de pequenos componentes para montar um todo
Convém destacar que em alguns países latino-americanos é usado o vocábulo
micro enquanto sinónimo de autocarro.
Milésima parte do milímetro
Globalcode – Open4education
através de
Advérbio
Do Latim ad + transverse
Por entre
Pelo meio de
De um para outro lado de
Globalcode – Open4education
escalabilidade
É uma característica desejável em todo o sistema ou processo
Indica sua habilidade de manipular uma porção crescente de trabalho de forma
uniforme ou estar preparado para crescer
Globalcode – Open4education
escalabilidade
40Kg
20Kg 20Kg
Escalabilidade Vertical
(Scale Up)
Escalabilidade Horizontal
(Scale Out)
Globalcode – Open4education
Superplayer é um serviço de recomendação musical focado em melhorar
todos os momentos da vida das pessoas através da trilha sonora
perfeita.
Startup brasileira
Criado em 2012
Globalcode – Open4education
Web, Android, iOS, Windows Phone, ...
Globalcode – Open4education
Problema
•Estatísticas
•Métricas
•Previsão
+ 10.000.000
USUÁRIOS ÚNICOS
ACUMULADOS
+ 1.400.000
USUÁRIOS ÚNICOS POR MÊS
+ 4.500.000
VISITAS POR MÊS
TOP
600SITES MAIS
ACESSADOS
DO BRASIL.
Alexa – Traffic Rank
Globalcode – Open4education
Quais as playlists mais ouvidas?
API
/play
Globalcode – Open4education
Problema
•Estatísticas
•Métricas
•Previsão
Globalcode – Open4education
Quais as playlists mais ouvidas em Porto Alegre e
São Paulo
API
/play
Globalcode – Open4education
Mas a Natureza é sábia....
Quando temos uma vírus…
o corpo não cria uma supercélula
Globalcode – Open4education
Globalcode – Open4education
Escalabilidade Horizontal para
resolver o problema
Globalcode – Open4education
Nuvem de serviços
Globalcode – Open4education
Aka Beet
Globalcode – Open4education
Quais as playlists mais ouvidas em Porto Alegre e
São Paulo
API
/play
Beet
Globalcode – Open4education
Beet
Dó Ré Mi
Fá Sol Lá Si
Globalcode – Open4education
Princípio da Responsabilidade Única
(The Single Responsability Principle)
"A class should have one, and only one, reason to change."
("Uma classe deve ter um, e somente um, motivo para mudar.")
Robert "Uncle Bob" Martin
Globalcode – Open4education
Escalabilidade Horizontal
Dó
Ré
Mi
Fá
Sol Lá Si
Ré
Ré
Globalcode – Open4education
Alteração de Tecnologia
Dó
Ré
Sol Lá Si
Ré
Ré
Mi
Fá
Globalcode – Open4education
Arquitetura
Web Android iOS WP
APIs
SQL
Server
Mongo
DB Beet
Back office
Globalcode – Open4education
Plataformas
API WEB API
REST
Estalabilidade Horizontal
Sincrono
Beet
Agents
NancyFX
REST
Responsabilidade Única
Escabilidade Horizontal
Assincronos
Globalcode – Open4education
NancyFX
Nancy is a lightweight, low-ceremony, framework for building HTTP
based services on .Net and Mono. The goal of the framework is to stay
out of the way as much as possible and provide a super-duper-happy-
path to all interactions.
http://nancyfx.org/
Pode ser hospedado com IIS, Azure, Owin (Katana
ou self-hosted), Nginx
Globalcode – Open4education
NancyFX
public class SampleModule : Nancy.NancyModule
{
public SampleModule()
{
Get["/"] = _ => "Hello World!";
}
}
Globalcode – Open4education
CODE TIME
Globalcode – Open4education
Time line
Back
office
SQL
Server
Playlists
Track
Artista
Album
Playlist
Mongo
DB
Playlist
Track
Album
Artist
Track
Album
Artist
Track
Album
Artist
Globalcode – Open4education
Time line
Play
Mongo
DB
Playlist
Track
Album
Artist
Track
Album
Artist
Track
Album
Artist
API Web
Play @Rock
Playlist com
tracks
Suggestion
Globalcode – Open4education
API
BeetSDK
Back Office
1
Back Office
2
Back Office
2
BeetSDK
Beet
HttResquest
Globalcode – Open4education
14 Agentes Diferentes
Playlist PushSpotPlay Track Suggestion
Globalcode – Open4education
BeetSDK
namespace TDC.BeetSDK
{
public interface IBeetService
{
ICategoryAgent Category { get; }
IPlaylistAgent Playlist { get; }
ISpotAgent Spot { get; }
IPlayAgent Play { get; }
ISuggestionAgent Suggestion { get; }
IFilterAgent Filter { get; }
ITrackAgent Track { get; }
INotificationAgent Notification { get; }
}
}
Globalcode – Open4education
BeetSDK
namespace TDC.BeetSDK
{
public interface IPlaylistAgent
{
bool Put(long playlistId);
bool Delete(long playlistId);
}
}
Globalcode – Open4education
BeetSDK
namespace TDC.BeetSDK
{
public interface ISuggestionAgent
{
Task<bool> Post(long accountId);
}
}
Globalcode – Open4education
Hardware
Load Balancer
Beet
Beet
Beet
Globalcode – Open4education
Closure
A separação em serviços externos facilitou a integração
entre os bancos de dados
Facilitou a transformação de dados em informação
Estamos ajustado o processo de deploy e referência entre
os serviços
Globalcode – Open4education
jointheband@superplayer.fm

Dividindo para conquistar: microservicos com o jeitinho .NET