從外包到開發(第二部分)

В 上一篇文章,我談到了 Veliam 創建的背景以及透過 SaaS 系統分發它的決定。在這篇文章中,我將討論我必須做什麼才能使產品不是本地的,而是公開的。關於分發是如何開始的以及他們遇到了什麼問題。

Планирование

目前用戶的後端是在 Linux 上。幾乎每個組織都有Windows伺服器,Linux就更不用說了。 Veliam 的主要優勢是遠端連接到 NAT 後面的伺服器和網路設備。但此功能與路由器必須是 Mikrotik 的事實緊密相關。這顯然不會令很多人滿意。我首先開始考慮添加對最常見供應商的路由器的支援。但我明白,這是一場擴大支持公司名單的無休止的競賽。此外,已經支援的可能有一組不同的命令,用於根據模型更改 NAT 規則。擺脫這種情況的唯一方法似乎是 VPN。

由於我們決定分發該產品,但不是開源的,因此不可能包含具有開放授權(例如 GPL)的各種程式庫。這通常是一個單獨的主題;在決定出售該產品後,我必須瀏覽一半的庫,因為它們是 GPL。當他們為自己寫作時,這很正常。但不適合分發。第一個想到的VPN是OpenVPN。但它是 GPL。另一個選擇是使用日本 SoftEther VPN。他的許可證允許他將其包含在他的產品中。經過幾天關於如何以用戶不需要配置任何東西並且了解 SoftEther VPN 的方式整合它的各種測試後,獲得了一個原型。一切都是理所當然的。但由於某種原因,這個方案仍然讓我們感到困惑,最終我們放棄了它。但他們想出了另一個選擇後,自然就拒絕了。最後,一切都是在常規 TCP 連線上完成的。有些連接透過協調器工作,有些直接透過 Nat Hole Punching (NHP) 技術工作,該技術也在 Free Pascal 中實現。我必須說我以前從未聽說過 NHP。我從來沒有想到可以連接 2 個網路設備,而這兩個設備都直接位於 NAT 之後。我研究了這個主題,了解了操作原理,然後坐下來寫。該計劃已實現,用戶透過 RDP、SSH 或 Winbox 一鍵連接到 NAT 後面的所需設備,無需輸入密碼或設定 VPN。此外,大多數連接都會經過我們的協調器,這對 ping 和服務這些連接的成本有很好的影響。

將伺服器端從Linux轉移到Windows

切換到 Windows 時遇到了幾個問題。首先是windows內建的wmic不允許你進行WQL查詢。在我們的系統中,一切都已經建立在它們之上。還有別的東西,但現在我忘了為什麼他們最終放棄了它的使用。 Windows 版本之間可能存在差異。第二個問題是多執行緒。由於找不到符合我們「可接受」許可證的良好第三方實用程序,我再次啟動了 Lazarus IDE。我編寫了必要的實用程式。輸入是所需的物件清單以及需要進行哪些特​​定查詢,作為回應,我收到資料。而這一切都是在多執行緒模式下進行的。偉大的。

當我為 PHP Windows 設定 pthreads 後,我以為一切都會立即開始,但事實並非如此。經過一段時間的調試,我意識到 pthreads 似乎可以工作,但它在我們的系統上不起作用。很明顯,在 Windows 上使用 pthread 存在一些特殊性。事實也是如此。我閱讀了文檔,其中寫道,對於 Windows,線程數量是有限的,據我所知,是隱含的。這成了一個問題。因為當我開始減少應用程式運行的執行緒數時,它的工作速度非常慢。我再次打開 IDE,物件的多執行緒 ping 功能已新增到相同實用程式中。嗯,那裡也已經有很多連接埠掃描了。實際上,在此之後,PHP 對 pthread 的需求就消失了,並且不再使用它。此外,該實用程式還添加了更多功能,並且至今仍然有效。之後,組裝了 Windows 安裝程序,其中包括 Apache、PHP、MariaDB、PHP 應用程式本身以及一組用 Free Pascal 編寫的用於與系統互動的實用程式。至於安裝程序,我想我會很快解決這個問題,因為......這是很常見的事情,幾乎對每個軟體來說都是必要的。要嘛是我找錯地方了,要嘛是別的原因。但我經常遇到不是不夠靈活,就是昂貴且不靈活的產品。然而,我找到了一個免費的安裝程序,可以滿足任何願望。這是InnoSetup。我在這裡寫下這個是因為我必須檢查它,以防我節省某人的時間。

