De la externalizare la dezvoltare (Partea 2)

В anterioară articol, am vorbit despre fundalul creării Veliam și despre decizia de a-l distribui prin sistemul SaaS. În acest articol, voi vorbi despre ce a trebuit să fac pentru ca produsul să nu fie local, ci public. Despre cum a început distribuția și ce probleme au întâmpinat.

planificare

Backend-ul actual pentru utilizatori era pe Linux. Aproape fiecare organizație are servere Windows, ceea ce nu se poate spune despre Linux. Principalul punct forte al Veliam este conexiunile de la distanță la servere și echipamente de rețea din spatele NAT. Dar această funcționalitate a fost foarte strâns legată de faptul că routerul trebuia să fie Mikrotik. Și acest lucru, evident, nu i-ar mulțumi pe mulți. Am început să mă gândesc să adaug suport pentru routere de la cei mai obișnuiți furnizori. Dar am înțeles că aceasta a fost o cursă fără sfârșit pentru a extinde lista companiilor susținute. Mai mult, cele care sunt deja acceptate pot avea un set diferit de comenzi pentru schimbarea regulilor NAT de la model la model. Singura cale de ieșire din situație părea să fie un VPN.

Din moment ce am decis să distribuim produsul, dar nu ca sursă deschisă, a devenit imposibil să includem diferite biblioteci cu licențe deschise, cum ar fi GPL. Acesta este, în general, un subiect separat; după ce am luat decizia de a vinde produsul, a trebuit să trec prin jumătate din biblioteci din cauza faptului că erau GPL. Când scriau pentru ei înșiși, era normal. Dar nu este potrivit pentru distribuție. Primul VPN care îmi vine în minte este OpenVPN. Dar este GPL. O altă opțiune a fost utilizarea VPN-ului SoftEther japoneză. Licența lui i-a permis să o includă în produsul său. După câteva zile de diverse teste despre cum să-l integreze în așa fel încât utilizatorul să nu aibă nevoie să configureze absolut nimic și să știe despre SoftEther VPN, a fost obținut un prototip. Totul a fost așa cum ar trebui să fie. Dar din anumite motive, această schemă încă ne-a derutat și în cele din urmă am abandonat-o. Dar, firește, au refuzat după ce au venit cu o altă variantă. În cele din urmă, totul a fost făcut pe conexiuni TCP obișnuite. Unele conexiuni funcționează printr-un coordonator, altele direct prin tehnologia Nat Hole Punching (NHP), care a fost implementată și în Free Pascal. Trebuie să spun că nu auzisem niciodată de NHP până acum. Și nu mi-a trecut prin cap că este posibil să conectez 2 dispozitive de rețea, ambele fiind direct în spatele NAT. Am studiat subiectul, am înțeles principiul de funcționare și m-am așezat să scriu. Planul este realizat, utilizatorul se conectează cu un singur clic la dispozitivul dorit din spatele NAT prin RDP, SSH sau Winbox fără a introduce parole sau a configura un VPN. Mai mult, majoritatea acestor conexiuni trec pe lângă coordonatorul nostru, ceea ce are un efect bun asupra ping-ului și a costului de deservire a acestor conexiuni.

Transferarea părții server de pe Linux la Windows

Au fost mai multe probleme la trecerea la Windows. Primul este că wmic-ul încorporat în Windows nu vă permite să faceți interogări WQL. Și în sistemul nostru totul era deja construit pe ele. Și mai era ceva, dar acum am uitat de ce au abandonat în cele din urmă utilizarea lui. Posibile diferențe între versiunile Windows. Și a doua problemă este multithreading-ul. Negăsind un utilitar terță parte bun sub o licență „acceptabilă” pentru noi, am lansat din nou IDE-ul Lazarus. Și am scris utilitatea necesară. Intrarea este lista necesară de obiecte și ce interogări specifice trebuie făcute, iar ca răspuns primesc date. Și toate acestea în modul multi-threaded. Grozav.

