MongoDB в Postgres

О чем это?

Во время собеседования на должность в компании меня спросили: Можете ли вы описать самую сложную проблему, которую вы решили? В общем, самой сложной проблемой, которую я решил, была миграция одного из крупных внутренних проектов eBay с MongoDB на Postgres в 2023 году. Однако этот вопрос заставил меня задуматься о том, как я решил эту сложную проблему, и позволил мне поразмышлять о моем пути разработчика. В связи с этим я написал очень подробный и тщательный ответ на этот вопрос и хотел бы поделиться своим ответом на своем сайте.

Каков был вопрос?

Можете ли вы описать самую сложную проблему, которую вы решили? Пожалуйста, ответьте менее чем в 4 абзацах и дайте нам знать:

  1. Что вы сделали
  2. Что сделало это сложным
  3. Чему вы научились из этого опыта
  4. Как вы выросли в результате

Каков был мой ответ?

1 - Что вы сделали

На данный момент в своей карьере самой сложной проблемой, которую я решил, была работа на моей текущей должности в eBay. В настоящее время в eBay, где я работаю по контракту через Hitachi Vantara, я разрабатываю и поддерживаю внутренний инструмент под названием Система Управления Хранилищем или STMS. STMS — это инструмент, используемый командой Инфраструктуры Услуг и Хранилищ (SSI) eBay для мониторинга и управления устройствами в центрах обработки данных eBay. STMS позволяет инженеру отслеживать метрики множества массивов, коммутаторов, хостов, групп дисков, кластеров и баз данных. А также обрабатывать оповещения для коммутаторов и массивов и легко позволять инженеру выполнять сложные задачи, такие как распределение хостов. STMS обрабатывает более 1,5 миллиона метрик в минуту, учитывая десятки/сотни массивов, коммутаторов, хостов, групп дисков и кластеров в центрах обработки данных eBay. Он служит критически важным инструментом для команды SSI для мониторинга и управления инфраструктурой хранения eBay, что жизненно важно для основной услуги и бизнес-модели eBay. Учитывая все это, самой сложной проблемой, которую мне пришлось решить во время работы в eBay, была миграция STMS с использования базы данных MongoDB на использование базы данных Postgres.

2 - Что сделало это сложным

Сложность этой проблемы заключалась в том, что MongoDB и Postgres — это принципиально разные базы данных. MongoDB — это документно-ориентированная база данных (NoSQL), что означает, что данные хранятся в формате JSON в коллекции (как документы в картотеке), а Postgres — это реляционная база данных (SQL), что означает, что данные хранятся в строках таблицы (как в электронной таблице). Кроме того, вся серверная часть STMS была построена для обработки и управления данными в формате JSON, используя пакеты, совместимые исключительно с MongoDB для операций с базами данных. Также, во время этой миграции, не должно было быть простоя, и почти все функции должны были продолжать работать из-за жизненной важности STMS как внутреннего инструмента. Эта миграция в целом должна была быть завершена в течение нескольких месяцев, без простоя и без четкого плана ее выполнения. У меня также не было слишком много опыта с Postgres заранее, и, как и у всех моих коллег, не было опыта миграции большого унаследованного кода с NoSQL на SQL базу данных.

3 - Чему вы научились из этого опыта

Миграция кода STMS с MongoDB на Postgres была успешно завершена без простоя, при этом сохранив почти все функции и функциональность. Это потребовало обширных исследований, обучения, тестирования и устранения неполадок. Я реорганизовал наши структуры данных, чтобы они более эффективно работали с реляционными базами данных, и разработал новые пакеты, чтобы заменить те, от которых мы зависели и которые не интегрировались с Postgres. В целом, миграция прошла безупречно и без каких-либо реальных недостатков, что превзошло мои ожидания. На протяжении этого процесса я многому научился. Технически я приобрел лучшее понимание Postgres, SQL, деревьев разбора, ORM, Sequelize, Prisma, построителей запросов, проверки эквивалентности, настройки базы данных первичного-резервного и юнит-тестирования, связанного с базами данных. Фундаментально я научился более эффективно разбивать сложную проблему на более мелкие части и внедрять эффективные решения для этих частей. Кроме того, я научился быть лидером и вести этот проект к его завершению, несмотря на множество ограничений, неудач и неизвестностей.

4 - Как вы выросли в результате

Я начал свою карьеру в робототехнике во время учебы в университете, но переключился на веб-разработку, когда получил работу в eBay, войдя в область, в которой у меня не было предварительного опыта. Этот переход заложил основу для карьеры, определяемой постоянным обучением и адаптивностью. Задача миграции STMS с MongoDB на Postgres стала значительным шагом в моей карьере, что значительно способствовало моему профессиональному росту. Дело было не только в углублении моего понимания баз данных или улучшении моих навыков решения проблем. Этот проект толкнул меня в новую область, требуя тщательного планирования и обязательства по отсутствию простоя. Ведя миграцию без предыдущего опыта в переходах баз данных крупного масштаба, я научился ценности четкой коммуникации, командной работы и разбивки сложных задач на управляемые части. Этот опыт расширил мои технические навыки и также повысил мою уверенность, направляя меня к более амбициозным целям и проектам. Этот этап в моей карьере не только продемонстрировал мой рост как разработчика и лидера, но и как решателя проблем, показывая, что принятие неизвестного и успех являются ключом к личному и профессиональному развитию.

Каков вывод?

Мои ответы перевели меня на второй этап собеседования в компании, что позволило мне приятно пообщаться с одним из разработчиков команды, что было довольно приятно. Но, в основном, это задание позволило мне поразмышлять о самой сложной технической проблеме, которую я решил в своей карьере во время работы в eBay. Это дало мне возможность подумать о моем росте как разработчика/инженера, развить новые навыки и повысить свою уверенность в адаптации и решении сложных проблем.