migração de banco de dados - oracle para mongodb - tdc2014

39
Globalcode – Open4education Trilha Python Jonathan Simon Prates Analista de Desenvolvimento - Terra Networks @thumbox

Upload: jonathan-prates

Post on 05-Jul-2015

250 views

Category:

Internet


2 download

DESCRIPTION

Migração de Banco de Dados - Oracle para MongoDB - TDC2014 - Trilha Python. Como o TerraTV migrou sua plataforma de C# para Python e Oracle para MongoDB. Mostramos algumas abordagens e ferramentas utilizadas para essa migração.

TRANSCRIPT

Globalcode – Open4education

Trilha – Python

Jonathan Simon Prates

Analista de Desenvolvimento - Terra Networks

@thumbox

Globalcode – Open4education

Migração de databaseMigrando de C# e Oracle para Python e MongoDB

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

A motivação ...

Baixa

Performance

Tabela

compilada

HEIN?

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

Então o Oracle é ruim?

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

Se vamos mudar ...- rollbacks

- madrugadas

- testes em produção

Globalcode – Open4education

Muda tudo então!!

Estávamos no caminho certo?

Sugestão para mudarmos.

Licenças de sistema operacional.

Reduzir custos.

Globalcode – Open4education

Mas por que Python?

Globalcode – Open4education

Mas por que Python?

Testes Performance Estável

Python

C#

PHP

Ruby

Globalcode – Open4education

SIMPLICIDADE

Globalcode – Open4education

Pika

localshop

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

Globalcode – Open4education

Tratamento de imagens

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

Conclusão

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.

Globalcode – Open4education

[email protected]

@thumbox

br.linkedin.com/in/jonathanprates/