După ce am configurat pthreads pentru PHP Windows, m-am gândit că totul va începe imediat, dar nu a fost cazul. După ceva timp de depanare, mi-am dat seama că pthread-urile păreau să funcționeze, dar nu a funcționat pe sistemul nostru. A devenit clar că există o anumită particularitate în lucrul cu pthreads pe Windows. Și așa a fost. Am citit documentația, și acolo scria că pentru Windows numărul de fire este limitat și, din câte îmi amintesc, implicit. Aceasta a devenit o problemă. Pentru că atunci când am început să reduc numărul de fire de execuție pe care rulează aplicația, a făcut treaba foarte încet. Am deschis din nou IDE-ul și la același utilitar a fost adăugată funcționalitatea pentru ping multi-threaded a obiectelor. Ei bine, există deja o mulțime de scanare de porturi și acolo. De fapt, după aceasta, nevoia de pthreads pentru PHP a dispărut și nu mai este folosit. Mai mult, mai multe funcționalități au fost adăugate acestui utilitar și încă funcționează până în prezent. După aceasta, a fost asamblat un program de instalare pentru Windows, care includea Apache, PHP, MariaDB, aplicația PHP în sine și un set de utilități pentru interacțiunea cu sistemul, scrise în Free Pascal. În ceea ce privește instalatorul, m-am gândit că voi rezolva rapid această problemă, pentru că... Acesta este un lucru foarte comun și necesar pentru aproape orice software. Ori m-am uitat în locul nepotrivit, ori altceva. Dar am întâlnit constant produse care fie nu erau suficient de flexibile, fie scumpe și, de asemenea, inflexibile. Și totuși, am găsit un program de instalare gratuit în care va fi posibil să se asigure orice dorință. Acesta este InnoSetup. Scriu despre asta aici pentru că a trebuit să o caut în caz că economisesc cuiva timp.

Refuzul pluginului în favoarea clientului dvs

Am scris anterior că partea client era un browser cu un „plugin”. Așa că au fost momente când Chrome a fost actualizat și aspectul a fost puțin strâmb, apoi Windows a fost actualizat și schema uri personalizată a dispărut. Chiar nu am vrut să am astfel de surprize în versiunea publică a produsului. Mai mult, uri personalizat a început să dispară după fiecare actualizare Windows. Microsoft a șters pur și simplu toate ramurile care nu erau ale sale din secțiunea necesară. De asemenea, Google Chrome acum nu vă permite să vă amintiți alegerea de a deschide sau nu o aplicație din uri personalizat și vă pune această întrebare de fiecare dată când faceți clic pe un obiect de monitorizare. Ei bine, în general, a fost necesară interacțiunea normală cu sistemul local al utilizatorului, pe care browserul nu o oferă. Cea mai simplă opțiune din această schemă pare să fie pur și simplu să vă faceți propriul browser, așa cum mulți fac acum prin Electron. Dar multe lucruri fuseseră deja scrise în Free Pascal, inclusiv în partea de server, așa că am decis să facem clientul în aceeași limbă și să nu creăm o grădină zoologică. Așa a fost scris un client cu Chromium la bord. După aceea, a început să dobândească diverse chingi.

Eliberare

În cele din urmă am ales un nume pentru sistem. Am trecut constant prin diferite opțiuni în timp ce procesul de conversie de la versiunea locală la SaaS era în curs. Deoarece am planificat inițial să intrăm nu numai pe piața internă, principalul criteriu de selectare a unui nume a fost prezența unui domeniu neocupat sau nu foarte scump în zona „.com”. Unele funcții/module nu au fost încă portate din versiunea locală la Veliam, dar am decis să le lansăm cu funcționalitatea actuală și să le completăm pe restul ca actualizări. În prima versiune nu exista HelpDesk, Veliam Connector, era imposibil să se schimbe pragurile pentru declanșatoarele de notificare și multe altele. Am cumpărat un certificat de semnare de cod și am semnat părțile client și server. Am scris un site web pentru produs, am început procedurile de înregistrare a software-ului, a unei mărci înregistrate etc. În general, suntem pregătiți să începem. O ușoară euforie de la munca depusă și de la faptul că poate cineva va folosi produsul tău, deși nu aveam nicio îndoială în acest sens. Și apoi oprește-te. Partenerul a spus că este imposibil să intri pe piață fără notificări prin mesagerie. Este posibil fără multe alte lucruri, dar nu fără asta. După câteva dezbateri, s-a adăugat integrarea cu Telegram, ceea ce ni s-a potrivit. Dintre toți mesagerii instantanei actuali, acesta este singurul care oferă acces gratuit la API-urile sale, fără proceduri complexe de aprobare. Același WhatsApp sugerează să contactați furnizorii care percep bani buni pentru utilizarea serviciilor lor; toate scrisorile prin care se solicită acces fără garnituri au fost ignorate. Ei bine, Viber... Nu știu cine îl folosește acum, pentru că... spam-ul și reclamele de acolo sunt în afara topurilor. La sfârșitul lunii decembrie, după o serie de teste interne și teste între prieteni, s-a deschis înregistrarea pentru toată lumea și software-ul a fost pus la dispoziție pentru descărcare.

Începutul distribuției

Încă de la început, am înțeles că avem nevoie de un mic flux de utilizatori de sistem, astfel încât să poată testa produsul în modul luptă și să ofere un prim feedback. Mai multe postări achiziționate de pe VK au dat roade. Au sosit primele înscrieri.

Aici trebuie spus că intrarea pe piață atunci când compania ta nu are un nume celebru și, în același timp, oferirea de funcționalități de monitorizare fără agent în care trebuie să introduci conturi de pe serverele și stațiile tale de lucru, este foarte dificilă. Acest lucru îi sperie pe mulți. Am înțeles de la bun început că vor fi probleme cu asta și am fost pregătiți pentru asta atât din punct de vedere tehnic, cât și moral. Toate conexiunile la distanță, în ciuda faptului că RDP și SSH sunt deja criptate implicit, sunt criptate suplimentar de software-ul nostru folosind standardul AES. Toate datele de pe serverele locale sunt transferate în cloud prin HTTPS. Conturile sunt stocate în formă criptată. Cheile de criptare pentru toate subsistemele sunt individuale pentru toți clienții. Pentru conexiunile la distanță, se folosesc în general cheile de criptare a sesiunii.

Tot ceea ce putem face în această situație pentru a-i face pe oameni să se simtă mai calmi este să fim cât mai deschiși posibil, să lucrăm la siguranță și să nu ne obosim să răspundem la întrebările oamenilor.

Pentru mulți, confortul și funcționalitatea software-ului depășesc teama și se înregistrează. Unii indivizi au scris în postări publicate pe VK că acest software nu poate fi folosit deoarece Aceasta este o colecție a parolelor lor și, în general, o companie fără nume. Trebuie spus că mai mult de o persoană a avut această părere. Mulți oameni pur și simplu nu înțeleg că atunci când instalează alt software proprietar pe un server care rulează ca un serviciu, acesta are și drepturi depline în sistem și nu au nevoie de conturi pentru a face ceva ilegal (este clar că poți schimba utilizator de la care este lansat serviciul, dar și aici puteți introduce orice cont). De fapt, temerile oamenilor sunt de înțeles. Instalarea software-ului pe un server este un lucru obișnuit, dar introducerea unui cont este puțin înfricoșătoare și intima, deoarece jumătate dintre oameni au aceeași parolă pentru toate serviciile, iar crearea unui cont separat chiar și pentru un test este leneș. Dar în acest moment există un număr mare de servicii în care oamenii au încredere cu acreditările lor și nu numai. Și ne străduim să devenim unul dintre ei.

Au fost o mulțime de comentarii care spuneau că l-am furat undeva. Acest lucru ne-a surprins puțin. Ei bine, bine, părerea unei persoane, dar astfel de comentarii au fost găsite în diverse publicații de la diferite persoane. La început nu au știut cum să reacționeze la asta. Fie să fiu trist că unii oameni au părerea că în Rusia nimeni nu poate face nimic de unul singur, ci poate doar să fure, fie să fie fericiți că cred că asta poate fi doar furat.

Am finalizat acum procedura de obținere a unui Certificat de semnare a codului EV. Pentru a-l obține, trebuie să treci printr-o serie de verificări și să trimiți o grămadă de documente despre companie, dintre care unele trebuie să fie certificate de un avocat. Obținerea unui certificat EV Code Sign în timpul unei pandemii este un subiect separat pentru un articol. Procedura a durat o lună. Și nu a fost o lună de așteptare, ci de solicitări constante de documente suplimentare. Poate că pandemia nu a avut nimic de-a face cu asta și procedura a durat atât de mult pentru toată lumea? Acțiune.

Unii spun că nu îl vom folosi pentru că nu există certificat FSTEC. Trebuie să explicăm că nu îl putem obține și nu îl vom obține, deoarece pentru a obține acest certificat, criptarea trebuie să fie în conformitate cu GOST și intenționăm să distribuim software-ul nu numai în Rusia și să folosim AES.

Toate aceste comentarii pun la îndoială că este posibil să promovezi un produs care necesită să intri în conturi fără a fi cunoscut public. Chiar dacă știam că vor exista și cei care au o atitudine foarte negativă față de asta. După ce numărul de înscrieri a depășit o mie, am încetat să ne mai gândim la asta. Mai ales după ce, pe lângă negativitatea celor care nici măcar nu încercaseră produsul, au început să apară recenzii foarte plăcute. Trebuie spus că aceste recenzii pozitive sunt cel mai mare motiv pentru dezvoltarea produsului.

Adăugarea de funcționalități de acces la distanță pentru angajați

Una dintre sarcinile frecvente ale clienților este „a-i oferi lui Vanya acces la computerul său de acasă”. Am creat VPN pe Mikrotik și am creat conturi pentru utilizatori. Dar aceasta este o problemă reală. Utilizatorii nu pot urmări instrucțiunile și le pot urma pas cu pas pentru a se conecta prin VPN. Diferite versiuni de Windows. Într-un Windows totul se conectează bine, în altul este nevoie de un alt protocol. Și, în general, acest lucru a fost întotdeauna asociat cu reconfigurarea echipamentelor de rețea, care a acționat ca un server VPN și nu toți angajații au acces la el și acest lucru a fost incomod.

Dar avem deja conexiuni la distanță la servere și echipamente de rețea. De ce să nu folosiți un transport gata făcut și să faceți un mic utilitar separat pe care îl puteți oferi pur și simplu utilizatorului pentru a se conecta. Am vrut doar să mă asigur că utilizatorul nu a introdus nimic abstrus acolo. Un singur buton „conecta”. Dar cum va înțelege acest utilitar unde să se conecteze dacă are un singur buton? A existat o idee de a construi aplicația necesară online pe serverele noastre. Administratorul de sistem face clic pe butonul „descărcare comandă rapidă” și o comandă este trimisă în cloud pentru a construi un binar individual cu informații cablate pentru conectarea la serverul/calculatorul dorit prin RDP. În general, acest lucru se poate face. Dar acest lucru durează mult timp; administratorul ar trebui să aștepte mai întâi până când binarul este compilat și apoi descărcat. Desigur, ar fi posibil să adăugați pur și simplu un al doilea fișier cu configurația, dar acesta este deja 2 fișiere, iar pentru simplitate utilizatorul are nevoie de unul. Un fișier, un buton și niciun program de instalare. După ce am citit puțin pe Google, am ajuns la concluzia că dacă adăugați câteva informații la sfârșitul „.exe” compilat, atunci nu se deteriorează (bine, aproape). Puteți adăuga cel puțin război și pace acolo și va funcționa ca înainte. Ar fi un păcat să nu profităm de asta. Acum puteți pur și simplu să despachetați aplicația din mers, chiar în clientul însuși, așa cum se numește Veliam Connector, și pur și simplu adăugați informațiile necesare pentru conectarea la ea la sfârșit. Și aplicația în sine știe ce să facă cu ea. De ce am scris „bine aproape” între paranteze puțin mai sus? Pentru că trebuie să plătiți pentru această comoditate prin faptul că aplicația își pierde semnătura digitală. Dar în această etapă credem că acesta este un preț mic de plătit pentru o astfel de comoditate.

Licențe pentru module de la terți

