Od outsourcingu k vývoji (část 2)

В předchozí článek, mluvil jsem o pozadí vzniku Veliamu a rozhodnutí o jeho distribuci prostřednictvím systému SaaS. V tomto článku budu mluvit o tom, co jsem musel udělat, aby produkt nebyl lokální, ale veřejný. O tom, jak distribuce začala a s jakými problémy se setkali.

Plánování

Aktuální backend pro uživatele byl na Linuxu. Téměř každá organizace má Windows servery, což se o Linuxu říci nedá. Hlavní předností společnosti Veliam je vzdálená připojení k serverům a síťovým zařízením za NAT. Tato funkcionalita byla ale velmi pevně svázána s tím, že router musel být Mikrotik. A to by očividně mnohé neuspokojilo. Nejprve jsem začal přemýšlet o přidání podpory pro routery od nejběžnějších prodejců. Ale pochopil jsem, že to byl nekonečný závod o rozšíření seznamu podporovaných společností. Navíc ty, které jsou již podporovány, mohou mít jinou sadu příkazů pro změnu pravidel NAT z modelu na model. Jediným východiskem ze situace se zdálo být VPN.

Protože jsme se rozhodli produkt distribuovat, ale ne jako open source, bylo nemožné zahrnout různé knihovny s otevřenými licencemi, jako je GPL. Toto je obecně samostatné téma, po rozhodnutí prodat produkt jsem musel projít polovinu knihoven, protože byly GPL. Když psali pro sebe, bylo to normální. Ale nehodí se k distribuci. První VPN, která vás napadne, je OpenVPN. Ale je to GPL. Další možností bylo použití japonské SoftEther VPN. Jeho licence mu umožnila zahrnout jej do svého produktu. Po pár dnech různých testů, jak to integrovat tak, aby uživatel nemusel vůbec nic konfigurovat a věděl o SoftEther VPN, se podařilo získat prototyp. Všechno bylo jak má být. Ale z nějakého důvodu nás toto schéma stále mátlo a nakonec jsme od něj upustili. Ale přirozeně odmítli poté, co přišli s jinou možností. Vše se nakonec dělalo na běžných TCP spojeních. Některá spojení fungují přes koordinátora, některá přímo přes technologii Nat Hole Punching (NHP), která byla implementována i ve Free Pascalu. Musím říct, že jsem o NHP nikdy předtím ani neslyšel. A vůbec mě nenapadlo, že je možné připojit 2 síťová zařízení, obě jsou přímo za NATem. Nastudoval jsem si téma, pochopil princip fungování a sedl si ke psaní. Plán je realizován, uživatel se jedním kliknutím připojí k požadovanému zařízení za NAT přes RDP, SSH nebo Winbox bez zadávání hesel nebo nastavování VPN. Navíc většina těchto spojení prochází kolem našeho koordinátora, což má dobrý vliv na ping a náklady na obsluhu těchto spojení.

Přenos serverové strany z Linuxu do Windows

Při přechodu na Windows došlo k několika problémům. První je, že vestavěný wmic ve windows vám neumožňuje dělat WQL dotazy. A v našem systému už na nich bylo vše postaveno. A bylo tam ještě něco, ale teď jsem zapomněl, proč nakonec od jeho používání upustili. Možné rozdíly mezi verzemi Windows. A druhý problém je multithreading. Protože jsem nenašel dobrý nástroj třetí strany pod pro nás „přijatelnou“ licencí, spustil jsem Lazarus IDE znovu. A napsal jsem potřebnou utilitu. Vstupem je požadovaný seznam objektů a jaké konkrétní dotazy je třeba provést, a jako odpověď dostávám data. A to vše ve vícevláknovém režimu. Skvělý.

