Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Exemples d’entreprises :
● Calcul parallèle
● Data Streaming
● Orchestration
Small Data vs Big Data ?
Définition
Le Big Data est un terme apparu il y a plus de 20 ans.
Pourtant, ce n’est que depuis quelques années qu’il s’est ancré dans l’inconscient
de tout le monde.
Si l’on parle de Big Data, cela signifie qu’il y a un avant … le Small Data ?
Vélo
ur
V a le
cité
5V
Vé é
ra
c it r iét
é V a
Volume
Un des premiers critères d’un projet Big Data est incontestablement le volume des
données.
Vélocité
Les données arrivent massivement, et plus vite.
Variété
Les données sont de plus en plus “fragmentées” et de natures différentes (texte,
image, vidéo).
Véracité
À quel point peut-on faire confiance aux données ?
Valeur
Comment peut-on en extraire de la valeur ?
Pour résumer
Le Big Data, ce n’est pas juste « beaucoup de données ».
La taille des données augmente exponentiellement, mais pas les ressources pour
les utiliser.
● Cloud Computing
● Base de données
● Data Streaming
● Calcul parallèle
● Orchestration
Ce qui sera présenté dans la suite n’est pas exhaustif mais permet d’avoir une
idée claire pour les différencier et savoir lequel utiliser en fonction du cas
d’usage.
Cloud Computing
Pourquoi le Cloud Computing est devenu si populaire ?
Parts de marché
Modèles de déploiement
Modèle économique
Ce n’est pas un client pour un Data Center, mais des centaines de milliers de
clients.
Plutôt que de payer les frais liés au Data Center, les clients payent les frais
d’utilisation des ressources, englobant les frais de maintenance.
⇒ C’est ce qui permet aux fournisseurs Cloud de proposer des prix toujours aussi
bas.
Scalabilité
La scalabilité est la capacité de supporter des charges plus importantes que par
le passé. On distingue deux types de scalabilité :
Élasticité
L’élasticité est la capacité de redimensionner à tout moment les ressources pour
s’adapter efficacement à la charge.
Scalabilité et élasticité
Scalabilité ≠ Élasticité
Une base de données ne fait pas la même chose qu’un système de stockage de
fichiers.
Le langage SQL est la référence pour les requêtes sur les bases relationnelles.
SQL vs NoSQL
Deux grandes familles de SGBD s’opposent :
Les bases dites NoSQL sont plus récentes et leur création a été motivé par le Big
Data, en particulier sur les sujets de volumétrie et de variété des données.
Le modèle relationnel
Dans un modèle relationnel, les données sont stockées sous forme de tables
(dites relationnelles) dans la base de données.
Chaque table est défini selon un schéma, qui identifie les colonnes et les
propriétés de la table.
Les colonnes
Chaque colonne stocke une donnée qui respecte un type particulier.
Une clé primaire permet d’identifier chaque ligne de manière unique. Une clé
primaire peut être composée d’une ou plusieurs colonnes.
Les clés primaires sont fréquemment des colonnes non nulles et auto-
incrémentes.
Une clé étrangère fait référence à une clé primaire d’une autre table.
C’est à l’aide de ces deux clés que l’on peut lier les tables entre-elles.
Jointures
C’est avec les jointures
que le modèle relationnel
prend tout son sens : cela
permet de relier plusieurs
tables.
Ici, user_id et
employee_id sont deux
clés de jointure
étrangères permettant de
relier les trois tables.
Méthodes de jointures
Propriétés ACID
La grande majorité des bases SQL supportent les propriétés ACID sur les requêtes.
Attention, le faux-ami CREATE sous SQL ne permet pas de créer une ligne mais de
créer une table ou une base de données.
Quelques bases SQL célèbres
TP - Base relationnelle
Création d’une base de données sur des données d’une campagne marketing.
La principale différence avec les tables relationnelles est que les colonnes ne sont
pas fixes pour chaque ligne, mais chaque ligne de la table peut définir ses
propres colonnes.
date: 12/05/2020
3 Fromage blanc
price: 2.02€
Bases orientées colonnes
Les bases orientés colonnes sont pensées pour la volumétrie : de ce fait, les tables
peuvent facilement contenir des dizaines de millions de lignes avec des centaines
de colonnes différentes.
Par exemple, avec Cassandra, il n’est pas possible d’effectuer des jointures.
Bases orientées colonnes
Quand utiliser un base NoSQL orientée colonnes ?
Elles sont adaptées lorsque les données sont très volumineuses et que de
nombreux événements surviennent.
Managées
Bases orientées documents
Dans les bases orientées documents, on considère des collections de documents,
où chaque document contient une liste de champs clé/valeur.
Le format utilisé dans les documents est principalement le JSON ou le XML.
{ { {
"nom": "Liquide vaisselle", "nom": "Shampooing", "nom": "Fromage blanc",
"images": [ "images": [ "images": [
"https://...", "https://...", "https://...",
"https://..." "https://..." "https://..."
], ], ],
"specs": { "specs": { "specs": {
"parfum": "Orange" "parfum": "Vanille" "mat_grasses": "0%"
} } }
} } }
Bases orientées documents
Quand utiliser un base NoSQL orientée document ?
Il faut les utiliser lorsqu’il n’y pas de relations entre les documents et les
collections.
➔ Gestion de catalogues diversifié (produits, achats, ventes)
➔ Web Analytics
S’il y a une cohérence assez forte entre les données (colonnes plus ou moins
similaires), on préfèrera utiliser une base NoSQL orientée colonnes.
Bases orientées documents
Open Source
Managées
TP MongoDB
● Création d’un cluster MongoDB à 3 noeuds
● Installation et prise en main de MongoDB Atlas
● Collections, documents et schémas
● Manipulation sous Python : cas synchrone et asynchrone
● Opérations CRUD et acknowledgments
● Projections et filtrages
● Pipelines d’aggrégations
Bases orientées clé/valeur
Les bases orientées clé/valeur sont utilisées pour le stockage temporaire de
données.
Chaque donnée est référencée par une clé : c’est à partir de cette dernière que l’on
y accède.
Contrairement aux autres bases NoSQL, celles-ci sont plus faciles à utiliser mais
leurs usages sont limitées.
⚠ Il n’y a aucune structure sur les valeurs associées aux clés : il faut être prudent
avec ces bases.
Bases orientées clé/valeur
L’utilisation des bases NoSQL orientées clé/valeur est très facile, car les clés
fournissent une indexation naturelle.
Clé Valeur
1 https://adresseweb.com
2 356
mail: monmail@gmail.com
3 date: 25/10/2020 13:42:12
Ces bases sont en général plutôt destinées aux développeurs qui mettent en place
des solutions de haute disponibilité.
Bases orientées clé/valeur
Open Source
Managées
Autres bases
Bases orientées graphes
Le calcul parallèle (ou distribué) est le fait d’exécuter plusieurs calculs séquentiels
simultanément sur plusieurs serveurs (appelés noeuds de calcul).
Plutôt que d’utiliser la mémoire vive d’un seul serveur, cela permet d’utiliser autant
de mémoire vive qu’il y a de noeuds de calcul disponibles.
L’objectif du MapReduce est de pouvoir effectuer des calculs qui ne sont pas
indépendants en dispatchant les données sur plusieurs noeuds de calcul.
⇒ Chaque noeud effectue le même traitement, mais pas sur les mêmes données.
MapReduce : comptage de mots
Prenons un exemple : nous souhaitons compter le nombre d'occurrences de
chaque mot dans un corpus.
Les mots Deer, Bear et River apparaissent 3 fois, et le mot Car apparaît 4 fois.
Sur Wikipédia English, il y a environ 6,1m d’articles avec une moyenne de 1,5k mots
par article, il y a environ 9,15 milliards de mots.
Ainsi, paralléliser le calcul dans cette situation est donc un choix judicieux.
MapReduce : comptage de mots
Frameworks Big Data
Hadoop / Spark
MapReduce
Dans la plupart des cas, une seule phase MapReduce n’est pas suffisante.
Écrire toutes ces phases peut être laborieux à long terme, et certains algorithmes
ne peuvent pas être implémenté en MapReduce (algorithmes récursifs).
Il existe donc des outils plus “haut-niveau” simplifiant l’accès aux commandes
MapReduce.
Outils haut-niveau
Apache Hive
Ces blocs sont répliqués sur plusieurs Datanodes pour la tolérance à la faute.
Les noeuds de calcul accèdent directement aux fichiers HDFS via les Datanodes.
HDFS avec Hadoop/Spark
Pour rappel, avec Hadoop, les données ne sont pas stockées en mémoire.
Sur Spark, il est possible de garder le RDD en mémoire s’il n’est pas trop
volumineux.
Datasets
Apparu avec Spark, un Dataset est une collection de données distribuée qui offre
l'avantage des RDD (fort typage par exemple) mais qui permet bénéficie également
du moteur d'exécution de Spark SQL.
C'est notamment avec cette dernière fonctionnalité que nous pourrons invoquer
des traitements SQL-like en parallèle.
DataFrames
Enfin, le DataFrame est un Dataset organisé sous forme de colonnes, équivalent à
une table dans un modèle relationnel.
Jusqu’ici, nous avons utilisé Spark pour l'extraction, la transformation et le chargement des données.
❓ Comment exploiter toutes ces données qui arrivent en flux continu dans notre processus ETL ?
➔ Le processus peut être exécuté de manière périodique (tâche CRON ou serveur stand-by).
Une fréquence trop faible perd le côté streaming, et une fréquence trop grande pourrait
surcharger le processus ETL.
➔ Le processus peut être exécuté dès qu'un certain nombre d'événements surviennent.
Une liste d'attente s'installe ce qui crée une dépendance entre les données : certaines peuvent
être bloquées si le nombre de message n'est pas constant (en heure de pointe, il y a
probablement plus de taxis que la nuit en milieu de semaine).
➔ Le processus peut être exécuté à partir de l'application qui génère ces données.
On devient dépendant du système qui génère ces données, empêchant ainsi un côté
indépendant entre les services.
Système d'agents de messages (brokers)
La solution la plus efficace pour cela est d'utiliser un système d'agents de messages (ou broker).
La pièce maîtresse d'un broker est la gestion d'une ou plusieurs files d'attentes.
Le modèle publish-subscribe
Dans le modèle publish-subscribe, il y a un mécanisme de publications et d'abonnements de messages.
Publisher
Broker Subscriber
Publisher
File d’attente 1
Subscriber
Publisher File d’attente 2
Un publisher est une application qui envoie des messages vers le broker sur une ou plusieurs files.
Un subscriber est une application qui récupère les messages depuis une ou plusieurs files.
Le modèle publish-subscribe
Beaucoup de cas d’usages du modèle publish-subscribe trouvent une même origine.
Serveur
Frontend
Serveur
Journaux
Backend
Base de données
Événements
(primary)
Base de données
DB Monitoring
(replica)
IAM
Le modèle publish-subscribe
Avec un broker, tous les messages sont envoyés vers un point central, limitant le couplage entre les
applications.
Serveur
Frontend
Serveur
Journaux
Backend
Base de données
(primary) Broker Événements
Base de données
DB Monitoring
(replica)
IAM
Le modèle publish-subscribe
Il y a deux principaux avantages au système publish-subscribe.
➔ Scalabilité : l'intérêt de pouvoir spécifier quelles applications vont publier ou s'abonner permet de
mettre à l'échelle plus facilement, et donc de pouvoir gérer à la fois de grandes quantités de
données à des fréquences très élevées.
➔ Couplage faible : en séparant les applications qui publient de celles qui s'abonnent permet de
penser à une architecture où les applications sont indépendantes, chose encouragée dans le
Cloud Computing.
Pourquoi s'orienter vers Apache Kafka et non pas RabbitMQ ou encore Spark Streaming ?
Le principal intérêt de Ka!a est sa scalabilité orientée Big Data, et son fonctionnement de continuous
streaming.
Apache Kafka
Apache Kafka est définit comme étant une plateforme distribuée de streaming de données.
L’écosystème Kafka, conçu chez LinkedIn, est pensée pour supporter de très grandes charges de travail.
Apache Kafka - Les API
Apache Ka!a contient 5 APIs principales.
Bien que Ka!a soit écrit en Java et Scala, la plupart des langages disposent de librairies ou packages
permettant l’interaction avec Ka!a.
À noter toutefois que certaines fonctionnalités spécifiques ne peuvent être codées qu’en Java ou Scala.
En pratique, pour des raisons de haute disponibilité et de tolérance à la faute, ce n’est pas un seul mais
plusieurs brokers qui sont exécutés.
Par la suite, on considérera alors des clusters Kafka avec au moins 2 brokers.
En pratique, un cluster Kafka est également composés d’un ensemble ZooKeeper, nécessaire pour stocker
les métadonnées sur les éléments du cluster, que nous n’aborderons pas dans ce cours.
Les records sont enregistrés dans des topics. Il s’agit des files publish-subscribe sous Kafka.
Topic
0 1 2 3 4 5 6 7 8 9 10 11 ...
Topic
0 1 2 3 4 5 6 7 8 9 10 11 ...
En pratique, il peut y avoir des dizaines de milliers de topics, tant que les ressources du cluster sont
suffisantes.
Topics - Partitions
Pour gérer l’afflux de records, chaque topic est constitué de partitions.
Il s’agit de piles (FIFO) où chaque record est identifié par sa position dans la partition, appelé offset.
Topic
Partition 0 0 1 2 3 4 5 6 7 8 9 10 11 ...
Partition 1 0 1 2 3 4 5 6 7 8 ...
Partition 2 0 1 2 3 4 5 6 7 8 9 10 ...
Cette notion de pile est importante, car elle permet de gérer l'ordonnancement des messages et donc leur
priorité de traitement.
Topics - Replicas
Enfin, pour être tolérant à la faute dans le cas où un broker Kafka viendrait à ne plus fonctionner, il est
conseillé de créer des replicas de topics.
En définissant un facteur de replica, le topic et ses partitions seront dupliquées dans autant de brokers que
précisé.
Topics - Tolérance
La tolérance indique le nombre de brokers qui peuvent être en panne sans que les données d’un topic
soient perdues.
Par exemple, dans un cluster à 4 brokers, avec un facteur de réplica à 3, la tolérance est de deux brokers en
panne simultanément.
Topics - Tolérance
Broker 1 Broker 2
Partition 2 Partition 3
● 4 brokers Kafka
● Un seul topic
● 4 partitions
Broker 3 Broker 4
● Facteur de réplica 3
Partition 0 Partition 1 Partition 0 Partition 2
Partition 3 Partition 3
Topics - Tolérance
Partition 3 Partition 3
Topics - Tolérance
Les partitions followers vont répliquer les écritures du leader et prendre le relai si la partition n’est plus
disponible (broker en panne par exemple).
➔ Chaque record est identifié par sa position (offset) dans une partition.
➔ Les topics et ses partitions peuvent être dupliqués sur plusieurs brokers (replica).
Producers et Consumers
Les applications qui vont agir sur les topics sont les producers et les consumers.
➔ Les producers vont envoyer des records sur un ou plusieurs topics, avec le choix de la partition à
utiliser.
➔ Les consumers vont quant à eux consommer les records dans un ou plusieurs topics.
Les consumers sont multi-subscribers : ils peuvent consommer des records de plusieurs topics en même
temps.
Producers
Il y a de nombreux cas d’applications qui nécessitent d’envoyer des messages vers Kafka.
Les réponses sont assez souples si, par exemple, on souhaite tracker l’activité d’un utilisateur anonyme sur
un site Internet.
Elles le sont beaucoup moins pour des ordres financiers par exemple.
Producers - Vue générale
Producers - Serialization
Les messages envoyés sur des topics Kafka sont au format binaire.
Dans certains cas, si l’on souhaite envoyer des données structurées, nous devons utiliser une technique de
sérialisation qui s’applique automatiquement avant l’envoi de chaque message.
Producer Broker
Parmi les exemples les plus classiques, on retrouve l’encodage depuis le format JSON ou la sérialisation
binaire avec Avro ou Protobuf.
Producers - Acknowledgment
Lorsqu’un producer envoie un message sur un topic Ka!a, il peut être en mesure d’attendre une réponse
pour vérifier que le message a bien été reçu : c’est l’acknowledgment.
La méthode la plus simple pour envoyer un message vers un topic Kafka est le Fire and Forget.
Producer Broker
envoi du message réception
message stocké
Producers - Envoi synchrone
Lorsque l’on souhaite avec un acknowledgment du broker, on peut effectuer un envoie synchrone.
Dans ce contexte, le producer sera en attente et bloqué tant que le broker ne fournira pas de réponse
(positive ou négative).
Producer Broker
envoi du message réception
Le producer ne fait
rien d’autre tant qu’il
n’a pas reçu un
acknowledgment du
broker.
message stocké
acknowledgment
Producers - Envoi asynchrone
Pour éviter le blocage de l’exécution du producer, il est possible d’effectuer un envoi asynchrone.
Le producer va pouvoir envoyer d’autre message et utiliser des callbacks lors de l’acknowledgment des
précédents.
Producer Broker
envoi du message réception
Le producer peut
envoyer un autre
message (ou faire
d’autres calculs) sans
avoir Autre calcul fait par le producer
l’acknowledgment du
précédent.
acknowledgment
message stocké
Producers - Partitionnement
Chaque message envoyé vers un topic Kafka peut être associé d’une clé.
Il s’agit d’informations additionnelles sur le message, mais permet également de décider sur quelle partition
précisément écrire un message.
Ce cas de figure est intéressant en pratique lorsque les applications qui consomment les messages
(consumers), utilisent elles aussi des partitions spécifiques.
Consumers
Les consumers, à l’opposé des producers, vont lire les messages sur un ou plusieurs topics.
On comprends rapidement que les consumers sont un sujet plus sensibles et plus délicats que les
producers.
Pour cela, Ka"a implémente une notion de consumer group pour proposer des réponses à ces questions.
Consumers - Consumer Group
Chaque consumer fait parti d’un consumer group.
Ce groupe s’assure que chaque partition d’un topic est consommée par un seul de ses membres.
⇒ Chaque record d’un topic est donc consommé par un seul consumer dans un consumer group.
Partition 0 0 1 2 3 4 5 6 7 8 9 10 11 ...
Consumer 1
Consumer 3
Partition 2 0 1 2 3 4 5 6 7 8 9 10 ...
Consumers - Consumer Group
L’avantage de ce système est qu’il permet de créer des configurations différentes selon les besoins.
Broker
Si chaque consumer est dans un consumer group, alors chaque record de chaque topic souscrit va être
envoyé à tous les consumers : on parle de broadcasting.
Consumers - Consumer Group
Broker
Consumer Group
Si tous les consumers sont dans un seul et même consumer group, alors chaque record de chaque topic
souscrit va être envoyé à un des consumer : on parle de load balancing.
Consumers - Poll loop
Contrairement aux producers, les consumers sont en lien constant avec les brokers.
Ce lien constant peut être vu comme une boucle infinie sur laquelle le consumer “attends” des messages du
broker : c’est la poll loop.
try {
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records)
{
// On traite les records ici
}
} finally {
consumer.close();
}
L’idée est de contrôler la taille de la fenêtre temporelle, spécifiée par le paramètre (ici 100 millisecondes)
pour “attendre” l’arrivé des messages.
Le poll a également un rôle important puisqu’il va également procéder à l’assignation des partitions aux
consumers dans un groupe (cela va donc redistribuer les cartes au sein du consumer group).
De plus, le poll intervient dans le cas d’un rebalance, c’est-à-dire lorsque les partitions sont ré-assignés dans
un topic.
Consumers - Deserialization
Les messages lus par les consumers sont là-aussi au format binaire.
Lorsqu’une sérialisation a été appliquée en amont, une désérialisation est nécessaire en sortie pour les
consumers.
Broker Consumers
Donnée Donnée
Topic Deserializer
binaire structurée
La principale difficulté est de garder une consistante entre les producers et les consumers.
⇒ Une solution est d’utiliser les schémas de données, qui ne seront pas abordés dans ce cours.
Consumers - Commits
À la suite d’un poll, les messages de Kafka non lus sont retournés au consumer.
Ce qu’il y a de particulier, c’est que ce n’est pas Kafka lui-même qui gère directement l’acknownledgment
des messages par les consumers, mais ces derniers directement.
Dans le cas des consumers, il ne s’agit pas d’un acknowledgment mais d’un commit.
⇒ Un consumer va donc commit un offset : autrement dit, il va indiquer à Kafka qu’il a bien reçu et traité le
message du topic sur la partition et le offset spécifiés.
Mais si un des consumer tombe en panne, alors un décalage des commits va se produire.
● Une première fois par le consumer avant qu’il tombe en panne pour pouvoir commit son message.
● Une deuxième fois par le consumer qui prend le relai sur la partition et qui repart du dernier commit.
Consumers - Commits
À l’inverse, si un consumer commit des offsets sans avoir eu le temps de traiter les messages associés
depuis le précédent poll, certains messages ne seront donc jamais traités.
Consumers - Commits
Face à cette situation, il y a plusieurs stratégies de commits proposées dans la Consumer API.
● Commit automatique
● Commit synchrone
● Commit asynchrone
● Combinaison synchrone et asynchrone
● Commit à un offset spécifique
Consumers - Commit automatique
La méthode la plus facile est d’utiliser une option de commit automatique.
Toutes les 5 secondes, le consumer va commit le plus haut offset qu’il a traité depuis le poll.
Cette valeur de 5 secondes est proposée par défaut et peut être configurée par le paramètre
auto.commit.interval.ms.
⇒ Comprenons bien les conséquences : si pendant ces 5 secondes, le consumer tombe en panne au bout
de x secondes, tous les messages récupérés pendant ces x secondes seront traités en doublon.
Bien que cette solution soit facile, elle n’est efficace pour les cas d’utilisation où les doublons sont
impensables (ordres financiers par exemple).
Consumers - Commit synchrone
Dans le cas d’un commit synchrone, le consumer va explicitement commit le offset le plus élevé d’un poll.
try {
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records)
{
// On traite les records ici
}
try {
consumer.commitSync(); // On effectue un commit synchrone du offset le plus élevé
} catch (CommitFailedException e) {
log.error("Commit failed", e)
}
} finally {
consumer.close();
}
Attention néanmoins, gardons en tête que si parmi les messages reçus via le poll, on traite n messages avant
de pouvoir commit si le consumer tombe en panne, ces n messages seront là-aussi traités en double !
Consumers - Commit asynchrone
Dans le cadre synchrone, le consumer est bloqué tant que le broker ne réponds pas positivement au commit.
Si l’on souhaite ne pas bloquer le consumer en attendant la réponse du serveur, nous pouvons utiliser à la
place le commit asynchrone.
try {
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records)
{
// On traite les records ici
}
consumer.commitAsync(new OffsetCommitCallback() {
public void onComplete(Map<TopicPartition, OffsetAndMetadata> offsets, Exception exception) {
if (e != null)
log.error("Commit failed for offsets {}", offsets, e);
}
});
}
} finally {
consumer.close();
}
Consumers - Combinaison synchrone et asynchrone
En temps normal, l’échec d’un commit sans nouvelle tentative derrière n’est pas tant un problème que cela
dans un fonctionnement normal car le prochain poll permettra de commit un offset plus haut.
Mais s’il s’agit par exemple d’un dernier commit avant de stopper le consumer ou d’un rebalance, on
souhaite tout de même être sur et certain que ce dernier commit sera pris en compte.
Ainsi, de manière générale, rien ne nous interdit d’utiliser les deux méthodes synchrones et asynchrones
pour être sûr qu’aucun message ne passe entre les mailles du filet.
Pourquoi ne faut-il pas appeler commitSync ou commitAsync dans la boucle de traitement des messages ?
En réalité, nous avons la possibilité, dans le commit, de fournir un dictionnaire de partitions avec les offsets
associés pour nous permettre de commit plus spécifiquement.
Cela est plus complexe puisque en pratique, un consumer ne va pas forcément consommer qu’une seule
partition (pour rappel, les consumers sont multi-subscribers sous Kafka).
Consumers - Rebalance
Lorsqu’un consumer tombe en panne, un rebalance se met en place.
C’est sûrement l’un des fonctionnalités les plus critiques mais aussi la plus importante.
Bien que nous ne rentrerons pas dans les détails dans ce cours, les objectifs du rebalance sont multiples.
Sous Kafka, cela passe notamment par le Static Membership et le Incremental Cooperative Rebalancing.
Consumers et producers
Pour résumer sur les consumers et les producers dans Ka!a.
➔ Les consumers de deux consumers groups différents recevront les mêmes records.
➔ Les consumers dans un même consumer group recevront les records chacun leur tour.
Orchestration
Orchestration
Automatiser ces processus n’est pas une tâche facile car elle demande beaucoup
d’interactions avec l’infrastructure.
Les orchestrateurs gèrent une infrastructure dans laquelle ils peuvent provisionner
de nouvelles ressources.
L’administrateur n’a besoin que de définir des fichiers de configuration (en YAML
ou JSON) pour définir les tâches d’automatisations à effectuer.
Une machine virtuelle (abrégé en VM) est une isolation logique d’un système
d’exploitation dans un serveur physique.
Le disque dur physique est partagé par toutes les VM, même si elles ne peuvent
pas accéder au contenu des autres.
L’hyperviseur (VMware, KVM, Proxmox) gère les ressources des VM, en parallèle
avec d’autres applications systèmes (souvent de monitoring et d’administration).
Machines virtuelles
Quelques orchestrateurs
Orchestration de conteneurs
Docker est une plateforme de conteneurs open source qui permet de créer des
environnements isolés sur un seul et même système. Il permet de faciliter le
déploiement et permet une mise à l'échelle au niveau applicatif.
Conteneurisation Docker
(Il est donc possible d’exécuter plusieurs conteneurs sur une seule VM, elle même
exécutée en parallèle sur une même machine par un hyperviseur)
Conteneurisation Docker