Am scris deja mai sus că după ce s-a decis să facem produsul disponibil public, și nu doar pentru uzul nostru, a trebuit să muncim din greu și să căutăm înlocuitori pentru unele module care nu ne permiteau să fim incluse în produsul nostru. Dar după lansare, a fost descoperit accidental un lucru foarte neplăcut. Veliam Server, care era pe partea clientului, includea SGBD MariaDB. Și are licență GPL. Licența GPL implică faptul că software-ul trebuie să fie open source, iar dacă produsul nostru include MariaDB, care are această licență, atunci produsul nostru trebuie să fie sub această licență. Dar, din fericire, scopul acestei licențe este open source, nu pedepsirea celor care greșesc din greșeală în instanță. Dacă deținătorul dreptului de autor are o reclamație, el îl anunță în scris pe contravenient și acesta trebuie să elimine încălcarea în termen de 30 de zile. Ne-am descoperit singuri greșeala și nu am primit nicio scrisoare și am început imediat să luăm în considerare opțiuni cu privire la modul de rezolvare a problemei. Soluția s-a dovedit a fi evidentă - treceți la SQLite. Această bază de date nu are restricții de licențiere. Majoritatea browserelor moderne folosesc SQLite și o grămadă de alte programe. Am găsit informații pe internet că SQLite este considerat cel mai răspândit SGBD din lume, tocmai din cauza browserelor, dar nu am căutat dovezi, deci sunt informații inexacte. Am început să studiez pericolele trecerii la SQLite.

Aceasta devine o sarcină non-trivială atunci când clienții au câteva sute de servere instalate cu MariaDB și date în el. Unele caracteristici MariaDB nu sunt disponibile în SQLite. Ei bine, de exemplu, în cod am folosit interogări precum

Select * FROM `table` WHERE `id`>1000 FOR UPDATE

Această construcție nu numai că face o selecție din tabel, dar blochează și datele rândului. Și mai multe modele au trebuit să fie rescrise. Dar, pe lângă faptul că a trebuit să rescriem o mulțime de interogări, a trebuit să venim și cu un mecanism care, la actualizarea serverului Veliam al clientului, să porta toate datele în noul SGBD și să îl ștergă pe cel vechi. De asemenea, tranzacțiile în SQLite nu au funcționat și aceasta a fost o problemă reală. Dar după ce am citit vastitatea World Wide Web, am descoperit fără probleme că tranzacțiile în SQLite pot fi activate prin transmiterea unei comenzi simple la conectare.

PRAGMA journal_mode=WAL;

Ca rezultat, sarcina a fost finalizată și acum partea de server a clientului rulează pe SQLite. Nu am observat nicio modificare în funcționarea sistemului.

Nou HelpDesk

A fost necesară portarea sistemului HelpDesk din versiunea internă în versiunea SaaS, dar cu unele modificări. Primul lucru pe care am vrut să-l fac a fost integrarea cu domeniul clientului în ceea ce privește autorizarea transparentă a utilizatorului în sistem. Acum, pentru a se conecta la HelpDesk și a lăsa o solicitare în sistem, utilizatorul pur și simplu face clic pe comanda rapidă de pe desktop și se deschide browserul. Utilizatorul nu introduce nicio autentificare. Modulul pentru Apache SSPI, care face parte din Veliam Server, autorizează automat utilizatorul cu un cont de domeniu. Pentru a lăsa o solicitare în sistem atunci când utilizatorul se află în afara rețelei corporative, dă clic pe un buton și primește un link în e-mail prin care se conectează în sistemul HelpDesk fără parole. Dacă un utilizator este dezactivat sau șters într-un domeniu, atunci și contul HelpDesk nu va mai funcționa. Astfel, administratorul de sistem nu trebuie să monitorizeze conturile atât în ​​domeniu, cât și în HelpDesk însuși. Un angajat renunță - își deconectează contul din domeniu și gata, nu se va autentifica în sistem nu din rețeaua corporativă, nu printr-un link. Pentru ca această integrare să funcționeze, administratorul de sistem trebuie să creeze un singur GPO, care adaugă un site intern în zona intranet и distribuie o comandă rapidă tuturor utilizatorilor de pe desktop.

Al doilea lucru pe care îl considerăm extrem de necesar pentru sistemele HelpDesk, cel puțin pentru noi, este conectarea la solicitant direct din aplicație cu un singur clic. Mai mult, conexiunile trebuie să treacă dacă administratorul de sistem se află într-o altă rețea. Pentru externalizare acest lucru este obligatoriu, pentru administratorii de sistem cu normă întreagă este, de asemenea, foarte necesar. Există deja mai multe produse care fac o treabă excelentă în ceea ce privește conexiunile la distanță. Și am decis să facem integrări pentru ei. Acum ne-am integrat pentru VNC, iar în viitor intenționăm să adăugăm Radmin și TeamViewer. Folosind transportul nostru de rețea pentru conexiuni de infrastructură la distanță, am făcut VNC să se conecteze la stațiile de lucru la distanță din spatele NAT. La fel se va întâmpla și cu Radmin. Acum, pentru a vă conecta la un utilizator, trebuie doar să faceți clic pe butonul „Conectați-vă la solicitant” din aplicația în sine. Clientul VNC se deschide și se conectează la solicitant, indiferent dacă ești în aceeași rețea sau stai acasă în papuci. În primul rând, administratorul de sistem, folosind GPO, trebuie să instaleze VNC Server pe stațiile de lucru ale tuturor.

Acum, noi înșine trecem la noul HelpDesk și utilizăm integrarea cu domeniul și VNC. Acest lucru este foarte convenabil pentru noi. Acum putem evita să plătim pentru TeamViewer, pe care îl folosim de mai bine de trei ani pentru a rula serviciul nostru de asistență.

Ce intenționăm să facem în continuare?

Când am lansat produsul, nu am făcut niciun tarif plătit, ci pur și simplu am limitat tariful gratuit la 50 de obiecte de monitorizare. Cinci duzini de dispozitive de rețea și servere ar trebui să fie suficiente pentru toată lumea, ne-am gândit. Și apoi au început să vină cereri de creștere a limitei. A spune că am fost puțin șocați înseamnă a nu spune nimic. Sunt companiile care au atât de multe servere chiar interesate de software-ul nostru? Am extins limita gratuit pentru cei care au făcut astfel de solicitări. Ca răspuns la cererea lor, i-am întrebat pe unii de ce au nevoie atât de mult, dacă chiar au un număr atât de mare de servere și echipamente de rețea. Și s-a dovedit că administratorii de sistem au început să folosească sistemul în moduri pe care nu le-am planificat deloc. Totul s-a dovedit a fi simplu - software-ul nostru a început să monitorizeze nu numai serverele, ci și stațiile de lucru. Prin urmare, există multe solicitări de extindere a limitelor. Acum am introdus deja tarife plătite și limitele pot fi extinse independent.

Serverele funcționează aproape întotdeauna cu sisteme de stocare sau discuri locale într-o matrice RAID. Și inițial am făcut produsul pentru ei. Și monitorizarea SMART nu a fost interesantă pentru această sarcină. Dar ținând cont de faptul că oamenii au adaptat software pentru monitorizarea stațiilor de lucru, au apărut solicitări pentru implementarea monitorizării SMART. Îl vom implementa în curând.

Odată cu apariția Veliam Connector, a devenit inutil să instalați un server VPN în rețeaua corporativă sau să faceți RDGW sau pur și simplu să redirecționați porturile către mașinile necesare pentru conectarea prin RDP. Mulți oameni folosesc sistemul nostru doar pentru aceste conexiuni la distanță. Veliam Connector este disponibil numai pentru Windows, iar unii utilizatori de companie se conectează de pe laptopuri de acasă care rulează MacOS la stațiile de lucru sau terminalele din rețeaua corporativă. Și se dovedește că administratorul de sistem este nevoit, din cauza mai multor utilizatori, să revină în continuare la problema redirecționării sau VPN-ului. Prin urmare, acum terminăm de a crea o versiune de Veliam Connector pentru MacOS. Utilizatorii tehnologiei Apple preferate vor avea, de asemenea, posibilitatea de a se conecta la infrastructura corporativă cu un singur clic.

Îmi place foarte mult faptul că, având un număr mare de utilizatori de sistem, nu trebuie să vă zgâriați mințile despre ceea ce au nevoie oamenii și ce va fi mai convenabil. Ei înșiși își scriu dorințele, așa că există o mulțime de planuri de dezvoltare pentru viitorul apropiat.

În paralel, acum plănuim să începem traducerea sistemului în engleză și distribuirea lui în străinătate. Încă nu știm cum vom distribui produsul în afara țării noastre, căutăm opțiuni. Poate că mai târziu va apărea un articol separat despre asta. Poate că cineva care a citit acest articol va putea sugera vectorul necesar, sau el însuși știe și știe cum să o facă și își va oferi serviciile. Am aprecia ajutorul dvs.

Sursa: www.habr.com

Adauga un comentariu