Po nastavení pthreads pro PHP Windows jsem si myslel, že se vše spustí hned, ale nebylo tomu tak. Po nějaké době ladění jsem si uvědomil, že pthreads zřejmě fungují, ale v našem systému to nefungovalo. Ukázalo se, že v práci s pthready ve Windows existuje určitá zvláštnost. A tak to bylo. Četl jsem dokumentaci a bylo tam napsáno, že pro Windows je počet vláken omezený, a pokud si pamatuji, implicitně. To se stalo problémem. Protože když jsem začal snižovat počet vláken, na kterých aplikace běžela, dělala to velmi pomalu. Znovu jsem otevřel IDE a do stejné utility byla přidána funkce pro vícevláknové pingování objektů. No, tam už je také spousta skenování portů. Ve skutečnosti po tomto zmizela potřeba pthreads pro PHP a už se nepoužívá. Dále bylo k této utilitě přidáno několik dalších funkcí a funguje dodnes. Poté byl sestaven instalační program pro Windows, který zahrnoval Apache, PHP, MariaDB, samotnou aplikaci PHP a sadu utilit pro interakci se systémem napsaných ve Free Pascalu. Pokud jde o instalátor, myslel jsem si, že tento problém rychle vyřeším, protože... To je velmi běžná věc a nezbytná pro téměř každý software. Buď jsem hledal na špatném místě, nebo něco jiného. Neustále jsem ale narážel na produkty, které buď nebyly dostatečně flexibilní, nebo drahé a také nepružné. A přesto jsem našel bezplatný instalátor, ve kterém bude možné zajistit jakékoli přání. Toto je InnoSetup. Píšu o tom tady, protože jsem si to musel vyhledat, abych někomu ušetřil čas.

Odmítnutí pluginu ve prospěch vašeho klienta

Dříve jsem psal, že klientskou částí byl prohlížeč s „pluginem“. Byly tedy doby, kdy byl Chrome aktualizován a rozložení bylo trochu pokřivené, pak se aktualizoval Windows a vlastní schéma uri zmizelo. Opravdu jsem nechtěl mít taková překvapení ve veřejné verzi produktu. Navíc vlastní uri začalo mizet po každé aktualizaci Windows. Microsoft jednoduše smazal všechny mimo své pobočky v požadované sekci. Google Chrome vám nyní také neumožňuje zapamatovat si volbu otevřít nebo ne otevřít aplikaci z vlastního uri a tuto otázku klade pokaždé, když kliknete na objekt sledování. Obecně byla nutná normální interakce s místním systémem uživatele, kterou prohlížeč neposkytuje. Nejjednodušší možností v tomto schématu se zdá být jednoduše vytvořit si vlastní prohlížeč, jak to nyní mnozí dělají prostřednictvím Electronu. Ale mnoho věcí již bylo napsáno ve Free Pascalu, včetně serverové části, takže jsme se rozhodli vytvořit klienta ve stejném jazyce a nevytvářet zoo. Takto byl napsán klient s Chromium na palubě. Poté začala získávat různé popruhy.

Uvolnění

Nakonec jsme zvolili název systému. Neustále jsme procházeli různými možnostmi, zatímco probíhal proces převodu z lokální verze na SaaS. Vzhledem k tomu, že jsme původně plánovali vstup nejen na tuzemský trh, byla hlavním kritériem pro výběr jména přítomnost neobsazené nebo nepříliš drahé domény v zóně „.com“. Některé funkce/moduly ještě nebyly přeneseny z lokální verze na Veliam, ale rozhodli jsme se, že je uvolníme se současnou funkcionalitou a zbytek doplníme jako aktualizace. V úplně první verzi nebyl HelpDesk, Veliam Connector, nebylo možné změnit prahové hodnoty pro spouštěče upozornění a mnoho dalšího. Zakoupili jsme Code Sign Certificate a podepsali klientskou a serverovou část. Napsali jsme webové stránky pro produkt, zahájili postupy pro registraci softwaru, ochranné známky atd. Obecně jsme připraveni začít. Lehká euforie z odvedené práce a z toho, že možná někdo váš produkt použije, i když jsme o tom nepochybovali. A pak přestat. Partner uvedl, že není možné vstoupit na trh bez upozornění prostřednictvím messengerů. Je to možné bez mnoha dalších věcí, ale ne bez tohoto. Po nějaké debatě byla přidána integrace s Telegramem, což nám vyhovovalo. Ze všech současných instant messengerů je tento jediný, který poskytuje přístup ke svým API zdarma a bez jakýchkoli složitých schvalovacích procedur. Stejný WhatsApp navrhuje kontaktovat poskytovatele, kteří účtují slušné peníze za používání jejich služeb; všechny dopisy s žádostí o přístup bez těsnění byly ignorovány. No, Viber... Nevím, kdo to teď používá, protože... spam a reklama tam jsou mimo žebříčky. Na konci prosince byla po sérii interních testů a testů mezi přáteli otevřena registrace pro všechny a software byl zpřístupněn ke stažení.

Začátek distribuce

Od samého začátku jsme chápali, že potřebujeme malý tok uživatelů systému, aby mohli otestovat produkt v bojovém režimu a poskytnout první zpětnou vazbu. Několik zakoupených příspěvků na VK přineslo své ovoce. Přišly první registrace.

Zde je třeba říci, že vstoupit na trh, když vaše společnost nemá slavné jméno, a zároveň poskytovat bezagentovou monitorovací funkcionalitu, ve které potřebujete zadávat účty ze svých serverů a pracovních stanic, je velmi obtížné. To děsí spoustu lidí. Od samého začátku jsme chápali, že s tím budou problémy a byli jsme na to připraveni jak technicky, tak morálně. Všechna vzdálená připojení, navzdory skutečnosti, že RDP a SSH jsou již ve výchozím nastavení šifrována, jsou navíc naším softwarem šifrována pomocí standardu AES. Všechna data z lokálních serverů jsou přenášena do cloudu přes HTTPS. Účty jsou uloženy v zašifrované podobě. Šifrovací klíče pro všechny podsystémy jsou individuální pro všechny klienty. Pro vzdálená připojení se obecně používají klíče pro šifrování relace.

Jediné, co můžeme v této situaci udělat, aby se lidé cítili klidnější, je být co nejotevřenější, pracovat na bezpečnosti a nikdy se neunavovat odpovídat na otázky lidí.

U mnohých převažuje pohodlí a funkčnost softwaru nad strachem a registrují se. Někteří jednotlivci ve zveřejněných příspěvcích na VK napsali, že tento software nelze použít, protože Toto je sbírka jejich hesel a obecně no-name společnosti. Nutno říci, že tento názor měl nejeden člověk. Mnoho lidí jednoduše nechápe, že když na server, který běží jako služba, nainstalují jiný proprietární software, má také plná práva v systému a nepotřebují účty, aby mohli dělat něco nezákonného (je jasné, že můžete změnit uživatel, od kterého se služba spouští, ale i zde můžete zadat libovolný účet). Ve skutečnosti jsou obavy lidí pochopitelné. Instalace softwaru na server je běžná věc, ale zadání účtu je trochu děsivé a intimní, protože dobrá polovina lidí má stejné heslo pro všechny služby a vytvořit samostatný účet i na zkoušku je líné. V současné době však existuje obrovské množství služeb, kterým lidé důvěřují svými pověřeními a další. A my se snažíme stát jedním z nich.

Bylo tam hodně komentářů, že jsme to někde ukradli. To nás trochu překvapilo. Dobře, názor jedné osoby, ale takové komentáře byly nalezeny v různých publikacích od různých lidí. Zpočátku nevěděli, jak na to reagovat. Buď být smutný z toho, že někteří mají názor, že v Rusku nikdo nic neumí sám, ale umí jen krást, nebo být rád, že si myslí, že tohle se dá jedině ukrást.

Nyní jsme dokončili postup pro získání certifikátu EV Code Sign Certificate. Chcete-li jej získat, musíte projít řadou kontrol a odeslat hromadu dokumentů o společnosti, z nichž některé musí být ověřeny právníkem. Získání certifikátu EV Code Sign během pandemie je samostatné téma pro článek. Procedura trvala měsíc. A nebyl to měsíc čekání, ale neustálých žádostí o další dokumenty. Možná s tím pandemie neměla nic společného a procedura trvala všem tak dlouho? Podíl.

