BAC Teoremi: Mikroservis Mimarisinde Felaket Kurtarma

Yunus Emre Alpu
Turk Telekom Bulut Teknolojileri
3 min readNov 10, 2023

--

Günümüzde birçok şirket, mikro servis mimarisine geçiş yaparak iş sürekliliği için etkili Felaket Kurtarma (FK) çözümleri arayışında. Bu nedenle, mühendislik ekiplerinin yeni mimariyle uyumlu çalışan çözümleri anlamaları hayati önem taşıyor.

Bu ihtiyaca cevap olarak Backup Availability Consistency (BAC) Teoremi, mikro hizmetlerde Felaket Kurtarma (Disaster Recovery) için teorik bir temel sunmaktadır. Bu blog yazısında, BAC Teoremi’ni açıklamaya odaklanacağım.

BAC Teoremi için yazılmış olan tanımlayıcı araştırma makalesi, IEEE üyesi mühendisler tarafından kaleme alınmıştır. Makale, temel teoremi şu şekilde ifade eder: “Mikroservis mimarisinin tamamını yedeklerken, hem kullanılabilirlik hem de tutarlılık elde etmek mümkün değildir.

Bu tanım CAP teoremine benzer gelebilir ve bunun nedeni BAC’nin CAP’den esinlenmiş olmasıdır. Kısaca özetlemek gerekirse CAP Teoremi, herhangi bir dağıtık sistemin şu üç ilkeden yalnızca ikisini karşılayabileceğini belirtir: tutarlılık(consistency), kullanılabilirlik (availability), bölünme toleransı(partition tolerance). Mikro hizmetler gerçekten de dağıtık bilgi işlem sistemleridir — dolayısıyla bu karşılaştırma geçerlidir.

BAC Teoreminin üç bileşeninin her birini tartışalım.
İzole edilmiş bağlamlarında, ilkeler aşağıdaki gibi tanımlanabilir:

Yedekleme (Backup):
İdeal senaryoda, bir felaket durumunda her bir hizmetin ve ilgili veritabanının yedeklendiği, tamamen yedeklenmiş bir mikro hizmet mimarisine sahip olmak isteriz. “Yedekleme”, tüm bileşenlerin durumunu yakalayan bir anlık görüntü(snapshot) şeklinde olacaktır.

Gerçekte, mikro hizmet mimarileri polyglot persistence(çoklu kalıcılığı) takip eder, yani her hizmetin aynı tür veritabanının ayrı bir örneği veya tamamen farklı bir veritabanı teknolojisi olsun, kendi veritabanı vardır. Sonuç olarak, artan veritabanı sayısı ve türü nedeniyle veritabanı yedeklemeleri çok daha karmaşıktır. Çoklu kalıcılığın bir tasviri için aşağıdaki diyagrama bakın:

Kullanılabilirlik (Availability):
İdeal senaryoda, her bileşenin tamamen kullanılabilir olduğu bir mikro hizmet mimarisine sahip olabiliriz ve herhangi bir hizmetin durumunu herhangi bir zamanda okumak ve güncellemek mümkündür.
Gerçekte, yukarıda bahsedilen polyglot persistence(çoklu kalıcılık) nedeniyle, tüm mikro hizmetlerin ve ilgili veritabanlarının senkronize yedeklemelerini gerçekleştirmek en iyi uygulamadır, ancak bu, bu yedekleme işlemi sırasında hiçbir güncellemeye izin verilmeyeceği anlamına gelir — bileşenlerin kullanılabilirliği kısıtlanır.

Tutarlılık (Consistency):
İdeal senaryoda, “normal operasyonlar sırasında her mikro hizmet sonunda tutarlı bir duruma ulaşacaktır.”
Gerçekte, “her mikro hizmetin durumunu bağımsız olarak geliştirmesine izin verirsek ve her mikro hizmetin yedeğini farklı bir zamanda alırsak, tüm yedekleme kümesi tüm uygulamanın durumuna ilişkin tutarlı bir görünüm sunmayacaktır”.

Bu ilkeleri bir araya getirdiğimizde aşağıdaki kombinasyonları elde edebileceğimizi görüyoruz:

a) Yedekleme ve Kullanılabilirlik
Tutarsızlık(inconsistency) pahasına yedekleme(backup) ve erişilebilirlik(availability) elde edebiliriz. Yedekleme işlemi sırasında genel sistemin kullanılabilirliğini korumak için her bir mikro hizmeti bağımsız olarak yedeklersek, yedekler farklı zamanlarda alınacağı için mimaride bir tutarsızlıkla karşı karşıya kalırız. İki veritabanı arasındaki ilişkilerin kopması veya eksik olması mümkündür.

b) Yedekleme ve Tutarlılık
Yedekleme ve tutarlılığı kullanılamama pahasına elde edebiliriz. Senkronize yedeklemeler gerçekleştirerek önceki tutarsız yedekleme sorunundan kaçınmaya çalışırsak, yedekleme işlemi sırasında güncellemeler mümkün olmayacağından sistemin kullanılabilirliğini sınırlandırmış oluruz.

BAC Teoremi’nin getirdiği sınırlamaları aşmak için çeşitli en iyi uygulamalar ve yaklaşımlar geliştirilmiştir. Bunlar hakkında bilgi edinmek için IEEE makalesine bakabilirsiniz.

--

--