Ca si prostituata intelectuala, sau consultant in exprimare acceptata public, am tot felul de situatii printre care design, implementari sau depanari. Cu cateva exceptii, mai toate se invart in jurul a: trebuie sa facem un sistem sa mearga, sa fie rezilient si preferabil sa nu se strice asa des. Ca e vorba de o infrastructura, de o retea sau de ceva de securitate, mai mult sau mai putin toate se invart in jurul unor concepte de baza care trebuie aplicate intr-un anume fel sau anume ordine pentru a ajunge la rezultatul final.
Pe langa asta, am mai prins si chestii de programat pentru a realiza integrari intre sisteme. Da si acolo am un API intr-o parte si alta si trebuie sa fac API-urile astea sa se inteleaga intre ele.
Ca sa mi-o ard asa filozofic, daca ai o fundatie solida, poti sa construiesti oricat pe ea.
Ce vreau sa zic cu asta? Pai faptul ca toate lucrurile se bazeaza pe niste standarde si pe niste principii.
Standardele sunt facute pentru interoperabilitate. Cum e de exemplu pentru TCP, UDP, HTTP, DNS, SMTP, VLAN, 802.11a/b/n/ac/ax etc.
Si daca sunt privite un pic de la distanta, sunt ca niste caramizi de lego cu care poti construi ce ai nevoie. Important e sa stii ce face fiecare caramida si cum se poate combina cu alte caramizi. Chiar nu e nimic special sau magic in asta, trebuie doar sa cunosti foarte bine caramizile astea.
Pentru ca lucrurile pot functiona doar intr-un fel, indiferent de implementare. Si Chrome si Firefox si alte browsere tot GET o sa faca sa ceara o resursa de la un server web la intamplare din Internet. TCP numai SYN o sa trimita primul pachet cand initiaza o conexiune si o sa astepte un SYN/ACK. Si exemplele pot continua.
Si atunci, daca intelegi lucrurile astea super bine, poti face aproape orice, ca diferentele sunt doar de configurare sau de implementare. Si Apache si Nginx sunt servere web, fac aceleasi lucruri, doar ca se configureaza diferit si au o filosofie de implementare un pic diferita, dar pana la urma tot HTTP vorbesc. La fel si BIND si PowerDNS… vorbesc DNS, nimic altceva.
Pe langa partea de design/implementare mai ai si partea de depanare, care e foarte importanta. Pentru ca trebuie sa repari pisatul stricat cat mai repede si preferabil sa-l faci sa nu se mai strice la fel si a doua oara.
Cand ai un serviciu de DNS care nu merge, e simplu sa stii cum functioneaza protocolul si implementarea aleasa sa stii de unde s-o apuci.
Si uite asa te intorci la “the basics”: ce ar trebui sa se intample si ce se intampla de fapt. Si daca stii astea, atunci poti sa-ti faci un plan de cum sa rezolvi problema sau daca e complicat, sa stii in ce directii sa te indrepti ca sa nu pierzi exagerat de mult timp dand de cap unei probleme.
La fel si cu retelestica: pachetele alea merg doar intr-un anume fel, nu pot merge altfel. Si daca stii cum ar trebui sa mearga, poti s-o iei de la OSI Level 1 pana la OSI level 5-6-7 si sa vezi unde da cu virgula.
Sau la WiFi, daca intelegi care e treaba cu cate canale ai disponibile in 2.4Ghz si ce e aia co-channel interference si de ce SNR e mai important decat “signal strength” poti rezolva problema.
Chiar nu e mare filosofie daca stii lucrurile de baza. Si n-o zic condescendent.
Acu vreo zece ani imi pierdeam noptile debugand firewall-uri de GTP. Si dupa ce am invatat un pic cum functioneaza un GGSN, un SGSN si alte chestii pe langa, puteam sa ma prind unde se impotmolea treaba si ce trebuia sa fac sa mearga iar. Suna telefonul la 4 dimineata, stiam sa zic imediat lucruri.
Azi am bunghit ce ma-sa avea un HBase de nu mergea cum trebuie luand-o de la baza: cum functioneaza, ce e aia un Region Server, ce face un Data Node sau un Master Node si dupa aia citind ce mai zicea prin log-uri si cum se manifesta.
Ce vreau sa zic asa in multe cuvinte, e ca important e sa stii cum functioneaza un protocol si pe ce standarde se bazeaza.
Cel mai daunator pentru o persoana e sa invete cum functioneaza un produs care implementeaza un protocol si sa se rezume la ce stie produsul ala sa faca sau cum. Ca de la standardul protocolului pana la o implementare reusita e cale lunga si multi nervi. Si multe presupuneri gresite.
De nu stiu cate ori a trebuit sa explic la tot felul de gigei de la producatorii unui produs sau al altuia ca lucrurile nu functioneaza cum isi inchipuiau ei si ca lumea reala e un pic diferita de aia imaginara in care traiau ei.
E OK sa stii si cum functioneaza un produs anume prin prisma intelegerii cum un producator a implementat un standard sau altul si cum faci sa-l configurezi si sa-l depanezi, dar mai mult de atat, nu.