Partagez l'expérience de l'équipe CockroachDB en utilisant Go.


Go a été choisi pour implémenter CockroachDB il y a 7 ans (3 novembre 2015). Revenons maintenant au choix initial.

La première question que de nombreux développeurs nous posent est de savoir quelle est notre expérience dans l'écriture de bases de données distribuées dans le langage Go. Le ramasse-miettes JVM est notoirement coûteux (assoiffé de ressources), alors ne prenons-nous pas un risque de performance en construisant CockroachDB en Go ?

En fait, lorsque vous construisez des systèmes distribués hautes performances, vous n'avez le choix qu'entre une poignée de langages, avec C++, Java et Go en tête de liste. Les problèmes de performances connus avec Java le rendent peu attrayant. Et, alors que beaucoup d'entre nous ont passé leur carrière à développer en C++, l'effort requis pour construire notre propre bibliothèque complique la tâche déjà ardue d'écrire une base de données distribuée. Le prochain sur la liste est Go.

Bien que Go soit un tout nouveau langage pour presque tous les développeurs du projet (y compris les fondateurs), sa prise en charge des bibliothèques, des interfaces et des outils en fait le bon choix pour CockroachDB.

Peut-être l'indicateur le plus fort que Go est un bon ajustement : un manque d'exposition préalable à la langue n'est pas un obstacle pour les contributeurs. Nous avons maintenant 67 contributeurs travaillant sur le projet, et CockroachDB est passé d'un projet Github vide à 125 000 lignes de code Go non généré, et une poignée de fichiers C++ et .proto. Certes, la gestion de la complexité du code est influencée par le choix du langage, ce qui est particulièrement important dans un environnement open source.

En juillet 2022, CockroachDB compte désormais 579 contributeurs GitHub [1] , dont 89,6 % sont écrits en Go, ainsi qu'une petite quantité de TypeScript, Starlark et Yacc, et quelques autres langages.

Il est difficile de quantifier l'impact de Go sur la productivité en C++ ou même Java. Go est conçu pour s'adapter à de grandes bases de code, en mettant l'accent sur la simplicité et l'orthogonalité des fonctionnalités. Style de code appliqué, importation facile et gestion automatique des importations, grande variété de linters, idiomes de programmation simples (et minimaux)... toutes ces propriétés de Go sont importantes pour un code propre et compréhensible.

Par rapport à Java, nous apprécions l'accent mis sur l'implémentation plutôt que sur la POO et l'abstraction : des interfaces peuvent être ajoutées en cas de besoin, et non comme une étape initiale, ce qui n'est généralement pas nécessaire. Par rapport à C++, nous apprécions la gestion automatique de la mémoire et rarement plus d'une façon d'accomplir quelque chose, comme l'utilisation d'initialiseurs statiques et ponctuels. Nous faisons bon usage des canaux pour la synchronisation, même si nous noterons qu'il existe des astuces pour les utiliser efficacement.

À l'époque, il restait à voir comment tout ce code Go fonctionnerait, les fonctionnalités de base étant toujours construites dans CockroachDB, il restait donc beaucoup de profilage à venir. Cependant, dans notre expérience passée, nous avons porté un grand système de Java vers Go, ce qui a considérablement réduit son empreinte mémoire et sa surcharge de récupération de place.

Sept ans plus tard, avec beaucoup de fonctionnalités de base supplémentaires et beaucoup de profilage, nous sommes toujours très satisfaits de Go.

Vous voulez en savoir plus sur le fonctionnement de Go garbage collection dans CockroachDB ? La récupération de place dans Go peut entraîner la suspension des applications. Heureusement, Go fournit également de nombreux ajustements manuels pour contrôler ce qui se retrouve au sommet du tas d'ordures.

Comment CockroachDB écrit une application Go vaste et complexe [2] Dans cette vidéo de plongée profonde d'une heure, le CTO et co-fondateur de Cockroach Labs, Ben Darnell, explique comment CockroachDB optimise l'utilisation de la mémoire pour atténuer les problèmes liés à la collecte des ordures et améliorer l'utilisation des canaux pour éviter les blocages.

Références

[1]

579 contributeurs GitHub : https://github.com/cockroachdb/cockroach

[2]

Comment CockroachDB écrit une application Go volumineuse et complexe : https://www.cockroachlabs.com/community/tech-talks/challenges-writing-massive-complex-go-application/


Recommandé dans le passé

image

Je m'appelle polarisxu. Je suis diplômé de l'Université de Pékin avec une maîtrise. J'ai travaillé dans des sociétés Internet bien connues telles que 360 ​​et j'ai plus de 10 ans d'expérience dans le développement technologique et l'architecture ! En 2012, je suis entré en contact avec la langue Go et j'ai créé le site Web chinois en langue Go ! Auteur de " Go Language Programming Journey ", livre open source " Go Language Standard Library ", etc.

Insistez pour exporter des technologies (y compris Go, Rust et d'autres technologies), une expérience de travail et des idées entrepreneuriales ! Bienvenue à suivre "polarisxu" pour grandir ensemble ! Bienvenue également à ajouter mes amis WeChat pour communiquer : gopherstudio