Üç katmanlı mimariye giriş

Üç katmanlı mimari, İnternet'teki en yaygın etkileşim mimarisidir. İki katmanlı sunucu kısmı iki kısma ayrıldığında ortaya çıktı: bir mantık katmanı ve bir veri katmanı .

Şöyle bir şeye benziyordu:

İstemci katmanı, "dağıtılmış uygulamanın" kullanıcı etkileşiminden sorumlu olan kısmıdır. Bu katman iş mantığı içermemeli ve kritik verileri depolamamalıdır. Ayrıca, doğrudan veritabanı katmanıyla değil, yalnızca iş mantığı katmanı aracılığıyla etkileşime girmelidir.

Ancak, burada hala bir mantık var. İlk olarak, bu, arayüz aracılığıyla kullanıcıyla etkileşim, girdiği verilerin doğrulanması, yerel dosyalarla çalışmadır. Bu, sunucuyla çalışırken kullanıcı yetkilendirmesi ve veri şifreleme ile ilgili her şeyi de içerir.

İkincisi, basit bir iş mantığıdır. Örneğin, bir çevrimiçi mağaza bir ürün listesi gönderirse, bunları müşteri tarafında sıralayabilir ve filtreleyebiliriz. Ve ilkel veri depolama da burada: önbelleğe alma, oturum açmış kullanıcı çerezleri ve benzerleri.

İş mantığı katmanı ikinci seviyede yer alır, iş mantığının çoğu onun üzerinde yoğunlaşmıştır. Bunun dışında, yalnızca istemciye aktarılan parçalar ve veritabanına gömülü mantık öğeleri (saklı yordamlar ve tetikleyiciler) kalır.

İş mantığı sunucusunun büyük bir bölümü yalnızca aynı mantığı içermez, aynı zamanda ölçeklendirme sorunlarını da çözer: kod parçalara bölünür ve farklı sunuculara dağıtılır. Çok talep gören bazı servisler onlarca sunucu üzerinde çalışabilmektedir. Aralarındaki yük, yük dengeleyici tarafından yönetilir.

Sunucu uygulamaları genellikle sunucunun başka bir kopyasının kolayca çalıştırılabileceği ve diğer kopyalarıyla işbirliği içinde çalışmaya başlayabileceği şekilde tasarlanır. Yani, sunucu kodu yazma sürecinde bile, statik sınıfınızın tek bir örnekte başlatılacağına dair hiçbir garantiye sahip olmayacaksınız.

Veri katmanı veri depolama sağlar ve ayrı bir düzeye yerleştirilir, kural olarak veritabanı yönetim sistemleri (DBMS) aracılığıyla uygulanır, bu bileşene bağlantı yalnızca uygulama sunucusu düzeyinden sağlanır.

Veri katmanını ayırma nedenleri

Veri katmanının tam teşekküllü bir üçüncü katmana ayrılması birçok nedenden dolayı meydana geldi, ancak asıl sebep sunucu üzerindeki artan yük.

İlk olarak, veritabanları, veri işleme için çok fazla bellek ve işlemci süresi gerektirmeye başladı. Bu nedenle her yere ayrı sunuculara yerleştirilmeye başlandı.

Artan yük ile, arka uç kolayca çoğaltılabilir ve bir sunucunun on kopyası yükseltilebilir, ancak veritabanını çoğaltmak imkansızdı - veritabanı hala sistemin tek ve bölünmez bir bileşeni olarak kaldı.

İkincisi, veritabanları akıllı hale geldi - kendi iş mantıklarına sahipler. Saklı yordamları, tetikleyicileri, PLSQL gibi kendi dillerini desteklemeye başladılar. Ve hatta DBMS içinde çalışan kod yazmaya başlayan programcılar bile ortaya çıktı.

