рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рд╕рд░реНрд╡рд┐рд╕ рдкреИрдХ рдкреЗрд╢ рдХрд┐рдпрд╛ред рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдЕрдкрдбреЗрдЯ рд╢рд╛рдорд┐рд▓ рдерд╛ред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдЬрдм рд╡рд┐рддрд░рд┐рдд рдХреИрд╢рд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдордирд╛ - рдХреИрд╢ рдмрд╣реБрдд рдзреАрд░реЗ рдзреАрд░реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЪреВрдВрдХрд┐ Windows Azure рдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдХреИрд╢реЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реИрдВрдкрд▓ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ
30-100 ms рд▓рдЧ рдЧрдП, рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХреЛ рдЧрддрд┐ рджреЗрддрд╛ рд╣реИред
рддреЛ, рдХреНрдпрд╛ рд╕рдВрдЪрдп рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ?
Microsoft рдиреЗ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрди-рдореЗрдореЛрд░реА рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ред рдЕрдм рдбреЗрдЯрд╛ рдХрд┐рд╕реА рдПрдХрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдПрдХ рд╕рд░реНрд╡рд░ рд╕реНрдореГрддрд┐ рдФрд░ рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рддреБрд░рдиреНрдд рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИред рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХреИрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ ASP.NET MVC 3 (рд╕реА #) рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╡рд░реНрд╖ рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред
рдХреИрд╢рд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛
рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдВ:
public interface ICacheProvider { void RemoveFromCache(string key); T GetFromMethod<T>(string cacheKey, TimeSpan cacheDuration, Func<T> method); T GetFromMethod<T>(string cacheKey, Func<T> method); }
рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХреБрдВрдЬреА рд╕реЗ рдХреИрд╢ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдмрд╛рдХреА рдХреЛ рдХреБрдВрдЬреА рдФрд░ рдЕрд╡рдзрд┐ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рдЕрдЧрд░ рдХреЛрдИ рдХреИрд╢ рдирд╣реАрдВ рд╣реИ)ред
рдЕрдЧрд▓реЗ рдХрджрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рддрд╛ рд╣реА рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдПрд╕рдбреАрдХреЗ 1.7 рдХреА рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрд╛рд╕ рд╡рд┐рдВрдбреЛрдЬрд╝ рдПрдЬрд╝реНрдпреЛрд░ рдХреЗ рддрд╣рдд рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдШрдЯрдХ рд╣реИрдВрд╣рдо рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдХреИрд╢ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕реЗ рд╕рдлрд╝рд╛рдИ рд╣реИ, рддреЛ рдЖрдк рдЕрджреНрдпрддрди рдХреЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рдиреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдорд╛рдиреНрдпрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ,
- рдХреИрд╢ рдореЗрдВ рд▓рд┐рдЦреЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧрд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;
- рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдХреИрд╢рд┐рдВрдЧ рдореБрдлреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреИрд╢ рдПрдХреНрд╕реЗрд╕ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкреНрд░рджрд╛рддрд╛ рдЦреБрдж рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
public class AzureCacheProvider : ICacheProvider {
; public class AzureCacheProvider : ICacheProvider {
]; public class AzureCacheProvider : ICacheProvider {
; public class AzureCacheProvider : ICacheProvider {
; public class AzureCacheProvider : ICacheProvider {
HttpContext.Current.Items
рдлрд┐рд░ рд╕реЗ рдЗрд▓рд╛рдЬ рдбреЗрдЯрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреИрд╢ рд╕реЗ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░реЛрдз рд╡рд╕реНрддреБ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕реНрдореГрддрд┐ рдореЗрдВ рджреБрдХрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рднреВрдорд┐рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕
рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдХреИрд╢ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрд╕рдбреАрдХреЗ 1.7 рдореЗрдВ, рднреВрдорд┐рдХрд╛ рдЧреБрдгреЛрдВ рдореЗрдВ рдПрдХ рдирдпрд╛ рдХреИрд╢рд┐рдВрдЧ рдЯреИрдм рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕ рдЯреИрдм рдкрд░, рдХреИрд╢ рд╕рдкреЛрд░реНрдЯ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ (рдХреИрд╢рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ) рдФрд░ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рд╕рд╣-рд╕реНрдерд┐рдд рднреВрдорд┐рдХрд╛: рдХреИрд╢ рдЖрдХрд╛рд░ 30%)
web.config
рдЕрдВрддрд┐рдо рддреИрдпрд╛рд░реА Web.config рдХреЗ рдирдП рдЦрдВрдбреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛрдЧреАред рдпрджрд┐
configSections
рдЕрдиреБрднрд╛рдЧ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЧрд╛рдпрдм рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЕрдВрджрд░ рдбрд╛рд▓реЗрдВ:
<section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere"/>
Web.config рдХреЗ рдЕрдВрдд рдореЗрдВ
dataCacheClients
рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реЗрдВ:
<dataCacheClients> <tracing sinkType="DiagnosticSink" traceLevel="Error" /> <dataCacheClient name="default"> <autoDiscover isEnabled="true" identifier=" Web-, " /> </dataCacheClient> </dataCacheClients>
= "рддреНрд░реБрдЯрд┐" /> <dataCacheClients> <tracing sinkType="DiagnosticSink" traceLevel="Error" /> <dataCacheClient name="default"> <autoDiscover isEnabled="true" identifier=" Web-, " /> </dataCacheClient> </dataCacheClients>
рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред
рдХреИрд╢ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ
рдХреИрд╢ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреГрд╖реНрда рдмрдирд╛рдПрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЛ рдХреИрд╢ рдХрд░реЗрдЧрд╛:
<h1>Cache test</h1> Before: <%=DateTime.Now.Millisecond%> ms<br/> <%=Facade.Instance.Cache.GetFromMethod("currentTime", () => DateTime.Now)%><br/> After: <%=DateTime.Now.Millisecond%> ms<br/> <%using(Html.BeginForm("ClearCache","Admin"))%> <%{%> <input type="submit" value="Clear Cache"/> <%}%>
", "рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ"))%> <h1>Cache test</h1> Before: <%=DateTime.Now.Millisecond%> ms<br/> <%=Facade.Instance.Cache.GetFromMethod("currentTime", () => DateTime.Now)%><br/> After: <%=DateTime.Now.Millisecond%> ms<br/> <%using(Html.BeginForm("ClearCache","Admin"))%> <%{%> <input type="submit" value="Clear Cache"/> <%}%>
Facade.Instance.Cache
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ,
Facade.Instance.Cache
рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ
AzureCacheProvider
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХрд╛рд░реНрд░рд╡рд╛рдИ
ClearCache
рд╕рд░рд▓ рдкрд░реНрдпрд╛рдкреНрдд рджрд┐рдЦрддрд╛ рд╣реИ:
public ActionResult ClearCache() { Facade.Instance.Cache.RemoveFromCache("currentTime"); return View("admin"); }
рдкрд░рд┐рдгрд╛рдо
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреГрд╖реНрда рдХреЛ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВ:
Cache test
Before: 553 ms
6/10/2012 11:09:40 AM
After: 569 ms
рдкреНрд░рдердо рдкреГрд╖реНрда рдЦреЛрд▓рдиреЗ рд╕рдВрдЪрдп, рдЬреЛ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд╣реАрдВ 16ms рд▓реЗрддрд╛ рд╣реИ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдЬреЛрдбрд╝рдиреЗ рдЖрддрд╛ рд╣реИред рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдкреГрд╖реНрда рддрд╛рдЬрд╝рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
Cache test
Before: 508 ms
6/10/2012 11:09:40 AM
After: 508 ms
рдирдП рдЗрди-рдореЗрдореЛрд░реА рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрдЯреЗрдб рдХреИрд╢ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ 1ms рд╕реЗ рдХрдо рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдЧрддрд┐ рд╕реЗ, рдпрд╣ рдХреИрд╢ InProc рдХреИрд╢ рд╕реЗ рдиреАрдЪ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдкрд╣рд▓реЗ рдХреИрд╕реЗ рдерд╛?
рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдХреИрд╕реЗ рдерд╛, рдЖрдкрдХреЛ рдПрд╕рдбреАрдХреЗ рдХреЛ 1.6 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рд╡реЗрдм.рдХреЙрдиреНрдлрд┐рдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрд╢реЛрдзрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд░реНрдЧ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
dataCacheClients
рд░рд╣реЗ рд╣реИрдВ:
<dataCacheClients> <dataCacheClient name="default"> <hosts> <host name="[ ID].cache.windows.net" cachePort="22233" /> </hosts> <securityProperties mode="Message"> <messageSecurity authorizationInfo="[ ]"></messageSecurity> </securityProperties> </dataCacheClient> </dataCacheClients>
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдкреГрд╖реНрда рдЦреЛрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВ:
Cache test
Before: 521 ms
6/10/2012 11:09:40 AM
After: 550 ms
рдпрд╛рдиреА рдХреИрд╢ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдкреГрд╖реНрда рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж 29 рдПрдордПрд╕:
Cache test
Before: 501 ms
6/10/2012 11:09:40 AM
After: 533 ms
32 рдПрдордПрд╕ рдПрдХ рдХреИрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдкрд░рд┐рдгрд╛рдо
рдирд╡реАрдирддрдо рдирд╡рд╛рдЪрд╛рд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдХреА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ - рд╡рд┐рддрд░рд┐рдд рдХреИрд╢рд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ред рдЕрдм рдЖрдк рдПрдХ рд╡рд┐рддрд░рд┐рдд рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ, рдЧрд┐рд░рд╛рд╡рдЯ рдЖрд╡реЗрджрди рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдбрд░ рдХреЗ рдмрд┐рдирд╛ рдЬрдмрдХрд┐ рдЬреЛ рд▓реЛрдЧ Azure рдмрд╛рджрд▓ рдХреЗ рдЕрдВрджрд░ рдЕрдиреНрдп рдЙрдкрдХрд░рдг рдХрд░рддреЗ рдереЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рд▓реМрдЯ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХ Windows Azure рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред