GAE milyonlarca aktif kullanıcı tarafından kullanılan bir uygulamayı barındırabilecek bir altyapı mıdır?


9

Aşağıda listelenen GAE kısıtlamalarını bilmek istiyorum, bu uygulamayı GAE'de barındırarak harika bir sosyal uygulama (Facebook gibi) oluşturmak bile mümkün mü?

Başka bir deyişle GAE, 600 milyon aktif kullanıcı tarafından kullanılan bir uygulamayı barındırabilecek bir altyapı mı?

Birkaç forumdan / blogdan çıkardığım kısıtlamalar (eksik bir şey bulursanız lütfen listeye eklemekten çekinmeyin):

  1. HTTP İsteği / Yanıtı

    • Maksimum istek boyutu: 32 MB
    • Maksimum yanıt boyutu: 32 MB
    • Tüm isteklerin 30 saniye içinde yanıt vermesi gerekir, aksi takdirde GAE, DeadlineExceededException
    • Her cron işi 10 dakika içinde yapılmalıdır
    • Cron işleri harita azaltmayı kullanamaz
    • Başka bir siteye yapılan her GET veya POST işlemi 5 saniye sonra iptal edilir. En fazla 10 saniye bekleyecek şekilde yapılandırabilirsiniz. (Twitter ve Facebook ile birçok kez çalışmak için ara sunucular gerekli olacaktır)
    • İstemci, GAE'ye FTP yoluyla bağlanamaz (yalnızca HTTP ve HTTPS).
    • Özel alan adları için https yok. Yalnızca uygulama-id.appspot.com alanlarınız için.
    • Kullanıcı akını alırsanız, "kota aşımı" hatası alırsınız
  2. Veri tabanı

    • Veritabanı davranışı, yerel geliştirmede gerçek sunuculardan farklı değildir.
    • GQL. Başka hiçbir şey.
    • Hiçbir sorgu 1000'den fazla kayıt alamaz (istemcinizin şimdi tek tıklamayla çevrimdışı duruma geçmesine izin vermek istiyorsanız ciddiye alır)
    • Bir işlemi gerçekleştirmek için çok sayıda kayda doğrusal erişime ihtiyacınız varsa, şansınız kalmaz (Google'ın sistemleri büyük ölçüde kümelenir)
    • Memcache değerleri maksimum boyutu 1 MB'dir.
    • Basit metin araması yapılamıyor
    • 2 tabloya katılamazsınız.
    • Yavaş (Deserializasyon performansından kaçınmak için bir tabloda arama yapabilmeniz, anahtarı alabilmeniz ve sonra üst öğesini alabilmeniz için miras kullanarak tabloları nasıl ayıracağınızı okumalısınız)
    • "Çok fazla dizin" çalışma zamanı istisnası
    • Bir işletme bir endekste en fazla 5000 mülk değerine sahip olabilir
    • Form Temel isimleri * (başlangıç ve iki alt çizgi ile sona) ayrılmıştır ve uygulama tarafından kullanılmamalıdır.
    • Anahtar adları 500 bayt ile sınırlıdır (sanırım UTF-8 kodlu)
  3. Dil

    • python veya java veya Go (veya Grovy, Scala ve diğerleri gibi JVM'yi kullanan diller)
  4. Sunucu sorunları

    • Statik IP yok (üçüncü taraf API'lerini çağıran kısıtlama ve kota sorunları olabilir)
    • Her uygulama 3000 dosya ile sınırlıdır
    • Web uygulamasını çalıştıran işletim sistemi veya donanım kontrolü yok

Olabilir mi? Kim bilir. Olmalı mı? Hayır!
ceejayoz

1
@ceejayoz pls neden olmamalı açıklamak? ölçeklenebilir olması gerekmez mi?

3
neden downvotes insanlar

Amazon EC2'nin bu tür uygulamalar için daha uygun olacağını düşünüyorum.
Mahmoud Hossam

Hmm 3 hakkında, çeviri olmadan diğer dilleri kullanabilirsiniz, yani Groovy, Scala ve diğerleri gibi JVM'yi kullanan
dilleri

Yanıtlar:


28

Bu soru hakkında beni rahatsız eden şey, kesin bir hayır toplamak için onu ifade etmeniz ve "gerçekler" ile yüklemenizdir.

Gerçek şu ki, Facebook, Twitter veya Tumblr özelliklerini kopyalayan bir App Engine uygulaması geliştirebilirsiniz. Uygulamanın iyi yazılmış olduğunu varsayarsak, yüz milyonlarca kullanıcıyı destekleyecek şekilde ölçeklendirilir. İstememenizin ana nedeni (ki bu sizin için dikkate alınmıyor gibi görünüyor), App Engine'de bu boyutta bir hizmet çalıştırmanın maliyetidir.

Ayrıca, listelediğiniz kısıtlamalardan herhangi birinin böyle bir uygulama geliştirmenizi nasıl engelleyeceğini göremiyorum.

  1. HTTP İsteği / Yanıtı

    • Maksimum istek boyutu: 10 MB - yanlış, 32 MB'a yükseltildi.
    • Maksimum yanıt boyutu: 10 MB - yanlış, 32 MB'a yükseltildi.

    - Sıklıkla 10 MB'tan büyük sayfalar yayınlaması gereken bir sosyal uygulama geliştiriyorsanız, muhtemelen yanlış yapıyorsunuz demektir. Ayrıca, 32 MB'tan büyük içerik sunmanız gerekiyorsa, 2GB'a kadar olan dosyalar için blobstore'u kullanabilirsiniz.

    • Dosya sistemine erişemezsiniz. (yüklemeleri dosya sistemine kaydetmeyi unutun) - yanlış. Yerel dosya sisteminden okuyabilir ve blobstore'a dosya yükleyebilir ve okuyabilir / yazabilirsiniz.

    - Facebook, Twitter veya Tumblr'ın kullanıcı yüklemelerini alıp bir klasöre kopyalamasının bir yolu yoktur. Problem değil.

    • Tüm isteklerin 10 dakika içinde yanıt vermesi gerekir, aksi takdirde GAE, DeadlineExceededException değerini yanlış verir. Aslında 30 saniye.

    - Bir kullanıcının isteğine sonuç göndermek için 30 saniyeden uzun süre gerekiyorsa, büyük olasılıkla yanlış yapıyorsunuz demektir.

    • Her cron işi 30 saniye içinde yapılmalıdır - yanlış, 10 dakika.

    - Uzun bir görevi 10 dakikalık parçalara bölemezseniz, A: büyük olasılıkla yanlış yapıyorsunuz ve B: artık bu görevi isteklerde zaman sınırı olmayan bir Arka Uç örneğine taşıyabilirsiniz.

    • Cron işleri harita azaltmayı kullanamaz - hiç kullanılmamış harita azaltma, ancak bence bu bir alıntı gerektirir.

    • Başka bir siteye yapılan her GET veya POST işlemi 5 saniye sonra iptal edilir. En fazla 10 saniye bekleyecek şekilde yapılandırabilirsiniz. (Twitter ve Facebook ile birçok kez çalışmak için ara sunucular gerekir) - Doğru.

    - Harici bir API’ye yönelik kullanıcı talebi 10 saniyeden uzun sürüyorsa, kullanıcıya tekrar denemesini söylemek iyi bir fikir olabilir. Kullanıcıya yönelik bir istek değilse, API yanıt verene kadar görevi otomatik olarak yeniden deneyebilirsiniz.

    • İstemci, GAE'ye FTP yoluyla bağlanamaz (yalnızca HTTP ve HTTPS). - Doğru

    -- Neden bu bir sorundur? Sizce büyük ölçekli herhangi bir şirket FTP üzerinden değişiklik yapıyor mu?

    • Özel alan adları için https yok. Yalnızca uygulama-id.appspot.com alanlarınız için. - Doğru.

    - Yine de yol haritasında.

    • Kullanıcı akını alırsanız, "kota aşımı" hatası alırsınız - Yarı doğru.

    - Uygulamanızı uygun şekilde bütçelerseniz, asla kota aşımı hatası görmezsiniz. Royal Wedding sitesi App Engine'de barındırıldı ve saniyede 32.000 istek aldı. Kota aşımı hatası yok. Ayrıca, Twitter'da başarısız balina veya Tumblr'da aşırı kapasite hatası gördünüz mü? Bu aslında onların aşırı kota hatası.

  2. Veri tabanı

    • Veritabanı davranışı, yerel geliştirmede gerçek sunuculardan farklı değildir. - Yanlış

    - Veri deposunu dizüstü bilgisayarınızda çalıştırmak, App Engine'in kümesinde çalıştırmaktan daha yavaşsa, doğru, aksi takdirde hiç doğru değildir.

    • GQL. Başka hiçbir şey. - Yanlış

    - Çoğu geliştirici veri deposunu sorgulamak için db filtreleri kullanır. Ayrıca, MySQL'in "SQL. Başka bir şeye" izin verdiğini eşit şekilde söyleyebilirsiniz.

    • Hiçbir sorgu 1000'den fazla kayıt alamaz (istemcinizin şimdi tek tıklamayla çevrimdışı duruma geçmesine izin vermek istiyorsanız ciddi şekilde berbat) - Yanlış.

    - 1000 kayıt limiti uzun zaman önce kaldırıldı. Ayrıca, Facebook, Twitter veya Tumblr'da 1000'den fazla kayıt oluşturulmasını gerektiren, kullanıcıya bakan herhangi bir sayfayı göster.

    • Bir işlemi gerçekleştirmek için çok sayıda kayda doğrusal erişime ihtiyacınız varsa, şansınız kalmaz (Google'ın sistemleri büyük ölçüde kümelenir)

    - Burada ne elde ettiğinden bile emin değilim. Çoğu kişi Google'ın büyük kümelenmesinin hızını sistemin büyük bir avantajı olarak görüyor.

    • Memcache değerleri maksimum boyutu 10 MB'dir. - Aslında, her diğer memcache uygulamasında olduğu gibi her memcache girişi için 1 MB'dir.

    • Basit metin araması yapılamıyor - Doğru.

    - Güvertedeki bir özellik. Çoğu büyük site kendi metin arama dizinini oluşturmaz.

    • 2 tabloya katılamazsınız. - Doğru.

    - App Engine geliştiricilerinin düşüncelerini tek bir büyük çoklu birleştirme SQL sorgusundan birkaç küçük sorguya ayarlaması veya birleştirmeye gerek kalmaması için verileri denormalize etmesi gerekir.

    • Yavaş (Desperizasyon performansından kaçınmak için bir tablo içinde arama yapabilir, anahtarı alabilir ve sonra üst öğesini elde edebilmek için miras kullanarak tabloları nasıl ayıracağınızı okumalısınız) - ???

    - çeviri / alıntı gerekli.

    • "Çok fazla dizin" çalışma zamanı istisnası - Doğru

    - Tek bir uygulamada dizin sayısında bir sınırlama vardır. Ben sadece akademik araştırma uygulamaları gördüm gördüm.

    • Bir varlık bir dizinde en fazla 5000 özellik değerine sahip olabilir - True

    - Birisinin 5000'den fazla arkadaşı varsa, arkadaş grubunda iki varlığa ihtiyaç duyarlar.

    • Formun anahtar adları ( __*__iki alt çizgi ile başlangıç ​​ve bitiş) ayrılmıştır ve uygulama tarafından kullanılmamalıdır. - Doğru

    -- Ama ne olmuş yani?

    • Anahtar adları 500 bayt ile sınırlıdır (sanırım UTF-8 kodlu) - True

    - Yine, ne olmuş yani? Anahtar isimler romanları saklamak için değil, bir varlığı benzersiz bir şekilde tanımlamak içindir.

  3. Dil

    • python veya java veya Go (başka şeylerin bu dillere çevrilmesi gerekir) - Yarı doğru

    - Aslında PHP ve JRuby dahil JVM üzerinde çalışan herhangi bir dili çalıştırabilirsiniz. Python ve Java, neden bir sorun olduğundan emin değil, birçok araç, öğretici ve deneyimli programcı içeren iki güçlü dildir.

  4. Sunucu sorunları

    • Statik IP yok (Üçüncü taraf API'lerini çağıran kısıtlama ve kota sorunları) - Yarı doğru

    - Çoğu üçüncü taraf API'sı App Engine'in farkındadır ve / veya Google ile bir ilişkisi vardır. Twitter birkaç kez yanlışlıkla App Engine'i engelledi ve birkaç saat içinde düzeltildi.

    • Her uygulama 3000 dosyayla sınırlıdır - Yarı doğru

    - Gerçekten web uygulamanız için 3000'den fazla kod dosyalarına ihtiyacınız varsa zip ithalatını kullanabilirsiniz (Ayrıca, yanlış yapıyor olabilirsiniz).

    • Web uygulamasını çalıştıran işletim sistemi veya donanım kontrolü yok - True

    - App Engine bir Hizmet Olarak Platformdur . İşletim sistemine veya donanıma hizmet vermekten endişe etmemek insanların parasını ödüyor. Bu, App Engine'in temel avantajıdır, bir sınırlama değildir.


Tüm puanlarınızı tamamen kabul edin. +1
Luca Matteis

giriş için teşekkürler. soruyu buna göre düzenledim. btw 1000 kayıt sınırı kaldırılırsa yeni kayıt sınırı nedir?
Pacerier

2.1 dışındaki tüm hususları kabul edin; Yerel db oldukça berbat.
systempuntoout

14

Hayır, App Engine 600 milyon aktif kullanıcısı olan bir uygulama için uygun değildir.

Gerçekçi olarak, bu büyük uygulamalar kendi veri merkezlerinden yüksek düzeyde özelleştirilmiş altyapı üzerinde çalışır. Muhtemelen böyle bir uygulamayı Google'da barındırmak mümkündür, ancak bir çözüm tasarlamak için doğrudan satış ekipleriyle birlikte çalışacaksınız; yukarıda listelediğiniz sanal alan kısıtlamaları uzun süredir alakasız olacaktır.

Daha yeni başlıyorsanız, Facebook kadar popüler olacağınız varsayımına göre tasarım yapmak aptalca. Bu kadar büyük olan herhangi bir uygulama bunu kademeli olarak ve sürekli yeniden faktoring ile yapar. İlk olarak, 600 milyon kullanıcıyı çekecek özellikler tasarlama konusunda endişelenin. Uygulamanın, büyüyen bir kullanıcı tabanını destekleyecek şekilde yeniden tasarlanması, karşılaştırma açısından önemsiz bir sorundur.


3
"Bu kadar büyük uygulamalar" - çoğul kullanıyorsunuz, birden fazla var mı? ;-)
Steve Jessop

Uygulamamın elbette Facebook kadar popüler olacağı varsayımına sahip değilim. Aslında bu varsayımın ya da eksikliğinin, sorumla hiçbir ilgisi yok.

1
600 milyon kullanıcınız varsa, bir Google satın almanın hedefi siz olursunuz, bu nedenle AppEngine üzerinde çalışıp çalışamayacağınız büyük ölçüde ilgisizdir.
Dean Harding

1
@Dean Harding Bir Google satın almanın hedefi olsanız bile AppEngine'de çalışıp çalışamayacağınız büyük ölçüde
önemlidir

3

Sanırım bu SSS'deki noktalar birkaç ana alana düşüyor.

Her şeyden önce, zararlı olmaktan ziyade ölçeklenebilirliğin yararına olan noktalar var . Oldukça ölçeklenebilir bir uygulamada, uğraştığınız şeylerden biri, her isteğin diğerlerinden büyük ölçüde bağımsız olmasını ve aynı zamanda aynı "boyut" etrafında (CPU kullanımı, bellek, ağ vb.).

Bu şekilde, istekler aynı düğümde daha küçük istekleri aç bırakan bir grup "büyük" istek hakkında endişelenmeden kümenizdeki düğümler arasında kolayca dağıtılabilir. Bu, bakım, performans ve güvenilirlik açısından altyapınızı basit tutar.

Böylece aşağıdakileri kapsar:

  • Maksimum istek / yanıt boyutu
  • Yanıt süreleri isteyin
  • Harici istek yanıt süresi sınırları
  • Memcache maksimum boyutları (aslında, varsayılan memcache derlemesinde maksimum değer boyutu 1 MB'dir, bu nedenle Google'ın bu sınırı 10 kat artıran özel bir ikili çalıştırdığı açıktır)
  • Maksimum veritabanı yanıtı boyutları (örneğin 1.000 satır sınırı)
  • vb

İkinci kategori sadece güncel olmayan şeylerdir:

Artık, Google'ın cron işlerinin Harita Azaltma özelliğini kullanmasına izin vermek ve tüm veri kümeniz üzerinde sorgular çalıştırmanıza izin vermek için altyapılarını açması iyi olurdu. Ancak , 600 milyon kullanıcının önemli bir bölümünü oluşturduğunuzda, Google'ın çok büyük bir müşterisi olacaksınız ve zaten App Engine'de mevcut olanlardan daha fazla seçeneğe sahip olacaksınız.


0

Eğer 600, milyon kullanıcı değil, 100'ü bile çekecek bir fikir bulursanız, herhangi bir altyapı sermayesini geliştirmek ve çalıştırmak için herhangi bir girişim sermayesine ve herhangi bir teknoloji ekibine sahip olacaksınız. Ayrıca, Google'ın her GAE uygulamasının kaynak koduna erişmek istediğinden (yine de Python ve Java kodunu gerçekten koruyamazsınız) GAE'nin sağlamadığı fikri mülkiyetinizi de korumak istersiniz.
GAE, BT altyapı maliyetlerinden kurtulmak isteyen ve kod IP'sini değil yalnızca verilerini koruma ihtiyacı olan işletmeler için uygundur.


herhangi bir girişim sermayeniz olacak ve bunu herhangi bir altyapı üzerinde geliştirip çalıştıracak herhangi bir teknoloji ekibiniz olması gerektiği anlamına gelmez
Pacerier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.