web-dev-qa-db-fra.com

Comment programmer des instances ponctuelles AWS pour enchérir de manière stratégique afin que l'enchère ne soit jamais perdue tant qu'un concurrent n'a pas dépassé le maximum de ce que je suis disposé à payer?

Je crois que je suis dans la bonne section d'échange de pile pour poser cette question. Si non, faites le moi savoir.

J'utilise uniquement Amazon Web Services pour des services d'hébergement de type temporaire, de sorte que les instances ponctuelles me sont très utiles. Je voudrais aussi simplement créer une instance et la démarrer et l'arrêter - mais - cela ne correspond pas nécessairement à mon budget initial, malheureusement.

Quoi qu'il en soit, ça me tue vraiment quand quelqu'un me surenchérit sur une instance ponctuelle que j'ai (j'ai tendance à aller pour les plus grandes qui sont moins disponibles) et que je suis lancé au hasard. Je sais ou du moins je crois qu'il est possible de programmer quelque chose pour modifier de façon dynamique le prix de votre offre afin de battre un concurrent potentiel si le sien est supérieur au vôtre.

Auparavant, j’imaginais qu’Amazon me facturerait automatiquement le prix le plus élevé juste au-dessus du concurrent le plus bas immédiatement (ce qui évite d’en avoir besoin). Ainsi, si j’enchérisais trop haut, je ne paierais que ce dont j’avais besoin pour gagner et garder la vente aux enchères. Essentiellement, je pensais que mon prix de soumission était mon prix de soumission maximum.

Apparemment, selon mes factures et plusieurs expériences que j'ai faites - ce n'est pas le cas. Ils me facturent pour tout ce que j'ai misé, même si je sais qu'il n'y a personne d'autre pour contrer ce mien.

J'avais besoin de clarifier cela, mais permettez-moi de revenir à l'essentiel:

Supposons que je mise 0,50 $, qu'un concurrent arrive et mette 0,55 cent. Je me fais virer. Je veux l'avoir là où je fixais un maximum que je suis prêt à payer (disons 1,00 $ ici), puis lorsqu'un concurrent arrive et tente de miser 0,55 $, mon offre est ajustée de manière dynamique pour battre le sien à 0,56 $ jusqu'à ce qu'il dépasse mon seuil de 1,00 $.

J'ai lu les guides et même s'ils sont plus ou moins simples, j'ai l'impression qu'ils laissent quelques trous qui finissent par m'embrouiller. Par exemple, où dois-je entrer la commande ou quand dois-je le faire? Peut-être suis-je simplement analphabète et ai-je besoin d'aide pour déchiffrer ces guides?.

Un bon début pour quelqu'un désirant répondre/m'aider à déchiffrer ce problème serait ici: http://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/spot-as-update-bid.html

4
Taal

Il n'y a pas de méthodologie secrète à déterminer ici, et pas besoin de faire ce que vous essayez de faire.

Vous devriez enchérir sur le prix des machines, car vous ne paierez pas plus que les demandes du marché.

Maintenant, je pensais auparavant qu'Amazon me facturerait automatiquement le prix le plus élevé juste au-dessus du prochain concurrent le plus bas ...

Je ne sais pas où vous avez eu cette idée.

Il existe un prix au comptant fixe à tout moment pour toutes les instances avec les quatre éléments de configuration identiques suivants:

  • même zone de disponibilité
  • même classe d'instance
  • même plate-forme (Linux/Unix, Windows ou SUSE)
  • même classe de produit (VPC ou EC2 Classic)

Tout le monde paie le même prix au comptant pour cette période, que son cours acheteur maximum soit supérieur ou non.

- http://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html

À la lumière de cela, vous vous trompez avec l'affirmation suivante ou vous devez contacter le support AWS, car cette information est incorrecte:

Ils facturent tout ce que j'offre, même si je sais qu'il n'y a personne d'autre pour contrer mon offre.

Ce n'est pas correct, à deux égards.

Vous paierez souvent moins par heure que votre enchère maximum. Le prix au comptant est ajusté périodiquement à mesure que les demandes arrivent et que l'offre d'instances disponible change. 

- http://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html

Mes factures sont conformes à la documentation à cet égard. Je suis systématiquement facturé au prix du marché au comptant, comme indiqué dans la console, ce qui n’est certainement pas mon offre maximale.

Si vous ne le voyez pas, je suppose que vous n'interprétez pas correctement les signaux du marché.

Il est important de noter que vous n’avez aucun moyen de savoir qui d’autre ou si une autre personne est présente pour contrer votre offre, car le prix actuel du marché ne correspond pas à l'offre la plus élevée en cours, et dans les cas où l'offre dépasse la demande, j'ai constaté que le la présence ou l'absence de mes instances n'affecte pas le prix du marché.

