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

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

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

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.

Obraz

Ś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

Zobacz więcej
Źródło artykułu:www.dobreprogramy.pl
Oceń jakość naszego artykułuTwoja opinia pozwala nam tworzyć lepsze treści.
Wybrane dla Ciebie
Komentarze (47)