VTS Kontrol Paneli veritabanı

Ölçeklenebilir, performanslı ve esnek bir sürekli entegrasyon kontrol panelini desteklemek için VTS kontrol paneli arka ucu, veritabanı işlevselliği hakkında güçlü bir anlayışla dikkatlice tasarlanmalıdır. Google Cloud Datastore, işleme yönelik ACID garantileri ve nihai tutarlılık ile birlikte varlık grupları arasında güçlü tutarlılık sunan bir NoSQL veritabanıdır. Ancak yapı, SQL veritabanlarından (ve hatta Cloud Bigtable'den) çok farklıdır. Tablolar, satırlar ve hücreler yerine tür, varlık ve mülk vardır.

Aşağıdaki bölümlerde, VTS Kontrol Paneli web hizmeti için etkili bir arka uç oluşturmaya yönelik veri yapısı ve sorgu kalıpları özetlenmiştir.

Varlık sayısı

Aşağıdaki varlıklar, VTS test çalıştırmalarından alınan özet ve kaynakları depolar:

  • Test Tüzel Kişisi. Belirli bir testin test çalıştırmalarıyla ilgili meta verileri depolar. Anahtarı test adı olan bu öğenin özellikleri arasında başarısızlık sayısı, geçme sayısı ve uyarı işlerinin güncellemesinden itibaren test senaryosu kesintilerinin listesi yer alır.
  • Test Çalıştırma Tüzel Kişisi. Belirli bir testin çalıştırılmalarından elde edilen meta verileri içerir. Testin başlangıç ve bitiş zaman damgalarını, test derleme kimliğini, başarılı ve başarısız test örnekleri sayısını, çalıştırma türünü (ör. göndermeden önce, göndermeden sonra veya yerel), günlük bağlantılarının listesini, ana makine adını ve kapsam özeti sayılarını saklamalıdır.
  • Cihaz Bilgisi Öğesi. Test çalışması sırasında kullanılan cihazlarla ilgili ayrıntıları içerir. Cihaz derleme kimliği, ürün adı, derleme hedefi, dal ve ABI bilgilerini içerir. Bu, birden fazla cihazda test çalıştırma işlemini bire çok şekilde desteklemek için test çalıştırma öğesinden ayrı olarak depolanır.
  • Profil oluşturma noktası çalıştırma öğesi. Test çalışmasındaki belirli bir profil oluşturma noktası için toplanan verileri özetler. Profil oluşturma verilerinin eksen etiketlerini, profil oluşturma noktası adını, değerlerini, türünü ve regresyon modunu açıklar.
  • Kapsam Tüzel Kişisi. Bir dosya için toplanan kapsam verilerini açıklar. Git proje bilgilerini, dosya yolunu ve kaynak dosyadaki satır başına kapsam sayılarının listesini içerir.
  • Test Kaydı Çalıştırma Tüzel Kişisi. Test çalışmasındaki belirli bir testin sonucunu (test adı ve sonucu dahil) açıklar.
  • Kullanıcı Favorileri Tüzel Kişi. Her kullanıcı aboneliği, teste ve App Engine kullanıcı hizmetinden oluşturulan kullanıcı kimliğine referans içeren bir öğeyle temsil edilebilir. Bu sayede, verimli bir iki yönlü sorgu (ör. bir teste abone olan tüm kullanıcılar ve bir kullanıcının favorilerine eklediği tüm testler için) yapılabilir.

Öğe gruplandırması

Her test modülü, bir varlık grubunun kökünü temsil eder. Test çalıştırma varlıkları hem bu grubun alt öğeleri hem de ilgili test ve test çalıştırma üst öğesiyle alakalı cihaz varlıkları, profil oluşturma noktası varlıkları ve kapsam varlıkları için ebeveynlerdir.

Şekil 1. Varlık soy ağacını test edin.

Önemli Nokta: Ahnentafel ilişkilerini tasarlarken etkili ve tutarlı sorgu mekanizmaları sağlama ihtiyacını veritabanı tarafından uygulanan sınırlamalarla dengelemeniz gerekir.

Avantajlar

Tutarlılık koşulu, gelecekteki işlemlerin bir işlem taahhüt edilene kadar etkilerini görmemesini ve geçmişteki işlemlerin mevcut işlemler tarafından görülebilmesini sağlar. Cloud Datastore'ta varlık gruplandırması, grup içinde güçlü okuma ve yazma tutarlılığı adaları oluşturur. Bu durumda, test modülüyle ilgili tüm test çalıştırmaları ve veriler bu adalara dahildir. Bu durum, şu avantajları sunar:

  • Uyarı işleri tarafından test modülü durumunda yapılan okumalar ve güncellemeler atomik olarak değerlendirilebilir.
  • Test modülleri içindeki test durumu sonuçlarının tutarlı bir şekilde görüntülenmesi garanti edilir.
  • Soy ağacı içinde daha hızlı sorgu yapma

Sınırlamalar

Bazı yazma işlemleri reddedilebileceğinden, varlık grubuna saniyede bir öğeden daha hızlı bir hızda yazma yapılması önerilmez. Uyarı işleri ve yükleme işlemi saniyede bir yazma işleminden daha hızlı bir hızda gerçekleşmediği sürece yapı sağlamdır ve güçlü bir tutarlılık sağlar.

Test modülü başına saniyede bir yazma sınırı makuldür. Bunun nedeni, test çalıştırmalarının genellikle VTS çerçevesinin yükü de dahil olmak üzere en az bir dakika sürmesidir. Bir test sürekli olarak 60'tan fazla farklı ana makinede eşzamanlı olarak çalıştırılmadığı sürece yazma darboğazı oluşmaz. Her modülün genellikle bir saatten uzun süren bir test planının parçası olması, bu olasılığı daha da azaltır. Ana makineler testleri aynı anda çalıştırırsa anormallikler kolayca ele alınabilir.Bu durumda, aynı ana makinelere kısa yazma patlamaları (ör. yazma hatalarını yakalayıp tekrar deneyerek) neden olur.

Ölçeklendirmeyle ilgili dikkat edilmesi gereken noktalar

Bir test çalıştırmasının üst öğesi olarak testin bulunması gerekmez (ör. başka bir anahtar alabilir ve test adı, test başlangıç zamanı gibi özelliklere sahip olabilir); ancak bu durumda güçlü tutarlılık yerine nihai tutarlılık elde edilir. Örneğin, uyarı işi bir test modülündeki en son test çalıştırmalarının karşılıklı olarak tutarlı bir anlık görüntüsünü göremeyebilir. Bu, genel durumun test çalıştırma sırasını tam olarak doğru şekilde yansıtamayabileceği anlamına gelir. Bu durum, tek bir test modülündeki test çalıştırmalarının görüntülenmesini de etkileyebilir. Bu görüntüleme, çalıştırma sırasının tutarlı bir anlık görüntüsü olmayabilir. Zamanla anlık görüntü tutarlı hale gelir ancak en güncel verilerin bu şekilde olacağı garanti edilmez.

Test durumları

Olası bir başka darboğaz da çok sayıda test durumu içeren büyük testlerdir. İki işlevsel kısıtlama, bir varlık grubunda saniye başına bir olan maksimum yazma işleme hızı ve maksimum 500 öğe olan işlem boyutudur.

Bir yaklaşım, üst öğe olarak test çalıştırması içeren bir test senaryosu belirtmektir (kapsama verileri, profil oluşturma verileri ve cihaz bilgilerinin depolanma şekline benzer):

Şekil 2. Test durumları, test çalıştırmalarından türetilir (ÖNERİLMEZ).

Bu yaklaşım atomiklik ve tutarlılık sunsa da testler üzerinde güçlü kısıtlamalar getirir: Bir işlem 500 öğeyle sınırlıysa testte en fazla 498 test durumu olabilir (kapsama veya profil oluşturma verileri olmadığı varsayılır). Bir test bu sınırı aşarsa tek bir işlem, test durumu sonuçlarının tümünü tek seferde yazamaz ve test durumlarının ayrı işlemlere bölünmesi, saniyede bir iterasyon olan maksimum varlık grubu yazma veri hızını aşabilir. Bu çözüm, performanstan ödün vermeden iyi ölçeklenmeyeceği için önerilmez.

Ancak test kaydı sonuçlarını test çalıştırmasının alt öğeleri olarak depolamak yerine test kayıtlarını bağımsız olarak depolayabilir ve anahtarlarını test çalıştırmasına sağlayabilirsiniz (test çalıştırma, test kaydı öğelerinin tanımlayıcılarının listesini içerir):

Şekil 3. Bağımsız olarak depolanan test durumları (ÖNERİLİR).

Bu durum, ilk bakışta güçlü tutarlılık garantisinin ihlal edildiği şeklinde yorumlanabilir. Ancak istemcinin bir test çalıştırma öğesi ve test durumu tanımlayıcılarının listesi varsa sorgu oluşturması gerekmez. Bunun yerine, test durumlarını tanımlayıcılarına göre doğrudan alabilir. Bu tanımlayıcıların her zaman tutarlı olması garanti edilir. Bu yaklaşım, bir test çalıştırmasının sahip olabileceği test durumları sayısıyla ilgili kısıtlamayı büyük ölçüde azaltırken, bir varlık grubunda aşırı yazma işlemi yapmadan güçlü bir tutarlılık elde eder.

Veri erişim kalıpları

VTS Kontrol Paneli aşağıdaki veri erişimi kalıplarını kullanır:

  • Kullanıcı favorileri. Özellik olarak belirli bir App Engine kullanıcı nesnesi içeren kullanıcı favorileri öğelerinde eşitlik filtresi kullanılarak sorgulanabilir.
  • Test girişi. Test öğelerinin basit sorgusu. Ana sayfayı oluşturmak için bant genişliğini azaltmak amacıyla, başarılı ve başarısız sayımlarda bir projeksiyon kullanılabilir. Böylece, başarısız test kaydı kimliklerinin ve uyarı işleri tarafından kullanılan diğer meta verilerin olası uzun listelemesi atlanabilir.
  • Test çalıştırmaları. Test çalıştırma varlıkları için sorgu oluşturmak, anahtar (zaman damgası) üzerinde sıralama ve test çalıştırma özelliklerinde (ör. derleme kimliği, geçme sayısı) olası filtreleme gerektirir. Test öğesi anahtarıyla bir üst öğe sorgusu gerçekleştirerek okuma işlemi oldukça tutarlı olur. Bu noktada, test çalışması mülkünde depolanan kimlik listesi kullanılarak tüm test kaydı sonuçları alınabilir. Ayrıca, veri deposu alma işlemlerinin doğası gereği bu sonucun son derece tutarlı olması garanti edilir.
  • Profil oluşturma ve kapsam verileri. Bir testle ilişkili profil oluşturma veya kapsam verileri için sorgu oluşturma işlemi, diğer test çalıştırma verileri (ör. diğer profil oluşturma/kapsam verileri, test kaydı verileri vb.) de alınmadan yapılabilir. Test ve test çalıştırma varlık anahtarlarını kullanan bir üst sorgu, test çalıştırma sırasında kaydedilen tüm profil oluşturma noktalarını alır. Profil oluşturma noktası adı veya dosya adına göre filtreleme yaparak tek bir profil oluşturma veya kapsam varlığı da alınabilir. Üst öğe sorgularının doğası gereği bu işlem son derece tutarlıdır.

Kullanıcı arayüzü ve bu veri kalıplarının kullanımdaki ekran görüntüleri hakkında ayrıntılı bilgi için VTS Kontrol Paneli kullanıcı arayüzü başlıklı makaleyi inceleyin.