有利於您的客戶而拒絕插件

我之前寫過,客戶端部分是帶有「插件」的瀏覽器。所以有時候Chrome更新了,佈局有點歪,然後Windows更新了,自訂uri方案消失了。我真的不想在產品的公開版本中出現這種驚喜。而且,每次 Windows 更新後,自訂 uri 就會開始消失。微軟只是刪除了所需部分中所有非其分支。此外,Google Chrome 現在不允許您記住從自訂 uri 開啟或不開啟應用程式的選擇,並且每次按一下監控對象時都會詢問此問題。嗯,一般來說,與用戶本地系統的正常互動是必要的,而瀏覽器不提供這種互動。這個方案中最簡單的選擇似乎就是簡單地製作自己的瀏覽器,就像許多人現在透過 Electron 所做的那樣。但是很多東西已經用 Free Pascal 寫好了,包括伺服器部分,所以我們決定用相同的語言來製作客戶端,而不是創建一個動物園。這就是帶有 Chromium 的客戶端的編寫方式。之後,它開始獲得各種捆紮帶。

發布

最後我們為系統選擇了一個名稱。在從本地版本轉換為 SaaS 的過程中,我們不斷地進行各種選擇。由於我們最初計劃不僅進入國內市場,因此選擇名稱的主要標準是「.com」區域中是否存在未佔用或不是很昂貴的網域名稱。某些功能/模組尚未從本地版本移植到 Veliam,但我們決定將其與當前功能一起發布,並以更新形式完成其餘部分。在第一個版本中,沒有 HelpDesk、Veliam Connector,無法更改通知觸發器的閾值等等。我們購買了程式碼簽署憑證並簽署了客戶端和伺服器部分。我們為該產品編寫了一個網站,開始註冊軟體、商標等程式。總的來說,我們已經準備好開始了。儘管我們對此毫不懷疑,但由於所做的工作以及也許有人會使用您的產品這一事實而感到一絲欣喜。然後停下來。該合作夥伴表示,沒有消息通知,就不可能進入市場。沒有很多其他的東西是可能的,但沒有這個就不行。經過一番爭論,添加了與 Telegram 的集成,這適合我們。在目前所有即時通訊工具中,這是唯一一款免費提供 API 存取且無需任何複雜審批程式的即時通訊工具。同一個 WhatsApp 建議聯繫那些收取高額服務費用的提供者;所有要求不帶墊圈訪問的信件都被忽略了。好吧,Viber...我不知道現在誰在用它,因為...那裡的垃圾郵件和廣告都超乎想像。 XNUMX月底,經過一系列的內測和朋友們的測試,開放給大家註冊,並提供軟體下載。

開始分發

從一開始,我們就明白我們需要少量的系統用戶,以便他們可以在戰鬥模式下測試產品並提供一些初步反饋。在 VK 上購買的一些帖子取得了成果。第一批註冊已經到來。

這裡必須要說的是,當您的公司沒有知名品牌時進入市場,同時提供需要從伺服器和工作站輸入帳戶的無代理監控功能,是非常困難的。這讓很多人感到害怕。我們從一開始就明白這樣做會出現問題,並在技術和道德上都做好了準備。儘管 RDP 和 SSH 預設已加密,但所有遠端連線均由我們的軟體使用 AES 標準進行額外加密。來自本機伺服器的所有資料都透過 HTTPS 傳輸到雲端。帳戶以加密形式儲存。所有子系統的加密金鑰對於所有客戶端都是單獨的。對於遠端連接,通常使用會話加密金鑰。