La seule conclusion que je puisse tirer de mon expérience en analyse de l'historique et des tendances en matière de prix est qu'EC2 a un prix minimum pour chaque combinaison des quatre facteurs énumérés ci-dessus; Lorsqu'il existe plus de cette capacité particulière à un endroit donné que le nombre total de demandes au comptant actuelles, le prix du marché au comptant reste au prix minimal pour cette classe d'instance + zone de disponibilité + plate-forme + produit. Sinon, ça monte.

Vos demandes ponctuelles sont probablement en train de déplacer le marché par leur présence. Si le marché n’est pas à son prix minimum, vous pouvez être presque certain que ceci est ce que vous voyez - dans quel cas, ressemblent à ils vous facturent ce que vous offrez, mais c'est parce que vos demandes entraînent une hausse du prix minimum.

Supposons - avec des chiffres uniquement à titre d’illustration - ce qui suit:

Vous et moi misons tous les deux sur des enchères pour c3.large, sous Linux/Unix, dans Amazon VPC, dans la zone de disponibilité "us-east-1a". (Supposons en outre, aux fins de discussion, que "us-east-1a" se réfère à la même zone de disponibilité dans mon compte AWS et votre compte AWS, ce qui est loin d'être nécessairement vrai - les mappages de zone à compte sont pseudo -randome parmi différents clients AWS.)

Nous spéculerons qu'EC2 ne dispose que de 10 instances de ce type pour des attributions ponctuelles, et que le prix de marché minimal est de 0,032 USD/heure. Mon enchère maximale est 0.096 USD/heure.

J'ai 8 d'entre eux en cours d'exécution, et un autre client a une instance en cours d'exécution, et l'autre client a une enchère maximum de 0,035 USD/heure.

L'autre client et moi-même payons 0,032 USD/heure, car des machines inactives sont toujours allouées pour desservir le marché au comptant. Nos instances n'ont donc pas modifié le prix.

Mais si vous surveillez le prix, vous ne saurez pas si nos machines fonctionnent ou non, ou si nous avons soumissionné contre vous, car vous ne voyez pas le prix changer.

Maintenant, vous venez, voyez le prix à 0,032 $/heure, et vous enchérissez 0,04 $ pour 2 instances.

Il n’ya pas assez de capacité pour desservir 8 + 1 + 2 = 11 car il n’ya que 10 machines disponibles. Le système décide donc qui exécute et qui doit s’arrêter, et le marché évolue.

Mon enchère maximum de 0,096 $ est la plus élevée. Par conséquent, mes 8 machines continuent à fonctionner. Votre enchère maximum est la suivante, à 0,04 USD. Ainsi, vos 2 instances sont lancées et l'autre client, qui a une enchère maximale inférieure à nous deux, est résilié.

Et qu'advient-il du prix du marché?

la dernière enchère réalisée définit le prix au comptant

- http://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/spot-pricing-interruptions.html

Selon la documentation, le prix au comptant est maintenant de 0,04 USD.

Plus tard, je réduis et n’ayant pas besoin de toutes mes instances, je m’arrête 5. Maintenant, il y a une capacité excédentaire, de sorte que l'autre utilisateur (mentionné précédemment, enchère maximum de 0,035 USD) sera réactivé, vos instances continueront à fonctionner et le marché redeviendra au prix minimum de 0,032 USD - ce que nous payons tous jusqu'à ce que le marché passe à nouveau.

Chaque fois que les prix ne sont pas au niveau de référence, la demande a dépassé l'offre et toute offre retenue devrait augmenter le taux pour tous.

Le marché au comptant est un marché fondamentalement juste. Tout le monde paie le prix offert par le plus bas soumissionnaire dont la demande peut être satisfaite, sauf, apparemment, dans les cas où la capacité attribuée ne sera pas pleinement utilisée. Dans ce cas, un prix minimal établi pour cette configuration particulière semble être appliqué .

Les seuls véritables "secrets" sont de trouver les combinaisons d'emplacement/de configuration particulières qui fonctionnent pour vous et qui sont également les moins demandées, et d'indiquer ce que ces machines valent réellement pour vous. Vous ne paierez pas plus que cela et vous paierez parfois moins.

Apparemment, il serait également logique de ne pas placer plusieurs machines sur les mêmes demandes ponctuelles, mais de répartir les montants de vos enchères si vous avez besoin de plusieurs machines identiques, mais vous n'avez pas nécessairement besoin de toutes les exécuter… Juste au bord de la courbe de la demande, il apparaît que votre offre la plus basse réalisée pourrait être, dans certains cas, celle qui définit le prix du marché. Ainsi, dans l'exemple ci-dessus, si vous aviez misé de 0,04 à 0,036 dollar, le marché se serait fusionné à 0,036 dollar au lieu de 0,04 dollar, ce qui nous ferait économiser un peu par heure.

3
Michael - sqlbot