HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

HighLoad++ Moscou 2018, Salle des CongrĂšs. 9 novembre, 15h00

Résumés et présentation : http://www.highload.ru/moscow/2018/abstracts/4066

Yuri Nasretdinov (VKontakte) : le rapport parlera de l'expĂ©rience de mise en Ɠuvre de ClickHouse dans notre entreprise - pourquoi nous en avons besoin, combien de donnĂ©es nous stockons, comment nous les Ă©crivons, etc.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Matériaux supplémentaires: utiliser Clickhouse en remplacement d'ELK, Big Query et TimescaleDB

Youri Nasretdinov : - Salut tout le monde! Je m'appelle Yuri Nasretdinov, comme je l'ai déjà présenté. Je travaille chez VKontakte. Je parlerai de la façon dont nous insérons les données dans ClickHouse à partir de notre flotte de serveurs (des dizaines de milliers).

Que sont les journaux et pourquoi les collecter ?

Ce que nous vous dirons : ce que nous avons fait, pourquoi nous avions besoin de « ClickHouse Â», respectivement, pourquoi nous l'avons choisi, quel type de performances vous pouvez obtenir approximativement sans rien configurer spĂ©cialement. Je vais vous parler plus en dĂ©tail des tables tampons, des problĂšmes que nous avons rencontrĂ©s avec elles et de nos solutions que nous avons dĂ©veloppĂ©es Ă  partir de l'open source - KittenHouse et Lighthouse.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Pourquoi avions-nous besoin de faire quoi que ce soit (tout va toujours bien sur VKontakte, n'est-ce pas ?). Nous voulions collecter des journaux de dĂ©bogage (et il y avait des centaines de tĂ©raoctets de donnĂ©es), peut-ĂȘtre qu'il serait plus pratique de calculer des statistiques ; et nous disposons d'une flotte de dizaines de milliers de serveurs Ă  partir desquels tout cela doit ĂȘtre fait.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Pourquoi avons-nous dĂ©cidĂ© ? Nous avions probablement des solutions pour stocker les journaux. Ici – il existe un tel « Backend VK » public. Je recommande fortement de s'y abonner.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Que sont les journaux ? Il s'agit d'un moteur qui renvoie des tableaux vides. Les moteurs de VK sont ce que d'autres appellent des microservices. Et voici un sticker souriant (pas mal de likes). Comment ça? Eh bien, écoutez plus loin !

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Que peut-on utiliser pour stocker les journaux ? Il est impossible de ne pas mentionner Hadup. Puis, par exemple, Rsyslog (stockage de ces journaux dans des fichiers). LSD. Qui sait ce qu'est le LSD ? Non, pas ce LSD. Stockez Ă©galement les fichiers, respectivement. Eh bien, ClickHouse est une option Ă©trange.

Clickhouse et concurrents : exigences et opportunités

Que voulons-nous? Nous voulons nous assurer que nous n’avons pas trop Ă  nous soucier du fonctionnement, afin qu’il fonctionne immĂ©diatement, de prĂ©fĂ©rence avec une configuration minimale. Nous voulons Ă©crire beaucoup et Ă©crire vite. Et nous voulons le conserver pendant toutes sortes de mois, d'annĂ©es, c'est-Ă -dire pendant longtemps. Nous voudrons peut-ĂȘtre comprendre un problĂšme avec lequel ils sont venus nous voir et nous ont dit : « Quelque chose ne fonctionne pas ici », et c'Ă©tait il y a 3 mois), et nous voulons pouvoir voir ce qui s'est passĂ© il y a 3 mois. " La compression des donnĂ©es – ce serait clairement un avantage – car elle rĂ©duit la quantitĂ© d’espace qu’elle occupe.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Et nous avons une exigence tellement intéressante : nous écrivons parfois le résultat de certaines commandes (par exemple, les journaux), cela peut faire plus de 4 kilo-octets assez facilement. Et si cette chose fonctionne via UDP, alors elle n'a pas besoin de dépenser... elle n'aura pas de « surcharge » pour la connexion, et pour un grand nombre de serveurs, ce sera un plus.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Voyons ce que l'open source nous offre. PremiĂšrement, nous avons le moteur de journaux - c'est notre moteur ; En principe, il peut tout faire, il peut mĂȘme Ă©crire de longues lignes. Eh bien, il ne compresse pas les donnĂ©es de maniĂšre transparente - nous pouvons compresser nous-mĂȘmes de grandes colonnes si nous le voulons... nous ne voulons bien sĂ»r pas le faire (si possible). Le seul problĂšme est qu’il ne peut donner que ce qui correspond Ă  sa mĂ©moire ; Pour lire le reste, vous devez rĂ©cupĂ©rer le binlog de ce moteur et, par consĂ©quent, cela prend beaucoup de temps.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Quelles sont les autres options ? Par exemple, "Hadup". FacilitĂ© d'utilisation... Qui pense que Hadup est facile Ă  mettre en place ? Bien entendu, il n’y a aucun problĂšme avec l’enregistrement. Lors de la lecture, des questions se posent parfois. En principe, je dirais probablement non, surtout pour les logs. Stockage Ă  long terme - bien sĂ»r, oui, compression des donnĂ©es - oui, longues chaĂźnes - il est clair que vous pouvez enregistrer. Mais enregistrer depuis un grand nombre de serveurs... Encore faut-il faire quelque chose soi-mĂȘme !

Rsyslog. En fait, nous l'avons utilisĂ© comme option de sauvegarde pour pouvoir le lire sans vider le binlog, mais il ne peut pas Ă©crire de longues lignes ; en principe, il ne peut pas Ă©crire plus de 4 kilo-octets. Vous devez effectuer vous-mĂȘme la compression des donnĂ©es de la mĂȘme maniĂšre. La lecture viendra des fichiers.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Ensuite, il y a le dĂ©veloppement « badushka » du LSD. Essentiellement identique Ă  « Rsyslog Â» : il prend en charge les chaĂźnes longues, mais il ne peut pas fonctionner sur UDP et, en fait, Ă  cause de cela, malheureusement, il y a pas mal de choses qui doivent ĂȘtre réécrites. LSD doit ĂȘtre repensĂ© pour pouvoir enregistrer Ă  partir de dizaines de milliers de serveurs.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Et ici! Une option amusante est ElasticSearch. Comment dire? Il rĂ©ussit bien en lecture, c'est-Ă -dire qu'il lit vite, mais pas trĂšs bien en Ă©criture. PremiĂšrement, s’il compresse les donnĂ©es, il est trĂšs faible. TrĂšs probablement, une recherche complĂšte nĂ©cessite des structures de donnĂ©es plus volumineuses que le volume d'origine. Son fonctionnement est difficile et des problĂšmes surviennent souvent. Et encore une fois, pour enregistrer dans Elastic, nous devons tout faire nous-mĂȘmes.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Ici, ClickHouse est bien sĂ»r une option idĂ©ale. Le seul problĂšme est que l’enregistrement Ă  partir de dizaines de milliers de serveurs pose problĂšme. Mais il y a au moins un problĂšme que nous pouvons essayer de rĂ©soudre d’une maniĂšre ou d’une autre. Et le reste du rapport porte sur ce problĂšme. Quel type de performances pouvez-vous attendre de ClickHouse ?

Comment allons-nous l'insérer ? Fusionner l'arbre

Qui d’entre vous n’a pas entendu parler ou ne connaĂźt pas « ClickHouse » ? Je dois te le dire, n'est-ce pas ? TrĂšs vite. L'insertion lĂ -bas - 1 Ă  2 gigabits par seconde, des rafales allant jusqu'Ă  10 gigabits par seconde peuvent en fait supporter cette configuration - il y a deux Xeon Ă  6 cƓurs (c'est-Ă -dire mĂȘme pas le plus puissant), 256 gigaoctets de RAM, 20 tĂ©raoctets en RAID (personne configurĂ©, paramĂštres par dĂ©faut). Alexey Milovidov, dĂ©veloppeur de ClickHouse, est probablement assis lĂ  Ă  pleurer parce que nous n'avons rien configurĂ© (tout a fonctionnĂ© comme ça pour nous). En consĂ©quence, une vitesse de balayage d'environ 6 milliards de lignes par seconde peut ĂȘtre obtenue si les donnĂ©es sont bien compressĂ©es. Si vous aimez % sur une chaĂźne de texte - 100 millions de lignes par seconde, cela semble assez rapide.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Comment allons-nous l'insĂ©rer ? Eh bien, vous savez que VK utilise PHP. Nous insĂ©rerons chaque travailleur PHP via HTTP dans « ClickHouse Â», dans la table MergeTree pour chaque enregistrement. Qui voit un problĂšme dans ce systĂšme ? Pour une raison quelconque, tout le monde n’a pas levĂ© la main. Laisse moi te dire.

PremiÚrement, il y a beaucoup de serveurs - par conséquent, il y aura beaucoup de (mauvaises) connexions. Ensuite, il est préférable d'insérer des données dans MergeTree pas plus d'une fois par seconde. Et qui sait pourquoi ? OK OK. Je vais vous en dire un peu plus à ce sujet. Une autre question intéressante est que nous ne faisons pas d'analyse, nous n'avons pas besoin d'enrichir les données, nous n'avons pas besoin de serveurs intermédiaires, nous voulons les insérer directement dans "ClickHouse" (de préférence - plus directement, mieux c'est).

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Par consĂ©quent, comment se fait l’insertion dans MergeTree ? Pourquoi est-il prĂ©fĂ©rable de ne pas l'insĂ©rer plus d'une fois par seconde ou moins souvent ? Le fait est que "ClickHouse" est une base de donnĂ©es en colonnes et trie les donnĂ©es par ordre croissant de clĂ© primaire, et lorsque vous effectuez une insertion, un nombre de fichiers est créé au moins Ă©gal au nombre de colonnes dans lesquelles les donnĂ©es sont triĂ©es. par ordre croissant de la clĂ© primaire (un rĂ©pertoire sĂ©parĂ© est créé, un ensemble de fichiers sur le disque pour chaque insertion). Ensuite, l'insertion suivante arrive, et en arriĂšre-plan, elles sont combinĂ©es en « partitions Â» plus grandes. Puisque les donnĂ©es sont triĂ©es, il est possible de « fusionner » deux fichiers triĂ©s sans consommer beaucoup de mĂ©moire.

Mais, comme vous pouvez le deviner, si vous Ă©crivez 10 fichiers pour chaque insertion, ClickHouse (ou votre serveur) se terminera rapidement, il est donc recommandĂ© d'insĂ©rer de gros lots. En consĂ©quence, nous n’avons jamais lancĂ© le premier projet en production. Nous en avons immĂ©diatement lancĂ© un, qui ici n°2 prĂ©sente :

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Imaginez ici qu'il y ait environ un millier de serveurs sur lesquels nous avons lancé, il n'y a que PHP. Et sur chaque serveur se trouve notre agent local, que nous appelons « Kittenhouse », qui maintient une connexion avec « ClickHouse » et insÚre des données toutes les quelques secondes. InsÚre les données non pas dans MergeTree, mais dans une table tampon, qui sert précisément à éviter de les insérer directement dans MergeTree.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Travailler avec des tables tampon

Ce que c'est? Les tables tampons sont un morceau de mĂ©moire fragmentĂ©e (c'est-Ă -dire qu'elle peut y ĂȘtre insĂ©rĂ©e frĂ©quemment). Ils sont constituĂ©s de plusieurs morceaux, et chacun des morceaux fonctionne comme un tampon indĂ©pendant, et ils sont vidĂ©s indĂ©pendamment (si vous avez plusieurs morceaux dans le tampon, il y aura alors plusieurs insertions par seconde). Il est possible de lire Ă  partir de ces tables - vous lisez ensuite l'union du contenu du tampon et de la table parent, mais Ă  ce moment l'Ă©criture est bloquĂ©e, il est donc prĂ©fĂ©rable de ne pas lire Ă  partir de lĂ . Et les tableaux de tampons affichent de trĂšs bons QPS, c'est-Ă -dire que jusqu'Ă  3 XNUMX QPS, vous n'aurez aucun problĂšme lors de l'insertion. Il est clair que si le serveur tombe en panne de courant, les donnĂ©es peuvent ĂȘtre perdues, car elles n'Ă©taient stockĂ©es qu'en mĂ©moire.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Dans le mĂȘme temps, le schĂ©ma avec un tampon complique ALTER, car vous devez d'abord supprimer l'ancienne table tampon avec l'ancien schĂ©ma (les donnĂ©es ne disparaĂźtront nulle part, car elles seront vidĂ©es avant que la table ne soit supprimĂ©e). Ensuite, vous « modifiez » la table dont vous avez besoin et crĂ©ez Ă  nouveau la table tampon. Par consĂ©quent, mĂȘme s'il n'y a pas de table tampon, vos donnĂ©es ne circuleront nulle part, mais vous pouvez les avoir sur le disque au moins localement.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Qu’est-ce que Kittenhouse et comment ça marche ?

Qu’est-ce que KittenHouse ? Ceci est un proxy. Devinez quelle langue ? J'ai rassemblĂ© les sujets les plus en vogue dans mon rapport - "Clickhouse", Go, peut-ĂȘtre que je me souviendrai d'autre chose. Oui, c’est Ă©crit en Go, parce que je ne sais pas trop Ă©crire en C, je ne veux pas.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

En consĂ©quence, il maintient une connexion avec chaque serveur et peut Ă©crire en mĂ©moire. Par exemple, si nous Ă©crivons des journaux d'erreurs sur Clickhouse, alors si Clickhouse n'a pas le temps d'insĂ©rer des donnĂ©es (aprĂšs tout, si trop de donnĂ©es sont Ă©crites), alors nous ne gonflons pas la mĂ©moire - nous jetons simplement le reste. Parce que si nous Ă©crivons plusieurs gigabits par seconde d’erreurs, nous pourrons probablement en rejeter. Kittenhouse peut le faire. De plus, il peut effectuer une livraison fiable, c'est-Ă -dire Ă©crire sur le disque de la machine locale et une fois Ă  chaque fois (lĂ -bas, toutes les deux secondes), il essaie de fournir les donnĂ©es de ce fichier. Et au dĂ©but, nous avons utilisĂ© le format Values ​​standard - pas un format binaire, un format texte (comme dans le SQL standard).

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Mais ensuite, ceci s'est produit. Nous avons utilisĂ© une livraison fiable, Ă©crit des journaux, puis dĂ©cidĂ© (c'Ă©tait un cluster de test conditionnel)... Il a Ă©tĂ© Ă©teint pendant plusieurs heures et relancĂ©, et une insertion a commencĂ© Ă  partir d'un millier de serveurs - il s'est avĂ©rĂ© que Clickhouse avait encore un "Thread sur connexion" - en consĂ©quence, dans mille connexions, une insertion active entraĂźne une charge moyenne sur le serveur d'environ un millier et demi. Étonnamment, le serveur a acceptĂ© les demandes, mais les donnĂ©es ont quand mĂȘme Ă©tĂ© insĂ©rĂ©es aprĂšs un certain temps ; mais c'Ă©tait trĂšs difficile pour le serveur de le servir.

