Python napędzany Go – tak Google zwiększyło skalowalność YouTube

Strona głównaPython napędzany Go – tak Google zwiększyło skalowalność YouTube
05.01.2017 12:19
Python napędzany Go – tak Google zwiększyło skalowalność YouTube

Python jest ogromnie popularnym językiem programowania, wniektórych dziedzinach (np. bioinformatyce) jest dominującymjęzykiem programowania, w Pythonie jest np. m.in. serwis YouTube –a to wszystko mimo tego, że jeśli chodzi o wydajność, Python jestkiepski, niewiele oferuje w kwestii współbieżności i wsparcia dlanowoczesnych równoległych architektur. Żywotnie zainteresowanelepszą wydajnością YouTube’a Google znalazło bardzo ciekawerozwiązanie tej słabości. Zamiast ulepszać istniejąceimplementacje Pythona, stworzyło translatorGrumpy, który przekłada kod napisany w Pythonie na kod Go –google’owego języka, świetnie nadającego się do programowaniawspółbieżnego.

Grumpy to jednocześnie translator i środowisko uruchomieniowe.Kod źródłowy w Pythonie zostaje przekszałcony w kod źródłowy wGo, który zostaje skompilowany przez kompilator Go bezpośrednio dokodu maszynowego. Żadnych maszyn wirtualnych, żadnego kodubajtowego, jest po prostu szybko, znacznie szybciej, niż nawykorzystywanym w YouTube wcześniej CPythonie.

350193123701581761

Środowisko uruchomieniowe Grumpy’ego to biblioteka Go,działająca podobnie jak interfejs programowania Pythona dla C.Wszystko to działa tylko dla kodu w starym Pythonie 2.7 –najwyraźniej Google nie jest specjanie zainteresowane migracją naPythona 3, mimo że koniec cyklu życia linii 2.7 planowany jest na2020 rok. Firma z Mountain View postawiła tu na ogarnięcie swojejogromnej, rozwijanej od lat bazy kodu w Pythonie 2.7.

Autorzy tego projektu podkreślają, że Grumpy ma byćśrodowiskiem uruchomieniowym dla każdego projektu napisanego wczystym Pythonie. Nie ma tu wsparcia dla modułów rozszerzeń w C,ale dzięki temu uzyskano sporą elastyczność w projektowaniu API ireprezentacji obiektów, które doskonale się skalują dlarównoległych obciążeń roboczych.

Wydajność kodu uruchamianego na Grumpym i CPythonie w zależności od liczby rdzeni
Wydajność kodu uruchamianego na Grumpym i CPythonie w zależności od liczby rdzeni

Nie ma tutaj np. GIL-a czyli globalnej blokady interpretera(mutexa), który uniemożliwia współbieżne wykonywanie kodu.Wykorzystywane są efektywniejsze metody odśmiecania pamięci z Go,przede wszystkim jednak to nie jest interpreter – programyGrumpy’ego są kompilowane i linkowane jak każdy inny program wGo. Takie hybrydowe podejście pozwala z jednej strony wciąż więcpisać kod w Pythonie – wynik translacji nie jest zbyt czytelny dlaczłowieka. Jednak niektóre elementy, kluczowe dla wydajności,można od podstaw napisać w Go i wywołać z Pythona,

Rozwiązanie takie ma dla Google’a także efekt marketingowy: Gopowstało przecież w Mountain View, a jego wykorzystanie w takkluczowym przedsięwzięciu jak YouTube pozwoli przekonać takżeinne firmy, że jest to język programowania, na którym możnapolegać i który może rywalizować z projektami Oracle’a,Microsoftu czy Apple.

Grumpy jest oczywiście projektem opensource'owym, na licencji Apache 2.0, hostowanym na GitHubie.

Programy

Aktualizacje
Aktualizacje
Nowości
Oceń jakość naszego artykułuTwoja opinia pozwala nam tworzyć lepsze treści.
Udostępnij:
Wybrane dla Ciebie
Komentarze (47)