Web geliştirme En Iyi uygulamaları (Azure ile Real-World bulut uygulamaları oluşturma)

, Mike te son, Rick Anderson, Tom Dykstra tarafından

Onarma projesini indirin veya E-kitabı indirin

Azure e-book Ile gerçek dünyada bulut uygulamaları oluşturma , Scott Guthrie tarafından geliştirilen bir sunuyu temel alır. Bulut için Web Apps 'i başarılı bir şekilde geliştirmeye yardımcı olabilecek 13 desen ve uygulamaları açıklar. E-kitap hakkında daha fazla bilgi için ilk bölümebakın.

İlk üç desen çevik bir geliştirme süreci ayarlamakmıştı. geri kalan mimari ve kodlardır. Bu, bir Web geliştirme en iyi uygulamaları koleksiyonudur:

Bu uygulamalar yalnızca bulut uygulamaları için değil tüm Web geliştirme işlemleri için geçerlidir, ancak özellikle de bulut uygulamaları için önemlidir. Bulut ortamı tarafından sunulan son derece esnek ölçeklendirmeyi en iyi şekilde kullanmanıza yardımcı olmak üzere birlikte çalışır. Bu uygulamaları izlemeden, uygulamanızı ölçeklendirmeye çalıştığınızda sınırlamalar ile karşılaşırsınız.

Akıllı yük dengeleyicinin arkasında durum bilgisiz Web katmanı

Durum bilgisiz Web katmanı , herhangi bir uygulama verisini Web sunucusu belleğinde veya dosya sisteminde depolamazsanız anlamına gelir. Web katmanınızın durum bilgisiz olması, daha iyi bir müşteri deneyimi sağlamanıza ve paradan tasarruf etmenize olanak sağlar:

  • Web katmanı durumsuz ve bir yük dengeleyicinin arkasında yer alıyorsa, sunucuları dinamik olarak ekleyerek veya kaldırarak uygulama trafiğinden değişikliklere hızlıca yanıt verebilirsiniz. Yalnızca kullandığınız sürece sunucu kaynakları için ödeme yaptığınız bulut ortamında, isteğe bağlı değişikliklere yanıt verme özelliği büyük tasarrufa çevrilebilir.
  • Durum bilgisiz Web katmanı, uygulamanın ölçeğini genişletmek için mimari olarak çok daha basittir. Bu, ölçekleme ihtiyaçlarına daha hızlı yanıt vermenize ve süreçte geliştirme ve test konusunda daha az para harcamanıza olanak sağlar.
  • Şirket içi sunucular gibi bulut sunucularının, her zaman düzeltme ve yeniden başlatılması gerekir; Web katmanı durum bilgisiz ise, bir sunucu geçici olarak kaldığında trafiği yeniden yönlendirme işlemi hatalara veya beklenmeyen davranışlara neden olmaz.

En gerçek dünya uygulamalarının, bir Web oturumu için durumu depolaması gerekir; Buradaki ana nokta onu Web sunucusunda depolamadır. Bir önbellek sağlayıcısı kullanarak, durumu tanımlama bilgilerinde istemci veya işlem sunucusu tarafında ASP.NET oturum durumu gibi başka yollarla da saklayabilirsiniz. Dosyaları yerel dosya sistemi yerine Windows Azure Blob Storage 'da saklayabilirsiniz.

Web katmanınız durum bilgisiz ise, Windows Azure Web siteleri 'nde bir uygulamayı ölçeklendirmenin ne kadar kolay olduğunu gösteren bir örnek olarak, yönetim portalındaki bir Windows Azure Web sitesinin Ölçek sekmesine bakın:

Ölçek sekmesi

Web sunucuları eklemek istiyorsanız örnek sayısı kaydırıcısını sağa sürüklemeniz yeterlidir. 5 olarak ayarlayın ve Kaydet' e tıklayın ve saniyeler Içinde, Microsoft Azure 'da Web sitenizin trafiğinizi işleyen 5 Web sunucusu vardır.

Beş örnek

Örnek sayısını kolayca 3 ' e veya 1 ' e geri döndürebilmeniz yeterlidir. Ölçeği geri döndüğünüzde, Microsoft Azure 'un saate göre değil, dakikaya göre ücretlendirilmesi anında tasarruf etmeye başlar.

Ayrıca, Windows Azure 'un CPU kullanımına göre Web sunucularının sayısını otomatik olarak artırmasını veya azaltmasını söyleyebilirsiniz. Aşağıdaki örnekte, CPU kullanımı %60 altına gittiğinde, Web sunucularının sayısı en az 2 ' ye düşürülecektir ve CPU kullanımı %80 ' nin üzerinde olursa, Web sunucularının sayısı en fazla 4 ' e yükseltilir.

CPU kullanımına göre ölçeklendir

Ya da sitenizin yalnızca çalışma saatlerinde meşgul olacağını biliyorsanız ne olur? Windows Azure 'a, gündüz saati sırasında birden çok sunucu çalıştırmasını ve tek bir sunucu evente, Nights ve hafta sonlarını azaltmasını söyleyebilirsiniz. Aşağıdaki ekran görüntüleri serisi, Web sitesinin, çalışma saatleri boyunca saat ve 4 sunucu çalıştırmak üzere, 8 ile 5 PM arasında bir sunucuyu nasıl ayarlayacağınızı gösterir.

Zamanlamaya göre ölçeklendir

Zamanlama sürelerini ayarlama

Gündüz zamanlaması

Weekgece zamanlaması

Hafta sonu zamanlaması

Ayrıca, bu tüm elbette, portalda ve portalda de yapılabilir.

Uygulamanızın ölçeklendirme özelliği, Microsoft Azure 'da neredeyse sınırsız olduğundan, Web katmanını durum bilgisiz halinde tutarak sunucu VM 'lerini dinamik olarak eklemek veya kaldırmak için gereken engelleri ortadan kaldırırsınız.

Oturum durumunu önleyin

Bir Kullanıcı oturumu için bir durum biçiminin depolanmasını önlemek için genellikle gerçek dünyada bir bulut uygulamasında pratik değildir ancak bazı yaklaşımlar performansı ve ölçeklenebilirliği diğerlerinden daha fazla etkiler. Durumu depolamanız gerekirse, en iyi çözüm durum miktarını küçük tutmak ve tanımlama bilgilerinde depolamak olur. Bu uygun değilse, bir sonraki en iyi çözüm Dağıtılmış, bellek içi önbellekiçin bir sağlayıcıyla ASP.NET oturum durumunu kullanmaktır. Performans ve ölçeklenebilirlik açısından en kötü çözüm, veritabanı tarafından desteklenen bir oturum durumu sağlayıcısı kullanmaktır.

Statik dosya varlıklarını önbelleğe almak için CDN kullanma

CDN, Content Delivery Network için bir kısaltdır. Bir CDN sağlayıcısına görüntü ve betik dosyaları gibi statik dosya varlıkları sağlarsınız ve sağlayıcı bu dosyaları tüm dünyada veri merkezlerinde önbelleğe alarak, kullanıcıların uygulamanıza her erişmesi halinde, önbelleğe alınan varlıklar için görece hızlı yanıt ve düşük gecikme süresi alırlar. Bu, sitenin genel yükleme süresini hızlandırır ve web sunucularınızda yükü azaltır. Coğrafi olarak geniş bir şekilde dağıtılan bir hedef kitleye ulaşmanız durumunda CDNs özellikle önemlidir.

Windows Azure 'da bir CDN vardır ve Windows Azure 'da veya herhangi bir Web barındırma ortamında çalışan bir uygulamada diğer CDNs kullanabilirsiniz.

Çağrı engellemeyi önlemek için .NET 4.5 'in zaman uyumsuz desteğini kullanın

.NET 4,5, görevlerin zaman uyumsuz olarak işlemesini çok daha basit hale getirmek için C# ve VB programlama dillerini geliştirmiştir. Zaman uyumsuz programlama avantajı, aynı anda birden çok Web hizmeti çağrısı yapmak istediğinizde gibi paralel işleme durumları için değildir. Ayrıca, Web sunucunuzun yüksek yük koşullarında daha verimli ve güvenilir bir şekilde çalışmasını sağlar. Bir Web sunucusu yalnızca kullanılabilir sayıda iş parçacığına sahiptir ve yüksek yük koşulları altında, tüm iş parçacıkları kullanımda olduğunda, gelen isteklerin iş parçacıkları serbest olana kadar beklemesi gerekir. Uygulama kodunuz veritabanı sorguları ve Web hizmeti çağrısı gibi görevleri zaman uyumsuz olarak işlemezse, sunucu bir g/ç yanıtı beklerken birçok iş parçacığı gereksiz yere bağlı olur. Bu, sunucunun yüksek yük koşulları altında işleyebileceği trafik miktarını sınırlandırır. Zaman uyumsuz programlama ile, bir Web hizmetini veya veritabanını döndürmek için bekleyen iş parçacıkları, veri alınana kadar yeni isteklere hizmet vermek için serbest bırakılır. Meşgul bir Web sunucusunda, yüzlerce veya binlerce istek daha sonra işlem için iş parçacıklarının serbest bırakılabileceği şekilde beklenmez.

Daha önce gördüğünüz gibi, Web sitenizi artıracak Web sunucusu sayısını azaltmak oldukça kolay bir işlemdir. Bu nedenle, bir sunucu daha fazla işleme sağlayabiliyorsa, bu kadar birçok işlem yapmanız gerekmez ve belirli bir trafik hacmi için daha az sunucuya ihtiyacınız olduğundan maliyetlerinizi azaltabilirsiniz.

.NET 4,5 zaman uyumsuz programlama modeli desteği Web Forms, MVC ve Web API 'SI için ASP.NET 4,5 ' ye dahildir; Entity Framework 6 ' da ve Windows Azure Storage API' de.

ASP.NET 4,5 ' de zaman uyumsuz destek

ASP.NET 4,5 ' de, zaman uyumsuz programlama desteği yalnızca dile değil, MVC, Web Forms ve Web API çerçevelerine de eklenmiştir. Örneğin, bir ASP.NET MVC denetleyici eylemi yöntemi bir Web isteğinden verileri alır ve verileri tarayıcıya gönderilmek üzere HTML oluşturan bir görünüme geçirir. Genellikle eylem yönteminin bir Web sayfasında gösterilmesi veya bir Web sayfasına girilen verileri kaydetmesi için bir veritabanından veya Web hizmetinden veri alması gerekir. Bu senaryolarda, eylem yöntemini zaman uyumsuz yapmak kolaydır: bir ActionResult nesnesi döndürmek yerine, görev < > ActionResult öğesini döndürür ve yöntemi Async anahtar sözcüğüyle işaretler. Yöntemi içinde, bir kod satırı bekleme süresi içeren bir işlemden sonra, await anahtar sözcüğüyle işaretlersiniz.

Veritabanı sorgusu için bir depo yöntemi çağıran basit bir eylem yöntemi aşağıda verilmiştir:

public ActionResult Index()
{
    string currentUser = User.Identity.Name;
    var result = fixItRepository.FindOpenTasksByOwner(currentUser);

    return View(result);
}

İşte veritabanı çağrısını zaman uyumsuz olarak işleyen yöntemin aynısı:

public async Task<ActionResult> Index()
{
    string currentUser = User.Identity.Name;
    var result = await fixItRepository.FindOpenTasksByOwnerAsync(currentUser);

    return View(result);
}

' In altında, derleyici uygun zaman uyumsuz kodu oluşturur. Uygulama çağrısını yaptığında FindTaskByIdAsync , ASP.net, FindTask isteği yapar ve ardından çalışan iş parçacığını geri alabilir ve başka bir isteği işlemek için kullanılabilir hale getirir. İstek tamamlandığında FindTask , bu çağrıdan sonra gelen kodun işlenmesine devam etmek için bir iş parçacığı yeniden başlatılır. FindTaskİsteğin başlatıldığı ve verilerin döndürüldüğü zaman arasında aradaki bir iş parçacığına sahip olursunuz, aksi takdirde, yanıt beklenmek üzere bağlı olacak yararlı bir iş parçacığı vardır.

Zaman uyumsuz kod için bazı ek yük vardır, ancak düşük yük koşullarında bu ek yük göz ardı edilebilir, ancak yüksek yük koşullarında, diğer durumlarda kullanılabilir iş parçacıkları için bekleyen istekleri işleyebileceksiniz.

Bu tür zaman uyumsuz programlamayı ASP.NET 1,1 tarihinden itibaren yapmak mümkün, ancak yazmak, hataya açık ve hata ayıklama zor bir sorun oluştu. Bu nedenle, ASP.NET 4,5 ' de kodlama basitleştirildiğimiz için artık bu değil.

Entity Framework 6 ' da zaman uyumsuz destek

4,5 ' de zaman uyumsuz desteğin bir parçası olarak Web hizmeti çağrıları, yuvalar ve dosya sistemi g/ç için zaman uyumsuz destek sunduk, ancak Web uygulamaları için en yaygın model bir veritabanına ulaşmalıdır ve veri kitaplıklarımız zaman uyumsuz olarak desteklenmez. Artık Entity Framework 6, veritabanı erişimi için zaman uyumsuz destek ekler.

Entity Framework 6 ' da, bir sorgunun veya komutun veritabanına gönderilmesine neden olan tüm yöntemler zaman uyumsuz sürümlere sahiptir. Buradaki örnekte Find yönteminin Async sürümü gösterilmektedir.

public async Task<FixItTask> FindTaskByIdAsync(int id)
{
    FixItTask fixItTask = null;
    Stopwatch timespan = Stopwatch.StartNew();

    try
    {
        fixItTask = await db.FixItTasks.FindAsync(id);
        
        timespan.Stop();
        log.TraceApi("SQL Database", "FixItTaskRepository.FindTaskByIdAsync", timespan.Elapsed, "id={0}", id);
    }
    catch(Exception e)
    {
        log.Error(e, "Error in FixItTaskRepository.FindTaskByIdAsynx(id={0})", id);
    }

    return fixItTask;
}

Bu zaman uyumsuz destek yalnızca ekleme, silme, güncelleştirme ve basit bulma için değil, LINQ sorguları ile de kullanılabilir:

public async Task<List<FixItTask>> FindOpenTasksByOwnerAsync(string userName)
{
    Stopwatch timespan = Stopwatch.StartNew();

    try
    {
        var result = await db.FixItTasks
            .Where(t => t.Owner == userName)
            .Where(t=>t.IsDone == false)
            .OrderByDescending(t => t.FixItTaskId).ToListAsync();

        timespan.Stop();
        log.TraceApi("SQL Database", "FixItTaskRepository.FindTasksByOwnerAsync", timespan.Elapsed, "username={0}", userName);

        return result;
    }
    catch (Exception e)
    {
        log.Error(e, "Error in FixItTaskRepository.FindTasksByOwnerAsync(userName={0})", userName);
        return null;
    }
}

Async ToList Bu kodda, bir sorgunun veritabanına gönderilmesine neden olan yöntemi olan bir yönteminin sürümü bulunmaktadır. WhereVe OrderByDescending yöntemleri yalnızca sorguyu yapılandırır, ToListAsync Yöntem sorguyu yürütür ve yanıtı result değişkende depolar.

Özet

Burada özetlenen Web geliştirme en iyi uygulamalarını herhangi bir Web programlama çerçevesinde ve herhangi bir bulut ortamında uygulayabilirsiniz, ancak ASP.NET ve Windows Azure 'da araçlara kolayca ulaşabilirsiniz. Bu desenleri izlerseniz, Web katmanınızı kolayca ölçeklendirebilirsiniz ve her sunucu daha fazla trafik işleyebildiğinden, harcamalarınızı en aza indirirsiniz.

Sonraki bölümde , bulutun çoklu oturum açma senaryolarına nasıl izin vertığı gösterilmektedir.

Kaynaklar

Daha fazla bilgi için aşağıdaki kaynaklara bakın.

Durum bilgisiz Web sunucuları:

'Ye

Zaman uyumsuz programlama:

Daha fazla Web geliştirme için en iyi uygulamalar için aşağıdaki kaynaklara bakın: