Среда развертывания и клонирования программ - PullRequest
1 голос
/ 08 мая 2009

Я разрабатываю Java-программу на моей машине. Когда я хочу протестировать, я сначала пробую небольшие тестовые примеры на моей машине, но затем я хочу запустить эту программу с реальными данными. Небольшим тестом было бы посмотреть на один файл из ядра Linux, а «настоящим» тестом было бы посмотреть на все ядро ​​...

Но я бы хотел запустить несколько «реальных» тестов одновременно (на разных версиях ядра), поэтому у меня есть 5 одинаковых тестовых машин (работающих под управлением linux fedora). Как я могу синхронизировать эти 5 машин с точки зрения данных и программ (иногда я использую yum для установки программ)?

Как я могу быть уверен, что у меня точно такая же среда в любое время?

Сейчас я в основном использую scp, а мой код на svn ...

Ответы [ 2 ]

2 голосов
/ 08 мая 2009

Я бы предложил использовать технологию виртуализации, такую ​​как VMware, для клонирования одного экземпляра в несколько. Преимущество заключается в том, что вы всегда можете вернуться к одной и той же отправной точке после тестирования, а также в том, что можете запускать больше сценариев, чем у вас есть физические блоки.

0 голосов
/ 09 мая 2009

Вы можете сделать так, чтобы Ваш инструмент для бенчмаркинга выбирал новую версию программы и тестовые данные по http или по другому популярному протоколу. Если вы не хотите использовать http, вы можете использовать сетевую файловую систему ( NFS и GlusterFS - некоторые примеры).

На мой взгляд, вы запускаете свой скрипт на одном «главном» сервере, а затем он запускает 5 процессов bash. Каждый из них будет входить на удаленный «подчиненный» сервер и запускать инструмент для сравнения. Утилита для бенчмаркинга будет извлекать новую программу и данные с некоторого (возможно, «главного») сервера, а затем выполнять его, измеряя время / память / и т. Д. И возвращая эти значения на стандартный вывод, так что ssh передает их мастеру. сервер, и это процесс Bash. Затем вы перенаправили бы вывод сеансов bash в файлы.

testmaster.sh -> 5*(testnode.sh -> ssh
-> fetch_and_benchmark -> output -> (ssh) -> testnode.sh -> file)

testmaster.sh должен проверить, все ли файлы уже существуют, например. каждую секунду, а затем прочитать и сравнить результаты. Все это может звучать плохо, но, поверьте мне, было бы лучше, если бы вы не делали все это вручную, а сценарий относительно легко написать.

Об обеспечении того, чтобы у вас было одинаковое окружение на всех боксах ... Не позволяйте никому приближаться к вашим тестовым узлам и ничего с ними не делать.

Я бы не советовал виртуализировать, так как это изменило бы результаты ваших тестов так, как вы не можете предсказать. Виртуализированная машина не может быть такой же быстрой, как чистая, и она не просто «медленнее на 20%». Некоторые вещи намного медленнее, некоторые не так уж и много. Если вы не возражаете против этого, используйте виртуализацию и снимки, но вы сказали, что тестируете что-то на нескольких узлах, у каждого из которых есть разное ядро, поэтому я полагаю, что вы относитесь к этому очень серьезно.

Ах, еще одна вещь. У Linux есть забавный способ освобождения памяти (это как «не освобождай, пока» кому-то это понадобится). Некоторые вещи кэшируются. Чтобы быть уверенным, вам придется перезагружать тестовые машины после каждого сеанса тестирования.

...