Вопросы программирования для виртуализированных приложений
В SO много вопросов о преимуществах и недостатках виртуализации как для разработки, так и для тестирования.
Мой вопрос несколько отличается - в мире, где виртуализация является обычным явлением, что программист должен учитывать, когда речь идет о написании программного обеспечения, которое может быть развернуто в виртуализированной среде? Некоторые из моих первоначальных мыслей:
- Обнаружение, если другой экземпляр вашего приложения работает
- Связь с оборудованием (физическое / виртуальное)
- Регулирование ресурсов (приложение, написанное для многоядерных процессоров, работающих на виртуальной машине с одним процессором)
Что-нибудь еще?
2 ответа
У вас есть большинство основ, охватывающих три основных пункта. Берегись:
- Проблемы с аппаратной связью. Скорость доступа к диску сильно различается (и может иметь необычайно высокие значения - представьте себе виртуальную машину, которая отключается на 3 дня во время записи на диск....). Доступ к сети может прерваться из-за необычных ответов
- Необычная арифметика указателей. Постарайся избежать этого
- Сильно полагаться на необычно необычные инструкции по низкому уровню / сборке
- Опора на машинные часы. Помните, что любые вызовы, которые вы делаете с часами и временными интервалами, могут регулярно возвращать необычные значения при работе на ВМ
- Однопроцессорные приложения могут работать на нескольких процессорных компьютерах, которые делают такие интересные вещи, как Work Stealing
- Угловые случаи и необычные режимы сбоев встречаются гораздо чаще. Возможно, вам не придется беспокоиться о том, что сетевая карта исчезнет в середине вашего общения на реальной машине, как на виртуальной.
- Ручное управление ресурсами (память, диск и т.д...). Чем более автоматизирована работа, тем лучше виртуальная среда справится с ней. Например, вам лучше использовать язык / среду, управляемые памятью, вместо того, чтобы писать приложение на C.
По моему опыту, есть только пара вещей, о которых вы должны заботиться:
Ваше приложение не должно завершиться сбоем из-за нехватки времени процессора (т. Е. Слишком мало времени ожидания)
Не используйте всегда выполняющиеся процессы с низким приоритетом для выполнения задач в фоновом режиме
Часы могут работать неравномерно
Не думайте, что операционная система говорит о загрузке системы
Практически любая другая проблема должна решаться не приложением, а виртуализатором, операционной системой или предпочитаемым sys-admin:-)