Go Gadget Go
#programowanie #golangPlayframework spowodował chyba nie mniejsze zamieszanie w świecie programistów web aplikacji Javy, niż samo pojawienie się rewolucyjnego frameworka dla Ruby’ego; Ruby On Rails. Nic dziwnego, skoro sam framework był wzorowany na RORsach. Pojawienie się Play’a dla Javay, spowodowała, że Java jest postrzegana jako idealne środowisko dla różnych startupów, gdzie czas wprowadzenia projektu na rynek jest kluczowy. Z Playframoworka (co prawda głównie w Scali) korzysta m.in. Linked In, czy Guardian.
Java jednak nie zawsze jest idealnym panaceum na wszystkie bolączki. W przypadku polskiego rynku gdzie Java postrzegana jest jako droga (programiści Javy, cenią się znacznie bardziej niżeli ich koledzy), w aplikacjach gdzie liczy się wykorzystana pamięć (tak, java jest świetna, jednak za wygodą i możliwości idą koszty; duże zapotrzebowanie na ram i cpu) – Java nie zawsze jest idealnym rozwiązaniem…
hostit.pl: Java, C, C++, Perl, PHP …Go
Hostit.pl to prawdziwa wieża babel, w ramach naszej infrastruktury informatycznej aplikacja stworzone na potrzebę hostit.pl, zostały napisane w wielu językach: Java, C, PHP, Perl, C++, ten ostatni co prawda jest wykorzystywany najrzadziej. Obecnie najczęściej wykorzystywanym jękiem jest C – ze względu na małe wykorzystanie pamięci RAM aplikacji w nich napisanych oraz PHP, w którym, powstały zręby całego rdzenia systemu w 2004 roku.
W 2012 roku rozpoczęliśmy implementację nowego serwera pocztowego w Javie, niestety wykorzystanie pamięci RAM całkowicie zdyskwalifikowało ten projekt w przypadku wykorzystania go na serwerach VPS, gdzie dostępna pamięć, nie rzadko nie przekracza 512 MB – a gdzie reszta, poza serwerem poczty? O ile system świetnie sprawdza się na systemach dedykowanych, to w przypadku małych serwerów VPS, gdzie każde „dziesiąt" MB jest na wagę złota – powoduje, że nadal musimy korzystać z Postfix'a i Courier’a w ich przypadku.
Serwer poczty IMAP/POP3/SMTP w Go – wykorzystanie 10 MB RAM
Od początku 2013 roku, całość została przepisana na Go. Różnice? Kolosalne; czas tworzenia aplikacji wydłużył się niemiłosiernie w stosunku do Javy: większość kodu należało napisać samodzielnie, ponieważ brak jest gotowych bibliotek w Go, a istniejących implementacji w C nie mogliśmy zastosować, ze względu na ograniczenia licencyjne autorów (lub ich wymagania finansowe). Wykorzystanie pamięci spadło kilkaset razy :). Wydajność implementowanego serwera pocztowego umożliwia dostarczenie ponad 400 wiadomości na sekundę do skrzynki użytkownika, łącznie z zastosowaniem filtra antyspamowego użytkownika i to wszystko na zwykłym laptopie wyposażonym w CPU i950 i dysk SSD.
Obsługa skrzynki pocztowej z liczbą 300 tys. wiadomości w skrzynce pocztowej, dla systemu nie jest większym problemem, a serwer IMAP/Webmail zwraca wyniki w ułamku sekundy. Niestety nie wszystko złoto co się świeci, spadek wykorzystania pamięci RAM i CPU, spowodowało znaczne zwiększenie zapotrzebowania na pojemność wykorzystywaną przez pojedynczą wiadomość email. Faktycznie wykorzystanie zasobów dyskowych jest 3 x większe niżeli faktyczna wiadomość emai. Mówiąc inaczej każdy 1 MB wiadomości, powoduje zajętość 3 MB na dysku. Oczywiście dla klienta będzie to bez znaczenia (rozliczenie następuje wg faktycznego rozmiaru wiadomości, nie zaś wykorzystania dysku). Z punktu widzenia hostit.pl, utrzymanie skrzynki wiadomości jest droższe pod względem wykorzystanych zasobów dyskowych, jednak ogólne możliwości usługi i szybkość jej działania z nawiązką zwraca faktyczne koszty przechowywania.
Hostit.pl stawia na Golang
Aktualnie wszystkie nowo wdrażane rozwiązania, tworzymy w Go, dzięki temu udaje się nam nadal utrzymywać cenę usług bez zmian i nie przerzucamy kosztów na klienta. Być może i dla Ciebie; Go – będzie idealnym wyjściem w obecnej sytuacji gospodarczej. W krótkiej perspektywie zwiększasz koszty wytworzenia oprogramowania, poprzez potrzebę zatrudnienia nowych pracowników lub przeszkolenia obecnego personelu, jednak w dłużej perspektywie zyskujesz wydajne oprogramowanie, które może być wykorzystywane przez klientów na słabszych jednostkach, zaś Twój produkt będzie dostępny dla szerszej grupy klientów.