Вопросы программирования для виртуализированных приложений

В SO много вопросов о преимуществах и недостатках виртуализации как для разработки, так и для тестирования.

Мой вопрос несколько отличается - в мире, где виртуализация является обычным явлением, что программист должен учитывать, когда речь идет о написании программного обеспечения, которое может быть развернуто в виртуализированной среде? Некоторые из моих первоначальных мыслей:

  1. Обнаружение, если другой экземпляр вашего приложения работает
  2. Связь с оборудованием (физическое / виртуальное)
  3. Регулирование ресурсов (приложение, написанное для многоядерных процессоров, работающих на виртуальной машине с одним процессором)

Что-нибудь еще?

2 ответа

Решение

У вас есть большинство основ, охватывающих три основных пункта. Берегись:

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

По моему опыту, есть только пара вещей, о которых вы должны заботиться:

  • Ваше приложение не должно завершиться сбоем из-за нехватки времени процессора (т. Е. Слишком мало времени ожидания)

  • Не используйте всегда выполняющиеся процессы с низким приоритетом для выполнения задач в фоновом режиме

  • Часы могут работать неравномерно

  • Не думайте, что операционная система говорит о загрузке системы

Практически любая другая проблема должна решаться не приложением, а виртуализатором, операционной системой или предпочитаемым sys-admin:-)

Другие вопросы по тегам