Bu serinin 1.0 sürümü, arka uç mühendisliğinin rollerini, araçlarını ve ilk mimari modellerini tanımlayarak temelleri attı. Monolitleri ve mikro hizmetleri, SQL ve NoSQL, REST ve GraphQL’i araştırdık. Bu bilgi, işlevsel uygulamalar oluşturmak için gerekli temeli temsil eder. Ancak bu cilt, bu uygulamaları ölçeklendirdiğimizde ne olacağıyla ilgilidir; Tek sunucumuz bir filo haline geldiğinde, tek veritabanımız bir küme haline gelir ve işlem içi çağrılarımız ağ atlama noktalarına dönüşür. Bu, dağıtılmış sistemler alanıdır ve farklı, daha katı kurallar dizisi tarafından yönetilir.
Tek makineli bir sistemden dağıtılmış bir sisteme geçiş, karmaşıklığın doğrusal bir artışı değildir; bu bir paradigma değişimidir. Tek bir makinede geçerli olan varsayımlar; güvenilir ağ iletişimi, sıfır gecikme süresi, anlık işlemler; paramparça oldular. Gelişmiş arka uç mühendisinin birincil hedefi, temel ortamın doğasında olan güvenilmezliğe rağmen doğru ve güvenilir bir şekilde çalışabilen sistemler oluşturmaktır.
1990’larda L. Peter Deutsch ve Sun Microsystems’teki diğerleri yanılgıların bir listesini derlediler; Dağıtılmış uygulamalara yeni başlayan programcıların her zaman yaptıkları varsayımlar kendilerini tehlikeye atar.
CAUTION
{title=“Eight Fallacies of Distributed Computing”}
Ağ güvenilirdir. (Değildir.)
Gecikme sıfırdır. (Değildir.)
Bant genişliği sonsuzdur. (Değildir.)
Ağ güvenlidir. (Değildir.)
Topoloji değişmez. (Değişir.)
Bir yönetici var. (Birçok yönetici var.)
Nakliye maliyeti sıfırdır. (Değildir.)
Ağ homojendir. (Değildir.)
:::Bu ciltte tartışılan her model, protokol ve mimari, bir bakıma bu yanılgıların sonuçlarını hafifletmeye yönelik bir stratejidir.
1.2 Gelişmiş Arka Uç Mühendisliği için Bir Yol Haritası#
Temelimizi temel alarak modern sistem mimarisini tanımlayan ileri konuları araştırıyoruz:
Tek veritabanına sahip tek sunuculu bir uygulamada veri tutarlılığı büyük ölçüde ACID işlemleriyle çözülür. Dağıtılmış bir sistemde tutarlılık en zor zorluklardan biri haline gelir.
CAP teoremi ağ bölümleri sırasındaki davranışı açıklar, ancak PACELC teoremi daha eksiksiz bir tablo sağlar:
NOTE
{title=“PACELC Theorem”}
“Bir Bölüm (P) varsa, dağıtılmış sistemin Kullanılabilirlik (A) ve Tutarlılık (C) arasında seçim yapması gerekir. Aksi halde (E), sistem normal çalışırken Gecikme (L) ve Tutarlılık (C) arasında seçim yapması gerekir.”
:::Bu, incelikli mimari tartışmayı zorlar. Bir sistem, arızalar sırasında kullanılabilirlik için tutarlılıktan fedakarlık edebilir, ancak normal çalışma sırasında gecikme yerine tutarlılığa öncelik verebilir.
İki Aşamalı Taahhüt eşzamanlıdır ve mikro hizmetler için uygun değildir. Saga Modeli, yerel işlemler ve telafi edici eylemler yoluyla hizmetler genelinde veri tutarlılığını yönetir.
TIP
{title=“Saga Pattern Example: E-commerce Order”}
Sipariş Hizmeti: BEKLEMEDE' durumunda sipariş oluşturur, ORDER_CREATED` olayını yayınlar
“Ödeme Hizmeti”: Ödemeyi işler, başarı durumunda “PAYMENT_PROCESSED” yayınlar
“Envanter Hizmeti”: Stokları günceller, başarı durumunda “INVENTORY_UPDATED”ı yayınlar
“Sipariş Hizmeti”: Siparişi “ONAYLANDI” olarak günceller
Arıza Ele Alma: Envanter başarısız olursa, Ödeme Hizmeti para iadesini telafi eder, Sipariş Hizmeti iptal eder.
:::Uygulama Stilleri:
NOTE
{title=“Saga Implementation Approaches”}
Koreografi: Hizmetler, merkezi bir koordinatör olmaksızın etkinlikler yayınlar/abone olurlar
Orkestrasyon: Merkezi orkestratör, destan durumunu ve telafi edici işlemleri yönetir
Tek arızaların tüm sistemi etkilemesini önlemek için uygulama bileşenlerini havuzlara ayırın.
TIP
{title=“Bulkhead Implementation”}
Her aşağı akış hizmeti için ayrı iş parçacığı/bağlantı havuzları kullanın. Yavaş bir Hizmet A, Hizmet B’nin havuzunu etkilemez ve sistemin tamamen arızalanmasını önler.
Temel önbelleklemenin ötesinde gelişmiş önbellekleme stratejileri.
NOTE
{title=“Caching Pattern Comparison”}
Önbellek Kenarı: Uygulama kodu önbelleği ve yavaş yüklemeyi yönetir
Okuma: Önbellek, veritabanından veri yüklemeyi yönetir
İçine Yazma: Önbellek güncellemeleri eşzamanlı olarak veritabanını günceller
Geri Yazma: Önbellek güncellemeleri eşzamansız olarak DB’ye aktarılır
:::Gürleyen Sürü Azaltma:
CAUTION
{title=“Thundering Herd Problem”}
Önbelleğe alınan öğenin süresi dolduğunda, binlerce istek aynı anda önbelleği kaçırır ve DB’yi bunaltır. Çözüm: diğerleri beklerken yalnızca ilk isteğin verileri yüklediği kilit tabanlı yeniden getirme.
Sürüm 2.0, dağıtılmış sistem mühendisliğine doğru yolculuğa çıktı. Dayanıklı, ölçeklenebilir arka uç sistemleri oluşturmak, temel ödünleşimlerin derinlemesine anlaşılmasını gerektirir: gecikmeye karşı tutarlılık, kullanılabilirliğe karşı doğruluk, hıza karşı güvenlik.
Gelişmiş arka uç mühendisi başarısızlık için tasarım yapar, ağ düşmanlığını üstlenir ve Sagas, Olay Kaynak Kullanımı, Devre Kesiciler ve Hizmet Ağları gibi modelleri uygular. Nihai beceri, karmaşıklık hakkında akıl yürütmektir; Uygun azaltma stratejilerini uygulamak için başarısızlık noktalarının, darboğazların ve güvenlik açıklarının belirlenmesi.
Gelişmiş Arka Uç Mühendisliği - Dağıtık Sistemlerden Esnek Mimarilere