Arka uç mimarisi, web uygulamanızın arka ucunun nasıl yapılandırıldığını ifade eder. Arka uç mimarisi, gelen istekleri işlemek ve yanıtlar oluşturmak için uygulamanın parçalarının birbiriyle nasıl iletişim kurduğunu belirler. Bir web uygulaması oluştururken maliyet (hem devam eden hem de büyük ölçekli), uygulamanızın karmaşıklığı, ölçeklendirme hedefleri ve ekibinizin uzmanlığı dahil olmak üzere özel gereksinimlerinize ve faktörlere göre bir arka uç mimarisi seçin.
Özellikle e-ticaret, gazeteler veya bloglar gibi içerik odaklı web uygulamaları için kritik gereksinimler, özellikle uygulamanız küresel çapta büyüyüp daha da dağıtılabilir hale geldikçe verilerinizin tutarlılığını ve performansınızı içerir. İçerik odaklı web uygulamaları için uygulamanızın kullandığı veri depolama alanı da kritik öneme sahiptir ve veri depolama kılavuzunda bu konu daha ayrıntılı olarak ele alınmıştır. Tipik uygulama mimarilerinin ötesine geçmek, içeriğinizi barındırmak ve erişilebilir hale getirmek, uygulamanızın performansını optimize ederken kritik öneme sahiptir. Doğru barındırma stratejisini seçme ve uygulamanızı optimize etme hakkında daha fazla bilgiyi barındırma kılavuzundan edinebilirsiniz.
Bir web uygulaması için mevcut bir arka ucunuz varsa mevcut mimarinizin sınırlarını göz önünde bulundurun. Örneğin, uygulamanızın ölçeği büyüdükçe ve performans ve güvenilirlikle ilgili talepler arttıkça uygulamanızın bazı bölümlerinin yeniden düzenlenmesi veya artan ölçeğinize daha uygun olan farklı bir mimariye taşınması gerekip gerekmediğini değerlendirin. Örneğin Karma (veya çoklu bulut) mimariler, tam bir geçiş yapmadan önce bazı iş yüklerini buluta geçirmenize olanak tanır. Böyle bir taşıma işleminin maliyeti, zamanı ve riski de göz önünde bulundurulmalıdır.
Monolitik Mimariler
Monolitik mimari, uygulamanın tüm bileşenlerinin tek bir kod tabanına sıkı şekilde entegre edilmiş olduğu birleşik bir yapıya sahiptir. Uygulamanın tamamı tek ve bağımsız bir birim olarak oluşturulur. Monolitik mimari, uygulamanın farklı katmanlarının belirli görevleri yerine getirdiği çok katmanlı bir yapıdır.
Yapısal Katmanlar
- Uygulamanın özelliklerini sunmaya yönelik bileşenleri içeren Kullanıcı Arayüzü (UI) genellikle kullanıcılarla etkileşimde bulunan web tabanlı veya masaüstü bir uygulamadır.
- Uygulama mantığı, temel işlevin bulunduğu yerdir.Kod tabanının bu bölümü, uygulamanın çalışma şeklini tanımlayan kuralları, hesaplamaları ve işlemleri içerir.
- Veri erişimi katmanında, verilerin okunması, yazılması ve uygulamanın veri yapıları ile veritabanı şeması arasında çeviri yapmak için kullanılabilecek işlevler bulunur. Bu katman, uygulamanın veritabanı veya veri depolama alanıyla etkileşimde bulunmaktan sorumludur.
- Veritabanı, uygulamanın verilerini depoladığı yerdir. Genellikle kullanıcı verileri, yapılandırmalar ve diğer bilgiler dahil olmak üzere uygulamanın tüm verilerinin depolandığı tek bir veritabanı vardır.
- Ara katman yazılımı bileşenleri; kimlik doğrulama, istek yönlendirme ve veri doğrulama gibi görevleri yerine getirir. Bu bileşenler, veri ve istek akışının yönetilmesine yardımcı olur.
- Bazı monolitik uygulamalarda, harici hizmetler veya API'lerle entegrasyon noktaları bulunur. Bu noktalar uygulamanın üçüncü taraf hizmetleri, veri kaynakları veya diğer sistemlerle etkileşim kurmasına olanak tanır.
Yapısal katmanlar genellikle tek bir kod tabanının parçasıdır. Bu kod tabanı, uygulamanın tamamını içerir ve genellikle dizinler, modüller ve sınıflar halinde düzenlenir. Geliştiriciler, uygulamayı derlemek ve sürdürmek için kod tabanının çeşitli parçaları üzerinde çalışır. Ancak uygulamanın tamamı genellikle tek bir birim olarak dağıtılır. Güncellemeler veya değişiklikler yapıldığında tüm uygulama yeniden dağıtılır.
Potansiyel Zorluklar
- Monolitik uygulamalar büyüdükçe kod tabanı karmaşık ve bakımı zor hale gelir. Bu da uzun geliştirme döngülerine ve kod tabanının tamamını anlamada zorluklara yol açabilir.
- Kodun bir kısmında yapılan değişiklikler, uygulamanın diğer bölümlerini yanlışlıkla etkileyebileceği için değişikliklerin monolitik bir uygulamaya dağıtılması riskli olabilir. Bu, uzun ve hataya açık bir dağıtım süreci oluşturabilir.
- Tek bir birim olarak dağıtıldıklarından monolitik uygulamaların ölçeklendirilmesi zor olabilir. Yalnızca bir bileşen talep artmış olsa bile uygulamanın tamamını ölçeklendirmeniz gerekir.
- Monolitik uygulamalar genellikle tek bir teknoloji yığınına veya programlama diline dayanır. Uygulama içinde, belirli bir görev için en iyi aracı kullanma beceriniz sınırlı olabilir.
- Talebin düşük olduğu dönemlerde bile monolitik uygulamaların çalışması için önemli miktarda kaynak gerekir. Gerilemelere yol açmadan uygulamanın güncellenmesi ve yamalanması zorlaştığı için uygulamanın yaşı arttıkça bakım maliyetleri de artar.
- Monolitik uygulamalar üzerinde çalışan geliştirme ekipleri genellikle uygulamanın tamamına göre organize edilir. Bu da ekiplerin daha büyük olmasına ve ekip üyeleri arasında daha karmaşık bir koordinasyona yol açar.
Önerilen Kullanım
Monolitik mimariler, uygulamanın mütevazı gereksinimleri olduğunda ve geliştirme ekibi küçük olduğunda uygundur. Bir uygulama karmaşıklık ve ölçek içinde büyüdükçe veya uygulamanın farklı bölümleri farklı teknoloji ya da dağıtım stratejileri gerektirdiğinde, monolitik mimariler daha az esnek ve bakımı daha zor hale gelebilir.
Compute Engine'de monolitik uygulamalar çalıştırabilen sanal makineler oluşturup yönetebilirsiniz. Monolitik uygulamanızı çalıştırmak için bu sanal makinelerin işletim sistemleri, yazılımları ve yönetimi üzerinde tam kontrole sahip olursunuz.
App Engine gibi bir hizmet olarak platform hizmetiyle uygulamanızı derleyebilir ve isteklere göre otomatik olarak ölçeklenen, tümüyle yönetilen bir altyapıda çalıştırabilirsiniz.
Monolitik uygulamanız container mimarisine alınmışsa Google Kubernetes Engine (GKE) veya Cloud Run'ı kullanarak çalıştırabilirsiniz. Cloud SQL veya CloudSpanner gibi hizmetler, monolitik uygulamalara veri depolamak için kullanılabilir. Uygulamanızın özel gereksinimlerine göre çeşitli hizmet ve sistemlerin bir kombinasyonunu değerlendirin.
Sunucusuz Mimariler
Sunucusuz mimariyi kullanarak, fiziksel veya sanal sunucuları yönetmeden uygulama derleyip çalıştırabilirsiniz. Bulut sağlayıcısı, geliştiricilerin uygulamaları için kod yazmaya odaklanabilmesi için altyapıyı, ölçeklendirmeyi ve kaynak ayırmayı otomatik olarak yönetir. Sunucusuz mimariler, sunucuların bakımını yapma ihtiyacını ortadan kaldırarak geliştirmeyi basitleştirebilir, operasyonel ek yükü azaltabilir ve maliyetleri optimize edebilir. Mikro hizmetler, gerçek zamanlı veri işleme, değişken iş yüklerine sahip web uygulamaları ve etkinlik işleme için idealdir.
Etkinliğe dayalı sunucusuz mimariler
Etkinliğe dayalı sunucusuz mimariler, işlevlerin veya mikro hizmetlerin yürütülmesini başlatmak için etkinlikler ya da tetikleyicilere dayanan belirli bir sunucusuz bilgi işlem mimarisi türüdür. Sistem bileşenleri etkinlikler aracılığıyla iletişim kurar ve etkinliklere yanıt olarak işlevler çağrılır. İşlevler etkinlikler tarafından tetiklendiği için genellikle eşzamansız iletişimden yararlanır, ardından bunları bağımsız olarak işler ve daha sonra, sonraki işlemleri tetikleyen etkinlikler oluşturabilir. Bu sunucusuz mimari türü; ölçeklenebilir, duyarlı ve serbest bağlantılı sistemler oluşturmak için iyi bir seçenektir.
Google Cloud Functions ve Cloud Functions for Firebase, tümüyle yönetilen ve sunucusuz bir ortamda olay odaklı işlevleri derleyip dağıtmanızı sağlar. HTTP istekleri, Cloud Pub/Sub mesajları, Google Cloud Storage değişiklikleri, Firebase Realtime Database güncellemeleri gibi çeşitli etkinlik ve tetikleyicilere göre altyapıyı yönetmenize gerek kalmadan kod çalıştırmanızı sağlar. Temel özellikler arasında birden çok dil desteği, ölçeklenebilirlik, ayrıntılı faturalandırma, üçüncü taraf entegrasyonları, güçlü günlük kaydı ve izleme, diğer Google ve Firebase hizmetleriyle entegrasyon yer alır.
Sunucusuz mimariler, özellikle değişen iş yükleri, hızlı geliştirme ihtiyaçları ve öngörülemeyen trafiğe sahip uygulamalar için birçok kullanım alanında uygun maliyetli olabilir. Güvenilirlik, bulut sağlayıcısına bağlıdır ve belirli performans ve güvenilirlik hedeflerini sağlamak için hizmet düzeyi sözleşmeleri (HDS'ler) mevcuttur. Sunucusuz mimarinin en iyi seçeneğiniz olup olmadığını belirlemek için özel kullanım alanınızı ve gereksinimlerinizi değerlendirmeniz gerekir.
Container mimarisine alma
Container mimarisi, uygulamaların ve bağımlılıklarının hafif, taşınabilir container'larda paketlenmesini sağlar. Farklı sistemler ve platformlarda geliştirme ve dağıtımı destekleyen tutarlı bir uygulama ortamı sağlarlar. Bazı sunucusuz platformlar, container mimarisine alınmış iş yüklerini çalıştırma imkanı sunar. Temel işlevler olarak ifade edilemeyen karmaşık veya durum bilgili iş yükleriniz olduğunda container'ların sunucusuz bir ortamda çalıştırılması yararlı olabilir. Dil desteği ve çalışma zamanı ortamları açısından esneklik sağlar.
Cloud Run, geliştiricilerin container mimarisine alınmış uygulamaları tümüyle yönetilen bir ortamda dağıtıp çalıştırmasına olanak tanıyan sunucusuz bir bilgi işlem platformudur. Temel altyapıyı yönetmeden uygulama derlemenin, dağıtmanın ve ölçeklendirmenin kolay bir yolunu sunar. Özellikle değişken iş yüklerine sahip olan ve container mimarisine alma işleminin uygulama paketleme ve tutarlılık açısından avantajlar sunduğu çok çeşitli web ve mikro hizmet uygulamaları için uygundur.
Mikro Hizmet Mimarileri
Uygulamalar, serbest bağlantılı küçük parçalara bölünür ve farklı özellikler veya yetenekler uygular. Bu hizmetler, eşzamansız mesajlar ve etkinliğe dayalı kanallar aracılığıyla veya doğrudan bir arayüzü açığa çıkararak iletişim kurabilir. Her hizmet, genellikle Kubernetes gibi bir düzenleme hizmeti aracılığıyla yönetilen veya Cloud Run gibi yönetilen bir platform kullanılarak dağıtılan container'ında bağımsız olarak geliştirilir, test edilir ve ölçeklendirilir.
Mikro hizmet dağıtımları da genellikle merkezi bir sunucuya bağlı olmayıp sunucusuz uygulama paradigmasından yararlanır.
Bir uygulamanın otonom hizmetlere ayrılması karmaşık bir sistemi basitleştirebilir. İyi tanımlanmış sınırlar ve hedefler geliştirme sürecini hızlandırıp bakımı iyileştirebilir. Her bir mikro hizmet, en etkili çerçeveler veya araçlar kullanılarak bağımsız olarak geliştirilebilir. Hizmetler arasındaki iletişim genellikle etkinlikler, yayınla-abone ol iletişimi, mesaj ardışık düzenleri veya gRPC gibi uzak prosedür çağrıları kullanılarak yönetilir.
Mikro hizmet mimarisi içindeki görevleri düzenlemek için hedeflediğiniz platformları destekleyen bir çerçeve, düzenlediğiniz görevler ve iş akışı türleri için yeterli derinliğin yanı sıra hata işleme ve sorunları ayıklama telemetrisi gibi özelliklerden yararlanabilirsiniz. Popüler seçenekler arasında Conductor veya Google Workflows gibi bir bulut sağlayıcısının sunduğu teklifler bulunur.
Mikro hizmet tabanlı uygulamalar, dağıtılmış yapıları ve hizmet içi iletişime duyulan ihtiyaç nedeniyle geliştirilmesi ve bakımı karmaşık olabilir. Bu nedenle dağıtımları yönetme, izleme ve günlük kaydı diğer mimari seçeneklerinden daha karmaşıktır. Güvenilirlik, bağımsız hizmetlerin mimarisine bağlı olduğundan, dağıtılmış doğa, özellikle izleme ve telemetri dağıtıldığı ve gerektiğinde etkinleştirildiği durumlarda ek esneklik sağlayabilir.
İçerik odaklı web uygulaması arka uçları için farklı mimarilerin karşılaştırması
Aşağıdaki tabloda, mimariler, içerik odaklı bir web uygulamasının arka ucuna ilişkin temel gereksinimlerle karşılaştırılmaktadır.
Monolitik Mimariler | Sunucusuz, etkinliğe dayalı Mimariler | Sunucusuz, mikro hizmet Mimarileri | |
---|---|---|---|
Karmaşıklık ve bakım |
|
|
|
Ölçeklenebilirlik ve performans |
|
|
|
Dayanıklılık ve yedek stratejileri |
|
|
|
Geliştirme deneyimi |
|
|
|
Maliyet |
|
|
|
İçerik odaklı web uygulamaları için arka uç mimarileri hakkında daha fazla bilgi
Uygulamanızı farklı bir mimariye nasıl taşıyacağınız dahil olmak üzere içerik odaklı web uygulamaları mimarileri hakkında daha fazla bilgi edinmek için bazı kaynakları burada bulabilirsiniz:
- Katmanlı monolitik ve sunucusuz web uygulamaları dahil olmak üzere gevşek şekilde bağlanmış web uygulaması arka uç mimarileri hakkında daha fazla bilgi edinin.
Sunucusuz Cloud Functions işlevleri için tipik kullanım alanları.