Google Cloud Platformu | App Engine
Google App Engine uygulamaları, oluşturulması ve yönetilmesi kolay olup, ihtiyaç olan network trafiğine ve depolama alanına göre kolaylıkla kendini scaling (ölçeklendirme) yapabilmektedir. App Engine servisini kullanırken yönetmeniz gereken sunucuları düşünmenize gerek kalmaz. Uygulamanızı basit bir şekilde ortama upload edersiniz ve çalışmak için artık hazırdır.
App Engine uygulamaları gelen network trafiğine göre otomatik olarak kendini scaling (ölçeklendirme) yapabilmektedir. Load balancing (yük dengeleme), mikro servisler, authorization (yetkilendirme), SQL ve noSQL veritabanları, memcache, traffic splitting (network trafiğini bölme ve yönlendirme), logging, arama, versioning (eski sürümlere erişebilme), roll out ve roll back (yayınlama ve geri alma), scanning (güvenlik taraması) gibi pek çok servis entegre olarak desteklenmekte ve ileri düzeyde customize (özelleştirme) yapılabilmektedir.
App Engine ortamları (environment) standart ve flexible (esnek) environment olarak iki çeşit olup bir dizi programlama dilini desteklemektedir. Örneğin; Python 3.4, Java 8, ve Node.js’in son sürümleri flexible ortamda mevcut olup, PHP sadece standart ortamda mevcuttur. Go dili ise her iki ortamda da mevcuttur. Bu iki ortam uygulamanızın nasıl çalıştığına bağlı olarak size maksimum esneklik sağlamaktadır çünkü herbir ortamın kendine has iyi yanları mevcuttur. App Engine Environments sayfasından konu hakkında daha fazla bilgi öğrenebilirsiniz.
App Engine Standard Environment
App Engine standard environment ortamı Google’ın altyapısında çalışan container tabanlı instances’lardır. Container’lar önceden ayarlanmış belirli bir runtime ortamını çalıştırmaya müsait sanal imajlardır (Java 7, Python 2.7, Go ve PHP). Her bir runtime ortamı ayrıca App Engine Standard API’ları destekleyen kütüphaneleri içermektedir. Pek çok uygulama için standard environment runtime’ı ve kütüphaneler tüm ihtiyacınızı karşılayabilir.
App Engine standard environment’ı büyük boyutlu dosyalarla, aşırı yük altında bile çalışabilecek güvenlilir ve sağlam bir uygulama hazırlayıp, deploy etmeyi kolaylaştırmaktadır. Ortam aşağıdaki özellikleri içermektedir:
- Sorgulama (querying), sınıflama (sorting) ve işleme (transaction) yapılabilen kalıcı bir depolama alanı (persistent storage)
- Otomatik ölçeklendirme (scaling) ve yük dengeleme (load balancing)
- Bir isteğin kapsamı dışında çalışabilmek için asenkron işlem kuyruğu (asynchronous task queues)
- Belirli zamanlarda,durumlarda yada belirli aralıklarla çeşitli event’ler tetikleyebilmek için zamanlaşmış tasklar (scheduled tasks)
- Google’ın diğer bulut servisleri ve API’ları ile entegrasyon
Uygulamalar güvenli, sandboxed (herbiri kendine ait izole edilmiş özel güvenli bir alanda kendine ait ayrılmış kaynaklar ile çalışan), App Engine standard environment’a talepleri birden çok sunucuya yönlendirmeye ve gelen trafik yoğunluğuna göre serverları scaling yapabilmeye izin veren bir ortamda, uygulamanız ise bu ortamda donanımdan, işletim sisteminden ve sunucunun bulunduğu lokasyondan bağımsız olarak kendine ait olan güvenli (secure) ve güvenilir (reliable) bir ortam içerisinde çalışır.
Standard environment geliştirme kiti (development kit)
App Engine için Software Development Kits (SDKs) (Yazılım Geliştirme Kit)’leri desteklenen tüm dillerde mevcuttur. Her bir SDK;
- App Engine’a ait kullanılabilir bütün API’lar ve library’ler,
- Tüm App Engine servislerini lokal bilgisayarınızda taklit eden, simule edilmiş, güvenli bir sandbox ortamı,
- Uygulamanızı buluta upload etmenize izin veren ve farklı versiyonlarını yönetmenizi sağlayan deployment araçları içerir.
GCP konsolu uygulamanızı production ortamında yönetirken, SDK lokal olarak yönetir. GCP konsolu yeni uygulamalar yaratmak, domain isimlerini ayarlamak, uygulamanızın hangi versiyonunu live (canlı) ortama alınacağını belirlemek, access ve error loglarını incelemek, vs. için web tabanlı bir arayüz kullanır.
Instances sınıfları
Standard environment’ta çalışan her bir uygulamanın işlem gücünü ve fiyatını belirleyen bir instance class (sınıfı) vardır. Aşağıdaki tablo çeşitli instance sınıflarının memory ve CPU limitlerini özetlemektedir. Ücretlendirme sayfasından fiyatları konusunda bilgi alabilirsiniz.
Instance sınıfı |
Memory limiti |
CPU limiti |
B1 |
128 MB |
600 Mhz |
B2 |
256 MB |
1.2 Ghz |
B4 |
512 MB |
2.4 Ghz |
B4_1G |
1024 MB |
2.4 Ghz |
B8 |
1024 MB |
4.8 Ghz |
F1 |
128 MB |
600 Mhz |
F2 |
256 MB |
1.2 Ghz |
F4 |
512 MB |
2.4 Ghz |
F4_1G |
1024 MB |
2.4 Ghz |
Kotalar ve limitler
App Engine standard ortamı, 1 GB veri depolama ve network trafiğini ücretsiz olarak sunmaktadır. Uygulamanızın durumuna göre daha sonra ücretli olarak arttırabilirsiniz. Yinede, bazı özellikler sistemin stabilitesini korumak için kotalardan bağımsız olarak bazı limitler uygulamaktadır. Kotalar hakkında daha fazla bilgi ve onları ihtiyaçlarınıza göre nasıl düzenleyebilirsiniz öğrenmek için Kotalar sayfasını ziyaret edebilirsiniz.
Özellikler
Bir özellik her runtime dilinde yada sadece bazılarında olabilir. Bir özelliğin işlevselliği genelde mevcut olan tüm runtime ortamlarda aynıdır ama bazı istisnalar olabilir.
Her App Engine özelliği durumuna ve kullanılabilirliğine göre sınıflandırılır.
- General Availability (GA) (Genel Kullanılabilirlik) özellikleri halka açık olarak kullanılabilir ve App Engine’in SLA (Service Level Aggrement) (Hizmet düzeyi sözleşmesi) tarafından deprecation (itiraz) policy’si kapsamına alınmıştır. GA’nın uygulanması stabil olup yapılan her değişiklik geriye doğru uyumludur. (backward-compatible). Aksi belirtilmedikçe burada anlatılan App Engine’in tüm özellikleri GA’dır.
- Beta özellikleri halka açık olarak kullanılabilir. App Engine’in ilerideki yeni sürümünde GA özelliği olabilir yada olmayabilir. Yapılan uygulamalar geriye doğru uyumsuzluklar oluşturabilir (backward-incompatible).
- Alpha özellikleri App Engine’in ilerideki yeni sürümünde GA yada Beta özelliği olabilir yada olmayabilir. Yapılan uygulamalar geriye doğru backward-incompatible durumlar oluşturabilir. Bazı Alpha özellikleri halka açık olarak kullanılabilir. Bazı özelliklerde onları kullanabilmeniz için talepte bulunmanızı gerektirmektedir.
Bazı özellikler üçüncü parti üreticiler tarafından sağlanmaktadır. (third-party vendors). Bazıları da açık kaynak projelerdir (open source).
App Engine Flexible Environment
App Engine Flexible ortamı şu anda Google’ın beta sürecinde bir servisidir. SLA (Service Level Aggrement) (Hizmet düzeyi sözleşmesi) ve deprecation (itiraz) policy’si kapsamına alınmamıştır. Yapılan uygulamalar geriye doğru uyumsuzluklar oluşturabilir (backward-incompatible). Production ortamında kullanılması Google tarafından şu anda tavsiye edilmemektedir.
Flexible ortam, container tabanlı olmak yerine Google Compute Engine altyapısı üzerinde çalışmaktadır. Standart ortamdaki özellikler mevcut olup ek olarak flexible ortamda docker dosyaları kullanarak runtime ortamınızı hatta sanal makinanızın işletim sistemini bile özelleştirebilirsiniz.
- Runtimes: Flexible ortam; Java 8, Servlet 3.1, Jetty 9, Python 2.7, Python 3.4, Node.js ve Go dillerini desteklemektedir. Geliştiriciler; açık kaynak gruplarından docker imajı yada docker dosyası temin ederek bu runtime ortamlarını özelleştirebilir yada Ruby, PHP gibi kendi runtime ortamlarını kullanabilirler.
- Altyapının özelleştirilebilmesi: Flexible ortamda VM instances’ları GCE sanal makinaları olduğu için, hata ayıklama (debugging) yada ileri düzey özelleştirmeler yapabilmek için her VM ve Docker konteyner’a SSH (Secure Shell) ile bağlanabilirsiniz.
- Performans: Çok çeşitli CPU ve hafıza (memory) konfigurasyonlarından yararlanabilir, uygulamanızın her bir instance’nın ne kadar CPU ve memory’e ihtiyacı varsa belirleyebilirsiniz. Flexible ortam gereken altyapıyı sizin için hazırlayacaktır.
App Engine sanal makinalarınızı aşağıdaki koşulları garanti ederek yönetmektedir;
- Instances’ların sağlık durumu kontrol edilmekte, herhangi bir sorunda gerekli iyileştirmeler yapılmakta, projenin içerisinde diğer servisler ile en iyi şekilde konumlandırılmaktadır.
- Kritik, geriye doğru uyumlu (backwards-compatible) güncelleştirmeler işletim sistemine otomatik olarak uygulanmaktadır.
- VM instances’ları projenizin ayarlarına bağlı olarak ilgili region (bölge) tarafından otomatik olarak konumlandırılmakta, ayrıca Google’ın management (yönetim) servisleri, projenize ait tüm VM instances’ları optimum performans için en iyi şekilde konumlandırmayı garanti etmektedir.
- VM instances’ları haftalık olarak restart edilmektedir. Bu esnada Google’ın management servisleri işletim sistemi ve güvenlikle ilgili güncelleştirmeleri uygulamaktadır.
- Compute Engine VM instances’larına her zaman root (en yüksek) erişim hakkınız olmaktadır. SSH ve root erişim varsayılan olarak flexible ortamda kapalıdır. Dilerseniz bu erişime izin verebilirsiniz.
App Engine Ortamını Seçmek
App Engine uygulamanızı yazıda belirtildiği gibi iki çeşit ortamda çalıştırabilirsiniz. Standard ve flexible ortam. Eğer uygulamanızı microservisler mimarını kullanarak planlamışsanız her iki ortamı da aynı anda kullanabilirsiniz.
Karşılaştırma
Aşağıdaki tablo iki ortam arasındaki farkları kısaca özetlemektedir.
Feature |
Standard environment |
Flexible environment |
Instance başlatma süresi |
Milisaniyeler düzeyinde |
Dakikalar düzeyinde |
Maksimum talep zaman aşımı |
60 saniye |
24 saat |
Arkaplanda işlem parçacıkları |
Evet, Kısıtlamalar mevcuttur. |
Evet |
Arkaplan işlemleri |
Hayır |
Evet |
SSH hata ayıklama |
Hayır |
Evet |
Ölçeklendirme |
Elle, Basit, Otomatik |
Elle, Otomatik |
Lokal diske yazma |
Hayır |
Evet, geçici olarak (Diskler her VM’in yeniden başlatılmasında yenilenir) |
Özelleştirilebilir serving stack |
Hayır |
Evet (Özelleştirilmiş dockerfile kullanarak) |
Otomatik güvenlik güncelleştirmeleri |
Evet |
Evet |
Network erişimi |
Sadece App Engine servisleri üzerinden (outbound sockets’ler dahil) |
Evet |
Üçüncü-parti kütüphaneleri kurmayı destekleme |
Hayır |
Evet |
Lokasyon |
Amerika ve Avrupa |
Beta sürecinde sadece Amerika lokasyonu mevcuttur.. Avrupa’da bulunan uygulamalar flexible ortama şu anda deploy edilmemelidir. |
Ücretlendirme |
Beta sürecinde, her VM için Compute Engine ücretlendirilmesi uygulanmaktadır.. Ücretlendirme ileride değişebilir. |
Flexible ortam ile Compute Engine’nin karşılaştırılması
Flexible ortam, servislerini Compute Engine VM instances’ları içerisinde çalıştırıyor olmasına rağmen, Compute Engine’den aşağıdaki durumlarda farklılaşmaktadır.
- Flexible ortam VM instances’ları haftalık bazda yeniden başlatılır. Restart esnasında Google’ın management servisleri gerekli işletim sistemi ve güvenlik güncelleştirmelerini uygular.
- Compute Engine VM instances’larına herzaman root erişim hakkınız vardır. Flexible ortamda VM instances’larına SSH bağlantı ve root erişimi varsayılan olarak kapalıdır. Dilerseniz bu erişimi açabilirsiniz.
- Flexible ortama ait VM instances’ları projenizin ayarlarına göre otomatik olarak konumlandırılır. Google’ın management servisleri projenize ait VM instances’ları optimum performans için en iyi şekilde konunlandırmayı garanti etmektedir.
Ortamlar arasında geçiş yapma
Google, standart ortam için yazılmış ve standard ortamın API’larını kullanan uygulamalarla çalışan flexible ortam için Python, Java, ve Go runtime ortamlarını sağlar. Bu runtime ortamları backwards-compatible olduğundan “compat” runtime ortamları olarak isimlendirilir. Bir uygulamayı standard’tan flexible ortama kaydırmanıza yardım ederler. %100 geriye doğru uyumluluk garanti edilmemesine rağmen, her compat runtime ortamı flexible ortamın yaşam döngüsünü (life-cycle) uygular. Sağlık kontrolü (health checking) dahildir. Aynı zamanda App Engine standard ortamın Datastore, Logging, Memcache, Search, Task Queues, URL Fetch, and Users authentication gibi API’larını native olarak destekler.
İki ortam farklı stack’ler kullandığı için, migrate ettiğiniz kodunuzu debugging ve optimize etmek için biraz vakit harcamanız gerekebilir. Migration için daha fazla bilgi öğrenmek isterseniz, Python, Java ve Go sayfalarını ziyaret edebilirsiniz.
Vakit ayırıp okuduğunuz için teşekkür ederim.
Yazılarımı kaynak belirtilerek paylaşabilirsiniz.
Kaynaklar
- https://cloud.google.com/appengine/docs
- https://cloud.google.com/appengine/docs/about-the-standard-environment
- https://cloud.google.com/appengine/docs/flexible
- https://cloud.google.com/appengine/docs/the-appengine-environments