Někteří říkají, že to nebudeme používat, protože neexistuje certifikát FSTEC. Musíme vysvětlit, že jej získat nemůžeme a nezískáme, protože pro získání tohoto certifikátu musí být šifrování v souladu s GOST a plánujeme distribuovat software nejen v Rusku a používat AES.

Všechny tyto komentáře vyvolávají určité pochybnosti o tom, že je možné propagovat produkt, který vyžaduje, abyste zadávali účty, aniž by byl veřejně známý. I když jsme věděli, že se najdou tací, kteří k tomu budou mít velmi negativní postoj. Poté, co počet registrací přesáhl tisícovku, jsme na to přestali myslet. Zvláště poté, co se kromě negativity těch, kteří produkt ani nevyzkoušeli, začaly objevovat velmi příjemné recenze. Je třeba říci, že tyto pozitivní recenze jsou největší motivací pro vývoj produktu.

Přidání funkce vzdáleného přístupu pro zaměstnance

Jedním z častých úkolů klientů je „poskytnout Vanyovi přístup k jeho počítači z domova“. Zvedli jsme VPN na Mikrotiku a vytvořili účty pro uživatele. Ale to je skutečný problém. Uživatelé nemohou sledovat pokyny a postupovat podle nich krok za krokem pro připojení přes VPN. Různé verze Windows. V jednom Windows se vše dobře propojuje, v jiném je potřeba jiný protokol. A obecně to vždy souviselo s rekonfigurací síťového zařízení, které fungovalo jako VPN server a ne všichni zaměstnanci k němu měli přístup a to bylo nepohodlné.

Ale již máme vzdálená připojení k serverům a síťovým zařízením. Proč nepoužít hotovou přepravu a neudělat samostatnou malou utilitu, kterou můžete jednoduše dát uživateli k připojení. Jen jsem se chtěl ujistit, že tam uživatel nezadal nic nesrozumitelného. Stačí jedno tlačítko „připojit“. Jak ale tento nástroj pochopí, kam se má připojit, když má pouze jedno tlačítko? Vznikl nápad vybudovat požadovanou aplikaci online na našich serverech. Správce systému klikne na tlačítko „stáhnout zástupce“ a do našeho cloudu se odešle příkaz k vytvoření individuálního binárního souboru s pevně zapojenými informacemi pro připojení k požadovanému serveru/počítači prostřednictvím RDP. Obecně by se to dalo udělat. To ale trvá dlouho, administrátor by musel nejprve počkat, než se binární soubor zkompiluje a poté stáhne. Samozřejmě by bylo možné jednoduše přidat druhý soubor s konfigurací, ale to jsou již 2 soubory a pro jednoduchost uživatel potřebuje jeden. Jeden soubor, jedno tlačítko a žádné instalátory. Po malém přečtení na Googlu jsem došel k závěru, že pokud na konec zkompilovaného „.exe“ přidáte nějaké informace, nezhorší se (no, skoro). Můžete tam přidat alespoň válku a mír a bude to fungovat jako předtím. Byl by hřích toho nevyužít. Nyní můžete aplikaci jednoduše rozbalit na cestách přímo v samotném klientovi, mimochodem se nazývá Veliam Connector, a na konci jednoduše přidat informace potřebné pro připojení k ní. A samotná aplikace ví, co s tím. Proč jsem napsal „takřka“ v závorce trochu výš? Protože za tuto vymoženost musíte zaplatit tím, že aplikace ztratí svůj digitální podpis. Ale v této fázi se domníváme, že je to malá cena za takové pohodlí.

Licence modulů třetích stran

