SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
imagens do jeito certo
Eu
• Bernardo Heynemann
• @heynemann - bernardo@corp.globo.com
• Gerente da Home da globo.com
• Dev
• Pai
Porquê o thumbor?
• ImageMagick, GraphicsMagick, PIL,
OpenCV, SORLThumbnails, …
• Biblioteca vs Image-as-a-service
• Reconhecimento Facial
• Comunidade Software Livre
• Eco-sistema extremamente adaptável
Comunidade
• 143 Forks
• 35 Contribuidores
Diretos
• Bibliotecas mantidas
pela comunidade
• Diversas issues
criadas e resolvidas
pela comunidade
• Segurança!!!
Reconhecimento Facial
As imagens da globo.com passaram a ter
menos pessoas sem cabeça!
$ pip install thumbor
$ thumbor
!
http://localhost:8888/
unsafe/300x200/<url>
Mas é difícil?
Alguns Números
• 50M Imagens / Dia
• ~3500 reqs/seg de
imagens por
servidor
• Apenas 4
servidores de
thumbor para toda
a globo.com
E como escalar?
Ou "Mas eu tenho 1.5 bilhão de imagens
servidas por mês!"
Arquitetura
em
camadas
* Servidores Thumbor
* Storage de Originais
* Storage de Formatos
* Reconhecimento Facial
* Front-End com Cache
* Varnish
Servidores com Thumbor
•Número de instâncias
igual ao número de CPUs
•Horizontalmente Escalável
•Supervisord
Storage de Originais
• Thumbor obtém
novos originais
através de
loaders
• Loader mais
comum é o
HTTPLoader
Storage de Formatos
• Processar novas imagens custa tempo
• Thumbor armazena o resultado do
processamento
• Caso seja necessário Reconhecimento
Facial, uma imagem temporária é gerada
• Diversos storages já existem e podem
facilmente ser criados (disco, Mongo,
Redis, AWS…)
Detecção de Objetos
Uso de pontos focais para melhores cortes
Gerando URLs
• Python
• Ruby
• NodeJS
• Java
• PHP
• Objective-C
Exemplos de Libs
https://github.com/thumbor/libthumbor
from libthumbor import CryptoURL
!
crypto = CryptoURL(key='my-security-key')
!
encrypted_url = crypto.generate(
width=300,
height=200,
smart=True,
image_url='/path/to/my/image.jpg'
)
Exemplo de Libs
require 'ruby-thumbor'
!
crypto = Thumbor::CryptoURL.new 'my-security-
key'
!
url = crypto.generate :width => 200, :height =>
300, :image => 'my.server.com/path/to/image.jpg'
!
# url will contain something like:
# /2913921in321n3k2nj32hjhj3h22/my.server.com/
path/to/image.jpg
https://github.com/thumbor/ruby-thumbor
Responsive Images
• Com thumbor é MOLE!
• srcset já disponível no Chrome Stable (34)
• É um draft na W3C, então mais browsers virão!
<img
src="u8rjDobxgyAX-uXFeeg-JvFdWr4=/400x0/foo.jpg"
srcset=“
/YbrTAi51EXok2o25X5Smn50BCl0=/480x0/foo.jpg 480w,
/20swCCedkSK4t7vwdDskoxxYhfA=/960x0/foo.jpg 480w 2x
">
WebP
• Novo formato de imagens impulsionado pelo
Google
• Consideravelmente menor que ambos PNG e JPG
• Suporte no thumbor é transparente para
usuários
• Browsers que suportam WebP recebem WebP e
os demais recebem a imagem no formato
original
estamos contratandoimagens do jeito certo
github.com/globocom
http://goo.gl/FYH5KX
Quer saber mais sobre as práticas
de engenharia da globo.com?
http://globodev.tumblr.com
Obrigado!
Links Úteis
• github.com/thumbor
• github.com/thumbor/thumbor/wiki
• github.com/99designs/phumbor
• github.com/ceejayoz/laravel-phumbor
• square.github.io/pollexor/

Mais conteúdo relacionado

Semelhante a Imagens do jeito certo com thumbor

Python mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internetPython mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internetMarcos Petry
 
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web  - Marcos Daniel PetryPython mudando o modo de desenvolver para a web  - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web - Marcos Daniel PetryTchelinux
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3tchandy
 
OWASP Floripa - Web Spiders: Automação para Web Hacking by Antonio Costa aka ...
OWASP Floripa - Web Spiders: Automação para Web Hacking by Antonio Costa aka ...OWASP Floripa - Web Spiders: Automação para Web Hacking by Antonio Costa aka ...
OWASP Floripa - Web Spiders: Automação para Web Hacking by Antonio Costa aka ...Magno Logan
 
Computação Visual com Python
Computação Visual com PythonComputação Visual com Python
Computação Visual com PythonJonh Edson
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013javamanrj
 
Sapo Sessions - Web Mobile
Sapo Sessions - Web MobileSapo Sessions - Web Mobile
Sapo Sessions - Web MobileBruno Carreira
 
Edge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudEdge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudAlvaro Viebrantz
 
Aula 01- web designer
Aula 01- web designerAula 01- web designer
Aula 01- web designerRoney Sousa
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupAndré Cruz
 
ASP .NET CORE, Angular 2, e Typescript com Scaffolding Yeoman | Seminário
ASP .NET CORE, Angular 2, e Typescript com Scaffolding Yeoman  | Seminário ASP .NET CORE, Angular 2, e Typescript com Scaffolding Yeoman  | Seminário
ASP .NET CORE, Angular 2, e Typescript com Scaffolding Yeoman | Seminário Osmar Petry
 
Receita do Sucesso no Mercado Front End
Receita do Sucesso no Mercado Front EndReceita do Sucesso no Mercado Front End
Receita do Sucesso no Mercado Front EndLeonardo Balter
 

Semelhante a Imagens do jeito certo com thumbor (20)

Python mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internetPython mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internet
 
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web  - Marcos Daniel PetryPython mudando o modo de desenvolver para a web  - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3
 
Dismistificando deep learning
Dismistificando deep learningDismistificando deep learning
Dismistificando deep learning
 
OWASP Floripa - Web Spiders: Automação para Web Hacking by Antonio Costa aka ...
OWASP Floripa - Web Spiders: Automação para Web Hacking by Antonio Costa aka ...OWASP Floripa - Web Spiders: Automação para Web Hacking by Antonio Costa aka ...
OWASP Floripa - Web Spiders: Automação para Web Hacking by Antonio Costa aka ...
 
Computação Visual com Python
Computação Visual com PythonComputação Visual com Python
Computação Visual com Python
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Sapo Sessions - Web Mobile
Sapo Sessions - Web MobileSapo Sessions - Web Mobile
Sapo Sessions - Web Mobile
 
Edge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudEdge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google Cloud
 
Devs loves libs
Devs loves libsDevs loves libs
Devs loves libs
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
De 0 a DevOps
 
Aula 01- web designer
Aula 01- web designerAula 01- web designer
Aula 01- web designer
 
HTML, parte 1
HTML, parte 1HTML, parte 1
HTML, parte 1
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon Meetup
 
ASP .NET CORE, Angular 2, e Typescript com Scaffolding Yeoman | Seminário
ASP .NET CORE, Angular 2, e Typescript com Scaffolding Yeoman  | Seminário ASP .NET CORE, Angular 2, e Typescript com Scaffolding Yeoman  | Seminário
ASP .NET CORE, Angular 2, e Typescript com Scaffolding Yeoman | Seminário
 
Dismistificando deep learning v2.1
Dismistificando deep learning v2.1Dismistificando deep learning v2.1
Dismistificando deep learning v2.1
 
Receita do Sucesso no Mercado Front End
Receita do Sucesso no Mercado Front EndReceita do Sucesso no Mercado Front End
Receita do Sucesso no Mercado Front End
 
Extreme Web Performance
Extreme Web PerformanceExtreme Web Performance
Extreme Web Performance
 
Robotica para-humanos
Robotica para-humanosRobotica para-humanos
Robotica para-humanos
 

Imagens do jeito certo com thumbor

  • 2. Eu • Bernardo Heynemann • @heynemann - bernardo@corp.globo.com • Gerente da Home da globo.com • Dev • Pai
  • 3. Porquê o thumbor? • ImageMagick, GraphicsMagick, PIL, OpenCV, SORLThumbnails, … • Biblioteca vs Image-as-a-service • Reconhecimento Facial • Comunidade Software Livre • Eco-sistema extremamente adaptável
  • 4. Comunidade • 143 Forks • 35 Contribuidores Diretos • Bibliotecas mantidas pela comunidade • Diversas issues criadas e resolvidas pela comunidade • Segurança!!!
  • 5. Reconhecimento Facial As imagens da globo.com passaram a ter menos pessoas sem cabeça!
  • 6. $ pip install thumbor $ thumbor ! http://localhost:8888/ unsafe/300x200/<url> Mas é difícil?
  • 7. Alguns Números • 50M Imagens / Dia • ~3500 reqs/seg de imagens por servidor • Apenas 4 servidores de thumbor para toda a globo.com
  • 8. E como escalar? Ou "Mas eu tenho 1.5 bilhão de imagens servidas por mês!"
  • 9. Arquitetura em camadas * Servidores Thumbor * Storage de Originais * Storage de Formatos * Reconhecimento Facial * Front-End com Cache * Varnish
  • 10. Servidores com Thumbor •Número de instâncias igual ao número de CPUs •Horizontalmente Escalável •Supervisord
  • 11. Storage de Originais • Thumbor obtém novos originais através de loaders • Loader mais comum é o HTTPLoader
  • 12. Storage de Formatos • Processar novas imagens custa tempo • Thumbor armazena o resultado do processamento • Caso seja necessário Reconhecimento Facial, uma imagem temporária é gerada • Diversos storages já existem e podem facilmente ser criados (disco, Mongo, Redis, AWS…)
  • 13. Detecção de Objetos Uso de pontos focais para melhores cortes
  • 14. Gerando URLs • Python • Ruby • NodeJS • Java • PHP • Objective-C
  • 15. Exemplos de Libs https://github.com/thumbor/libthumbor from libthumbor import CryptoURL ! crypto = CryptoURL(key='my-security-key') ! encrypted_url = crypto.generate( width=300, height=200, smart=True, image_url='/path/to/my/image.jpg' )
  • 16. Exemplo de Libs require 'ruby-thumbor' ! crypto = Thumbor::CryptoURL.new 'my-security- key' ! url = crypto.generate :width => 200, :height => 300, :image => 'my.server.com/path/to/image.jpg' ! # url will contain something like: # /2913921in321n3k2nj32hjhj3h22/my.server.com/ path/to/image.jpg https://github.com/thumbor/ruby-thumbor
  • 17. Responsive Images • Com thumbor é MOLE! • srcset já disponível no Chrome Stable (34) • É um draft na W3C, então mais browsers virão! <img src="u8rjDobxgyAX-uXFeeg-JvFdWr4=/400x0/foo.jpg" srcset=“ /YbrTAi51EXok2o25X5Smn50BCl0=/480x0/foo.jpg 480w, /20swCCedkSK4t7vwdDskoxxYhfA=/960x0/foo.jpg 480w 2x ">
  • 18. WebP • Novo formato de imagens impulsionado pelo Google • Consideravelmente menor que ambos PNG e JPG • Suporte no thumbor é transparente para usuários • Browsers que suportam WebP recebem WebP e os demais recebem a imagem no formato original
  • 19. estamos contratandoimagens do jeito certo github.com/globocom http://goo.gl/FYH5KX
  • 20. Quer saber mais sobre as práticas de engenharia da globo.com? http://globodev.tumblr.com Obrigado!
  • 21.
  • 22. Links Úteis • github.com/thumbor • github.com/thumbor/thumbor/wiki • github.com/99designs/phumbor • github.com/ceejayoz/laravel-phumbor • square.github.io/pollexor/