在這種情況下,我們能做的就是盡可能開放、做好安全工作、不厭其煩地回答人們的問題,讓人們感到平靜。

對許多人來說,軟體的便利性和功能性超過了恐懼,他們註冊了。有些人在 VK 上發表的帖子中寫道,該軟體無法使用,因為這是他們的密碼的集合,通常是一家無名公司。必須說,持這種觀點的人不只一個。許多人根本不明白,當他們在作為服務運行的伺服器上安裝其他專有軟體時,它也擁有系統的完全權限,並且他們不需要帳戶來執行非法操作(很明顯,您可以更改啟動服務的用戶,但在這裡,您也可以輸入任何帳戶)。其實,人們的擔心是可以理解的。在伺服器上安裝軟體是很常見的事情,但輸入帳戶有點可怕和親密,因為一半的人對所有服務都使用相同的密碼,即使是為了測試而創建單獨的帳戶也很懶。但目前,人們信任大量的服務,並提供憑證等。我們努力成為其中一員。

有很多評論說我們從某個地方偷了它。這讓我們有點驚訝。好吧,這是一個人的意見,但這樣的評論可以在不同人的各種出版物中找到。起初他們不知道該如何應對。要麼為有些人認為在俄羅斯沒有人可以自己做任何事情而只能偷竊而感到悲傷,要麼為他們認為這只能被偷竊而感到高興。

我們現已完成取得 EV 代碼簽署憑證的程序。要獲得它,您需要經過一系列檢查並發送大量有關該公司的文件,其中一些文件必須經過律師認證。在大流行期間獲取 EV 代碼簽名證書是一篇文章的單獨主題。整個過程花了一個月的時間。這不是一個月的等待,而是不斷要求提供更多文件。也許與疫情無關,整個過程對每個人來說都花了這麼長時間?分享。

有人說我們不會使用它,因為沒有 FSTEC 憑證。我們必須解釋一下,我們無法也不會獲得它,因為要獲得此證書,加密必須符合 GOST,並且我們計劃不僅在俄羅斯分發該軟體,而且還使用 AES。

所有這些評論都讓人懷疑是否有可能推廣一種要求您在不公開的情況下輸入帳戶的產品。儘管我們知道有人會對此持非常消極的態度。註冊人數過千之後,我們就不再想了。尤其是之後,除了那些甚至沒有嘗試過該產品的人的負面評價之外,還開始出現非常愉快的評論。不得不說,這些正面評價是產品研發的最大動力。

為員工新增遠端存取功能

客戶經常執行的任務之一是「讓 Vanya 在家中存取他的電腦」。我們在 Mikrotik 上推出了 VPN 並為用戶建立了帳戶。但這是一個真正的問題。用戶無法觀看說明並按照說明一步步透過 VPN 連線。不同版本的 Windows。在一個Windows中一切都連接良好,在另一個Windows中則需要不同的協定。一般來說,這總是與網路設備的重新配置有關,網路設備充當VPN伺服器,並且並非所有員工都可以存取它,這很不方便。

