web-dev-qa-db-fra.com

Explication de Cloud Foundry

J'ai donc lu sur Cloud Foundry et pourtant je ne sais toujours pas ce que c'est. Voici mon avis sur PaaS sur CF, et j'espère que vous pourriez me dire si je me trompe et l'expliquer un peu mieux.

Une offre PaaS traditionnelle comme Microsoft Azure ou Google AppEngine fournit une plate-forme complète pour développer, tester, héberger et gérer votre application Web. Vous devez cependant utiliser leur API et vous êtes limité aux services qu'ils proposent et aux langages/frameworks qu'ils prennent en charge.

Cloud Foundry semble être une sorte d '"intermédiaire", grâce auquel il permet à votre application d'utiliser les services de nombreux clouds publics. Comment y parvient-il? Y a-t-il une seule API que vous utilisez, quelque chose comme LibCloud ou JCloud? Pouvez-vous utiliser un service d'un fournisseur et un autre service d'un autre fournisseur, par exemple? Et Cloud Foundry propose-t-il lui-même des services, ou s'agit-il simplement d'un intermédiaire vous permettant de migrer facilement d'une plate-forme à une autre et d'utiliser différentes combinaisons de services de différents fournisseurs dans une seule application?

60
Amoeba

Je suis développeur sur Cloud Foundry - et oui, Cloud Foundry est en effet un peu nébuleux (sans jeu de mots). J'espère que je pourrai aider à clarifier un peu les choses.

Cloud Foundry est un plateforme en tant que service , mais il a besoin d'un infrastructure en tant que service en dessous. Cloud Foundry prend en charge vSphere , vCloud , OpenStack et Amazon AWS en tant qu'infrastructures via BOSH outil. La plupart des développeurs d'applications Web ne se soucient de rien de tout cela, mais c'est vraiment cool pour les personnes qui doivent s'inquiéter de la grande infrastructure informatique.

Supposons que vous soyez en charge de l'informatique pour AcmeCorp. Vous avez 50 000 employés qui utilisent tous votre service Web interne, Fizzbuzz, pour les aider à faire leur travail. Pour prendre en charge tous les employés, vous avez besoin de dizaines d'instances de l'application Fizzbuzz exécutées sur plusieurs machines avec des processeurs puissants et beaucoup de mémoire, et vous avez besoin d'énormes quantités d'espace disque pour stocker les informations générées par les applications Foo, Bar et Baz que vous utilisez. en interne aussi. Vous êtes allé bien au-delà de ce que vous voudriez gérer sur vos propres serveurs lames, vous décidez donc de louer un centre de données.

Malheureusement, AcmeCorp est horriblement dysfonctionnel. Le service financier a un énorme mot à dire dans le centre de données que vous utilisez et, tous les deux ans, il vous fait passer d'un centre de données à un autre. Tous les deux ans, vous disposez de plusieurs semaines d'indisponibilité pendant que vos ingénieurs tentent de corriger les bogues dans Fizzbuzz exposés en basculant entre vSphere, vCloud, OpenStack ou autre.

Si vos ingénieurs avaient écrit Fizzbuzz, Foo, Bar et Baz contre Cloud Foundry plutôt que directement contre l'infrastructure sous-jacente, votre temps d'arrêt aurait été minimisé. Vous n'auriez pas à vous soucier autant d'être enfermé dans un centre de données particulier, car cette couche d'hébergement a été retirée par Cloud Foundry. Cloud Foundry prend également en charge un certain ensemble de services, notamment PostgreSQL, MySQL, Mongo, Redis et RabbitMQ, pour n'en nommer que certains. Si Foo, Bar et Baz utilisent les services fournis par Cloud Foundry, c'est une chose de moins à s'inquiéter lorsque vous migrez entre les infrastructures.

Plus tard, vous vous rendez compte que vous pouvez faire fortune en vendant Fizzbuzz en tant que service à d'autres grandes entreprises. Vous êtes vraiment en bonne forme pour cela: parce que vos ingénieurs ont redéfini Fizzbuzz pour fonctionner sur Cloud Foundry, vous pouvez simplement déployer Cloud Foundry sur AWS aussi longtemps que nécessaire. Le client l'a essayé pendant six mois et a décidé de ne pas renouveler le service? Pas de problème, vous n'avez aucun bail de centre de données à vous soucier - il suffit de mettre fin à toutes ces instances EC2 et de continuer. Vous pouvez facilement avoir un déploiement de Cloud Foundry pour chaque instance de Fizzbuzz en tant que service afin que les données de vos clients soient totalement isolées les unes des autres.

La cerise sur le gâteau est que Cloud Foundry est open source. Si vous trouvez qu'il n'est pas tout à fait adapté à vos besoins, vous n'avez pas à envoyer simplement un support par e-mail et à attendre que les ingénieurs de Cloud Foundry mettent en œuvre la fonctionnalité de vos rêves - vous avez également la source, afin que vous puissiez faire tous les changements dont vous avez besoin. Et il est disponible sous la licence Apache 2. , donc les requêtes pull sont acceptées avec plaisir, mais pas obligatoires.

J'espère que cela dépeint le type de problèmes que Cloud Foundry résout. N'hésitez pas à demander plus de détails dans un commentaire, ou vous pouvez consulter la liste de diffusion Cloud Foundry si cela a plus de sens pour les questions futures.

84
Mark Rushakoff

Je suis un défenseur des développeurs pour Cloud Foundry et je veux ajouter un peu à la réponse de Mark pour me concentrer sur certains des autres détails que vous avez mentionnés dans votre question d'origine.

Tout d'abord, vous mentionnez GAE et Azure. Les deux ont certaines limites - GAE vous limite à des langages et des API spécifiques, par exemple. L'Open Source n'est pas non plus. CF est extensible (la nouvelle version prend en charge buildpack par exemple, vous permettant de choisir "n'importe quel" langage d'exécution), et vous pouvez choisir de l'exécuter où vous le souhaitez.

Mark mentionne 4 fournisseurs IaaS sur lesquels nous pouvons exécuter CF aujourd'hui, mais en supposant que l'IaaS en question (disons que nous incluons Azure, CloudStack, Google Compute Engine, etc. comme futures cibles) peut prendre en charge un petit nombre de ce que nous appelons les interfaces de fournisseur de cloud (CPI) ), vous pouvez également déployer Cloud Foundry sur ces infrastructures également.

Vous demandez comment il est possible d'utiliser les services de différents fournisseurs. Comme Heroku, la prochaine version de Cloud Foundry (.com) prendra en charge un "marché" où vous pouvez plugin des fonctions de fournisseurs supplémentaires, et si vous exécutez votre propre instance Cloud Foundry, vous pouvez choisir les services à déployer et vous connecter à vos applications .

C'est plutôt cool :-) venez nous parler sur la mailing list si vous voulez en savoir plus!

23
Andy Piper

aimerait ajouter ceci en tant que commentaire concernant l'API à la réponse d'Andy mais n'a malheureusement pas assez de réputation pour le faire Pour autant que je sache, Cloud Foundry n'a vraiment pas d'API spécifique, mais il fournit beaucoup d'informations utiles via des variables d'environnement (par exemple VCAP_SERVICES, VCAP_APPLICATION, VCAP_CONSOLE_IP, VCAP_APP_PORT), accessible depuis n'importe quel langage ou framework. Bien que de nombreuses informations provenant de ces variables soient internes à Cloud Foundry, certaines d'entre elles peuvent être très utiles. Le principal est VCAP_SERVICES qui fournit des informations sur les services liés à votre application.

Par exemple, si je souhaite collecter des informations sur l'instance Azure Cloud Service (par exemple, son ID), sur laquelle mon application est actuellement en cours d'exécution, j'utiliserais la classe this de la bibliothèque de gestion Azure.

À son tour, Cloud Foundry fournit VCAP_APPLICATION env. variable, qui contiendra les champs suivants:

{"application_users": [],
"instance_id":"97467a9cf508cb75273284b948b6319b",
"instance_index":1,
"application_version":"330b7caf-50e5-48f4-8792-1c80a90b06f1",
"application_name":"helloworld",
"application_uris":["helloworld.vcap.me"],
"started_at":"2013-07-22 10:58:16 +0300",
"started_at_timestamp":1374479896,
"Host":"0.0.0.0",
"port":61014,
"limits":{"mem":256,"disk":1024,"fds":16384},
"version":"330b7caf-50e5-48f4-8792-1c80a90b06f1",
"name":"helloworld",
"uris":["helloworld.vcap.me"],
"users":[],
"start":"2013-07-22 10:58:16 +0300",
"state_timestamp":1374479896}

Et, enfin, quelques mots sur les journaux, la surveillance et le diagnostic. Ce n'est actuellement pas implémenté au niveau CF PaaS, mais j'espère que cela sera implémenté (car c'est une fonctionnalité vraiment utile) et peut-être un nouvel env. variables (disons VCAP_LOGS, VCAP_PERFORMANCE_COUNTERS) sera exposé à nos applications.

6
Pavel K

Certes, CF est une couche d'abstraction entre votre IaaS (serveurs, stockage et mise en réseau) et votre application, vous offrant la portabilité pour déplacer votre application entre les clouds publics et privés, mais c'est aussi bien plus:

1. Une plate-forme basée sur des conteneurs hautement évolutive horizontalement

Les applications s'exécutent dans des conteneurs permettant une meilleure gestion des ressources que l'attribution d'applications à des hôtes (VM). Warden/Garden est la technologie de conteneur native des FC, bien que Docker soit également pris en charge dans les versions récentes.

2. Une plate-forme auto-réparatrice fournissant plusieurs couches de HA à votre application

Le système de gestion de l'intégrité ressuscite les instances d'applications, les hôtes de conteneur, les processus de plate-forme et les machines virtuelles défaillants, sans interruption. La prise en charge des zones de disponibilité fournit une haute disponibilité au niveau de la couche infrastructure. Les mises à jour continues et les déploiements canaries permettent un temps d'arrêt nul même pendant les déploiements ou les mises à niveau de la plateforme.

. Une exécution d'opinion polyglotte et réfléchie

À l'aide de la construction "buildpack" de heroku, le langage de l'application est détecté automatiquement et la pile d'exécution appropriée est construite au-dessus d'une image Vanilla OS, permettant aux développeurs de se concentrer sur l'écriture de code.

4. Fourniture à la demande par le développeur de services de données avec état

Les développeurs peuvent auto-approvisionner une tranche d'un cluster MySQL, RabbitMQ, Redis, etc. avec uri/informations d'identification automatiquement injectées dans l'environnement de leur application.

4
zachb317