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

  • Published on
    14-Aug-2015

  • View
    386

  • Download
    3

Embed Size (px)

Transcript

<ol><li> 1. tsuru internals Francisco Souza @franciscosouza </li><li> 2. what the f**rancisco?! Desenvolvedor @ Globo.com Open source fanboy tsuru developer desde Abril de 2012 </li><li> 3. Premissas Boas prticas Simplicidade Extensibilidade Escalabilidade Multilinguagem Open source No vendor lock-in </li><li> 4. Hands on </li><li> 5. Por baixo dos panos app-create </li><li> 6. Por baixo dos panos git push tsuru master </li><li> 7. Por baixo dos panos Acessar http://hello.tdc.souza.cc </li><li> 8. Internals </li><li> 9. Safe deployment </li><li> 10. Processo de deploy Gera imagem da aplicao Cria unidades com imagem da aplicao Espera unidades responderem Adicionar unidades no balanceamento Remove unidades antigos do balanceamento Destri unidades antigos no Docker </li><li> 11. Pipelining Organizao em actions Toda action tem forward e backward Actions so encadeadas Quando uma action falha, o backward de todas as anteriores executado </li><li> 12. typeResultinterface{} typeForwardfunc(contextFWContext)(Result,error) typeBackwardfunc(contextBWContext) typeFWContextstruct{ PreviousResult Params[]interface{} } typeBWContextstruct{ FWResultResult Params[]interface{} } typeActionstruct{ Namestring ForwardForward BackwardBackward MinParamsint } </li><li> 13. actions:=[]*action.Action{ &amp;reserveUserApp, &amp;insertApp, &amp;exportEnvironmentsAction, &amp;createRepository, &amp;provisionApp, &amp;setAppIp, } pipeline:=action.NewPipeline(actions...) err=pipeline.Execute(app,user) iferr!=nil{ //handleerror } </li><li> 14. Unidade = Docker Container </li><li> 15. Container Scheduling </li><li> 16. docker-cluster Lib em Go para clusterizao de ns de Docker Managed vs Unmanaged Nodes </li><li> 17. Scheduler Segregao Disponibilidade Otimizao de recursos Quantidade de containers Memria disponvel </li><li> 18. Host 1 Host 2 Host 3 </li><li> 19. IaaS Integration </li><li> 20. Managed nodes Nodes criados com integrao com IaaS Suporte a EC2 e CloudStack [Coming soon] Suporte a docker-machine Extensvel </li><li> 21. typeMachinestruct{ Idstring`bson:"_id"` Iaasstring Statusstring Addressstring CreationParamsmap[string]string } typeIaaSinterface{ CreateMachine(paramsmap[string]string)(*Machine,error) DeleteMachine(m*Machine)error } </li><li> 22. Auto-scaling </li><li> 23. Node auto-scaling Detecta sobrecarga de recursos Quantidade de containers Quantidade de memria RAM Estratgia de scaling tambm extensvel </li><li> 24. typeautoScaleEventstruct{ IDinterface{}`bson:"_id"` MetadataValuestring Actionstring Reasonstring StartTimetime.Time EndTimetime.Time`bson:",omitempty"` Successfulbool Errorstring`bson:",omitempty"` Nodecluster.Node`bson:",omitempty"` Logstring`bson:",omitempty"` } typeautoScalerinterface{ scale(event*autoScaleEvent,groupMetadatastring,nodes[]*cluster.Node)error } </li><li> 25. Container auto-scaling Servio externo Baseado em mtricas da aplicao Regras denidas pelo usurio Flexibilidade vs Complexidade </li><li> 26. Healing </li><li> 27. Node Healing Managed nodes Detecta que o n caiu e substitui Monitorao ativa Monitorao passiva </li><li> 28. Container healing Detecta que um container no est saudvel Status reporting Substitui o container </li><li> 29. Routers </li><li> 30. Routers Recebe e encaminha requests Suporte a mltiplos tipos Interface com operaes de gerenciamento de backends e rotas Atrelado ao plano </li><li> 31. typeRouterinterface{ AddBackend(namestring)error RemoveBackend(namestring)error AddRoute(namestring,address*url.URL)error RemoveRoute(namestring,address*url.URL)error SetCName(cname,namestring)error UnsetCName(cname,namestring)error Addr(namestring)(string,error) Swap(string,string)error Routes(namestring)([]*url.URL,error) } </li><li> 32. Routers (cont.) 3 implementaes disponveis: Hipache Galeb Vulcand </li><li> 33. Hipache Router mais antigo Node.js Congurao no Redis WebSocket Criado pela DotCloud (atualmente Docker Inc.) </li><li> 34. Galeb Router criado dentro da Globo.com Parcialmente open source (at o prximo trimestre) Java _Rpido_ Congurao em memria (alterada dinamicamente via API) WebSocket </li><li> 35. Vulcand Router mais novo no tsuru Go Congurao no etcd Criado pela Mailgun Sem suporte a WebSocket ainda Suporte a HTTPS com SNI </li><li> 36. Lean containers </li><li> 37. Hoje Todos os processos do Procle no container Agente dentro do container Controla processos Coleta logs Coleta mtricas Reporta o status dos processos </li><li> 38. Problemas Non-idiomatic Docker Agente em Python Alto consumo de memria Disputa recursos com processos da aplicao Python instalado na plataforma de Java? </li><li> 39. Lean containers Um processo por container Um container por entrada no Procle Agente rodando isoladamente em outro container Apenas uma instncia do agente, coletando informaes de todos os containers Docker controla e mantm processos rodando </li><li> 40. bs Agente que roda dentro de um container Docker friendly docker run tsuru/bs Coleta informaes de todos os containers irmos Logs Sade Mtricas </li><li> 41. bs (cont.) Uso mais efetivo de recursos Escrito em Go Nasceu pra vigiar os containers irmos Disponvel apenas na prxima verso do tsuru :-( </li><li> 42. O que vem por a </li><li> 43. Futuro tsuru 1.0 Lean containers Melhor gerenciamento de plataformas Melhor gerenciamento de plugins Integrao com Docker Machine Terceirizar gerenciamento do cluster? Docker Swarm Kubernetes </li><li> 44. Contribua! github.com/tsuru </li><li> 45. tsuru internals Francisco Souza @franciscosouza slideshare.net/franciscosouza f@souza.cc https://tsuru.io </li><li> 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/ </li><li> 47. Imagens https://www.ickr.com/photos/underactive/4641141770/ https://www.ickr.com/photos/dominicspics/1127762669/ https://www.ickr.com/photos/jaxport/9613150301/ https://www.ickr.com/photos/lukaskr/16036193656/ https://www.ickr.com/photos/daveseven/6033338327/ https://www.ickr.com/photos/jotbepunkt/7981094164/ https://www.docker.com/sites/default/les/island_1.png https://www.ickr.com/photos/kightp/8083387488/ https://www.ickr.com/photos/baggyjumper/6635779085/ https://www.ickr.com/photos/98640399@N08/9410826173/ </li></ol>