Ukládání odpovědí bez serveru do mezipaměti – 12. den soutěže #25DaysOfServerless Challenge

Tento článek je součástí #25DaysOfServerless. Během měsíce prosince budou každý den zveřejňovány nové výzvy od Microsoft Cloud Advocates. Zjistěte více o tom, jak Microsoft Azure umožňuje vaše funkce bez serveru.

Máte nápad nebo řešení? Podělte se o své myšlenky na Twitteru!

Funkce mohou být cenově dostupné pro orchestraci a zpracování velkých a distribuovaných dat, ale to neznamená, že automaticky nabízejí skvělý zážitek.

Vyslechni mě. Neříkám, že funkce nejsou výkonné; Říkám, že to, co zpracovávají, nemusí být .

Jak důležité je ukládání do mezipaměti

Navštívil jsem svého přítele, který měl pět dětí, a byla to zábava. Měli všechny tyto otázky o tom, proč je nebe modré? Proč prší? Proč jsem vždy na svém počítači? Odkud miminka pocházejí? Proč dospělí jedí mnohem více?

Když každá z těchto otázek prošla poprvé, úplně mě rozhodily – super ohromující věc. Samozřejmě musím být chytrý dospělý a znát tyto věci, takže bych předstíral, že musím něco udělat na svém telefonu, a pak se k nim vrátit. Tímto způsobem si mohu koupit pár minut na strávení Wikipedie.

Pokud znáte děti, víte, že rády slyší to samé znovu a znovu, pokud jim to přijde zajímavé. Některé odpovědi byly zábavné, takže se mě každý den ptali, proč je slunce žluté.

Poprvé jsem se zaseknul ve snaze najít správné odpovědi. Později už to bylo jen v mé hlavě připravené vyskočit po otázce. Poprvé to trvalo 5-15 minut; podruhé to trvalo 5–15 sekund.

Naneštěstí pro počítače jsou věci odpadky v odpadcích (nenechte AI, aby vám říkala něco jiného). Počítač nebude vědět, že je čas pamatovat si věci pro další požadavek. Požádání počítače, aby si zapamatoval odpovědi z předchozího procesu a reagoval na tuto odpověď vyšší rychlostí, protože nebude znovu zpracována, je to, co nazýváme ukládáním do mezipaměti.

Jak ukládat do mezipaměti bez serveru

Ukládání do mezipaměti pomocí Serverless je jako ukládání do mezipaměti kdekoli jinde. Potřebujete dvě věci:

  1. Mezipaměť
  2. Strategie ukládání do mezipaměti

Úložiště je místo, kde je uložena odpověď, která má být uložena do mezipaměti; strategie ztělesňuje seznam podmínek, které musely být splněny, aby bylo možné něco uložit do mezipaměti nebo něco z mezipaměti odstranit.

Serverless funguje zpět na webu 25DaysOfServerless a výzvy, které vidíte, jsou uloženy v mezipaměti. Naše strategie ukládání do mezipaměti vypadá takto:

Když navštívíte stránku s výzvou, řekněte https://25daysofserverless.com/calendar/12 my:

  1. Zkontrolujte, zda někdo nepožádal o stejnou výzvu
  2. Pokud ano, pošleme vám, co jsme poslali dané osobě
  3. Pokud ne, jste první osobou
  4. Protože jste první osobou, a. Přinášíme vám výzvu z Github b. zpracovat obsah, c. Nahrajte nějaké obrázky na CDNd. Uložte obsah do mezipaměti pro další požadavky. Zašlete vám zpracovaný obsah

Příklady kódu

Začněte vytvořením základní funkce bez serveru zdarma:

Než budeme moci ukládat do mezipaměti, musíme nastavit úložiště mezipaměti. Zdá se, že všichni Redis milují; pojďme s tím. Zde je super rychlý návod k nastavení úložiště mezipaměti a serveru mezipaměti pomocí Redis zdarma:

V kořenovém adresáři funkcí nainstalujte pomocí nástroje CLI sadu Redis SDK. Používám Node, takže mohu nainstalovat pomocí npm:

npm install --save redis

Importujte sadu SDK do index.js vaší funkce soubor:

const redis = require('redis');

Sada SDK potřebuje vědět, jak s vámi komunikovat mezipaměti Azure Redis. Musíte mu dát nějaké přihlašovací údaje. To lze provést vytvořením klienta:

const createClient = redis.createClient(6380, process.env['REDIS_CACHE_HOSTNAME'], {
 auth_pass: process.env['REDIS_CACHE_KEY'],
 tls: { servername: process.env['REDIS_CACHE_HOSTNAME'] }
 });

Přístup k přihlašovacím údajům je z local.settings.json env proměnné. Nastavte tyto proměnné na hodnoty, které jste získali při vytváření serveru Redis:

{
 "IsEncrypted": false,
 "Values": {
 "AzureWebJobsStorage": "",
 "FUNCTIONS_WORKER_RUNTIME": "node",
 "REDIS_CACHE_HOSTNAME": "🙈",
 "REDIS_CACHE_KEY": "🙈"
 },
}

Rozhraní API Redis Node jsou poháněna zpětnými voláními – stará škola, že? Chceme sliby, asynchronní a všechny ty skvělé věci. Rozhraní API můžete slíbit pomocí util knihovna z jádra Node:

const promisify = require('util').promisify;

const getAsync = promisify(client.get).bind(client);
const setAsync = promisify(client.set).bind(client);

Nyní můžete získat a nastavit položky z mezipaměti:

async function processRequest(week, day) {
 const pathToChallenge = `week-${week}/challenge-${day}/README.md`;
 const client = redisClient();
 const challengeFromRedis = await redisGet(pathToChallenge);

 // Check if challenge exists in cache
 if (challengeFromRedis) {
 // It does exist

 // Response
 return { content: challengeFromRedis };
 } else {
 // Does not exist

 // Fetch challenge from Github
 const response = await fetchChallenge(week, day);

 // Process markdown
 const decodedReadme = decodeContent(response.data.content);

 // Upload markdown images to CDN
 const markedContent = await parseMarkdown(decodedReadme, week, day);

 // Add to cache
 await redisSet(pathToChallenge, markedContent);

 // Respnse
 return { content: markedContent };
 }
}

Pokud vás zajímá, jak zneplatníme mezipaměť při aktualizaci obsahu na Github, podívejte se na moje řešení pro [Challenge Day 3](Odkaz na den 3).

Chcete předložit své řešení této výzvy? Vytvořte řešení lokálně a poté PR toto repo. Pokud vaše řešení nezahrnuje kód, můžete nahrát krátké video a odeslat ho jako PR do stejného úložiště. Nezapomeňte nám říci, pro kterou výzvu je řešení určeno. Jsme nadšeni, že uvidíme, co postavíte! Máte připomínky nebo dotazy? Přidejte je do oblasti komentářů níže.

Sledujte překvapení během prosince, kdy slavíme 25 dní Serverless. Zůstaňte naladěni zde na dev.to, protože přinášíme výzvy a řešení! Zaregistrujte si bezplatný účet v Azure a připravte se na výzvy!