Veriye bağlı olmayan tüm mantık arka uca alındı ​​ve düzinelerce sunucuda paralel olarak başlatıldı. Verilere kritik olarak bağlı olan her şey DBMS içinde kaldı ve orada zaten artan yük sorunlarının kendi yöntemlerimiz kullanılarak çözülmesi gerekiyordu:

  • Veritabanı kümesi, aynı verileri depolayan ve belirli bir protokol kullanarak senkronize eden bir veritabanı sunucuları grubudur.
  • Parçalama - veriler mantıksal bloklara bölünür ve farklı veritabanı sunucularına dağıtılır. Bu yaklaşımla veritabanı değişikliklerini sürdürmek çok zordur.
  • NoSQL yaklaşımı, verileri büyük miktarda veri depolamak için oluşturulmuş veritabanlarında depolamaktır. Bunlar genellikle veritabanları bile değil, belirli dosya depolarıdır. İlişkisel veritabanlarına kıyasla çok zayıf işlevsellik.
  • Veri önbelleğe alma. Veritabanı düzeyinde basit bir önbellek yerine, sonucu yalnızca bellekte depolayan tüm önbelleğe alma DBMS'si ortaya çıktı.

Veri katmanının ayrı bir katmana kaldırılmasına yol açan bu sunucu teknolojileri hayvanat bahçesini yönetmek için ayrı kişilere ve / veya tüm ekiplere ihtiyaç duyulduğu açıktır.

Önemli! Tüm gelişmiş teknolojiler, eski yaklaşımlar artık yeni zorluklarla başa çıkamadığında, büyük BT şirketlerinin derinliklerinde doğar. Veritabanlarını ayrı bir katmana dönüştürmek, herhangi bir programcı tarafından değil, Oracle veya IBM'in derinliklerinde bir yerlerde bir grup mühendis tarafından icat edildi.

İlginç! Zuckerberg, Facebook'u yazmaya başladığında, sadece PHP + MySQL üzerinde çalıştı. Milyonlarca kullanıcı varken, tüm PHP kodunu C++'a çeviren ve yerel makine koduna derleyen özel bir tercüman yazdılar.

Ayrıca, MySQL milyarlarca kullanıcının verilerini depolama yeteneğine sahip değildir, bu nedenle Facebook, NoSQL veritabanları kavramını geliştirdi ve güçlü bir sunucu tarafı NoSQL DBMS - Cassandra yazdı. Bu arada, tamamen Java ile yazılmıştır.

Uygulama mantığı konum belirsizliği

Ve üç katmanlı bir mimari, rolleri parçaları arasında neredeyse kesin bir şekilde dağıtsa da, iş mantığının yeni bir bölümünün (yeni kod) sistemde tam olarak nereye eklenmesi gerektiğini doğru bir şekilde belirlemek her zaman mümkün değildir.

Bu belirsizliğin bir örneği aşağıdaki resimde gösterilmektedir:

Sunucu kısmı gri bir arka planla, istemci kısmı beyazla doldurulmuştur. İkinci yaklaşımın iyi bir örneği (en sağda), modern mobil uygulamalardır. İstemci tarafı (telefonda), görünümü (ekran), mantığı ve verileri içerir. Ve yalnızca bazen bu veriler sunucuyla senkronize edilir.

En soldaki seçeneğe bir örnek, sunucudaki tüm mantığa sahip tipik bir PHP sunucusudur ve istemciye zaten statik HTML verir. Projeniz bu iki uç nokta arasında bir yerde konumlanacaktır.

İşin başında, projeyi tanıdıktan sonra, bir sonraki görevin mantığını uygulamanın sizin için daha iyi olduğu yerler hakkında, üzerinde çalışan programcılara danışmanız gerekecek.

Bunu yapmaktan çekinmeyin. Birincisi, tüzükleri ile başkasının manastırına girmezler. İkinci olarak, ihtiyacınız olan kodu bulmayı umduğunuz yerde bulmanız herkes (ve siz de) için daha kolay olacaktır.