但我們已經有了到伺服器和網路設備的遠端連線。為什麼不使用現成的傳輸並製作一個單獨的小型實用程序,您可以簡單地將其提供給用戶進行連接。我只是想確保用戶沒有在那裡輸入任何深奧的內容。只需一鍵“連接”。但是,如果該實用程式只有一個按鈕,它將如何了解連接位置?有一個想法是在我們的伺服器上在線建立所需的應用程式。系統管理員點擊「下載快捷方式」按鈕,命令會發送到我們的雲,以建立帶有硬連線資訊的單獨二進位文件,以便透過 RDP 連接到所需的伺服器/電腦。一般來說,這是可以做到的。但這需要很長時間;管理員必須先等待二進位檔案編譯完成,然後再下載。當然,可以簡單地添加第二個文件和配置,但這已經是 2 個文件了,為了簡單起見,用戶需要一個。一個文件,一鍵,無需安裝程式。在谷歌上閱讀了一些內容後,我得出的結論是,如果你在編譯後的“.exe”末尾添加一些信息,那麼它就不會惡化(好吧,幾乎)。你至少可以在那裡添加戰爭與和平,它會像以前一樣工作。不利用這一點將是一種罪。現在,您可以在用戶端中直接解壓縮該應用程式(稱為 Veliam 連接器),並在最後添加連接所需的資訊。並且應用程式本身知道如何處理它。為什麼我把「差不多」寫在括號裡高一點?因為您必須為這種便利性付出代價,因為應用程式會丟失其數位簽章。但在現階段,我們認為為了這種便利而付出的代價很小。

第三方模組許可證

我在上面已經寫過,在決定將產品公開,而不僅僅是供我們自己使用之後,我們必須努力工作,尋找一些不允許我們自己包含在我們的產品中的模組的替代品。但發布之後,卻意外發現了一件非常不愉快的事。 Veliam 伺服器位於用戶端,包含 MariaDB DBMS。而且它是 GPL 許可的。 GPL授權表示軟體必須是開源的,如果我們的產品包含具有此授權的MariaDB,那麼我們的產品必須受此授權約束。但幸運的是,這個許可證的目的是開源,而不是懲罰那些在法庭上不小心犯錯的人。如果版權所有者提出索賠,他會以書面通知侵權者,並必須在 30 天內消除侵權行為。我們自己發現了錯誤,沒有收到任何信件,並立即開始考慮如何解決問題。事實證明,解決方案很明顯——切換到 SQLite。該資料庫沒有許可限制。大多數現代瀏覽器都使用 SQLite 和許多其他程式。我在網路上找到資訊說SQLite被認為是世界上最廣泛使用的DBMS,正是因為瀏覽器,但我沒有尋找證據,所以這是不準確的資訊。我開始研究改用 SQLite 的危險。

當客戶端有數百台安裝了 MariaDB 和資料的伺服器時,這將成為一項不簡單的任務。某些 MariaDB 功能在 SQLite 中不可用。嗯,例如,在程式碼中我們使用了類似的查詢

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

這種構造不僅從表中進行選擇,而且還鎖定行資料。還有幾個設計也必須重寫。但除了我們必須重寫大量查詢之外,我們還必須提出一種機制,在更新客戶端的 Veliam 伺服器時,將所有資料移植到新的 DBMS 並刪除舊的 DBMS。此外,SQLite 中的事務不起作用,這是一個真正的問題。但在閱讀了浩瀚的萬維網後,我發現在連接時透過傳遞一個簡單的命令就可以啟用 SQLite 中的事務,沒有任何問題

PRAGMA journal_mode=WAL;

這樣,任務就完成了,現在客戶端的伺服器部分運行在SQLite。我們沒有註意到系統操作有任何變化。

新服務台

有必要將 HelpDesk 系統從內部版本移植到 SaaS 版本,但需要進行一些更改。我想做的第一件事是在系統中透明的用戶授權方面與客戶的網域整合。現在,為了登入 HelpDesk 並在系統中留下請求,使用者只需點擊桌面上的捷徑即可開啟瀏覽器。使用者不輸入任何憑證。 Apache SSPI 模組是 Veliam Server 的一部分,會自動在網域帳戶下對使用者進行授權。當用戶在公司網路之外時,要在系統中留下請求,他只需單擊一個按鈕,他就會在電子郵件中收到一個鏈接,通過該鏈接,他無需密碼即可登錄 HelpDesk 系統。如果使用者在網域中被停用或刪除,則 HelpDesk 帳戶也將停止運作。因此,系統管理員不需要同時監控網域和 HelpDesk 中的帳戶。一名員工辭職 - 他斷開了網域中的帳戶,僅此而已,他不會透過公司網路或連結登入系統。為了使這種整合發揮作用,系統管理員需要創建一個 GPO, 將內部網站新增至 Intranet 區域 и 向桌面上的所有使用者分發快捷方式.

