Product
Atualização semanal do produto: fazendo upgrade para o MongoDB 2.4.1
Publicado originalmente em 12 de abril de 2013.
Nesta semana, focamos em melhorias de backend para tornar o Mailgun mais eficiente, confiável e escalável. Muitas coisas chatas, mas esperamos que você sinta a diferença.
Uma das coisas que fizemos em particular foi fazer o upgrade do MongoDB da versão 2.2 para a 2.4.1. Somos grandes fãs do MongoDB aqui no Mailgun. O post maior sobre “Por que o MongoDB” já está muito atrasado, mas, enquanto isso, aqui vai um pouco de contexto sobre a experiência de fazer upgrade para a versão mais recente do MongoDB. Também fizemos upgrade para a versão mais recente do pymongo: o driver de Python do MongoDB.
Fazendo upgrade do MongoDB 2.2 para o 2.4.1
Recomendamos fortemente essa mudança de versão para quem usa o MongoDB em produção. Embora você possa ver a lista completa de novidades na 2.4.1 no site da 10Gen, abaixo está a lista de recursos e melhorias que consideramos particularmente vantajosos durante a avaliação em nosso ambiente de staging:
- Novas classes MongoClient e MongoReplicaSet. Elas introduzem o novo padrão de segurança: esperar pelas confirmações de gravação.
- Correções de bugs que ocorreram após a introdução da 2.4.
Nossos engenheiros de infraestrutura fizeram o upgrade em um sistema ativo de alto estresse sem nenhum problema.
Fazendo upgrade da versão do PyMongo
Bem, por padrão, os testes não vão passar. Você terá que corrigir alguns erros de importação. Por exemplo, objectidmodule mudou do pymongo para o pacote bson. Fora isso, o upgrade é bastante seguro porque o novo comportamento padrão está presente apenas nas novas classes de conexão.
Há uma ressalva importante a ser observada: nesta versão, a 10Gen introduziu a ideia de Requests. Os objetos de conexão que você obtém do pymongo agora estão vinculados à sua thread de chamada por padrão. Nossos testes mostraram uma degradação de desempenho por um fator de 3! Seus resultados podem variar, mas de qualquer forma, é uma mudança de comportamento padrão muito séria; queríamos que a 10Gen fosse mais explícita sobre isso.
Fazendo upgrade dos servidores
Você não deve usar o MongoDB sem replica sets. Isso dá a você a capacidade de não apenas ter resiliência a falhas de hardware, mas também possibilita fazer upgrades de versão de banco de dados sem interrupções. Estes são os passos que seguimos:
- Obviamente, certifique-se de ter um backup recente dos seus dados. Fazemos backups desligando um dos secundários, compactando seu banco de dados e enviando o tarball do diretório do BD para o Rackspace Cloud Files.
- Faça o upgrade de um secundário por vez, enquanto monitora o status de um replica set.
- Por fim, rebaixe o primário.
- Faça o upgrade do primário.
No geral, um procedimento muito tedioso e sem intercorrências. Exatamente como gostamos quando se trata de bancos de dados.
Até a próxima semana.
Bons envios,
Os Mailgunners