Το Facebook δημοσίευσε το σύστημα κατασκευής Buck2

Το Facebook παρουσίασε ένα νέο σύστημα κατασκευής, το Buck2, που επικεντρώνεται στην κατασκευή έργων από πολύ μεγάλα αποθετήρια που περιλαμβάνουν κώδικα σε διαφορετικές γλώσσες προγραμματισμού. Οι βασικές διαφορές μεταξύ της νέας υλοποίησης και του συστήματος Buck που χρησιμοποιούσε προηγουμένως το Facebook είναι η χρήση της γλώσσας Rust αντί της Java και μια σημαντική αύξηση στην αποτελεσματικότητα και απόδοση της διαδικασίας συναρμολόγησης (σε εσωτερικές δοκιμές στην ίδια υποδομή, το Buck2 εκτελεί συναρμολόγηση εργασίες δύο φορές πιο γρήγορα από τον Buck). Ο κώδικας διανέμεται με την άδεια Apache 2.0.

Το σύστημα δεν συνδέεται με κώδικα δόμησης σε συγκεκριμένες γλώσσες και υποστηρίζει έργα κατασκευής γραμμένα σε C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell και OCaml που χρησιμοποιούνται από το Facebook. Η γλώσσα Starlark που βασίζεται στην Python (όπως στο Bazel) χρησιμοποιείται για το σχεδιασμό πρόσθετων, τη δημιουργία σεναρίων και κανόνων. Το Starlark σάς επιτρέπει να επεκτείνετε τις δυνατότητες του συστήματος κατασκευής και να αφαιρέσετε από τις συγκεκριμένες γλώσσες που χρησιμοποιούνται στα έργα που κατασκευάζονται.

Η υψηλή απόδοση επιτυγχάνεται μέσω της προσωρινής αποθήκευσης των αποτελεσμάτων, της παραλληλοποίησης της εργασίας και της υποστήριξης για την απομακρυσμένη εκτέλεση εργασιών (Remote Build Execution). Στο περιβάλλον κατασκευής, χρησιμοποιείται η έννοια της "στεγανότητας" - ο μεταγλωττισμένος κώδικας αποκόπτεται από τον έξω κόσμο, τίποτα δεν φορτώνεται από το εξωτερικό κατά τη διαδικασία κατασκευής και η επαναλαμβανόμενη εκτέλεση εργασιών σε διαφορετικά συστήματα οδηγεί στο ίδιο αποτέλεσμα ( επαναλαμβανόμενες εκδόσεις, για παράδειγμα, το αποτέλεσμα της δημιουργίας ενός έργου στον υπολογιστή του προγραμματιστή θα είναι ακριβώς το ίδιο με το build στον διακομιστή συνεχούς ενοποίησης). Η κατάσταση της έλλειψης εξάρτησης εκλαμβάνεται στο Buck2 ως λάθος.

Βασικά χαρακτηριστικά Buck2:

  • Οι κανόνες για την υποστήριξη γλωσσών προγραμματισμού και ο πυρήνας του συστήματος κατασκευής είναι εντελώς διαχωρισμένοι. Οι κανόνες είναι γραμμένοι στη γλώσσα Starlark και το κιτ εργαλείων Starlark και η εφαρμογή είναι γραμμένα σε Rust.
  • Το σύστημα κατασκευής χρησιμοποιεί ένα ενιαίο γράφημα στοιχειώδους εξάρτησης (χωρίς διαίρεση σε στάδια), το οποίο σας επιτρέπει να αυξήσετε το βάθος της παραλληλοποίησης της εργασίας σε σύγκριση με τον Buck και τον Bazel και να αποφύγετε πολλούς τύπους σφαλμάτων.
  • Ο κώδικας Buck2 που δημοσιεύεται στο GitHub και οι κανόνες υποστήριξης της γλώσσας προγραμματισμού είναι σχεδόν πανομοιότυποι με την εσωτερική έκδοση που χρησιμοποιείται στην υποδομή του Facebook (οι μόνες διαφορές είναι στη σύνδεση με τις εκδόσεις μεταγλωττιστή και τους διακομιστές κατασκευής που χρησιμοποιούνται από το Facebook).
  • Το σύστημα κατασκευής έχει σχεδιαστεί με γνώμονα την ενσωμάτωση με απομακρυσμένα συστήματα εκτέλεσης εργασιών που σας επιτρέπουν να εκτελείτε εργασίες σε απομακρυσμένους διακομιστές. Το API απομακρυσμένης εκτέλεσης είναι συμβατό με το Bazel και έχει δοκιμαστεί για συμβατότητα με το Buildbarn και το EngFlow.
  • Παρέχεται ενοποίηση με εικονικά συστήματα αρχείων, στα οποία παρουσιάζονται τα περιεχόμενα ολόκληρου του αποθετηρίου, αλλά στην πραγματικότητα, η εργασία πραγματοποιείται με το πραγματικό τοπικό τμήμα ενός μέρους του αποθετηρίου (ο προγραμματιστής βλέπει ολόκληρο το αποθετήριο, αλλά μόνο το απαιτούμενο τα αρχεία στα οποία έχετε πρόσβαση ανακτώνται από το αποθετήριο). Υποστηρίζονται VFS που βασίζονται στο EdenFS και στο Git LFS, τα οποία χρησιμοποιούνται από τη Sapling.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο