it-swarm-eu.dev

Servis úkolů na pozadí na velkém webu

Zabýváme se zajímavým problémem v StackOverflow.

Máme spoustu malých úkolů „je třeba udělat brzy - ish“. Příkladem je aktualizace seznamů souvisejících otázek. V minulosti jsme provedli tyto úkoly na načtení stránky některých uživatelů.

To nebylo nikdy ideální, ale nebylo to znatelné. Nyní, když SO prošlo otazníkem 1 000 000, ti nešťastní uživatelé to začínají cítit).

Přirozeným řešením je skutečně tyto úkoly posunout do pozadí. Uvažuji o tom dvěma širokými způsoby.

1. V IIS jako vlastní podprocesová/pracovní fronta)

V zásadě roztočíme několik (non - ThreadPool , abychom nezasahovali do IIS) vláken a nechali jim obsluhovat některé kolekce, do kterých strkáme Funcs .

Velkou výhodou je jednoduchost. Nemusíme si dělat starosti s ničím zařazováním, ani se musíme ujistit, že nějaká externí služba funguje a reaguje.

Rovněž získáme přístup ke všem našim společným kódům.

Con je, že bychom neměli používat podprocesy na pozadí. Námitky, o kterých vím, se soustředí na hladovění IIS (pokud používáte ThreadPool) a vlákna náhodně odumírající (kvůli recyklaci AppPool).

Máme existující infrastrukturu, díky níž se náhodná smrt vlákna nevyskytuje (v podstatě je možné detekovat úlohu), a není obtížné ani omezit počet vláken (a použití vláken jiných než ThreadPool).

Chybí mi nějaké další námitky k IIS procesním sdružování vláken/pracovních front?

Přesunuto do StackOverflow , protože zde to ve skutečnosti nebylo řešeno.

2. Jako služba

Buď nějaké řešení třetí strany, nebo vlastní řešení.

V zásadě bychom zařadili úkol přes hranice procesu k nějaké službě a prostě na to zapomněli. Pravděpodobně propojujeme nějaký kód nebo je omezeno na surový SQL + připojovací řetězec.

Pro je, že je to „správný způsob“, jak toho dosáhnout.

Nevýhody jsou v tom, že jsme buď velmi omezeni v tom, co můžeme udělat, nebo budeme muset vymyslet nějaký systém pro udržení této služby v synchronizaci s naší kódovou základnou. Také musíme nějakým způsobem zapojit veškeré naše monitorování a protokolování chyb, které získáme zdarma s volbou „In IIS“.

Existují nějaké další výhody nebo problémy s přístupem ke službám?

Stručně řečeno, existují nepředvídatelné a nepřekonatelné problémy, které způsobují, že přístup # 1 je neproveditelný, a pokud ano, existují dobré služby třetích stran, měli bychom se podívat na přístup # 2?

49
Kevin Montrose

Před několika týdny jsem se zeptal podobná otázka na SO. Stručně řečeno, Shell, můj přístup již nějakou dobu spočívá ve vývoji služby Windows. Použil bych NServiceBus (v podstatě MSMQ pod kryty) k zařazování požadavků z mé webové aplikace na moji službu. Použil jsem WCF, ale dostat distribuovanou transakci, aby správně fungoval přes WCF, vždy vypadal jako bolest v zadku. NServiceBus udělal trik, dokázal jsem v transakci odevzdat data a vytvářet úkoly a netrápit se, zda moje služba byla v té době funkční. Jako jednoduchý příklad, pokud bych někdy potřeboval poslat e-mail (například registrační e-mail), vytvořil bych uživatelský účet a při transakci vypálil signál do své služby Windows (k odeslání e-mailu). Obsluha zpráv na straně služby by zprávu zvedla a podle toho zpracovávala.

