Från outsourcing till utveckling (del 2)

В tidigare artikel, jag pratade om bakgrunden till skapandet av Veliam och beslutet att distribuera det genom SaaS-systemet. I den här artikeln kommer jag att prata om vad jag var tvungen att göra för att göra produkten inte lokal, utan offentlig. Om hur distributionen började och vilka problem de stötte på.

planering

Den nuvarande backend för användare var på Linux. Nästan varje organisation har Windows-servrar, vilket inte kan sägas om Linux. Veliams främsta styrka är fjärranslutningar till servrar och nätverksutrustning bakom NAT. Men denna funktionalitet var väldigt hårt knuten till det faktum att routern måste vara Mikrotik. Och detta skulle uppenbarligen inte tillfredsställa många. Jag började först fundera på att lägga till stöd för routrar från de vanligaste leverantörerna. Men jag förstod att det här var ett oändligt lopp för att utöka listan över företag som stöds. Dessutom kan de som redan stöds ha en annan uppsättning kommandon för att ändra NAT-regler från modell till modell. Den enda vägen ut ur situationen verkade vara en VPN.

Eftersom vi bestämde oss för att distribuera produkten, men inte som öppen källkod, blev det omöjligt att ta med olika bibliotek med öppna licenser som GPL. Detta är i allmänhet ett separat ämne; efter att ha fattat beslutet att sälja produkten var jag tvungen att gå igenom hälften av biblioteken på grund av att de var GPL. När de skrev för sig själva var det normalt. Men inte lämplig för distribution. Det första VPN som kommer att tänka på är OpenVPN. Men det är GPL. Ett annat alternativ var att använda den japanska SoftEther VPN. Hans licens tillät honom att inkludera det i sin produkt. Efter ett par dagar av olika tester om hur man integrerar det på ett sådant sätt att användaren inte behöver konfigurera något alls och känna till SoftEther VPN, erhölls en prototyp. Allt var som det skulle. Men av någon anledning förvirrade det här upplägget oss fortfarande och vi övergav det till slut. Men naturligtvis vägrade de efter att de kommit på ett annat alternativ. I slutändan gjordes allt på vanliga TCP-anslutningar. Vissa anslutningar fungerar genom en koordinator, några direkt genom Nat Hole Punching (NHP)-tekniken, som också implementerades i Free Pascal. Jag måste säga att jag aldrig ens hade hört talas om NHP förut. Och det föll mig aldrig in att det var möjligt att ansluta 2 nätverksenheter, som båda ligger direkt bakom NAT. Jag studerade ämnet, förstod funktionsprincipen och satte mig ner för att skriva. Planen realiseras, användaren ansluter med ett klick till önskad enhet bakom NAT via RDP, SSH eller Winbox utan att ange lösenord eller sätta upp en VPN. Dessutom går de flesta av dessa anslutningar förbi vår koordinator, vilket har en bra effekt på ping och kostnaden för att serva dessa anslutningar.

Överföra serversidan från Linux till Windows

Det uppstod flera problem när man bytte till Windows. Den första är att den inbyggda wmicen i Windows inte tillåter dig att göra WQL-frågor. Och i vårt system var allt redan byggt på dem. Och det var något annat, men nu har jag glömt varför de slutligen övergav användningen. Möjligen skillnader mellan Windows-versioner. Och det andra problemet är multithreading. Eftersom jag inte hittade ett bra tredjepartsverktyg under en "acceptabel" licens för oss, lanserade jag Lazarus IDE igen. Och jag skrev det nödvändiga verktyget. Ingången är den nödvändiga listan över objekt och vilka specifika frågor som behöver göras, och som svar får jag data. Och allt detta i flertrådsläge. Bra.

