<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Maciej Grabek &#187; distributed cache</title>
	<atom:link href="https://blog.maciejgrabek.com/tag/distributed-cache/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.maciejgrabek.com</link>
	<description>/* Make it See Sharp - Windows Phone, C#, .NET i nie tylko */</description>
	<lastBuildDate>Mon, 27 Oct 2014 11:18:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>Velocity &#8211; dynamiczna konfiguracja klienta</title>
		<link>https://blog.maciejgrabek.com/2009/10/26/velocity-dynamiczna-konfiguracja-klienta/</link>
		<comments>https://blog.maciejgrabek.com/2009/10/26/velocity-dynamiczna-konfiguracja-klienta/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 20:11:00 +0000</pubDate>
		<dc:creator><![CDATA[maciek]]></dc:creator>
				<category><![CDATA[HOW TO]]></category>
		<category><![CDATA[distributed cache]]></category>
		<category><![CDATA[Velocity]]></category>

		<guid isPermaLink="false">http://maciejgrabek.com/maciek_blog/?p=9966</guid>
		<description><![CDATA[Od pewnego czasu zgłębiam tajniki projektu Velocity, czyli rozproszonego cache osadzonego w pamięci oferowanego przez Microsoft. Po tym jak przyjżymy się aplikacji (np webowej) zauważymy jeden bardzo dotkliwy problem. Wyobraźmy sobie dobrze zaprojektowany klaster serwerów obsługujących Velocity z wysoką dostępnością danych, regionami, odpowiednio ustalonymi politykami zarządzania obiektami w cache. Połączenie do klastra odbywa się poprzez leading host, który jest odpowiedzialny za komunikację pomiędzy klientem i klasterm. Jednakże co w przypadku, gdy taki host przestaje odpowiadać? Pierwsze co robimy to wystartowanie hosta w klastrze, który będzie odpowiadał za komunikację. W tym momencie możemy bez żadnych przeszkód uruchomić aplikację, w której host nie jest pobierany z pliku konfiguracyjnego, tylko ustawiany w kodzie jak widać poniżej: Uruchomienie przebiega pomyslnie – czyli tak jak powinien. Zobaczmy zatem co dzieje się w przypadku niedostępności hosta. Aby móc to przetestować trzeba zasymulować padnięcie serwera. Próba skorzystania z polecenia Stop-CacheHost w przypadku pojedynczego hosta w klastrze powoduje błąd kworum klastra – bo nie może on istnieć bez żadnego hosta… Oczywiste. Pozostaje zatem zatrzymanie całego klastra i zbadanie jak zachowa się aplikacja.   Jak to rozwiązać? W projekcie dodajemy klasę EndpointsProvider będącą definicją providera odczytującego informacje o endpointach czy to z bazy, czy nawet ze źródla RSS. Przy<a href="https://blog.maciejgrabek.com/2009/10/26/velocity-dynamiczna-konfiguracja-klienta/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p>Od pewnego czasu zgłębiam tajniki projektu Velocity, czyli rozproszonego cache osadzonego w pamięci oferowanego przez Microsoft. Po tym jak przyjżymy się aplikacji (np webowej) zauważymy jeden bardzo dotkliwy problem. Wyobraźmy sobie dobrze zaprojektowany klaster serwerów obsługujących Velocity z wysoką dostępnością danych, regionami, odpowiednio ustalonymi politykami zarządzania obiektami w cache. Połączenie do klastra odbywa się poprzez leading host, który jest odpowiedzialny za komunikację pomiędzy klientem i klasterm. Jednakże co w przypadku, gdy taki host przestaje odpowiadać?</p>
<p>Pierwsze co robimy to wystartowanie hosta w klastrze, który będzie odpowiadał za komunikację.</p>
<p><a rel="WLPP" href="https://y0ej2w.blu.livefilestore.com/y1mx_cYlXctApdEhoXe1YIxt84mKE9D0mhcZQM5GrRogESd0QsO9rAYuNK1TeYHJtGuUlZAd6C5MpOzB1e3YFZq2zZm0MHusRJDHH1h8bDT4cOOaaZeNU4w2rI6oKZm3yMflj0tAUjYHifmaAI9aQ7S8w/image[2].png"></a></p>
<p><a href="http://maciejgrabek.com/wp-content/uploads/2009/10/velocity1.png"><img class="alignnone size-medium wp-image-10192" title="velocity1" src="http://maciejgrabek.com/wp-content/uploads/2009/10/velocity1-300x151.png" alt="" width="300" height="151" /></a></p>
<p>W tym momencie możemy bez żadnych przeszkód uruchomić aplikację, w której host nie jest pobierany z pliku konfiguracyjnego, tylko ustawiany w kodzie jak widać poniżej:</p>
<p><a rel="WLPP" href="https://y0ej2w.blu.livefilestore.com/y1mv5fmGIIlhsxMO195Yr1spBFeX-TdLhs6k-TpHCYYnVRAh4SmpyZviFjpi_WZC_w-1lYtxyoZI2FzL_nxfnuwWjhitz15wOJ8os0H4Sw29HsRLNW5u5JD_QZwGIjMUyQBRwvcuaNseL7sw7WZKnkxjQ/image[5].png"></a></p>
<p><a href="http://maciejgrabek.com/wp-content/uploads/2009/10/velocity2.png"><img class="alignnone size-medium wp-image-10193" title="velocity2" src="http://maciejgrabek.com/wp-content/uploads/2009/10/velocity2-300x282.png" alt="" width="300" height="282" /></a></p>
<p>Uruchomienie przebiega pomyslnie – czyli tak jak powinien. Zobaczmy zatem co dzieje się w przypadku niedostępności hosta. Aby móc to przetestować trzeba zasymulować padnięcie serwera.</p>
<p><a rel="WLPP" href="https://y0ej2w.blu.livefilestore.com/y1myvZ7qZdDKj3NAn4s_8vQM_m3oQkePudHRl2HP58wDo9fC7Y1GZzC64wwlkShdclB6RzJHMSyGpZ9ai8xZ4gC9ZD8yLB2p7ne0yBmmJxdQiwNYSUbcbhD6o3kpOxmBWp0XXdNjoRhFSAzZ8yG1rgj5g/image[11].png"></a></p>
<p><a href="http://maciejgrabek.com/wp-content/uploads/2009/10/velocity3.png"><img class="alignnone size-medium wp-image-10194" title="velocity3" src="http://maciejgrabek.com/wp-content/uploads/2009/10/velocity3-300x151.png" alt="" width="300" height="151" /></a></p>
<p>Próba skorzystania z polecenia Stop-CacheHost w przypadku pojedynczego hosta w klastrze powoduje błąd kworum klastra – bo nie może on istnieć bez żadnego hosta… Oczywiste. Pozostaje zatem zatrzymanie całego klastra i zbadanie jak zachowa się aplikacja.</p>
<p><a rel="WLPP" href="https://y0ej2w.blu.livefilestore.com/y1mvFavqTI5aDUuGfFlForXu0ntWALb2UxD4Vo0sJWsgyyAyGR4mgAT9AyLwlWhZ39vSK9fLo3xhxZqpdlXCGRqPTyxoNhO1r8RtyO_eECaVR1v9hXwG7vPhorRWVIq8ghAyLl6FR38JekmQYA8ZdcAHQ/image[17].png"></a><a href="http://maciejgrabek.com/wp-content/uploads/2009/10/velocity4.png"><img class="alignnone size-medium wp-image-10195" title="velocity4" src="http://maciejgrabek.com/wp-content/uploads/2009/10/velocity4-300x91.png" alt="" width="300" height="91" /></a> </p>
<p>Jak to rozwiązać? W projekcie dodajemy klasę EndpointsProvider będącą definicją providera odczytującego informacje o endpointach czy to z bazy, czy nawet ze źródla RSS.</p>
<p><a rel="WLPP" href="https://y0ej2w.blu.livefilestore.com/y1mLF35BePEoQH--B453ujLVnUIYhp76XEaQqnfqwzyNzSwYea7FH7tTLXkGZP6zjbEFeKrwWLQcY5Cq-yyqpnTU_EmujkI9WCZ8gBecexbtcN19sHlrLa_LZ7PSu8gmft7hFGGJDqQU4TBYlyyHk4nCw/image[20].png"></a></p>
<p><a href="http://maciejgrabek.com/wp-content/uploads/2009/10/velocity5.png"><img class="alignnone size-medium wp-image-10196" title="velocity5" src="http://maciejgrabek.com/wp-content/uploads/2009/10/velocity5-300x146.png" alt="" width="300" height="146" /></a></p>
<p>Przy użyciu powyższego kodu proces inicjacji fabryki trwa tak długo, aż utworzenie istancji cache nie spowoduje zrzucenia błędu typu DataCacheException (lub wyczerpania puli hostów, lecz uznaję to za przypadek mało prawdopodobny w momencie utworzenia klastra z kilkoma serwerami i leading hostami…)</p>
<p>Mam nadzieję, że ten prosty workaround pomoże wam w rozwiązaniu problemu dynamicznej konfiguracji aplikacji bez konieczności zmian w plikach konfiguracyjnych.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.maciejgrabek.com/2009/10/26/velocity-dynamiczna-konfiguracja-klienta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
