Post on 05-Jul-2015
description
Globalcode – Open4education
Trilha – Python
Jonathan Simon Prates
Analista de Desenvolvimento - Terra Networks
@thumbox
Globalcode – Open4education
Quem sou eu?
Analista de desenvolvimento da
plataforma de vídeos do Terra.
Formado em Sistemas de Informação
(UNIRITTER)
Mestrando em Computação Aplicada
(UNISINOS)
Globalcode – Open4education
Plataforma de vídeos:
Plataforma de vídeos
ao vivo e VOD.
América Latina, EUA
e Espanha.
Olimpíadas, Shows
Ao Vivo, Liga Europa,
Programas Ao Vivo
durante a tarde.
Desktop, Mobile,
Tablets, Smart TVs.
Globalcode – Open4education
Como evoluímos:
A plataforma cresceu muito desde
2004.
Novas funcionalidades (2009 mobile, 2010
smarttvs, 2012 lives, etc).
Um novo webservice a cada anos.
Base de dados Oracle em Miami e
outra em Porto Alegre.
Globalcode – Open4education
A motivação ...
6 WebServices
2 APIs
+40 Tabelas
+10 MViews entre
BR e USA
Deploy em
produção?
Zipa e manda na
zuera!
Globalcode – Open4education
Oracle VS MongoDB
Tabela “compilada” = Coleção não
relacional.
Precisamos realmente do Oracle?
O Oracle custa 15 vezes MAIS.
Impossível colocar um valor default em
um campo.
Globalcode – Open4education
Afirmações clássicas
Preciso de performance, então uso
Oracle.
Não é orientado a objetos, então está
errado.
Vou ter que escrever o backend do meu
site em C/C++ para ficar mais rápido.
Meu sistema não precisa de testes.
Globalcode – Open4education
Muda tudo então!!
Estávamos no caminho certo?
Sugestão para mudarmos.
Licenças de sistema operacional.
Reduzir custos.
Globalcode – Open4education
O que ouvimos:
Coisa de Startup
Impossível sem parar a plataforma
Python não é melhor que C#
Que tal usar Java então?
O pessoal conhece C#, não Python...
Globalcode – Open4education
“PROGRAMAR A PLATAFORMA FOI
MAIS FÁCIL QUE CONVENCER
ALGUMAS PESSOAS...”
Globalcode – Open4education
Desafios:
Como sincronizar as bases?
Manter ou não manter as mesmas
entidades?
Como garantir a saída dos dados sejam
iguais?
Updates, ambiente limpo e deploy.
Como fazer?
Globalcode – Open4education
Como sincronizar as
bases?
Feeds
CDN CMS
TTV API
Buscador
Encoding
TTV
Desktop
TTV Mobile
SmartTVs
Parceiros
Globalcode – Open4education
Como sincronizar
as bases?
Serviço de mensageria
Protocolo AMQP
Open Source
Puka, Pika,
PyAMQPlib, kombuCMS
Worker
MongoWorker
Oracle
Globalcode – Open4education
Desafios:
Como sincronizar as bases?
Manter ou não manter as mesmas
entidades?
Como garantir a saída dos dados sejam
iguais?
Updates, ambiente limpo e deploy.
Como fazer?
Globalcode – Open4education
Manter ou não manter as
mesmas entidades?
Desnormalização dos dados
Pensado na consulta
canais
videos
videos_x_canais
Globalcode – Open4education
Manter ou não manter as
mesmas entidades?
MongoDB – Drivers para várias linguagens.
Mongoengine – Object-Document Mapper (ODM)
Schemaless
Globalcode – Open4education
Desafios:
Como sincronizar as bases?
Manter ou não manter as mesmas
entidades?
Como garantir a saída dos dados sejam
iguais?
Updates, ambiente limpo e deploy.
Como fazer?
Globalcode – Open4education
Como garantir a saída dos
dados sejam iguais?
TerraTV API
Pedir para os
clientes mudar suas
implementações?
Globalcode – Open4education
Como garantir a saída dos
dados sejam iguais?
TerraTV API
(aspx/IIS)
Nova API
(python/nginx)
Nginx
rewrite
Balanceador:
api.terra.com.br
IIS
Globalcode – Open4education
Como garantir a saída dos
dados sejam iguais?
Flask
JSON ou XML
REST
Utilização de templates
para manter
compatibilidade
Testes automatizados
através dos XSDs
gerados a partir do
serviço antigo
Globalcode – Open4education
Desafios:
Como sincronizar as bases?
Manter ou não manter as mesmas
entidades?
Como garantir a saída dos dados sejam
iguais?
Updates, ambiente limpo e deploy.
Como fazer?
Globalcode – Open4education
Updates, ambiente limpo e
deploy. Como fazer?
“The Python Package
Index is a repository of
software for the Python
programming
language.”
Localshop – “A private
pypi server including
auto-mirroring of pypi.”
$ pip install videoapi
localshop
Globalcode – Open4education
Updates, ambiente limpo e
deploy. Como fazer?
Instalações simples
Ambientes isolados
Fácil update
Fácil rollback
virtualenv is a tool to
create isolated Python
environments.
Cada aplicação tem
seu próprio virtualenv
Dependências entre
libs de python são
tratadas de forma
distintas
Globalcode – Open4education
Updates, ambiente limpo e
deploy. Como fazer?
Integração Contínua
com Jenkins
Geração de pacote de
forma automática após
push no master branch
do GIT.
Globalcode – Open4education
Tratamento de imagens
PIL
Chamada através do
ID do vídeo
Resize em tempo real
via parâmetros da URL
Única imagem na
storage.
Controle dos
cabeçalhos HTTPs.
Globalcode – Open4education
Preciso mudar?
Só consigo testar em produção
Na primeira nunca compila, depois vai
Não tem como testar isso
Tenho muitos relacionamentos, por isso
meu sistema é lento
Só posso instalar na madrugada
Globalcode – Open4education
Conclusão
Vários sistemas simples e pequenos geram
soluções complexas.
Quanto maior o código, maior a chance de bugs.
Evitar classes grandes, métodos grandes e código
duplicado.
Usar ferramentas de qualidade como pylint e pep8.
Faça o seu código o mais simples possível.