Efter att jag satt upp pthreads för PHP Windows trodde jag att allt skulle starta direkt, men så var det inte. Efter en tid av felsökning insåg jag att pthreads verkade fungera, men det fungerade inte på vårt system. Det blev tydligt att det finns en viss egenhet i att arbeta med pthreads på Windows. Och så var det. Jag läste dokumentationen och det skrevs där att antalet trådar för Windows är begränsat och, så vitt jag minns, implicit. Detta blev ett problem. För när jag började minska antalet trådar som applikationen körde på gjorde den jobbet väldigt långsamt. Jag öppnade IDE igen och funktionalitet för flertrådad ping av objekt lades till i samma verktyg. Tja, det finns redan mycket portskanning där också. Efter detta försvann faktiskt behovet av pthreads för PHP, och det används inte längre. Ytterligare flera funktioner lades till i detta verktyg och det fungerar fortfarande än i dag. Efter detta sammanställdes ett installationsprogram för Windows, som inkluderade Apache, PHP, MariaDB, själva PHP-applikationen och en uppsättning verktyg för att interagera med systemet, skrivna i Free Pascal. När det gäller installationsprogrammet trodde jag att jag snabbt skulle lösa det här problemet, eftersom... Detta är en mycket vanlig sak och nödvändig för nästan alla program. Antingen letade jag på fel ställe, eller något annat. Men jag stötte hela tiden på produkter som antingen inte var tillräckligt flexibla, eller dyra och dessutom oflexibla. Och ändå hittade jag ett gratis installationsprogram där det kommer att vara möjligt att tillgodose alla önskemål. Det här är InnoSetup. Jag skriver om det här för att jag var tvungen att slå upp det ifall jag skulle spara tid för någon.

Avslag på plugin till förmån för din klient

Jag skrev tidigare att klientdelen var en webbläsare med ett "plugin". Så det fanns tillfällen då Chrome uppdaterades och layouten var lite sned, sedan uppdaterades Windows och det anpassade uri-schemat försvann. Jag ville verkligen inte ha den här typen av överraskningar i den offentliga versionen av produkten. Dessutom började den anpassade uri försvinna efter varje Windows-uppdatering. Microsoft tog helt enkelt bort alla grenar som inte tillhörde det i det obligatoriska avsnittet. Dessutom tillåter Google Chrome dig nu inte att komma ihåg valet att öppna eller inte ett program från den anpassade uri, och ställer denna fråga varje gång du klickar på ett övervakningsobjekt. Tja, i allmänhet var normal interaktion med användarens lokala system nödvändig, vilket webbläsaren inte tillhandahåller. Det enklaste alternativet i detta schema verkar vara att helt enkelt skapa din egen webbläsare, som många nu gör genom Electron. Men många saker hade redan skrivits i Free Pascal, inklusive i serverdelen, så vi bestämde oss för att göra klienten på samma språk och inte skapa en djurpark. Så här skrevs en klient med Chromium ombord. Efter det började den skaffa olika band.

Släpp

Slutligen valde vi ett namn för systemet. Vi gick hela tiden igenom olika alternativ medan processen med att konvertera från den lokala versionen till SaaS pågick. Eftersom vi från början planerade att inte bara gå in på den inhemska marknaden, var huvudkriteriet för att välja ett namn närvaron av en ledig eller inte särskilt dyr domän i ".com"-zonen. Vissa funktioner/moduler har ännu inte porterats från den lokala versionen till Veliam, men vi beslutade att vi skulle släppa dem med nuvarande funktionalitet och komplettera resten som uppdateringar. I den allra första versionen fanns ingen HelpDesk, Veliam Connector, det var omöjligt att ändra tröskelvärdena för aviseringsutlösare och mycket mer. Vi köpte ett Code Sign Certificate och signerade klient- och serverdelarna. Vi skrev en webbplats för produkten, påbörjade procedurer för att registrera programvara, ett varumärke osv. I allmänhet är vi redo att börja. En lätt eufori från det utförda arbetet och från det faktum att någon kanske kommer att använda din produkt, även om vi inte hade några tvivel om detta. Och sluta sedan. Partnern sa att det är omöjligt att komma in på marknaden utan aviseringar via messengers. Det är möjligt utan många andra saker, men inte utan detta. Efter lite debatt tillkom integration med Telegram, vilket passade oss. Av alla nuvarande instant messengers är detta den enda som ger tillgång till sina API:er gratis och utan några komplicerade godkännandeprocedurer. Samma WhatsApp föreslår att du kontaktar leverantörer som tar bra pengar för att använda deras tjänster; alla brev som ber om åtkomst utan packningar ignorerades. Tja, Viber... Jag vet inte vem som använder det nu, för... skräppost och reklam finns utanför listorna. I slutet av december, efter en rad interna tester och tester bland vänner, öppnades registreringen för alla och mjukvaran gjordes tillgänglig för nedladdning.

Start av distribution

Redan från början förstod vi att vi behövde ett litet flöde av systemanvändare så att de kunde testa produkten i stridsläge och ge lite första feedback. Flera köpta inlägg på VK bar frukt. De första anmälningarna har kommit.

Här måste sägas att det är väldigt svårt att komma in på marknaden när ditt företag inte har ett känt namn, och samtidigt tillhandahålla agentlös övervakningsfunktion där du behöver lägga in konton från dina servrar och arbetsstationer. Detta skrämmer många människor. Vi förstod redan från början att det skulle bli problem med detta och var förberedda på detta både tekniskt och moraliskt. Alla fjärranslutningar, trots att RDP och SSH redan är krypterade som standard, krypteras dessutom av vår programvara med AES-standarden. All data från lokala servrar överförs till molnet via HTTPS. Konton lagras i krypterad form. Krypteringsnycklar för alla delsystem är individuella för alla klienter. För fjärranslutningar används vanligtvis sessionskrypteringsnycklar.

Allt vi kan göra i den här situationen för att få människor att känna sig lugnare är att vara så öppna som möjligt, arbeta med säkerheten och aldrig tröttna på att svara på människors frågor.

För många uppväger mjukvarans bekvämlighet och funktionalitet rädslan, och de registrerar sig. Vissa individer skrev i publicerade inlägg på VK att denna programvara inte kan användas pga Detta är en samling av deras lösenord och i allmänhet ett företag utan namn. Det måste sägas att mer än en person hade denna åsikt. Många människor förstår helt enkelt inte att när de installerar annan proprietär programvara på en server som körs som en tjänst, har den också fullständiga rättigheter i systemet och de behöver inte konton för att göra något olagligt (det är klart att du kan ändra användare från vilken tjänsten lanseras, men även här kan du ange vilket konto som helst). Faktum är att människors rädslor är förståeliga. Att installera programvara på en server är en vanlig sak, men att ange ett konto är lite läskigt och intimt, eftersom drygt hälften av människorna har samma lösenord för alla tjänster, och att skapa ett separat konto även för ett test är lat. Men för närvarande finns det ett stort antal tjänster som folk litar på med sina referenser och mer. Och vi strävar efter att bli en av dem.

Det var många kommentarer som sa att vi stal den någonstans. Detta förvånade oss lite. Tja, okej, åsikten från en person, men sådana kommentarer hittades i olika publikationer från olika människor. Först visste de inte hur de skulle reagera på detta. Antingen för att vara ledsen över att vissa har åsikten att i Ryssland kan ingen göra något på egen hand, utan bara stjäla, eller för att vara glad över att de tror att detta bara kan stjälas.

Vi har nu slutfört proceduren för att få ett EV Code Sign Certificate. För att få det måste du gå igenom en rad kontroller och skicka ett gäng dokument om företaget, varav några måste intygas av en advokat. Att erhålla ett EV Code Sign-certifikat under en pandemi är ett separat ämne för en artikel. Proceduren tog en månad. Och det var inte en månad av väntan, utan av ständiga förfrågningar om ytterligare dokument. Kanske hade pandemin ingenting med det att göra, och proceduren tog så lång tid för alla? Dela med sig.

Vissa säger att vi inte kommer att använda det eftersom det inte finns något FSTEC-certifikat. Vi måste förklara att vi inte kan få det och inte kommer att få det eftersom kryptering måste vara i enlighet med GOST för att få det här certifikatet, och vi planerar att distribuera programvaran inte bara i Ryssland och använda AES.

Alla dessa kommentarer ställer vissa tvivel om att det är möjligt att marknadsföra en produkt som kräver att du anger konton utan att vara allmänt känd. Även om vi visste att det skulle finnas de som hade en väldigt negativ inställning till detta. Efter att antalet anmälningar översteg tusen slutade vi tänka på det. Särskilt efter, förutom negativiteten hos dem som inte ens hade provat produkten, började mycket trevliga recensioner dyka upp. Det måste sägas att dessa positiva recensioner är den största drivkraften för produktutveckling.

Lägga till fjärråtkomstfunktioner för anställda

En av de vanliga uppgifterna från kunder är "ge Vanya tillgång till sin dator hemifrån." Vi tog upp VPN på Mikrotik och skapade konton för användare. Men detta är ett verkligt problem. Användare kan inte titta på instruktionerna och följa dem steg för steg för att ansluta via VPN. Olika versioner av Windows. I ett Windows ansluter allt bra, i ett annat behövs ett annat protokoll. Och i allmänhet var detta alltid förknippat med omkonfigurationen av nätverksutrustning, som fungerade som en VPN-server, och inte alla anställda har tillgång till den och detta var obekvämt.

Men vi har redan fjärranslutningar till servrar och nätverksutrustning. Varför inte använda en färdig transport och skapa ett separat litet verktyg som du helt enkelt kan ge till användaren för att ansluta. Jag ville bara försäkra mig om att användaren inte skrev in något abstrut där. Bara en knapp "anslut". Men hur ska det här verktyget förstå var det ska anslutas om det bara har en knapp? Det fanns en idé att bygga den nödvändiga applikationen online på våra servrar. Systemadministratören klickar på knappen "ladda ner genväg" och ett kommando skickas till vårt moln för att bygga en individuell binär med fast information för anslutning till önskad server/dator via RDP. I allmänhet skulle detta kunna göras. Men detta tar lång tid, administratören måste vänta först tills binären kompileras och sedan laddas ner. Naturligtvis skulle det vara möjligt att helt enkelt lägga till en andra fil med konfigurationen, men detta är redan 2 filer, och för enkelhetens skull behöver användaren en. En fil, en knapp och inga installationsprogram. Efter att ha läst lite på Google kom jag till slutsatsen att om du lägger till lite information i slutet av den kompilerade ".exe", så försämras den inte (nåja, nästan). Du kan åtminstone lägga till krig och fred där, och det kommer att fungera som tidigare. Det vore synd att inte utnyttja detta. Nu kan du helt enkelt packa upp applikationen när du är på språng, direkt i själva klienten, förresten den heter Veliam Connector, och helt enkelt lägga till den information som behövs för att ansluta till den i slutet. Och applikationen själv vet vad den ska göra med den. Varför skrev jag "nåja nästan" inom parentes lite högre? Eftersom du måste betala för denna bekvämlighet i och med att applikationen förlorar sin digitala signatur. Men i det här skedet tror vi att detta är ett litet pris att betala för en sådan bekvämlighet.

Tredje parts modullicenser

Jag skrev redan ovan att efter att man beslutat att göra produkten allmänt tillgänglig, och inte bara för eget bruk, fick vi jobba hårt och leta efter ersättare för några moduler som inte lät oss ingå i vår produkt. Men efter släppet upptäcktes en mycket obehaglig sak av misstag. Veliam Server, som fanns på klientsidan, inkluderade MariaDB DBMS. Och den är GPL-licenserad. GPL-licensen innebär att programvaran måste vara öppen källkod, och om vår produkt inkluderar MariaDB, som har denna licens, måste vår produkt vara under denna licens. Men lyckligtvis är syftet med denna licens öppen källkod, inte att straffa dem som av misstag gör misstag i domstol. Om upphovsrättsinnehavaren har ett krav, meddelar han överträdaren skriftligen och han måste undanröja kränkningen inom 30 dagar. Vi upptäckte själva vårt misstag och fick inga brev och började genast överväga alternativ för hur vi skulle lösa problemet. Lösningen visade sig vara självklar – byt till SQLite. Denna databas har inga licensbegränsningar. De flesta moderna webbläsare använder SQLite och en massa andra program. Jag hittade information på Internet om att SQLite anses vara den mest utbredda DBMS i världen, just på grund av webbläsarna, men jag letade inte efter bevis, så detta är felaktig information. Jag började studera farorna med att byta till SQLite.

Detta blir en icke-trivial uppgift när klienter har flera hundra servrar installerade med MariaDB och data i den. Vissa MariaDB-funktioner är inte tillgängliga i SQLite. Tja, till exempel i koden använde vi frågor som

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

Denna konstruktion gör inte bara ett urval från tabellen, utan låser också raddata. Och flera fler mönster måste också skrivas om. Men förutom det faktum att vi var tvungna att skriva om många frågor, var vi också tvungna att komma på en mekanism som vid uppdatering av klientens Veliam-server skulle porta all data till det nya DBMS och radera det gamla. Dessutom fungerade inte transaktioner i SQLite och detta var ett verkligt problem. Men efter att ha läst det stora World Wide Web, fann jag utan problem att transaktioner i SQLite kan aktiveras genom att skicka ett enkelt kommando när du ansluter

PRAGMA journal_mode=WAL;

Som ett resultat slutfördes uppgiften och nu körs klientens serverdel på SQLite. Vi har inte märkt några förändringar i driften av systemet.

Ny HelpDesk

Det var nödvändigt att porta HelpDesk-systemet från den interna versionen till SaaS-versionen, men med några ändringar. Det första jag ville göra var integration med klientens domän när det gäller transparent användarbehörighet i systemet. Nu, för att logga in på HelpDesk och lämna en förfrågan i systemet, klickar användaren helt enkelt på genvägen på skrivbordet och webbläsaren öppnas. Användaren anger inga inloggningsuppgifter. Modulen för Apache SSPI, som är en del av Veliam Server, auktoriserar automatiskt användaren under ett domänkonto. För att lämna en förfrågan i systemet när användaren är utanför företagets nätverk klickar han på en knapp och han får en länk i sin e-post genom vilken han loggar in i HelpDesk-systemet utan lösenord. Om en användare inaktiveras eller tas bort i en domän, slutar även HelpDesk-kontot att fungera. Systemadministratören behöver alltså inte själv övervaka konton i både domänen och HelpDesk. En anställd slutar - han kopplar bort sitt konto i domänen och det är det, han kommer inte att logga in i systemet inte från företagets nätverk, inte via en länk. För att denna integration ska fungera måste systemadministratören skapa en GPO, som lägger till en intern webbplats till intranätszonen и distribuerar en genväg till alla användare på skrivbordet.

Det andra vi anser vara ytterst nödvändigt för HelpDesk-system, åtminstone för oss själva, är att ansluta till sökanden direkt från applikationen med ett klick. Dessutom måste anslutningar passera om systemadministratören är på ett annat nätverk. För outsourcing är detta obligatoriskt, för heltidsanställda systemadministratörer är det också ofta mycket nödvändigt. Det finns redan flera produkter som gör ett utmärkt jobb med fjärranslutningar. Och vi bestämde oss för att göra integrationer för dem. Vi har nu integrerat för VNC, och i framtiden planerar vi att lägga till Radmin och TeamViewer. Genom att använda vår nätverkstransport för fjärranslutningar till infrastruktur fick vi VNC att ansluta till fjärrarbetsstationer bakom NAT. Samma sak kommer att hända med Radmin. Nu, för att ansluta till en användare, behöver du bara klicka på knappen "anslut till sökande" i själva applikationen. VNC-klienten öppnar och ansluter till den sökande, oavsett om du är på samma nätverk eller sitter hemma i tofflor. Först måste systemadministratören, med hjälp av GPO, installera VNC Server på allas arbetsstationer.

Nu går vi själva över till nya HelpDesk och använder integration med domänen och VNC. Detta är väldigt bekvämt för oss. Nu kan vi slippa betala för TeamViewer, som vi har använt i mer än tre år för att driva vår supporttjänst.

Vad planerar vi att göra härnäst?

När vi släppte produkten gjorde vi inga betalda tariffer utan begränsade helt enkelt gratistaxan till 50 övervakningsobjekt. Fem dussin nätverksenheter och servrar borde räcka för alla, tyckte vi. Och sedan började förfrågningar komma in för att höja gränsen. Att säga att vi blev lite chockade är att inte säga något. Är företag som har så många servrar verkligen intresserade av vår programvara? Vi utökade gränsen gratis för de som gjorde sådana förfrågningar. Som svar på deras förfrågan frågade vi några varför de behövde så mycket, om de verkligen hade ett så stort antal servrar och nätverksutrustning. Och det visade sig att systemadministratörer började använda systemet på sätt som vi inte alls hade planerat. Allt visade sig vara enkelt - vår programvara började övervaka inte bara servrar utan också arbetsstationer. Därför finns det många önskemål om att utöka gränserna. Nu har vi redan infört betalda tariffer och gränserna kan utökas oberoende.

Servrar fungerar nästan alltid med antingen lagringssystem eller lokala diskar i en RAID-array. Och vi gjorde först produkten åt dem. Och SMART-övervakning var inte intressant för denna uppgift. Men med tanke på att människor har anpassat mjukvara för att övervaka arbetsstationer har det dykt upp önskemål om implementering av SMART-övervakning. Vi kommer att implementera det snart.

Med tillkomsten av Veliam Connector blev det onödigt att distribuera en VPN-server i företagsnätverket, eller göra RDGW, eller helt enkelt vidarebefordra portar till nödvändiga maskiner för att ansluta via RDP. Många använder vårt system endast för dessa fjärranslutningar. Veliam Connector är endast tillgänglig för Windows, och vissa företagsanvändare ansluter från bärbara datorer hemma som kör MacOS till arbetsstationer eller terminaler i företagsnätverket. Och det visar sig att systemadministratören tvingas, på grund av flera användare, att ändå återgå till frågan om vidarebefordran eller VPN. Därför håller vi nu på att göra klart en version av Veliam Connector för MacOS. Användare av sin favorit Apple-teknik kommer också att ha möjlighet att ansluta till företagets infrastruktur med ett klick.

Jag gillar verkligen det faktum att du, med ett stort antal systemanvändare, inte behöver tänka på vad folk behöver och vad som är bekvämare. De skriver själva sina önskemål, så det finns en hel del utvecklingsplaner för den närmaste framtiden.

Parallellt planerar vi nu att börja översätta systemet till engelska och distribuera det utomlands. Vi vet ännu inte hur vi kommer att distribuera produkten utanför vårt land, vi letar efter alternativ. Kanske kommer det en separat artikel om detta senare. Kanske kommer någon som har läst den här artikeln att kunna föreslå den nödvändiga vektorn, eller så vet och vet han själv hur man gör det och kommer att erbjuda sina tjänster. Vi skulle uppskatta din hjälp.

Källa: will.com

Lägg en kommentar