Wie ist es möglich, die gesamte Codebasis aus dem Quellcode im Google-Maßstab zu erstellen?

8

Die erste Antwort auf eine alte, kürzlich aktive Frage, die mit einem Video verknüpft ist, in dem erläutert wird, wie das Google-Repository erstellt wird.

Eine interessante Sache, die erwähnt wurde, ist die Tatsache, dass alles aus dem Quellcode erstellt wird, ohne auf Binärdateien angewiesen zu sein. Dies hilft zu vermeiden, dass Probleme mit Abhängigkeiten veraltet sind, aber immer noch in anderen Projekten verwendet werden, ein Problem, auf das ich in der Tat häufig gestoßen bin.

Wie ist es technisch möglich? Wenn ich in meinem Unternehmen dasselbe versuche, selbst wenn man die große Lücke zwischen der Größe meiner Unternehmenscodebasis und der Größe von Googles berücksichtigt, wäre dies aus zwei Gründen nicht möglich:

  • Die IDE (Visual Studio) reagiert schnell nicht mehr, da selbst kleine Lösungen mit beispielsweise 50 Projekten stark darunter leiden.

  • Jede statische Analyse würde durch die Größe der gesamten Codebasis beeinträchtigt. Beispielsweise wären Code-Metriken oder statische Überprüfungen von Code-Verträgen kaum möglich (Code-Verträge würden wahrscheinlich Tage oder Wochen dauern).

  • Bei kontinuierlicher Integration würde das Kompilieren ebenfalls viel Zeit in Anspruch nehmen und die Server zum Erliegen bringen, sobald ein Projekt mit vielen Abhängigkeiten geändert wird, sodass ein großer Baum von Projekten neu kompiliert werden muss.

Wie kann ein kleines Unternehmen diese Probleme umgehen und in der Lage sein:

  1. Verwenden Sie die IDE, ohne von schlechter Leistung beeinträchtigt zu werden.

  2. Kompilieren Sie den Code nach jedem Commit, ohne den Server zu beschädigen, auch wenn die Folgen einer Änderung erfordern, dass ein großer Teil der Codebasis neu kompiliert wird.

Arseni Mourzenko
quelle
Es gibt einen Vortrag auf Youtube darüber, wie Google es macht: youtube.com/watch?v=2qv3fcXW1mg
Patrick

Antworten:

11

Sie gehen von einem traditionellen Erstellungsprozess aus, und der Google-Prozess ist alles andere als traditionell. Im Blog von Engineering Tools gibt es eine Reihe von Artikeln, in denen der Prozess ausführlich erläutert wird. Dabei wird auf die Präsentation von 2010 eingegangen: Tools für die kontinuierliche Integration bei Google Scale :

  1. In der Cloud erstellen: Zugriff auf den Quellcode
  2. Build in the Cloud: Funktionsweise des Build-Systems
  3. Build in the Cloud: Verteilen von Build-Schritten
  4. In der Cloud erstellen: Zugriff auf den Quellcode
  5. Testen mit der Geschwindigkeit und dem Umfang von Google

Zusammenfassend lässt sich sagen, dass sie ein benutzerdefiniertes verteiltes Build-System verwenden, das einen sehr hohen Grad an Parallelität und Automatisierung ermöglicht und die vorhandene Infrastruktur voll ausnutzt. Es hängt auch stark vom Caching ab, mit einer Cache-Trefferquote von 90%.

Aber wie können Sie das alles in Ihrem Unternehmen anwenden? Der erste Schritt ist das Verteilen des Kompilierens. Dazu benötigen Sie:

  • Eine Wolke
  • Ein verteilter Compiler
  • Ein Compiler-Cache

In einer gcc-Entwicklungsumgebung ist das Einrichten einer Kompilierungsfarm relativ einfach. distcc kümmert sich um die Verteilung und ccache kümmert sich um das Caching, und sie arbeiten wunderbar zusammen. Ich kenne keine ähnlichen Tools für das Microsoft-Ökosystem (ich gehe davon aus, dass Sie eine Microsoft-Sprache verwenden, die auf Ihrer IDE-Auswahl basiert), aber ich weiß, dass MSBuild Builds parallel ausführen kann , wobei Multi-Core-CPUs genutzt werden . Nicht wirklich eine Kompilierungsfarm, aber sicherlich ein Schritt in die richtige Richtung.

Yannis
quelle
2
  1. Sie müssen nicht alle 2000 Projekte erstellen, um nur die zu verwenden, die Sie benötigen.
  2. Die Go-Sprache wurde speziell entwickelt, um dieses Problem zu beheben, indem die Kompilierungszeiten sehr schnell sind. Dies war einer der Gründe, warum sie die Sprache erfanden.

Trotzdem wäre ich vorsichtig beim "Just-in-Time-Erstellen", es sei denn, der Code, der unternehmensweit bereitgestellt wird, wurde im Rahmen eines (mehr oder weniger) formalen Veröffentlichungszyklus überprüft und ist nicht zufällig nächtlich gebaut. H.

5000 Entwickler auf 2000 Projekte zugreifen zu lassen, die sich alle im ständigen Wandel befinden, klingt nach einem Rezept für eine Katastrophe, und Google stellt sehr kluge Leute ein. Ich bin mir also ziemlich sicher, dass dies nicht der Fall ist.

Robert Harvey
quelle
1. Natürlich, aber deshalb habe ich über den Fall berichtet, dass in einem Projekt eine Änderung vorgenommen wird, die viele andere Projekte betrifft. Das passiert nicht oft, aber es passiert. 2. In dem Video stellt Ashish Kumar fest, dass die Codebasis hauptsächlich in C und Java besteht. Go wurde nicht erwähnt.
Arseni Mourzenko
Dann ist die Schaffung von Go vielleicht eine Antwort auf die Schwierigkeiten, die sie haben.
Robert Harvey
Es stimmt, aber Google war immer noch in der Lage, es jahrelang zum Laufen zu bringen. Wie?
Arseni Mourzenko
Sehr vorsichtig? Denken Sie daran, sie waren früher nicht so groß wie heute. Hast du das Video gesehen , das Patrick verlinkt hat?
Robert Harvey
1
Ich interessiere mich nicht wirklich für die Epoche, in der die Google-Codebasis winzig war, noch für die Epoche, in der Google die gesamte Codebasis auf magische Weise nach Go migriert hat / migrieren wird. Ich spreche von 2010 (in dem Moment, in dem Ashish Kumar über die Codebasis spricht, denke ich, dass es 2010 ist). Im Jahr 2010 , nach dem Video von Ashish Kumar, (1) die Code - Basis ist riesig, (2) es enthält primäre C und Java, (3) alles aus den Quellen kompilieren, (4) Entwickler Google weiterhin öffnet Code in ihren IDE und Server können den Code weiterhin kompilieren. Hinweis: Nein, ich habe das von Patrick verlinkte Video noch nicht gesehen. Ich werde es morgen sehen.
Arseni Mourzenko