我們認為對於 HelpDesk 系統(至少對我們自己而言)極其必要的第二件事是,一鍵直接從應用程式連接到申請人。此外,如果系統管理員位於不同的網路上,則連線必須通過。對於外包來說這是強制性的,對於全職系統管理員來說這通常也是非常必要的。已經有幾種產品在遠端連線方面做得非常出色。我們決定為他們進行整合。我們現在已經整合了 VNC,未來我們計劃添加 Radmin 和 TeamViewer。使用我們的網路傳輸進行遠端基礎設施連接,我們使 VNC 連接到 NAT 後面的遠端工作站。 Radmin 也會發生同樣的情況。現在,為了連接到用戶,您只需點擊應用程式本身中的「連接到申請人」按鈕即可。 VNC用戶端打開並連接到申請人,無論您是在同一個網路上還是穿著拖鞋坐在家裡。首先,系統管理員必須使用 GPO 在每個人的工作站上安裝 VNC 伺服器。

現在我們自己正在切換到新的 HelpDesk 並使用與域和 VNC 的整合。這對我們來說非常方便。現在,我們可以避免為 TeamViewer 付費,我們已經使用它來運行我們的支援服務三年多了。

接下來我們打算做什麼?

我們發布產品的時候,沒有做任何有償關稅,只是簡單地將免費關稅限制在50個監視對象內。我們認為,五打網路設備和伺服器應該足以滿足每個人的需求。然後開始請求增加限制。說我們有點震驚,其實沒什麼好說的。擁有這麼多伺服器的公司真的對我們的軟體感興趣嗎?對於提出此類請求的人,我們免費延長了限制。針對他們的要求,我們詢問了一些人為什麼需要這麼多,他們是否真的有這麼多的伺服器和網路設備。事實證明,系統管理員開始以我們完全沒有計劃的方式使用系統。一切都變得簡單 - 我們的軟體開始不僅監控伺服器,還監控工作站。因此,有許多擴大限制的要求。現在我們已經推出了有償關稅,限額可以自主擴大。

伺服器幾乎總是使用儲存系統或 RAID 陣列中的本機磁碟。我們最初是為他們製造產品的。智慧監控對於這項任務來說並不有趣。但考慮到人們已經採用了監控工作站軟體,因此出現了實施SMART監控的要求。我們將盡快實施。

隨著 Veliam Connector 的出現,不再需要在企業網路中部署 VPN 伺服器,或執行 RDGW,或只是將連接埠轉送到必要的電腦以透過 RDP 連線。許多人僅將我們的系統用於這些遠端連線。 Veliam Connector 僅適用於 Windows,有些公司用戶從執行 MacOS 的家用筆記型電腦連接到公司網路上的工作站或終端。事實證明,由於使用者數量較多,系統管理員被迫再次回到轉送或 VPN 問題。因此,我們現在正在完成 MacOS 版 Veliam Connector 的製作。使用他們喜愛的 Apple 技術的用戶還將有機會一鍵連接到公司基礎設施。

我真的很喜歡這樣一個事實:擁有大量的系統用戶,你不必絞盡腦汁思考人們需要什麼以及什麼會更方便。他們自己寫下自己的願望,所以近期的發展計畫很多。

同時,我們現在計劃開始將該系統翻譯成英文並在國外分發。我們還不知道如何將產品分銷到國外,我們正在尋找選擇。也許稍後會有一篇單獨的文章來討論這個問題。也許讀過這篇文章的人能夠建議所需的向量,或者他自己知道並知道如何做到這一點並會提供他的服務。我們將感謝您的幫助。

來源: www.habr.com

添加評論