Jedním z největších problémů webového vývoje jsou dlouho běžící úlohy zpracovávané na web serveru. Web servery na ně nejsou připraveny a neumí si s nimi dobře poradit. Připravil jsem seriál videí a příkladů, které radí, jak si s tímto fenoménem poradit. V tomto článku najdete souhrn všech dílů ve věcně logickém pořadí (které z různých důvodů neodpovídá pořadí, v jakém byly zveřejněny).
Zdrojové kódy příkladů
Všechny zdrojové kódy najdete v repozitáři NetUtilsDemo na mém GitHubu.
Předehra: Traceroute a ping
Pro dema jsem potřeboval nějaký příklad dlouho (sekundy, desítky sekund a déle) běžící úlohy. Většina reálných úloh tohoto typu jsou logicky věci dosti náročné a pro dema nevhodné, jako náročné databázové věci, generování reportů, práce s velkými objemy dat... Nicméně pro síťovou diagnostiku se používají příkazy ping
a traceroute
/tracert
.
Jejich běh trvá dost dlouho, ale přitom jsou vlastně velice jednoduché. Jsou tedy ideálním příkladem pro dema. V následujícím videu vysvětluji jak fungují a jak je napsat v C#:
Úvod: Proč to chceme řešit a jak
Časově poslední vydaný díl seriálu je z hlediska věcného vlastně tím prvním. Vysvětluje totiž, proč vlastně vše děláme tak komplikovaně a prostě to neuděláme na web threadu web serveru.
Background workery a jejich hostování
Abychom si všechno nemuseli dělat sami, má .NET interface IHostedService
a třídu BackgroundWorker
, která slouží k hostování kódu, který ony dlouhé operace dělá. Ty lze pak hostovat různým způsobem.
První video popisuje, jak napsat vlastní Windows Service (službu) a použít ji pro hostování našeho background workeru:
Druhé video pak, jak background worker hostovat přímo ve webové aplikaci ASP.NET Core:
Windows Services a jejich identita
První video této části je tady pro pořádek. Netýká se přímo background workerů, ale popisuje jak můžete webovou aplikaci psanou v ASP.NET Core rozjet jako Windows Service, bez nutnosti instalovat a používat IIS:
Druhé se pak zabývá nastavením identity Windows Service:
Michael Grafnetter mi ukázal lepší způsob práce s identitou Windows Services, který jsem neznal, Virtual Service Identity. Jím se zabývá třetí video tohoto bloku:
Co se jinam nehodilo
Poslední video, které s tématem souvisí, byť úplně nezapadá do série, je představení knihovny Hangfire. Tu lze chápat jako jistou alternativu k background workerům. Má velice široké možnosti, i když vyžaduje ne zcela triviální nastavení databázového úložiště.
Co plánuji do budoucna
Často v této sérii mluvím o použití front, ale vlastně jsem žádnou nepředvedl, resp. realizoval jsem ji pomocí tabulky v databázi, což je řešení sice časté, ale svým způsobem limitující. Plánuji udělat videa o používání různých druhů front jak lokálně, tak v prostředí Microsoft Azure.
Když už jsme u cloudu, tak pro úlohy na pozadí lze s výhodou použít koncept Web Jobs, takže chci udělat video i o něm. V tomto kontextu je zajímavý i serverless koncept, Azure Functions. O tom vůbec nic nevím, ale už dlouho ho mám na seznamu věcí které se chci naučit. Pokud je běžně používáte a chcete mi s tvorbou videa o nich nějakým způsobem pomoci, tak neváhejte a kontaktujte mne!