Vzhledem k tomu, že byly uvolněny funkce ASP .NET 4.0 a AppFabric, existuje řada životaschopných alternativ k výše uvedenému mechanismu. S odvoláním na výše uvedenou otázku nyní máme AppIabial's AppInitialize (přes síť. pipe) a také ASP .NET 4.0 je funkce Auto-Start, díky které je vývoj Windows Services jako webových aplikací schůdnou alternativou. Začal jsem to dělat hned z několika důvodů (největší) nasazení už není bolest v zadku):

  1. Prostřednictvím své služby můžete vytvořit webové uživatelské rozhraní (protože běží jako webová aplikace). To je nesmírně užitečné sledovat, co se děje za běhu.
  2. Váš model nasazení webových aplikací bude fungovat pro vaši servisní aplikaci.
  3. Služba IIS poskytuje několik úhledných funkcí pro řešení selhání aplikací (v některých ohledech podobná službě Windows).
  4. Weboví vývojáři jsou velmi dobře obeznámeni s vývojem webových aplikací (přirozeně), většina z nich neví o osvědčených postupech při vývoji služby Windows.
  5. Poskytuje řadu alternativ k vystavení API pro jiné aplikace ke spotřebě.

Pokud půjdete touto cestou (odpusťte mi kopírování a vkládání z mého původního příspěvku), rozhodně bych uvažoval o spuštění logiky pozadí v samostatné webové aplikaci. Existuje několik důvodů:

  1. Zabezpečení . Může existovat odlišný model zabezpečení pro UI zobrazující informace o běžících procesech na pozadí. Nechtěl bych vystavit toto uživatelské rozhraní nikomu jinému než týmu ops. Webová aplikace může také běžet jako jiný uživatel, který má zvýšenou sadu oprávnění.
  2. Údržba . Bylo by skvělé zavést změny do aplikace hostující procesy na pozadí, aniž by to mělo dopad na uživatele používajícího webové stránky front-end.
  3. Výkon . Oddělení aplikace od uživatelských požadavků na zpracování hlavního webu znamená, že podprocesy na pozadí nebudou snižovat schopnost IIS zpracovat frontu příchozích požadavků. Kromě toho by aplikace, která zpracovává úkoly na pozadí, mohla být v případě potřeby nasazena na samostatný server.

Tím se vrátíme zpět k maršálskému aspektu. WCF, NServiceBus/RabbitMQ/ActiveMQ atd., Vanilla MSMQ, RESTful API (myslím MVC) jsou všechny možnosti. Pokud používáte Windows Workflow 4.0, můžete vystavit koncový bod hostitele, který by vaše webová aplikace mohla spotřebovat.

Webhostingový přístup ke službám je pro mě stále zcela nový, pouze čas ukáže, zda to byla správná volba. Zatím je to tak dobré. Mimochodem, pokud nechcete používat AppFabric (nemohl jsem, protože z nějakého bizarního důvodu Windows Server Web Edition není podporován), funkce Auto-Start uvedená v příspěvku Gu funguje dobře. Držte se dál od souboru applicationhost.config, ale vše v tomto příspěvku je možné nastavit pomocí konzoly IIS (Editor konfigurace na úrovni hlavního serveru)).

Poznámka: Původně jsem v této zprávě zveřejnil několik dalších odkazů, ale bohužel, toto je můj první příspěvek na této burze a je podporován pouze jeden odkaz! V zásadě existovali další dva, kteří jim dali Google „Death to Windows Services ... Long Live AppFabric!“ a „auto-start-asp-net-apps“. Omlouvám se za to.

17
Rohland

Ve Windows je ve skutečnosti třetí způsob, jak provozovat služby na pozadí, a ve světě UNIX je velmi běžný. Třetím způsobem je úloha CRON, která spouští část vaší infrastruktury. Ve Windows se to nazývá task scheduler a je velmi časté pro pravidelné spouštění kódu. Chcete-li to použít, vytvořte aplikaci příkazového řádku, která je spuštěna podle předem definovaného plánu. Výhodou je to, že se nemusíte obávat, že proces zůstane funkční a běží jako služba, protože pokud z nějakého důvodu selže, spustí se příště.

Pokud jde o zařazování konkrétních úkolů, musíte je prostě uložit do trvalého binárního úložiště. Dokud je aplikace příkazového řádku nevybere z úložiště a nespustí je. Udělal jsem to v minulosti pomocí databáze Cassandra jako poskytovatele stavu relace) pro plnění úkolů na pozadí pro konkrétní uživatele v databázi Cassandra) a poté jsem měl příkazový řádek je vybrat a spustit pro uživatele.

Možná to nebylo typické řešení pro zařazování, ale fungovalo to pro mě velmi dobře a ukázalo se, že je to velmi elegantní řešení, protože naplánované úkoly přežily vypínání, problémy se sítí a jakýkoli stroj mohl úkol provést, protože byl centrálně uložené.

Nestydatá propagace, ale toto je můj projekt a řešení, které jsem stručně podrobně popsal, je důvod, proč jsem projekt vytvořil: http://github.com/managedfusion/fluentcassandra/

22
Nick Berardi

Webová aplikace Cron +

Jedná se o bitevně testovaný design, který se škáluje vodorovně spolu s vaší webovou farmou a zajišťuje, že používáte zásobník webových technologií , který již znáte.

Funguje to takto:

  1. Vytvořte ve své webové aplikaci řadič/akci pro zpracování naplánovaných úkolů na pozadí. Konvencí obvykle nazývám důl http://mydomain.com/system/cron.
  2. Z důvodu zabezpečení by měla být tato akce uzamčena pouze na ověřené adresy IP v místní síti.
  3. Na samostatném počítači nainstalujte Wget a nastavte Scheduled Task , aby wget načkal zdroj z kroku 1. Úkol můžete nechat běžet tak často, jak chcete (obvykle volte po dobu 30 sekund). Nezapomeňte předat argument příslušného souboru cookie společnosti Wget, aby se ověřil ve vaší webové aplikaci.
  4. Pro redundanci můžete také nainstalovat druhý naplánovaný wget na druhý počítač.

Hurá! Nyní máte trasu, která bude volána každých 30 sekund. A pokud zpracování žádosti trvá 5 minut, nikdo se nestará, protože to není součástí požadavku na stránku uživatele.

Akce cron vypadá velmi jednoduše: má seznam metod k provedení na určité frekvenci. Když přijde žádost, uvidí, zda existuje metoda, kterou je třeba provést, a zavolá příslušnou metodu. To znamená, že můžete plán ovládat ve své databázi , kde pravděpodobně již máte spoustu dalších důležitých konfiguračních dat pro svůj web.

A co je důležitější (pro vás), to znamená, že vaše úkoly nemusí být volány v pevném rozvrhu. Můžete napsat jakoukoli logiku, kterou chcete určit, kdy provést metodu.

Výhody a nevýhody

  • Už jste velmi dobře v psaní kódu ASP.NET MVC, takže vám umožní psát své úkoly na pozadí na stejné platformě , kterou napíšete zbytek vaše řešení v.
  • Úkoly běží ve stejném kontextu jako vaše webová aplikace, takže můžete sdílet mezipaměť a využít pomocníka metody , které již existují.
  • Pokud jste vyzkoušeli načtení URI URI vyrovnaného zatížení , pak jsou vaše úkoly na pozadí nyní také vyrovnávány zatížení.
  • Simultánní nasazení - nemusíte se obávat synchronizace webové aplikace s logikou úkolů na pozadí, protože jsou všechny ve stejném nasazení.
  • V průběhu let mi několik lidí řeklo, že tento design je „velmi spřažený“, ale po stisknutí nedokázali artikulovat, proč je to špatná věc.

Poznámka: Pokud máte nějaké dotazy nebo připomínky, přidejte komentář. Jsem rád, že to propracovám.