Již výše jsem psal, že poté, co bylo rozhodnuto o zpřístupnění produktu veřejnosti, a to nejen pro vlastní potřebu, jsme museli tvrdě pracovat a hledat náhrady za některé moduly, které nám nedovolily zařadit do našeho produktu. Po vydání se ale náhodou zjistila velmi nepříjemná věc. Veliam Server, který byl na straně klienta, zahrnoval MariaDB DBMS. A má licenci GPL. Licence GPL znamená, že software musí být open source, a pokud náš produkt obsahuje MariaDB, která má tuto licenci, pak náš produkt musí být pod touto licencí. Účelem této licence je ale naštěstí open source, nikoli trestání těch, kteří omylem u soudu udělají chyby. Pokud má držitel autorských práv nárok, upozorní na to písemně porušovatele a ten musí porušení odstranit do 30 dnů. Na chybu jsme přišli sami a žádné dopisy jsme nedostali a hned jsme začali zvažovat možnosti, jak problém vyřešit. Řešení se ukázalo jako zřejmé – přejít na SQLite. Tato databáze nemá žádná licenční omezení. Většina moderních prohlížečů používá SQLite a spoustu dalších programů. Na internetu jsem našel informaci, že SQLite je považován za nejrozšířenější DBMS na světě, právě kvůli prohlížečům, ale nehledal jsem důkaz, takže je to nepřesná informace. Začal jsem studovat nebezpečí přechodu na SQLite.

To se stává netriviálním úkolem, když mají klienti nainstalováno několik stovek serverů s MariaDB a daty v ní. Některé funkce MariaDB nejsou v SQLite dostupné. No, například v kódu jsme použili dotazy jako

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

Tato konstrukce nejen provede výběr z tabulky, ale také uzamkne data řádku. A několik dalších návrhů muselo být také přepsáno. Ale kromě toho, že jsme museli přepisovat spoustu dotazů, museli jsme vymyslet i mechanismus, který při aktualizaci klientského Veliam Serveru přenese všechna data na nový DBMS a ten starý smaže. Také transakce v SQLite nefungovaly a to byl skutečný problém. Ale po přečtení rozlehlosti World Wide Web jsem bez problémů zjistil, že transakce v SQLite lze povolit předáním jednoduchého příkazu při připojení

PRAGMA journal_mode=WAL;

V důsledku toho byla úloha dokončena a serverová část klienta nyní běží na SQLite. Ve fungování systému jsme nezaznamenali žádné změny.

Nový HelpDesk

Bylo nutné přenést systém HelpDesk z interní verze na verzi SaaS, ale s určitými změnami. První věc, kterou jsem chtěl udělat, byla integrace s doménou klienta ve smyslu transparentní autorizace uživatelů v systému. Nyní, aby se uživatel přihlásil do HelpDesku a nechal v systému požadavek, jednoduše klikne na zástupce na ploše a otevře se prohlížeč. Uživatel nezadává žádné přihlašovací údaje. Modul pro Apache SSPI, který je součástí Veliam Serveru, automaticky autorizuje uživatele pod doménovým účtem. Pro zanechání požadavku v systému, když je uživatel mimo podnikovou síť, klikne na tlačítko a do emailu mu přijde odkaz, přes který se bez hesel přihlásí do systému HelpDesk. Pokud je uživatel v doméně zakázán nebo smazán, přestane fungovat i účet HelpDesk. Správce systému tak nemusí sám sledovat účty v doméně i HelpDesku. Zaměstnanec skončí - odpojí svůj účet v doméně a je to, nepřihlásí se do systému ani z podnikové sítě, ani přes odkaz. Aby tato integrace fungovala, musí správce systému vytvořit jeden GPO, který přidá interní web do intranetové zóny и distribuuje zástupce všem uživatelům na ploše.

