Bunun daha çok ekonomi meselesi olduğunu iddia ediyorum. Ancak bu, mühendislerin yapabilmesi gereken bir karar çağrısıdır. Bu yüzden cevap veriyorum.
Cevabımı dört bölüme ayırıyorum:
- Risk yönetimi
- Stratejiler
- Maliyetler
- Sezgi
Risk yönetimi
Bu nedenle, bazen istemciniz sunucudan yanıt alamıyor. Bunun programlı bir hatadan kaynaklanmadığını varsayacağım (aksi takdirde çözüm düzeltmek, bu yüzden bunu yapın). Bunun yerine, kontrolünüzün ötesindeki tesadüfi bir durum yüzünden olmalı ...
Ama bilginizin ötesinde değil. Bilmelisin:
- Ne sıklıkta oluyor.
- Ne gibi bir etkisi var.
Örneğin, başarısızlık ve yeniden deneme yalnızca% 2 oranında gerçekleşirse, muhtemelen bunu ele almaya değmez. Zamanın yaklaşık% 80'inde olursa, şey ... bağlıdır ...
Müşteri ne kadar zaman beklemek zorunda? Ve bu maliyetlere nasıl dönüşüyor ... görüyorsunuz, normal bir uygulamada küçük bir gecikmeniz var, muhtemelen büyük bir sorun değil. Önemliyse ve gerçek zamanlı bir uygulamanız veya çevrimiçi bir video oyununuz varsa, bu kullanıcıları uzaklaştıracaktır ve muhtemelen daha fazla veya daha iyi sunuculara yatırım yapmaktan daha iyidir. Aksi takdirde, muhtemelen bir "yükleme" veya "sunucu bekleniyor" mesajı koyabilirsiniz. Gecikme gerçekten büyük olmadıkça (onlarca saniye), normal uygulama için bile çok fazla olabilir.
Stratejiler
Yukarıda söylediğim gibi, bu soruna gitmek için birden fazla yol var. Zaten try-fail-retry loop uygulamasına sahip olduğunuzu varsayacağım. Bakalım ...
- Bir yükleme mesajı koyun. Ucuzdur, kullanıcının tutulmasına yardımcı olur.
- Sorgu paralel olarak. Daha hızlı olabilir, yine de başarısız olabilir. Yedekli bir sunucuya ihtiyaç duyacaktır (pahalı olabilir), sunucu zamanını ve ağ trafiğini boşa harcar.
- Daha hızlı sunucuyu sabitlemek ve oradan kullanmak için paralel olarak sorgulayın. Daha hızlı olabilir, yine de başarısız olabilir. Gereksiz sunucu gerektirecek (pahalı olabilir), sunucu zamanını ve ağ trafiğini boşa harcamaz.
Şimdi, bunların hala başarısız olabileceğini söylüyorum. Bir sunucuya yönelik bir sorgunun% 80 başarısızlık olduğunu varsayarsak, iki sunucuya paralel bir sorgu% 64'lük bir hata şansına sahiptir. Böylece, tekrar denemeniz gerekebilir.
Daha hızlı sunucuyu seçmenin ve kullanmaya devam etmenin avantajı, daha hızlı sunucunun ağ sorunları nedeniyle başarısız olma olasılığının düşük olmasıdır.
Hangi hatırlatıyor, eğer isteği neden başarısız olduğunu anlayabiliyorsanız, bunu yapın. Arızaları önleyemeseniz bile durumu daha iyi yönetmenize yardımcı olabilir. Örneğin, sunucu tarafında daha fazla aktarım hızına mı ihtiyacınız var?
Biraz daha:
- Dünya genelinde birden çok sunucu dağıtın ve coğrafi konum belirleme ile sunucu seçin.
- Sunucu tarafında yük dengeleme yapın (özel bir makine tüm istekleri alır ve sunucularınıza yeniden bağlar, orada paralelliğiniz olabilir veya daha iyi bir denge stratejisi olabilir).
Ve bunlardan sadece birini yapmanız gerektiğini kim söyledi? Bir yükleme mesajı koyabilir, daha hızlı seçmek için wrold'a yayılmış birden fazla sunucuyu sorgulayabilir ve yalnızca oradan, bir döngüde hata yeniden denemede kullanabilirsiniz ve bu sunucuların her birinin yük dengelemeli bir makine kümesi olmasını sağlayabilirsiniz. . Neden olmasın? Maliyetler ...
Maliyetler
Dört maliyet vardır:
- Geliştirme maliyeti (genellikle çok ucuz)
- Dağıtım maliyeti (genellikle yüksek)
- Maliyet çalışma zamanı (uygulamanın türüne ve iş modeline bağlıdır)
- Başarısızlığın maliyeti (muhtemelen düşük, ancak gerekli değildir)
Onları dengelemek zorundasınız.
Örneğin, memnun kullanıcı başına yaklaşık bir dolar kazandığınızı varsayalım. Günde 3000 kullanıcınız olduğunu. İsteklerin% 50 oranında başarısız olduğu. Ve kullanıcıların% 2'si istek başarısız olduğunda ödeme yapmadan ayrılıyor. Bu, günde 30 dolar (3000 * 50 *% 2) kaybettiğiniz anlamına gelir. Şimdi, yeni özelliğin geliştirilmesinin size 100 dolara mal olacağını ve sunucuları konuşlandırmanın size 800 dolara mal olacağını ve çalışma zamanı maliyetlerini göz ardı edeceğinizi varsayalım ki bu, ((100 + 800) / 30 ) 30 gün. Artık bütçenizi kontrol edebilir ve karar verebilirsiniz.
Bu değerleri gerçeğin temsilcisi olarak düşünmeyin, onları matematik rahatlığı için seçtim.
Ekler:
- Detayları da görmezden geldiğimi unutmayın. Örneğin, dağıtım maliyetiniz az olabilir, ancak CPU zamanı için ödeme yapıyor olabilirsiniz ve bunu göz önünde bulundurmanız gerekir.
- Bazı istemciler veri paketlerini gereksiz istekler içinde boşa harcamazsanız memnun olabilirler.
- Ürününüzü geliştirmek doğal reklamlar getirmenize yardımcı olabilir.
- Fırsat maliyetlerini unutmayın. Başka bir şey geliştirmeli misiniz?
Mesele şu ki, eğer problemi maliyetleri dengeleme açısından ele alırsanız, dikkate aldığınız stratejiler için maliyeti tahmin edebilir ve bu analizi karar vermek için kullanabilirsiniz.
Sezgi
Deneyime göre teşvik eğer sezgi. Her seferinde bu tür bir analiz yapmayı önermiyorum. Bazı insanlar yapar ve bu sorun değil. Bunu anlamanız ve bunun için bir sezgi geliştirmenizi öneriyorum.
Dahası, mühendislikte, gerçek bilimden elde ettiğimiz bilginin yanı sıra, uygulamada öğrenir ve neyin işe yarayıp neyin yaramadığına dair yönergeler derleriz. Bu nedenle, sanatın durumunun ne olduğunu görmek genellikle akıllıca olur ... ancak bazen bölgenizin dışında görmeniz gerekir.
Bu durumda, çevrimiçi video oyunlarına bakardım. Yük ekranları var, birden fazla sunucuları var, gecikmeye göre bir sunucu seçecekler ve hatta kullanıcının sunucuları değiştirmesine izin verebilirler. Bunun işe yaradığını biliyoruz.
Her istekte ağ trafiğini ve sunucu zamanını boşa harcamak yerine bunu yapmayı öneririm, yedek sunucuda bile hata olabileceğini unutmayın.