Ajouter nginx

Une telle solution pour le modĂšle Thread par connexion est nginx. Nous avons installĂ© nginx devant Clickhouse, mis en place en mĂȘme temps un Ă©quilibrage pour deux rĂ©pliques (notre vitesse d'insertion a augmentĂ© de 2 fois, mĂȘme si ce n'est pas un fait que cela devrait ĂȘtre le cas) et limitĂ© le nombre de connexions Ă  Clickhouse, au en amont et, par consĂ©quent, plus de 50 connexions, il semble inutile d'insĂ©rer.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Ensuite, nous avons rĂ©alisĂ© que ce schĂ©ma prĂ©sentait gĂ©nĂ©ralement des inconvĂ©nients, car nous n'avons ici qu'un seul nginx. En consĂ©quence, si ce nginx plante, malgrĂ© la prĂ©sence de rĂ©pliques, nous perdons des donnĂ©es ou, du moins, n'Ă©crivons nulle part. C'est pourquoi nous avons créé notre propre Ă©quilibrage de charge. Nous avons Ă©galement rĂ©alisĂ© que "Clickhouse" Ă©tait toujours adaptĂ© aux journaux, et le "dĂ©mon" a Ă©galement commencĂ© Ă  Ă©crire ses journaux dans "Clickhouse" - trĂšs pratique, pour ĂȘtre honnĂȘte. Nous l'utilisons encore pour d'autres « dĂ©mons ».

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Ensuite, nous avons découvert ce problÚme intéressant : si vous utilisez une méthode d'insertion non standard en mode SQL, cela force un analyseur SQL à part entiÚre basé sur AST, ce qui est assez lent. En conséquence, nous avons ajouté des paramÚtres pour garantir que cela ne se produise jamais. Nous avons effectué un équilibrage de charge et des contrÎles de santé, de sorte que si l'un d'eux meurt, nous laissons toujours les données. Nous avons maintenant un grand nombre de tables dont nous avons besoin pour avoir différents clusters Clickhouse. Et nous avons également commencé à réfléchir à d'autres utilisations - par exemple, nous voulions écrire des journaux à partir de modules nginx, mais ils ne savent pas comment communiquer avec notre RPC. Eh bien, j'aimerais leur apprendre à envoyer au moins d'une maniÚre ou d'une autre - par exemple, recevoir des événements sur localhost via UDP, puis les transmettre à Clickhouse.

À un pas de la solution

Le schĂ©ma final a commencĂ© Ă  ressembler Ă  ceci (la quatriĂšme version de ce schĂ©ma) : sur chaque serveur devant Clickhouse il y a nginx (sur le mĂȘme serveur) et il transmet simplement les requĂȘtes Ă  localhost avec une limite sur le nombre de connexions de 50 piĂšces. Et ce systĂšme fonctionnait dĂ©jĂ  assez bien, tout allait plutĂŽt bien avec.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Nous avons vĂ©cu ainsi pendant environ un mois. Tout le monde Ă©tait content, ils ont ajoutĂ© des tables, ils ont ajoutĂ©, ils ont ajoutĂ©... En gĂ©nĂ©ral, il s'est avĂ©rĂ© que la façon dont nous avons ajoutĂ© les tables tampons n'Ă©tait pas trĂšs optimale (disons-le ainsi). Nous avons rĂ©alisĂ© 16 piĂšces dans chaque tableau et un intervalle de flash de quelques secondes ; nous avions 20 tables et chaque table recevait 8 insertions par seconde - et c'est Ă  ce moment-lĂ  que « Clickhouse » a commencĂ©... les enregistrements ont commencĂ© Ă  ralentir. Ils ne sont mĂȘme pas passĂ©s par lĂ ... Nginx par dĂ©faut avait une chose tellement intĂ©ressante que si les connexions se terminaient en amont, alors il renvoyait simplement « 502 » Ă  toutes les nouvelles requĂȘtes.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Et ici nous avons (je viens de regarder les journaux dans Clickhouse lui-mĂȘme) environ un demi pour cent des demandes ont Ă©chouĂ©. En consĂ©quence, l'utilisation du disque Ă©tait Ă©levĂ©e et de nombreuses fusions ont eu lieu. Eh bien, qu'est-ce que j'ai fait ? Naturellement, je n’ai pas pris la peine de comprendre pourquoi exactement la connexion et l’amont se sont terminĂ©s.

Remplacer nginx par un proxy inverse

J'ai dĂ©cidĂ© que nous devions gĂ©rer cela nous-mĂȘmes, nous n'avions pas besoin de laisser nginx s'en charger - nginx ne sait pas quelles tables il y a dans Clickhouse, et j'ai remplacĂ© nginx par un proxy inverse, que j'ai Ă©galement Ă©crit moi-mĂȘme.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Que fait-il? Il fonctionne sur la base de la bibliothĂšque fasthttp « goshnoy », c'est-Ă -dire rapide, presque aussi rapide que nginx. DĂ©solĂ©, Igor, si vous ĂȘtes prĂ©sent ici (note : Igor Sysoev est un programmeur russe qui a créé le serveur web nginx). Il peut comprendre de quel type de requĂȘtes il s'agit – INSERT ou SELECT – en consĂ©quence, il contient diffĂ©rents pools de connexions pour diffĂ©rents types de requĂȘtes.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Ainsi, mĂȘme si nous n'avons pas le temps de terminer les demandes d'insertion, les « sĂ©lections » passeront, et vice versa. Et il regroupe les donnĂ©es dans des tables tampon - avec un petit tampon : s'il y avait des erreurs, des erreurs de syntaxe, etc. - afin qu'elles n'affectent pas beaucoup le reste des donnĂ©es, car lorsque nous les insĂ©rons simplement dans des tables tampon, nous il y avait un petit "bachi", et toutes les erreurs de syntaxe seulement affectaient ce petit morceau; et ici, ils affecteront dĂ©jĂ  un grand tampon. Petit correspond Ă  1 mĂ©gaoctet, c'est-Ă -dire pas si petit.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

L'insertion d'une synchronisation et le remplacement essentiellement de nginx font essentiellement la mĂȘme chose que nginx faisait auparavant - vous n'avez pas besoin de changer le "Kittenhouse" local pour cela. Et comme il utilise fasthttp, il est trĂšs rapide : vous pouvez effectuer plus de 100 XNUMX requĂȘtes par seconde pour des insertions uniques via un proxy inverse. ThĂ©oriquement, vous pouvez insĂ©rer une ligne Ă  la fois dans le proxy inverse Kittenhouse, mais bien sĂ»r, nous ne le faisons pas.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Le schĂ©ma a commencĂ© Ă  ressembler Ă  ceci : « Kittenhouse », le proxy inverse regroupe de nombreuses requĂȘtes dans des tables et, Ă  leur tour, les tables tampon les insĂšrent dans les principales.

Killer est une solution temporaire, Kitten est permanent

C'est un problĂšme intĂ©ressant... L'un d'entre vous a-t-il utilisĂ© fasthttp ? Qui a utilisĂ© fasthttp avec les requĂȘtes POST ? Cela n'aurait probablement pas dĂ» ĂȘtre fait, car cela met en mĂ©moire tampon le corps de la requĂȘte par dĂ©faut et la taille de notre tampon a Ă©tĂ© dĂ©finie sur 16 mĂ©gaoctets. L'insertion a cessĂ© de suivre Ă  un moment donnĂ© et des morceaux de 16 mĂ©gaoctets ont commencĂ© Ă  arriver des dizaines de milliers de serveurs, et ils ont tous Ă©tĂ© mis en mĂ©moire tampon avant d'ĂȘtre envoyĂ©s Ă  Clickhouse. En consĂ©quence, la mĂ©moire s'est Ă©puisĂ©e, le Out-Of-Memory Killer est venu et a tuĂ© le proxy inverse (ou « Clickhouse », qui pourrait thĂ©oriquement « manger » plus que le proxy inverse). Le cycle s'est rĂ©pĂ©tĂ©. Ce n’est pas un problĂšme trĂšs agrĂ©able. Bien que nous ne soyons tombĂ©s dessus qu'aprĂšs plusieurs mois de fonctionnement.

Ce que j'ai fait? Encore une fois, je n'aime pas vraiment comprendre ce qui s'est passĂ© exactement. Je pense qu'il est assez Ă©vident que vous ne devriez pas mettre en mĂ©moire tampon. Je n'ai pas pu patcher fasthttp, mĂȘme si j'ai essayĂ©. Mais j'ai trouvĂ© un moyen de faire en sorte qu'il n'y ait pas besoin de patcher quoi que ce soit, et j'ai trouvĂ© ma propre mĂ©thode en HTTP - je l'ai appelĂ©e KITTEN. Eh bien, c'est logique - "VK", "Chaton"... Quoi d'autre ?..

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Si une requĂȘte parvient au serveur avec la mĂ©thode Kitten, alors le serveur doit rĂ©pondre « miaou » - logiquement. S'il rĂ©pond Ă  cela, alors on considĂšre qu'il comprend ce protocole, puis j'intercepte la connexion (fasthttp a une telle mĂ©thode), et la connexion passe en mode « brut ». Pourquoi en ai-je besoin ? Je souhaite contrĂŽler la maniĂšre dont la lecture Ă  partir des connexions TCP se produit. TCP a une propriĂ©tĂ© merveilleuse : si personne ne lit de l'autre cĂŽtĂ©, alors l'Ă©criture commence Ă  attendre et la mĂ©moire n'est pas particuliĂšrement dĂ©pensĂ©e pour cela.

Et donc j'ai lu environ 50 clients Ă  la fois (sur cinquante car cinquante devraient certainement suffire, mĂȘme si le tarif vient d'un autre DC)... La consommation a diminuĂ© avec cette approche au moins 20 fois, mais moi, pour ĂȘtre honnĂȘte , je n'ai pas pu mesurer exactement quelle heure, car c'est dĂ©jĂ  inutile (c'est dĂ©jĂ  atteint le niveau d'erreur). Le protocole est binaire, c'est-Ă -dire qu'il contient le nom et les donnĂ©es de la table ; il n'y a pas d'en-tĂȘte http, donc je n'ai pas utilisĂ© de socket Web (je n'ai pas besoin de communiquer avec les navigateurs - j'ai créé un protocole qui rĂ©pond Ă  nos besoins). Et tout s'est bien passĂ© pour lui.

La table tampon est triste

RĂ©cemment, nous sommes tombĂ©s sur une autre fonctionnalitĂ© intĂ©ressante des tables tampon. Et ce problĂšme est dĂ©jĂ  bien plus douloureux que les autres. Imaginons cette situation : vous utilisez dĂ©jĂ  activement Clickhouse, vous disposez de dizaines de serveurs Clickhouse, et vous avez des requĂȘtes qui sont trĂšs longues Ă  lire (disons, plus de 60 secondes) ; et vous venez faire Alter Ă  ce moment-lĂ ... En attendant, les « sĂ©lections » qui ont commencĂ© avant « Alter » ne seront pas incluses dans ce tableau, « Alter » ne dĂ©marrera pas - probablement certaines caractĂ©ristiques du fonctionnement de « Clickhouse » dans cet endroit. Peut-ĂȘtre que cela peut ĂȘtre corrigĂ© ? Ou est-ce impossible ?

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

En gĂ©nĂ©ral, il est clair qu'en rĂ©alitĂ© ce n'est pas un si gros problĂšme, mais avec les tables tampons, cela devient plus pĂ©nible. Parce que, si, disons, votre « Alter Â» expire (et il peut expirer sur un autre hĂŽte - pas sur le vĂŽtre, mais sur une rĂ©plique, par exemple), alors... Vous avez supprimĂ© la table tampon, votre « Alter Â» ( ou un autre hĂŽte) a expirĂ©. puis une erreur « Alter Â» s'est produite) - vous devez toujours vous assurer que les donnĂ©es continuent d'ĂȘtre Ă©crites : vous recrĂ©ez les tables tampon (selon le mĂȘme schĂ©ma que la table parent), puis « Alter Â» passe, se termine aprĂšs tout, et le tampon dans lequel la table commence Ă  diffĂ©rer du schĂ©ma de celui du parent. Selon ce qu'Ă©tait le "Alter", l'insertion peut ne plus aller dans cette table tampon - c'est trĂšs triste.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Il existe Ă©galement un tel signe (peut-ĂȘtre que quelqu'un l'a remarquĂ©) - il s'appelle query_thread_log dans les nouvelles versions de Clickhouse. Par dĂ©faut, dans certaines versions, il y en avait un. Ici, nous avons accumulĂ© 840 millions d'enregistrements en quelques mois (100 gigaoctets). Cela est dĂ» au fait que des « inserts » y ont Ă©tĂ© Ă©crits (peut-ĂȘtre que maintenant, d'ailleurs, ils ne sont pas Ă©crits). Comme je vous l'ai dit, nos « inserts » sont petits - nous avons eu beaucoup d'« inserts » dans les tables tampons. Il est clair que ceci est dĂ©sactivĂ© - je vous dis juste ce que j'ai vu sur notre serveur. Pourquoi? C'est un autre argument contre l'utilisation de tables tampon ! Spotty est trĂšs triste.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Qui savait que ce type s'appelait Spotty ? Les employés de VK ont levé la main. D'ACCORD.

À propos des projets de « KitttenHouse Â»

Habituellement, les plans ne sont pas partagĂ©s, n'est-ce pas ? Du coup, vous ne les remplirez pas et vous ne paraĂźtrez plus trĂšs bien aux yeux des autres. Mais je prends le risque ! Nous voulons faire ce qui suit : les tables tampons, me semble-t-il, sont toujours une bĂ©quille et nous devons tamponner nous-mĂȘmes l'insertion. Mais nous ne voulons toujours pas le mettre en mĂ©moire tampon sur le disque, nous allons donc mettre en mĂ©moire tampon l'insertion.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

En conséquence, lorsqu'une "insertion" est effectuée, elle ne sera plus synchrone - elle fonctionnera déjà comme une table tampon, s'insérera dans la table parent (enfin, un jour plus tard) et signalera via un canal séparé quelles insertions ont réussi et lesquelles ne pas avoir.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Pourquoi ne puis-je pas quitter l'insertion synchrone ? C'est beaucoup plus pratique. Le fait est que si vous insĂ©rez 10 100 hĂŽtes, tout va bien - vous obtiendrez un peu de chaque hĂŽte, vous y insĂ©rez une fois par seconde, tout va bien. Mais j'aimerais que ce schĂ©ma fonctionne, par exemple, Ă  partir de deux machines, afin que vous puissiez tĂ©lĂ©charger Ă  grande vitesse - peut-ĂȘtre pas tirer le maximum de Clickhouse, mais Ă©crire au moins XNUMX mĂ©gaoctets par seconde Ă  partir d'une machine via un proxy inverse - pour cela, le schĂ©ma doit s'adapter Ă  la fois aux grandes et aux petites quantitĂ©s, nous ne pouvons donc pas attendre une seconde pour chaque insertion, il doit donc ĂȘtre asynchrone. Et de la mĂȘme maniĂšre, les confirmations asynchrones devraient intervenir une fois l'insertion terminĂ©e. Nous saurons si cela a Ă©tĂ© adoptĂ© ou non.

Le plus important est que dans ce schĂ©ma, nous sachions avec certitude si l'insertion a eu lieu ou non. Imaginez cette situation : vous avez une table tampon, vous y avez Ă©crit quelque chose, puis, disons, la table est passĂ©e en mode lecture seule et a essayĂ© de vider la mĂ©moire tampon. OĂč iront les donnĂ©es ? Ils resteront dans le tampon. Mais nous ne pouvons pas en ĂȘtre sĂ»rs - et s'il y avait une autre erreur, Ă  cause de laquelle les donnĂ©es ne resteront pas dans le tampon... (S'adresse Ă  Alexey Milovidov, Yandex, dĂ©veloppeur ClickHouse) Ou restera-t-il ? Toujours? Alexey nous convainc que tout ira bien. Nous n'avons aucune raison de ne pas le croire. Mais quand mĂȘme : si nous n’utilisons pas de tables tampons, elles ne poseront aucun problĂšme. CrĂ©er deux fois plus de tables n'est pas non plus pratique, mĂȘme si en principe il n'y a pas de gros problĂšmes. C'est le plan.

Parlons de lecture

Parlons maintenant de lecture. Nous avons Ă©galement Ă©crit notre propre outil ici. Il semblerait, eh bien, pourquoi Ă©crire votre propre instrument ici ?... Et qui a utilisĂ© Tabix ? D'une maniĂšre ou d'une autre, peu de gens ont levĂ© la main... Et qui est satisfait de la performance de Tabix ? Eh bien, nous n’en sommes pas satisfaits et ce n’est pas trĂšs pratique pour visualiser des donnĂ©es. C'est bien pour l'analyse, mais juste pour la visualisation, ce n'est clairement pas optimisĂ©. J'ai donc Ă©crit ma propre interface.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

C'est trÚs simple : il ne peut lire que des données. Il ne sait pas afficher des graphiques, il ne sait rien faire. Mais il peut montrer ce dont nous avons besoin : par exemple, combien de lignes il y a dans le tableau, combien d'espace il occupe (sans le décomposer en colonnes), c'est-à-dire qu'une interface trÚs basique est ce dont nous avons besoin.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Et cela ressemble beaucoup Ă  Sequel Pro, mais uniquement rĂ©alisĂ© sur Bootstrap de Twitter et sur la deuxiĂšme version. Vous demandez : « Yuri, pourquoi sur la deuxiĂšme version ? Quelle annĂ©e? 2018 ? En gĂ©nĂ©ral, je l'ai fait il y a assez longtemps pour « Muscle » (MySQL) et j'ai juste modifiĂ© quelques lignes dans les requĂȘtes lĂ -bas, et cela a commencĂ© Ă  fonctionner pour « Clickhouse », pour lequel un merci spĂ©cial ! Parce que l'analyseur est trĂšs similaire Ă  celui « musculaire », et les requĂȘtes sont trĂšs similaires - trĂšs pratiques, surtout au dĂ©but.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Eh bien, il peut filtrer les tables, afficher la structure et le contenu de la table, vous permet de trier, de filtrer par colonnes, affiche la requĂȘte qui a abouti au rĂ©sultat, les lignes affectĂ©es (combien en consĂ©quence), c'est-Ă -dire le Ă©lĂ©ments de base pour visualiser les donnĂ©es. Assez rapide.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Il y a aussi un Ă©diteur. HonnĂȘtement, j'ai essayĂ© de voler l'intĂ©gralitĂ© de l'Ă©diteur de Tabix, mais je n'ai pas pu. Mais d’une maniĂšre ou d’une autre, ça marche. En principe, c'est tout.

"Clickhouse" convient aux taniĂšres

Je tiens Ă  vous dire que Clickhouse, malgrĂ© tous les problĂšmes dĂ©crits, est trĂšs bien adaptĂ© aux bĂ»ches. Plus important encore, cela rĂ©sout notre problĂšme : il est trĂšs rapide et vous permet de filtrer les journaux par colonnes. En principe, les tables tampons ne fonctionnent pas bien, mais gĂ©nĂ©ralement personne ne sait pourquoi... Peut-ĂȘtre que maintenant vous savez mieux oĂč vous rencontrerez des problĂšmes.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

TCP ? En gĂ©nĂ©ral, dans VK, il est d'usage d'utiliser UDP. Et quand j'utilisais TCP... Bien sĂ»r, personne ne m'a dit : « Yuri, de quoi tu parles ! Vous ne pouvez pas, vous avez besoin d’UDP. Il s'est avĂ©rĂ© que TCP n'est pas si effrayant. La seule chose est que si vous Ă©crivez des dizaines de milliers de composĂ©s actifs, vous devez les prĂ©parer un peu plus soigneusement ; mais c'est possible et assez facile.

J'ai promis de publier « Kittenhouse » et « Lighthouse » sur HighLoad SibĂ©rie si tout le monde s'abonnait Ă  notre « backend VK » public... Et vous savez, tout le monde n'est pas abonnĂ©... Bien sĂ»r, je n'exigerai pas que vous vous abonniez Ă  notre publique. Vous ĂȘtes encore trop nombreux, quelqu'un peut mĂȘme ĂȘtre offensĂ©, mais quand mĂȘme, abonnez-vous (et lĂ  je dois faire des yeux comme ceux d'un chat). C'est un lien vers celui-ci d'ailleurs. Merci beaucoup! Github est Ă  nous ici. Avec Clickhouse vos cheveux seront doux et soyeux.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Modérateur - Amis, maintenant pour les questions. Juste aprÚs nous vous présentons le certificat d'appréciation et votre rapport en VHS.

Yuri Nasretdinov (ci-aprĂšs dĂ©nommĂ© YN) : – Comment avez-vous pu enregistrer mon reportage en VHS s’il vient de se terminer ?

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

ModĂ©rateur – Vous aussi, vous ne pouvez pas dĂ©terminer pleinement comment « Clickhouse » fonctionnera ou non ! Amis, 5 minutes pour les questions !

des questions

Question du public (ci-aprĂšs dĂ©nommĂ©e Q) : - Bon aprĂšs-midi. Merci beaucoup pour le rapport. J'ai deux questions. Je vais commencer par quelque chose de frivole : le nombre de lettres t dans le nom "Kittenhouse" dans les schĂ©mas (3, 4, 7...) affecte-t-il la satisfaction des chats ?

ON : - QuantitĂ© de quoi ?

Z : – Lettre t. Il y a trois t, quelque part autour de trois t.

ON : - Je ne l'ai pas rĂ©parĂ© ? Eh bien, bien sĂ»r que oui ! Ce sont des produits diffĂ©rents – je vous trompais tout ce temps. D'accord, je plaisante, ça n'a pas d'importance. Ah, juste ici ! Non, c'est la mĂȘme chose, j'ai fait une faute de frappe.

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Z : - Merci. La deuxiĂšme question est sĂ©rieuse. D'aprĂšs ce que je comprends, dans Clickhouse, les tables tampons vivent exclusivement en mĂ©moire, ne sont pas mises en mĂ©moire tampon sur le disque et, par consĂ©quent, ne sont pas persistantes.

ON : - Oui.

Z : – Et en mĂȘme temps, votre client met en mĂ©moire tampon sur disque, ce qui implique une certaine garantie de livraison de ces mĂȘmes logs. Mais cela n'est en aucun cas garanti chez Clickhouse. Expliquez comment s'effectue la garantie, Ă  cause de quoi ?.. Voici ce mĂ©canisme plus en dĂ©tail

ON : – Oui, en thĂ©orie, il n’y a pas de contradictions ici, car lorsque Clickhouse tombe, on peut le dĂ©tecter de mille maniĂšres diffĂ©rentes. Si Clickhouse plante (s'il se termine mal), vous pouvez, en gros, rembobiner un peu votre journal que vous avez Ă©crit et recommencer Ă  partir du moment oĂč tout allait parfaitement bien. Disons que vous rembobinez une minute, c'est-Ă -dire que l'on considĂšre que vous avez tout vidĂ© en une minute.

Z : – Autrement dit, « Kittenhouse » tient la fenĂȘtre plus longtemps et, en cas de chute, peut la reconnaĂźtre et la rembobiner ?

ON : – Mais c’est en thĂ©orie. Dans la pratique, nous ne le faisons pas, et une livraison fiable va de zĂ©ro Ă  l'infini. Mais en moyenne un. Nous sommes convaincus que si Clickhouse plante pour une raison quelconque ou si les serveurs « redĂ©marrent », nous perdons un peu. Dans tous les autres cas, rien ne se passera.

Z : - Bonjour. DĂšs le dĂ©but, il m'a semblĂ© que vous utiliseriez effectivement UDP dĂšs le dĂ©but du rapport. Vous avez http, tout ça... Et la plupart des problĂšmes que vous avez dĂ©crits, si je comprends bien, ont Ă©tĂ© causĂ©s par cette solution particuliĂšre...

ON : – Qu’utilise-t-on TCP ?

Z : - Essentiellement oui.

ON : -Non.

Z : – C’est avec fasthttp que vous avez eu des problĂšmes, avec la connexion vous avez eu des problĂšmes. Si vous aviez simplement utilisĂ© UDP, vous auriez gagnĂ© du temps. Bon, il y aurait des problĂšmes avec les messages longs ou autre chose...

ON : - Avec quoi?

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Z : – Avec des messages longs, puisqu'ils peuvent ne pas rentrer dans le MTU, autre chose... Eh bien, il peut y avoir leurs propres problĂšmes. La question est : pourquoi pas UDP ?

ON : – Je crois que les auteurs qui ont dĂ©veloppĂ© TCP/IP sont beaucoup plus intelligents que moi et savent mieux que moi comment sĂ©rialiser les paquets (pour qu'ils partent), en mĂȘme temps ajuster la fenĂȘtre d'envoi, ne pas surcharger le rĂ©seau, donner des retours sur quoi n'est pas lu, sans compter de l'autre cĂŽtĂ©... Tous ces problĂšmes, Ă  mon avis, existeraient en UDP, seulement je devrais Ă©crire encore plus de code que ce que j'ai dĂ©jĂ  Ă©crit pour implĂ©menter moi-mĂȘme la mĂȘme chose et trĂšs probablement pauvrement. Je n'aime mĂȘme pas vraiment Ă©crire en C, encore moins lĂ -bas...

Z : - Juste pratique ! EnvoyĂ© ok et n’attendez rien – c’est complĂštement asynchrone. Une notification est revenue indiquant que tout allait bien - cela signifie qu'elle est arrivĂ©e ; Si ça ne vient pas, c’est que c’est mauvais.

ON : – J'ai besoin des deux – je dois pouvoir envoyer les deux avec et sans garantie de livraison. Ce sont deux scĂ©narios diffĂ©rents. Je ne dois pas perdre certains journaux ou ne pas les perdre dans des limites raisonnables.

Z : – Je ne perdrai pas de temps. Cela doit ĂȘtre discutĂ© davantage. Merci.

ModĂ©rateur – Qui a des questions – les mains vers le ciel !

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

Z : - Bonjour, je m'appelle Sasha. Quelque part au milieu du rapport, il y avait le sentiment qu'en plus de TCP, il Ă©tait possible d'utiliser une solution toute faite - une sorte de Kafka.

ON : – Eh bien... je t'ai dit que je ne voulais pas utiliser de serveurs intermĂ©diaires, parce que... chez Kafka, il s'avĂšre que nous avons dix mille hĂŽtes ; en fait, nous en avons davantage : des dizaines de milliers d’hĂŽtes. Il peut Ă©galement ĂȘtre pĂ©nible de travailler avec Kafka sans aucun mandataire. De plus, et surtout, cela donne toujours de la « latence », cela donne des hĂŽtes supplĂ©mentaires dont vous avez besoin. Mais je ne veux pas les avoir - je veux...

Z : "Mais finalement, c'est comme ça que ça s'est passĂ©."

ON : – Non, il n’y a pas d’hĂŽtes ! Tout cela fonctionne sur les hĂŽtes Clickhouse.

Z : - Eh bien, et « Kittenhouse », ce qui est l'inverse - oĂč habite-t-il ?

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

ON : – Sur l'hĂŽte Clickhouse, il n'Ă©crit rien sur le disque.

Z : - Supposons.

Modérateur - Es-tu satisfait? Pouvons-nous vous donner un salaire ?

Z : - Oui, vous pouvez. En fait, il y a beaucoup de bĂ©quilles pour obtenir la mĂȘme chose, et maintenant - la rĂ©ponse prĂ©cĂ©dente sur le thĂšme TCP contredit, Ă  mon avis, cette situation. J’ai juste l’impression que tout aurait pu ĂȘtre fait Ă  genoux en beaucoup moins de temps.

ON : – Et aussi pourquoi je ne voulais pas utiliser Kafka, car il y avait beaucoup de plaintes dans le chat Clickhouse Telegram selon lesquelles, par exemple, des messages de Kafka Ă©taient perdus. Pas de Kafka lui-mĂȘme, mais de l'intĂ©gration de Kafka et Clickhaus ; ou quelque chose ne s'est pas connectĂ© lĂ -bas. En gros, il faudrait alors Ă©crire un client pour Kafka. Je ne pense pas qu'il puisse y avoir de solution plus simple ou plus fiable.

Z : – Dis-moi, pourquoi n’as-tu pas essayĂ© de faire la queue ou de prendre un bus commun ? Puisque vous dites qu'avec l'asynchronie, vous pourriez envoyer les journaux eux-mĂȘmes via la file d'attente et recevoir la rĂ©ponse de maniĂšre asynchrone via la file d'attente ?

HighLoad++, Yuri Nasretdinov (VKontakte) : comment VK insĂšre des donnĂ©es dans ClickHouse Ă  partir de dizaines de milliers de serveurs

ON : – Veuillez suggĂ©rer quelles files d'attente pourraient ĂȘtre utilisĂ©es ?

Z : – N'importe lequel, mĂȘme sans garantie qu'il soit en ordre. Une sorte de Redis, RMQ...

ON : – J'ai le sentiment que Redis ne sera probablement pas en mesure de gĂ©nĂ©rer un tel volume d'insertion, mĂȘme sur un seul hĂŽte (au sens de plusieurs serveurs) qui retire Clickhouse. Je ne peux Ă©tayer cela avec aucune preuve (je ne l'ai pas comparĂ©), mais il me semble que Redis n'est pas la meilleure solution ici. En principe, ce systĂšme peut ĂȘtre considĂ©rĂ© comme une file d’attente de messages improvisĂ©e, mais qui est conçue uniquement pour « Clickhouse Â»

ModĂ©rateur – Yuri, merci beaucoup. Je propose de terminer ici les questions et rĂ©ponses et de dire Ă  qui de ceux qui ont posĂ© la question nous donnerons le livre.

ON : – Je voudrais offrir un livre Ă  la premiĂšre personne qui posera une question.

Modérateur - Merveilleux! Super! Fabuleux! Merci beaucoup!

Voir la vidéo

Quelques publicitĂ©s 🙂

Merci de rester avec nous. Vous aimez nos articles ? Vous voulez voir du contenu plus intĂ©ressant ? Soutenez-nous en passant une commande ou en recommandant Ă  vos amis, cloud VPS pour les dĂ©veloppeurs Ă  partir de 4.99 $, un analogue unique des serveurs d'entrĂ©e de gamme, que nous avons inventĂ© pour vous : Toute la vĂ©ritĂ© sur le VPS (KVM) E5-2697 v3 (6 Cores) 10Go DDR4 480Go SSD 1Gbps Ă  partir de 19$ ou comment partager un serveur ? (disponible avec RAID1 et RAID10, jusqu'Ă  24 cƓurs et jusqu'Ă  40 Go de DDR4).

Dell R730xd 2 fois moins cher dans le centre de données Equinix Tier IV à Amsterdam ? Ici seulement 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV à partir de 199$ aux Pays-Bas! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - à partir de 99$ ! En savoir plus Comment construire une infrastructure corp. classe avec l'utilisation de serveurs Dell R730xd E5-2650 v4 qui valent 9000 XNUMX euros pour un sou ?

Source: habr.com

Ajouter un commentaire