Jump to content

Aplicatii Discord: Go si limbajele de programare mainstream


Recommended Posts

Posted

go-lang-python-javascript-c-cpp.png

 

Scrierea unei aplicatii de discord

Scrierea unei aplicatii de discord e destul de usoara pentru majoritatea programatorilor, intrucat exista framework-uri in limbajele de programare mainstream. Chiar daca aveti experienta redusa in ceea ce priveste lucrul cu Discord API, lucrurile incep sa prinda contur atunci cand aruncati o privire peste codul acestor framework-uri si peste API-ul Discord, Inc.. Am incercat multe limbaje (si framework-uri populare), incluzand C++, JavaScript si Python. Totusi, de ce am decis sa ramanem cu Go pe comunitatea fairside? Simplu. Tratam limbajul de programare ca o unealta. Nimic mai mult. Aici Go straluceste fata de alternativele mainstream. Cititi intreaga postare pentru a intelege alegerea noastra reflectata intr-o multitudine de alte solutii din backend - nu doar in cazul aplicatiilor de discord.

 

Cum a inceput totul?

Totul a inceput cu o serie de aplicatii de discord, aplicatii imbunatatite saptamanal/lunar. Unde a condus aceasta calatorie? La peste 30 de aplicatii gazduite pentru intreaga comunitate si alte cateva aplicatii pentru alte comunitati, asta doar in primele 3 luni. Toate au fost scrise in Python si JavaScript, numarand un total de peste 100k linii de cod. Lucrurile au inceput sa se miste incet dupa ce am ajuns la un punct in care partea de development a fost sabotata, in timp ce consumul CPU crestea in momente importante, iar consumul RAM atingea cerul. Schimbarile si bug fix-urile erau intarziate, caracteristicile noi erau de asemenea reprogramate si asa mai departe. Aplicatiile de discord, desi tratate initial ca microservicii, au devenit solutii software complete, toate indispensabile comunitatii. Existau deja mii sau zeci de mii de linii de cod per aplicatie, toate fiind necesare scopului pentru care au fost create. Aici am spus STOP! A fost necesar sa schimbam limbajul. Limbajele de programare dynamically-typed nu sunt potrivite pentru solutii software solide, ci pentru scripting sau cu totul alte intrebuintari (Web, AI, DS, ML etc.).

 

Teste fairside: startup Δt, RAM si CPU

Hai sa vorbim despre Δt pentru app startup, RAM si CPU - conform testelor fairside.

Revenind la postarea aplicatiei de discord open-source scrisa in Python: lucrurile nu stau deloc bine cand masori performanta si consumul prin teste.

  • Python: 40.00 MBΔt>= 5000 ms (rezultate extrem de slabe overall)
  • Go: 7.00 MB, Δt >= 3 ms (rezultate exceptionale cu tot cu garbage collector)
  • C++: 4.50 MB, Δt >= 1 ms (rezultate mai bune fata de mentiunile din documentatia framework-ului)

 

Calcul consum RAM

Valorile de consum RAM per limbaj reprezinta puncte de referinta.

Consumul real din productie la uptime extins poate varia.

  • Python: 40MB * 30 de aplicatii = 1.2GB consum RAM
  • Go: 7MB * 30 de aplicatii = 210MB consum RAM
  • C++: 5MB * 30 de aplicatii = 150MB consum RAM

 

Migrare pe alte limbaje

Am reusit sa migram toate aplicatiile in C++ si Go si, desi am luat in considerare Rust, as spune ca beneficiile nu aduc cu sine avantaje semnificative pentru backend-ul nostru in acest moment. In plus, Rust este un limbaj mult mai greu de mentinut pe termen lung (din cauza luptelor cu borrow checker-ul si alte caracteristici relevante). Pe langa asta, Discord API are schimbari odata la cativa ani, intrerupand versiunile vechi si lansand alte versiuni noi. Puteti vedea asta singuri: https://docs.discord.com/developers/reference.

 

discord-api-versions.png

 

Versiuni Discord API

In acest moment sunt peste 10 versiuni de API, dintre care o parte sunt intrerupte si altele mentin titlul "deprecated", in timp ce doar ultimele 2 versiuni de API (v9 si v10) sunt recomandate. Asta pentru moment. Ce ar insemna schimbari ulterioare din partea Discord, Inc. pe termen lung? Ei bine, in cazul in care maintainer-ul framework-ului renunta, am avea momente dificile la preluarea intregului codebase. Ar trebui sa rescriem intregi sectiuni de cod de la 0 si ar trebui sa ajustam parti semnificative in rationamentul solutiei alese. Aici conteaza limbajul de programare ales, intrucat timpul alocat dezvoltarii conteaza enorm.

 

Alegerea finala: Go

Pe comunitatea FAIRSIDE ROMANIA pastram Go pentru tot ce inseamna lucrul cu Discord API.

Mai specific: am mutat in Go pana si aplicatiile scrise in limbajul C++.

 

Cu Go e mai usor si mai productiv ca niciodata, in general depasind alte limbaje de programare mainstream in multe zone (nu doar partea de readability, maintainability si performanta) - cel putin pentru cazul nostru. Setup-ul curent este cumva usor de mentinut chiar daca contribuitorii primari renunta si Discord, Inc. realizeaza schimbari la versiunile de API. Asta ne ofera pacea si linistea necesara sa rulam solutiile noastre software fara sa fim dependenti de framework, alegand in schimb sa imbratisam limbajul de programare, sa invatam sa lucram cu el si sa fim capabili sa ne scriem propriile abstractizari daca e nevoie. Daca nu mai exista contribuitori la framework-ul pe care il utilizam => NO PROBLEM. Preluam intregul codebase si facem mentenanta singuri, in ideea in care putem continua munca celorlalti maintaineri. Scopul e sa ramanem pe Go pentru a servi nevoilor din backend-ul comunitatii.

  • Love 1

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...