Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Tsuru internals: a arquitetura de uma plataforma de cloud computing open source

1,198 views

Published on

Slides da palestra "Tsuru internals: a arquitetura de uma plataforma de cloud computing open source", apresentada no dia 23 de Julho de 2015, no TDC São Paulo.

Código da aplicação de exemplo: https://github.com/fsouza/tsuru-internals-tdc

Published in: Technology
  • Be the first to comment

Tsuru internals: a arquitetura de uma plataforma de cloud computing open source

  1. 1. tsuru internals Francisco Souza @franciscosouza
  2. 2. what the f**rancisco?! • Desenvolvedor @ Globo.com • Open source fanboy • tsuru developer desde Abril de 2012
  3. 3. Premissas • Boas práticas • Simplicidade • Extensibilidade • Escalabilidade • Multilinguagem • Open source • No vendor lock-in
  4. 4. Hands on
  5. 5. Por baixo dos panos • app-create
  6. 6. Por baixo dos panos • git push tsuru master
  7. 7. Por baixo dos panos • Acessar http://hello.tdc.souza.cc
  8. 8. Internals
  9. 9. Safe deployment
  10. 10. Processo de deploy • Gera imagem da aplicação • Cria unidades com imagem da aplicação • Espera unidades responderem • Adicionar unidades no balanceamento • Remove unidades antigos do balanceamento • Destrói unidades antigos no Docker
  11. 11. Pipelining • Organização em actions • Toda action tem forward e backward • Actions são encadeadas • Quando uma action falha, o backward de todas as anteriores é executado
  12. 12. type  Result  interface{}   type  Forward  func(context  FWContext)  (Result,  error)   type  Backward  func(context  BWContext)   type  FWContext  struct  {                  Previous  Result                  Params      []interface{}   }   type  BWContext  struct  {                  FWResult  Result                  Params  []interface{}   }   type  Action  struct  {                  Name  string                  Forward  Forward                  Backward  Backward                  MinParams  int   }
  13. 13. actions  :=  []*action.Action{                  &reserveUserApp,                  &insertApp,                  &exportEnvironmentsAction,                  &createRepository,                  &provisionApp,                  &setAppIp,   }   pipeline  :=  action.NewPipeline(actions...)   err  =  pipeline.Execute(app,  user)   if  err  !=  nil  {                  //  handle  error   }
  14. 14. Unidade = Docker Container
  15. 15. Container Scheduling
  16. 16. docker-cluster • Lib em Go para clusterização de nós de Docker • Managed vs Unmanaged Nodes
  17. 17. Scheduler • Segregação • Disponibilidade • Otimização de recursos • Quantidade de containers • Memória disponível
  18. 18. Host 1 Host 2 Host 3
  19. 19. IaaS Integration
  20. 20. Managed nodes • Nodes criados com integração com IaaS • Suporte a EC2 e CloudStack • [Coming soon] Suporte a docker-machine • Extensível
  21. 21. type  Machine  struct  {                  Id                          string  `bson:"_id"`                  Iaas                      string                  Status                  string                  Address                string                  CreationParams  map[string]string   }   type  IaaS  interface  {                  CreateMachine(params  map[string]string)  (*Machine,  error)                  DeleteMachine(m  *Machine)  error   }
  22. 22. Auto-scaling
  23. 23. Node auto-scaling • Detecta sobrecarga de recursos • Quantidade de containers • Quantidade de memória RAM • Estratégia de scaling também extensível
  24. 24. type  autoScaleEvent  struct  {                  ID                        interface{}  `bson:"_id"`                  MetadataValue  string                  Action                string                  Reason                string                  StartTime          time.Time                  EndTime              time.Time  `bson:",omitempty"`                  Successful        bool                  Error                  string              `bson:",omitempty"`                  Node                    cluster.Node  `bson:",omitempty"`                  Log                      string              `bson:",omitempty"`   }   type  autoScaler  interface  {                  scale(event  *autoScaleEvent,  groupMetadata  string,  nodes  []*cluster.Node)  error   }  
  25. 25. Container auto-scaling • Serviço externo • Baseado em métricas da aplicação • Regras definidas pelo usuário • Flexibilidade vs Complexidade
  26. 26. Healing
  27. 27. Node Healing • Managed nodes • Detecta que o nó caiu e substitui • Monitoração ativa • Monitoração passiva
  28. 28. Container healing • Detecta que um container não está saudável • Status reporting • Substitui o container
  29. 29. Routers
  30. 30. Routers • Recebe e encaminha requests • Suporte a múltiplos tipos • Interface com operações de gerenciamento de backends e rotas • Atrelado ao plano
  31. 31. type  Router  interface  {                  AddBackend(name  string)  error                  RemoveBackend(name  string)  error                  AddRoute(name  string,  address  *url.URL)  error                  RemoveRoute(name  string,  address  *url.URL)  error                  SetCName(cname,  name  string)  error                  UnsetCName(cname,  name  string)  error                  Addr(name  string)  (string,  error)                  Swap(string,  string)  error                  Routes(name  string)  ([]*url.URL,  error)   }
  32. 32. Routers (cont.) • 3 implementações disponíveis: • Hipache • Galeb • Vulcand
  33. 33. Hipache • Router mais antigo • Node.js • Configuração no Redis • WebSocket • Criado pela DotCloud (atualmente Docker Inc.)
  34. 34. Galeb • Router criado dentro da Globo.com • Parcialmente open source (até o próximo trimestre) • Java • _Rápido_ • Configuração em memória (alterada dinamicamente via API) • WebSocket
  35. 35. Vulcand • Router mais novo no tsuru • Go • Configuração no etcd • Criado pela Mailgun • Sem suporte a WebSocket ainda • Suporte a HTTPS com SNI
  36. 36. Lean containers
  37. 37. Hoje • Todos os processos do Procfile no container • Agente dentro do container • Controla processos • Coleta logs • Coleta métricas • Reporta o status dos processos
  38. 38. Problemas • Non-idiomatic Docker • Agente em Python • Alto consumo de memória • Disputa recursos com processos da aplicação • Python instalado na plataforma de Java?
  39. 39. Lean containers • Um processo por container • Um container por entrada no Procfile • Agente rodando isoladamente em outro container • Apenas uma instância do agente, coletando informações de todos os containers • Docker controla e mantém processos rodando
  40. 40. bs • Agente que roda dentro de um container • Docker friendly • docker run tsuru/bs • Coleta informações de todos os containers irmãos • Logs • Saúde • Métricas
  41. 41. bs (cont.) • Uso mais efetivo de recursos • Escrito em Go • Nasceu pra vigiar os containers irmãos • Disponível apenas na próxima versão do tsuru :-(
  42. 42. O que vem por aí
  43. 43. Futuro • tsuru 1.0 • Lean containers • Melhor gerenciamento de plataformas • Melhor gerenciamento de plugins • Integração com Docker Machine • Terceirizar gerenciamento do cluster? • Docker Swarm • Kubernetes
  44. 44. Contribua! github.com/tsuru
  45. 45. tsuru internals Francisco Souza @franciscosouza slideshare.net/franciscosouza f@souza.cc https://tsuru.io
  46. 46. Links • https://tsuru.io • https://docker.com • http://galeb.io • https://vulcand.io • https://github.com/tsuru • http://docs.tsuru.io • https://github.com/tsuru/bs • https://circus.rtfd.org • https://www.docker.com/ docker-swarm • http://kubernetes.io/
  47. 47. Imagens • https://www.flickr.com/photos/underactive/4641141770/ • https://www.flickr.com/photos/dominicspics/1127762669/ • https://www.flickr.com/photos/jaxport/9613150301/ • https://www.flickr.com/photos/lukaskr/16036193656/ • https://www.flickr.com/photos/daveseven/6033338327/ • https://www.flickr.com/photos/jotbepunkt/7981094164/ • https://www.docker.com/sites/default/files/island_1.png • https://www.flickr.com/photos/kightp/8083387488/ • https://www.flickr.com/photos/baggyjumper/6635779085/ • https://www.flickr.com/photos/98640399@N08/9410826173/

×