2010-11-29 30 views
3

Il y a beaucoup de questions sur les questions relatives aux avantages et aux inconvénients de la virtualisation pour le développement et les tests. Ma question est subtilement différente - dans un monde où la virtualisation est monnaie courante, quelles sont les choses qu'un programmeur devrait considérer quand il s'agit d'écrire un logiciel qui peut être déployé dans un environnement virtualisé? Certains de mes premières réflexions sont:Considérations de programmation pour les applications virtualisées

  1. détecter si une autre instance de votre application est exécutée
  2. Communiquer avec le matériel (physique/virtuel)
  3. étranglant des ressources (application écrite pour CPU multi-core fonctionnant sur simple CPU VM)

Autre raison?

Répondre

3

La plupart des notions de base sont couvertes par les trois grands points. Attention à:

  • Problèmes liés à la communication matérielle. Les vitesses d'accès au disque sont très différentes (et peuvent avoir des extrêmes exceptionnellement élevés - imaginez une VM qui est arrêtée pendant 3 jours au milieu d'une écriture de disque ....). L'accès au réseau peut être interrompu par des réponses inhabituelles
  • Arithmétique du pointeur fantaisie. Essayez de l'éviter
  • Utilisation intensive d'instructions de niveau/montage inhabituellement inhabituelles
  • Utilisation des horloges mécaniques. Rappelez-vous que tous les appels que vous apportez à l'horloge, et des intervalles de temps, peuvent revenir régulièrement des valeurs inhabituelles lors de l'exécution sur une machine virtuelle
  • applications CPU simples peuvent se trouver en cours d'exécution sur plusieurs machines CPU, qui font des choses funky comme Work Stealing
  • Les cas de coin et les modes de défaillance inhabituels sont beaucoup plus fréquents. Vous n'aurez pas à vous inquiéter autant que la carte réseau disparaîtra au milieu de votre communication sur une machine réelle, comme vous le feriez sur une machine virtuelle
  • Gestion manuelle des ressources (mémoire, disque, etc ...). Plus le travail est automatisé, mieux l'environnement virtuel sera susceptible de le gérer. Par exemple, il est préférable d'utiliser un type de langage/environnement géré par mémoire, au lieu d'écrire une application en C.
+0

Excellente réponse, ce sont tous de bons points et il y en a certains que je n'avais pas envisagés auparavant, tels que les problèmes de synchronisation/horloge. – Jazza

1

Selon mon expérience, il y a vraiment deux choses dont vous devez vous soucier:

  • Votre application ne doit pas échouer en raison de la pénurie de temps processeur (c.-à-d.en utilisant les délais d'attente trop serré)

  • Ne pas utiliser des processus de faible priorité toujours en cours d'exécution, pour effectuer des tâches sur l'arrière-plan

  • L'horloge peut fonctionner de façon inégale

  • Ne pas truss ce que le système d'exploitation Says A propos de la charge du système

Presque toute autre question ne doit pas être gérée par l'application mais par le virtualizer, le système d'exploitation hôte ou votre sys-admin préféré :-)