10
Portman

Vyzkoušel jsem a použil téměř všechny možné způsoby, jak toho dosáhnout v mé současné aplikaci. Začal jsem dělat to samé, co v současné době děláte, prasátko zpět na žádost uživatele, aby vyplnil data a pak je uložil do mezipaměti. Uvědomil jsem si, že to byl také špatný nápad (zvláště když škálováte na více webových serverů, více uživatelů zasáhne).

Také jsem měl naplánovanou práci, která zasáhne URL v aplikaci ASP.NET - to je slušné řešení, ale začíná to rozebírat minutu, kterou změníte kolem 1 webového serveru.

V současné době používám dvě různé metody, obě pomocí Quartz.NET, což je velká malá knihovna. První je Quartz.NET běžící v procesu s ASP.NET, je nastaven v global.asax a běží každých pár minut. Používám to k aktualizaci mezipaměti ASP.NET mimo pásmo, což je jediný důvod, proč se spouští jako součást ASP.NET.

Druhým je, že jsem napsal knihovnu, která zabalila Quartz.NET s názvem DaemonMaster - usnadňuje přetažení a DLL) do adresáře a jeho spuštění ve službě Windows. některé z nepříjemných částí práce se službou Windows Service a také některé vyčistí API Quartz.NET. Služby, které běží přes DaemonMaster, mají dvě různé příchutě, první jsou úlohy, které je třeba spouštět každou noc nebo každých X minut. další úlohy fungují mimo frontu na základě dat přicházejících z aplikace ASP.NET. Aplikace ASP.NET vyřadí objekty JSON na RabbitMQ a průzkum služeb RabbitMQ pak data zpracuje.

Na základě toho bych navrhl, abyste šli se službou Windows (a vyzkoušejte DaemonMaster) a v případě potřeby použijte frontu jako RabbitMQ pro předávání dat z aplikace ASP.NET službám - fungovalo to nejlepší ze všech těchto řešení . Pokud načítáte mezipaměť, pak běží v ASP.NET, má smysl, jinak si to nemyslím.

7
James Avery

Udělal bych to správným způsobem a nechal jsem běžet službu Windows Service, která monitoruje „frontu“. Říkám "fronta", protože programování s MSMQ je podobné lepení horkých pokerů ve vašich očních bulvách.

Zamiloval jsem se do jednoduchosti Delayed :: Job v Rails a něco podobného by se dalo snadno udělat v .NET.

V podstatě přidáte jakýkoli druh SomethingOperation (něco, co má metodu Perform()). Pak stačí serializovat příslušné parametry, dát mu prioritu, nějaký druh výchozího opakování chování a vložit jej do databáze.

Vaše služba by to pouze monitorovala a zpracovávala úlohy ve frontě.

6
Ben Scheirman

S přístupem k servisní sběrnici/frontě zpráv/služeb jsme byli velmi spokojení. Základní architektura je toto.

Web odešle zprávu do fronty

bus.Send(new ProjectApproved()); // returns immediately

Služba Windows přijímá a zpracovává zprávu ve svém vlastním čase

public class DoesSomethingAwesome : ConsumerOf<ProjectApproved>
{
   public void Consume(ProjectApproved Message)
   {
      // Do something "offline"
   }
}

Výhoda spočívá v tom, že u front-end služby, ke které jsou připojeni i uživatelé, není zpoždění. Službu systému Windows lze vypnout a upgradovat bez přerušení na hlavní web. Navíc je to velmi rychle.

Pokud ve zprávě nemůžete uložit všechna data, můžete je vždy uložit a načíst později. Navrhuji použít mechanismus ukládání dokumentů, jako například: RavenDB nebo MongoDB , kde je velmi přímé ukládání vašich tříd beze změn.

Web odešle zprávu do fronty

// Save your object
store.Save(completeProject);

// Send a message indicating its ready to be processed
bus.Send(new ProjectApproved() { ProjectId = completeProject.Id });

Služba Windows přijímá a zpracovává zprávu ve svém vlastním čase

public class DoesSomethingAwesome : ConsumerOf<ProjectApproved>
{
   public void Consume(ProjectApproved Message)
   {
      // Retrieve your object back
      var completeProject = store.Get(Message.ProjectId);
   }
}

Pro zjednodušení používáme: Rhino ESB a Topshelf . Konfigurace je velmi jednoduchá a její zavedení pro existující aplikaci se ukázalo jako velmi málo času.

4
Nathan Palmer

Jsem zvědavý, proč kombinace těchto dvou není schůdnou možností. Právě teď spouštíte úlohy na zobrazení stránky, s nějakou nešťastnou mízou, která uvízla, čeká 10 sekund, než se stránka objeví. Alespoň to je moje chápání vaší současné metody.

S růstem webu však tyto úlohy běží déle a déle a vy nechcete vykořisťovat uživatelské prostředí webu. Dokonce ani pro pár (nebo možná hodně) nešťastných uživatelů po celý den, takže nyní přemýšlíte o plánování úloh na pozadí.

Nechápu, proč práce na pozadí běžící v pravidelných intervalech nemůže napodobit návštěvníka. Nyní nejsem programátor Windows, ale ve světě Linuxu bych nastavil cronovou úlohu, která běží v pravidelných intervalech, a měla by 2 řádky kódu.

#!/bin/bash
wget -O /dev/null http://stackoverflow.com/specially_crafted_url

Kombinuje výhody obou systémů. Děje se to na pozadí. Neovlivňuje to uživatele. K zahájení úlohy stále používá zobrazení stránky. Tento přístup jsem už viděl dříve. To bývá prostředním prostředím mezi jednoduchými způsoby starých a složitějšími způsoby sestupujícími po silnici.

Aktualizace

Myslím, že problém s vyrovnáváním zatížení můžete vyřešit spuštěním běžců úloh na samotných webových serverech. Běžec úlohy vytáhne adresu URL z fronty úloh a spustí ji takto:

wget -O /dev/null http://localhost/specially_crafted_url

Kvůli povaze front úloh/zpráv se úlohy rovnoměrně rozdělí mezi běžce úloh, což znamená, že speciálně vytvořený_url je nakonec distribuován mezi vaše webové servery.

3
mellowsoon

Myslím, že s přístupem čistě služby je to, že máte kód rozptýlený do služby a mimo základní aplikaci.

Tady je to, co jsme udělali s velkými úlohami na pozadí, které nejsou citlivé na čas, což udržuje kód pohromadě a zjednodušuje službu:

  1. Vytvořte frontu úloh (buď v paměti nebo v databázi DB, bez ohledu na to, jak je pro typy úloh třeba vytrvat)
  2. Vytvořte webovou službu, která bude vykonávat úlohy ve frontě
  3. Mrtvá jednoduchá servisní aplikace, která volá webovou službu ve specifikovaném intervalu, ponechává veškeré složité věci (vyhledávání a provádění úloh) webové službě ve vaší základní kódové základně.

Ještě jednodušší je zavolat v konzolové aplikaci a pomocí Plánovače úloh nebo VisualCronu přeměnit na „službu“.

2
Brandon

Resque je Nice. Nebo dokonce Kthxbye , pokud potřebujete být informováni o výsledné hodnotě, jakmile bude dokončena.

Obě založené na Redis/Ruby.

Upřímně řečeno, pokud děláte přístup založený na službách, opravdu to nemusí být superintegrováno s vaší současnou platformou, což je podle mě plus. Doufám, že by to mohl být set-and-forget systém, který by běžel (s nějakým monitorováním) a dokončoval úkoly. Nejsem si jistý, že musí být spuštěn na stejné platformě od jeho právě aktualizujících/upravujících informací o databázi.

Určitě byste se mohli dostat daleko víc za mnohem méně, pokud jste tento druh farmy zpracovali na samostatnou entitu, zejména proto, že se zdá, že se zabýváte problémy se závitem. Resque a Kthxbye přesouvají zpracování do samostatných procesů, aby OS mohly zpracovat souběžnost.

Resque

Kthxbye

1
Lukas

Líbilo se mi TopShelf. Zachovává jednoduchost, přesto to dělá správným způsobem jako služba Windows. V zásadě vytvořte aplikaci Console, přidejte asi 15–20 řádků kódu a poté ji nainstalujete jako službu.

http://code.google.com/p/topshelf/

1
Shane

Co takhle mít velmi jednoduchou službu Windows, která běží na webovém serveru a pravidelně zasahuje URL údržby, která provádí vaše různé úkoly. Nechte jej škrtit, kolik práce v dané žádosti dělá.

1
Rob Sobers

Chystám se zde vyrazit zjevný trend a navrhnout jít za model in-IIS. Použil jsem to sám a funguje to opravdu dobře. Opravdu není tak těžké implementovat slušnou třídu podprocesů (v průběhu let jsem svou třídu podprocesů rozšířil o podporu dynamického vytváření a ničení podprocesů, opakování úkolů atd.). Výhody jsou:

  • Žádná externí služba k monitorování
  • Jednoduchost implementace: žádné zařazování napříč procesy, žádné pokročilé monitorování úlohy
  • Jste stále uvnitř procesu IIS), takže můžete provádět všechny obvyklé protokolování atd. (Není třeba více souborů protokolu)
  • Velice zjednodušené nasazení (při aktualizaci služby musíte službu zastavit, zkopírovat soubory, spustit službu - to je kromě obvyklých aktualizací kódu webové stránky)

Podle mého názoru je řešení in-IIS jednoduše „dalším krokem nahoru“ od nasazení práce na náhodné zobrazení stránek.

1
Dean Harding

Fronta úloh Java Přehled API

Koncepty úkolů
Při zpracování na pozadí aplikace Engine je úkolem úplný popis malé jednotky práce. Tento popis se skládá ze dvou částí:

  • Údajové zatížení, které parametrizuje úlohu.
  • Kód implementující úkol.

Úlohy jako offline webový hák
Naštěstí Internet takové řešení již poskytuje, ve formě požadavku HTTP a jeho odpovědi. Užitečné zatížení dat je obsahem požadavku HTTP, jako jsou proměnné webového formuláře, XML, JSON nebo kódovaná binární data. Odkaz na kód je samotná adresa URL; skutečný kód je jakákoli logika, kterou server provede při přípravě odpovědi.

0
antony.trupe

Použil bych WAS hostovanou službu WCF k poslechu fronty MSMQ.

Klady

  • Spusťte a zapomeňte na jednosměrné zprávy z webové aplikace

  • Škrcení a opakování MSMQ/WCF

  • Zaručené doručení;

  • Správa mrtvých dopisů

  • Distribuované zpracování

  • Aktivace WAS/MSMQ

Nevýhody

  • MSMQ (není mrtvý ...)

Díky funkcím MSMQ v WCF je používání MSMQ opravdu pěkné. Ano, krvácíte z konfigurace, ale výhody převáží nad obětí.

0
Adam

Při vývoji webových aplikací se na to několikrát narazím. Řešili jsme to vytvořením aplikace konzoly systému Windows, která provádí úlohu, a vytvořením naplánované úlohy, která se spustí tak často, aby skutečně provedla úlohu.

0
John Christensen

Práce můžete posunout na vlákno na pozadí (nebo na mnoho vláken na pozadí) pomocí Rx a něco jako následující:

var scheduler = new EventLoopScheduler( SchedulerThreadName );
_workToDo = new Subject<Action>();
var queueSubscription = _workToDo.ObserveOn( scheduler ).Subscribe( work => work() );
_cleanup = new CompositeDisposable( queueSubscription, scheduler );

Použít:

var work = () => { ... };
_workToDo.OnNext( work ); // Can also put on error / on complete in here

Hostujte vše uvnitř třídy, ve které existuje pouze jeden (aka také singleton, ale udělejte to správně - k určení životního stylu použijte kontejner IoC).

Velikost fondu podprocesů atd. Můžete ovládat napsáním vlastního plánovače namísto použití EventLoopScheduler (který spouští jeden podproces).

0
Neal

Udělejte obojí

Přidejte volitelný parametr do cesty k otázce, která vykonává práci, kterou v současné době na žádost uživatele vezmete:

Údržba úkolů na pozadí na velkém web

Vytvořte aplikaci konzoly, která se spouští na každém serveru a otevírá sdílený binární soubor IIS) a čte jej na aktuální konec souboru. Pomocí souboru filesystemwatcher nebo časovaného intervalu můžete číst dál a shromažďovat aktualizace jako IIS vyprázdnil protokol.

Pomocí těchto informací můžete určit, které stránky byly aktuálně zobrazeny.

Použijte adresy URL stránky z analyzovaného protokolu k vyvolání „extrastuff“ verze adresy URL na localhost s objektem webclient.

Přidejte nějaký kód pro přepínání souborů na konci každého období protokolu nebo restartování procesu každého období protokolu.

0
Bill

Tento typ věcí jsem implementoval několikrát. V systému Windows jsem nastavil program příkazového řádku python), který dělá něco v různých časech. Tento program také vystavuje rozhraní xmlrpc na portu. Poté každou minutu spustí úlohu naplánované úlohy a dotazy rozhraní xmlrpc. Pokud nejsou, pokusí se je spustit. Pokud to není možné, pošle mi e-mailem.

Výhodou je, že spuštěná úloha není vázána na cron nebo plán. Mám zpracovávanou úlohu, která se spouští každou sekundu, ale bude čekat déle a déle mezi zahájením nové úlohy v závislosti na tom, zda měla práci. Může být také použit k inteligentnímu jednání na základě výsledku. Máte 500 chyb? Máte opravdu velké zpoždění? Udělejte něco jiného. Upozorněte jinou službu. Atd.

A stejný systém funguje na unixu s malými úpravami.

0
Christopher Mahan

Sama pro vás nemám odpověď, ale problém zazvonil na zvonek - vzpomínám si na několik náhodných chlapů jednou diskutovali o podcast .

Spolsky: Všiml jsem si, že jednou z otázek, které jste na blogu položili, bylo, jak byste měli obecně řešit opakující se úkoly údržby?

Atwood: Ano.

Spolsky: Je to spravedlivá charakterizace? Každý web má nějaké úkoly, které nechcete provádět v době, kdy se webová stránka načítá, ale chcete provádět s nějakou opakováním nějakého druhu.

Atwood: Ya, něco na pozadí.

Spolsky: Ya, tak co jsi přišel na to?

Atwood: No, původně jsem se ptal na Twitteru, protože jsem jen chtěl něco lehkého. Opravdu jsem nechtěl psát službu Windows. Cítil jsem se, jako by to bylo mimo kód skupiny. Plus kód, který ve skutečnosti funguje, je ve skutečnosti webovou stránkou, protože pro mě je logickou jednotkou práce na webové stránce webová stránka. Je to tak, jako bychom volali zpět na web, je to jako další požadavek na webu, takže jsem to viděl jako něco, co by mělo zůstat inline, a malý přístup, který jsme přišli, který mi byl doporučen na Twitteru bylo v podstatě přidat něco do mezipaměti aplikace s pevným vypršením, pak máte zpětné volání, takže když to vyprší, volá určitou funkci, která funguje, a poté ji přidáte zpět do mezipaměti se stejným vypršením. Je to tak trochu, možná „ghetto“ je to správné slovo.

0
Oddthinking