Druhou věcí, kterou považujeme pro systémy HelpDesk za extrémně potřebnou, alespoň pro nás samotné, je připojení k žadateli přímo z aplikace jedním kliknutím. Kromě toho musí připojení projít, pokud je správce systému v jiné síti. Pro outsourcing je to povinné, pro správce systému na plný úvazek je to také často velmi nutné. Již existuje několik produktů, které odvádějí vynikající práci se vzdáleným připojením. A rozhodli jsme se pro ně provést integraci. Nyní jsme se integrovali pro VNC a v budoucnu plánujeme přidat Radmin a TeamViewer. Pomocí našeho síťového přenosu pro připojení vzdálené infrastruktury jsme vytvořili připojení VNC ke vzdáleným pracovním stanicím za NAT. Totéž se stane s Radminem. Nyní, abyste se mohli připojit k uživateli, stačí kliknout na tlačítko „připojit k žadateli“ v samotné aplikaci. Klient VNC se otevře a připojí k žadateli bez ohledu na to, zda jste ve stejné síti nebo sedíte doma v pantoflích. Nejprve musí správce systému pomocí GPO nainstalovat VNC Server na všechny pracovní stanice.

Nyní sami přecházíme na nový HelpDesk a využíváme integraci s doménou a VNC. To je pro nás velmi výhodné. Nyní se můžeme vyhnout placení za TeamViewer, který již více než tři roky používáme k provozování naší služby podpory.

Co plánujeme dál?

Když jsme produkt vydali, nedělali jsme žádné placené tarify, ale omezili jsme bezplatný tarif na 50 monitorovacích objektů. Pět desítek síťových zařízení a serverů by mělo stačit pro každého, mysleli jsme si. A pak začaly přicházet požadavky na zvýšení limitu. Říct, že jsme byli trochu šokováni, neznamená nic. Mají společnosti, které mají tolik serverů, skutečně zájem o náš software? Pro ty, kteří o to požádali, jsme limit zdarma prodloužili. V reakci na jejich žádost jsme se některých zeptali, proč toho tolik potřebují, zda skutečně mají tak velký počet serverů a síťových zařízení. A ukázalo se, že správci systému začali systém používat způsoby, které jsme vůbec neplánovali. Vše se ukázalo být jednoduché - náš software začal monitorovat nejen servery, ale i pracovní stanice. Existuje tedy mnoho požadavků na rozšíření limitů. Nyní jsme již zavedli placené tarify a limity lze samostatně rozšiřovat.

Servery téměř vždy pracují buď s úložnými systémy, nebo s místními disky v poli RAID. A původně jsme pro ně produkt vyrobili. A SMART monitoring nebyl pro tento úkol zajímavý. Ale s ohledem na to, že lidé přizpůsobili software pro monitorování pracovních stanic, objevily se požadavky na implementaci SMART monitorování. Brzy jej implementujeme.

S příchodem Veliam Connector přestalo být nutné nasazovat VPN server do podnikové sítě nebo dělat RDGW nebo jednoduše přeposílat porty na potřebné stroje pro připojení přes RDP. Mnoho lidí používá náš systém pouze pro tato vzdálená připojení. Veliam Connector je dostupný pouze pro Windows a někteří firemní uživatelé se připojují z domácích notebooků se systémem MacOS k pracovním stanicím nebo terminálům v podnikové síti. A ukazuje se, že správce systému je nucen kvůli několika uživatelům se stále vracet k problematice přesměrování nebo VPN. Proto nyní dokončujeme výrobu verze Veliam Connector pro MacOS. Uživatelé své oblíbené technologie Apple budou mít také možnost připojit se k firemní infrastruktuře jedním kliknutím.

Opravdu se mi líbí, že s velkým počtem uživatelů systému si nemusíte lámat hlavu nad tím, co lidé potřebují a co bude pohodlnější. Svá přání si píší sami, takže plánů rozvoje na blízkou budoucnost je spousta.

Paralelně nyní plánujeme začít překládat systém do angličtiny a distribuovat jej do zahraničí. Zatím nevíme, jak budeme produkt distribuovat mimo naši zemi, hledáme možnosti. Možná o tom později bude samostatný článek. Snad někdo, kdo četl tento článek, dokáže navrhnout požadovaný vektor, nebo sám ví a ví jak na to a nabídne své služby. Ocenili bychom vaši pomoc.

Zdroj: www.habr.com

Přidat komentář