CocoaPods: iOS-Paketverwaltung bringt GitHub an Kapazitätsgrenzen
Die freie Paketverwaltung CocoaPods bietet Entwicklern von iOS und OS X-Applikationen eine einfache Möglichkeit zur Verwaltung von Code-Abhängigkeiten an. Mit Hilfe des Kommandozeilen-Werkzeuges können Entwickler ihre Projekte um häufig benötigte Programm-Bibliotheken ergänzen, diese auf dem aktuellen Stand halten und sicherstellen, dass alle Abhängigkeiten in aktiven Projekten bedient werden.
Ein ganz einfaches Beispiel: Entwickler Bob hat eine App für seinen Sportverein erstellt, in der auch ein einfacher Browser-Zugriff angeboten werden soll. Anstatt die Browser-Komponente komplett selbst zu programmieren, nutzt Bob das Open-Source-Projekt „KINWebBrowser„. Um dieses nicht händisch aus dem Netz zu laden, sondern automatisiert in das eigene Projekt einzufügen, kann Bob eine Info-Datei anlegen und auf die CocoaPods-Infrastruktur zugreifen um den „KINWebBrowser“ zu laden, zu aktualisieren und in seinen Xcode-Dateien zu sichern.
Kurzum: CocoaPods vereinfacht den Entwickler-Alltag.
In den vergangenen Wochen hatte die Paket-Verwaltung jedoch mit massiven Performance-Problemen zu kämpfen. Die Abfrage der Datenbank dauerte unglaublich lange, stellenweise liefen die Synchronisationen sogar ins Leere.
Auf dem Code-Portal GitHub, das die CocoaPods-Entwickler als Backend für ihren Dienst einsetzen, erklären zwei Ingenieure jetzt die Ursachen der schlechten Erreichbarkeit.
Das CocoaPods-Projekt kratzt an den Kapazitätsgrenzen des GitHub-Portals. So befindet sich die CocoaPods-Datenbank in den Top-5 der zugriffsstärksten GitHub-Projekte und beschäftigt fünf Server-CPUs, die kontinuierlich unter Dauerlast fahren. Allein der in der letzten Woche zählte GitHub 1,1 Millionen CocoaPods-Zugriffe.
In ihrem spannenden Foren-Beitrag besprechen die GitHub-Mitarbeiter nun die Hintergründe, informieren warum man sich dazu entschieden habe, die zur Verfügung stehenden Kapazitäten zu begrenzen und geben den Verantwortlichen CocoaPods-Machern Tipps für eine zukünftige Verbesserung ihres Angebotes:
All of these factors combine to make CocoaPods/Specs one of the top five most resource-costly repositories that we host on all of GitHub.com. And that is why it is rate-limited; otherwise it would consume even more resources and cause service interruptions for other GitHub users. The symptoms of the rate limiting for you and your users are that your repository accesses (clones, fetches, pushes) have to wait in a queue on our end, sometimes for a long time, before being processed. This causes fetches/clones to take much longer than they would otherwise, and might cause timeouts at your end.
Sehr nerdig, aber auch sehr lesenswert.
Ich hab GitHub noch nicht wirklich verstanden …
Ist das wie Dropbox mit einem öffentlichen Ordner pro Projekt (weil OpenSource) bei dem der Inhalt Codes, Programme oder sonstiges drin ist, die vom Entwickler immer aktualisiert und ergänzt werden?
So ähnlich. Da lädt man seinen Quellcode runter, aber jeder kann ihn einsehen, sich „forken“ (eine eigene Kopie anlegen und weiterverarbeiten) und an Projekten teilnehmen und PullRequests stellen (:= jemand macht eine Änderung und bittet um Einbindung beim Entwickler und der guckt sich das an und sagt ja/nein).
Als Programmierer eine tolle Sache!
Um noch die Infos von ElPresidente ein wenig zu ergänzen: GitHub ist nicht nur ein Speicher, um SourceCode hoch zu laden und zu teilen, sondern GitHub bietet auch viele Funktionen von git (daher der Name) im Browser an. So hat man eine Versionskontrolle und kann jederzeit zugälteren Versionen des SourceCodes zurückspringen. Entwickler können sich eigene Kopien von Projekten anlegen, selbst daran arbeiten und dann später mit einem (wie von ElPresidente genannt) PullRequest das Original Projekt bitten die eigenen Änderungen auch in ihr Projekt zu übernehmen.
Ich kann mich da nur anschließen: GitHub ist Klasse.
Um jetzt aber nicht so einseitig Werbung zu machen: BitBucket ist ähnlich wie GitHub, ist aber mehr auf private Projekte ausgelegt. Mit GitLab kann man sich auch eine Art self hosted GitHub machen.
Ich persönlich mag aber gerade das stark vernetzte und öffentliche an GitHub :)