İçerik odaklı web uygulaması arka uçları için Arka Uç Mimarileri

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
  • Küçük ve bağımsız projelerde uygulama kolaylığı sağlanır ancak ölçek arttıkça karmaşıklık da artar.
  • Manuel bakım ve koordinasyon gerektirir.
  • Ölçeklendirme, iyi bir şekilde desteklenir ve platforma entegredir.
  • Sorun giderme ve hata ayıklama zorlayıcı olabilir.
  • Altyapıyı yönetmenize gerek kalmaz.
  • Her bir birimin bakımını kolaylaştıran bağımsız olarak test edilip dağıtılan bağımsız hizmetler.
  • Hizmetler arasında dikkatli iletişim kurulmasını gerektirir.
  • Daha geniş ölçekte yönetmek için yönetim ve düzenleme araçları gerektirir.
Ölçeklenebilirlik ve performans
  • Küçük ölçekte etkilidir, belirli bir boyutun ötesinde ölçeklenmesi zordur.
  • Spesifik altyapı ihtiyaçları, dinamik ölçeklendirme seçeneklerini sınırlandırır.
  • Mimari içinde yük dengeleme gibi yöntemlerle manuel ölçeklendirme (veya manuel hizmetleri kullanma).
  • Her hizmet belirli bir ihtiyaca göre uyarlanır ve bağımsız olarak ölçeklendirilip optimize edilebilir.
Dayanıklılık ve yedek stratejileri
  • Dağıtım karmaşıktır ve kesinti yaşanmasına ("tamamen veya hiçbir şey") yol açabilir.
  • Bulut sağlayıcıdadır.
  • Her bağımsız işlev bağımsız olarak yeniden denenebilir.
  • Her hizmet bağımsız olduğundan, bağımsız test ve geliştirme süreçleriyle genel sistemi daha dirençli hale getirir.
Geliştirme deneyimi
  • Mimarinin sıkı bir şekilde birleştirilmesiyle (örneğin etkili sorgular aracılığıyla) küçük ölçekte hızlı geliştirme.
  • Uzun derleme süreleri ve karmaşıklık arttıkça zor ortak çalışma ve testler.
  • Bakımı ve yönetimi gereken bir altyapı olmadığından geliştirme süreci hızlanır.
  • Canlı bir uygulamanın test edilmesi ve hata ayıklaması, bulut sağlayıcısının hizmetlerine bağlıdır.
  • Hizmetler bağımsızdır ve birbirinden bağımsız olarak geliştirilebilir.
  • Birçok hizmetin koordine edilmesi ve yönetilmesi gerekir.
Maliyet
  • Karmaşık geliştirme süreçleri maliyetlerin artmasına yol açabilir.
  • Özellikle daha büyük ölçekte, donanım veya altyapı için ciddi yatırım gerektirir.
  • Ölçeklendirme ve azaltmadan kaynaklanan maliyet tasarruflarını fark etmek zordur.
  • Özel donanım maliyeti yoktur.
  • Kaynak kullanımını ve maliyeti optimize etmek için ölçeği artırma ve azaltma (sıfıra kadar).
  • Özel donanım maliyeti yoktur.
  • Kaynak kullanımını ve maliyeti sınırlar dahilinde optimize etmek için ölçeği artırma ve azaltma.
  • Çok sayıda bağımsız hizmeti izlemek ve yönetmekten kaynaklanan ek maliyetler.

İç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: