VTS Kontrol Paneli veritabanı

Ölçeklenebilir, performanslı ve esnek bir sürekli entegrasyon kontrol panelini desteklemek için VTS Kontrol Paneli arka ucunun, veritabanı işlevselliğine ilişkin güçlü bir anlayışla dikkatli bir şekilde tasarlanması gerekir. Google Cloud Datastore, işlemsel ACID garantileri ve nihai tutarlılığın yanı sıra varlık grupları içinde güçlü tutarlılık sunan bir NoSQL veritabanıdır. Ancak yapı SQL veritabanlarından (ve hatta Cloud Bigtable'dan) çok farklıdır; tablolar, satırlar ve hücreler yerine türler, varlıklar ve özellikler vardır.

Aşağıdaki bölümlerde VTS Dashboard web hizmeti için etkili bir arka uç oluşturmaya yönelik veri yapısı ve sorgulama modelleri özetlenmektedir.

Varlıklar

Aşağıdaki varlıklar VTS test çalıştırmalarından elde edilen özetleri ve kaynakları depolar:

  • Test Varlığı . Belirli bir testin test çalıştırmaları hakkındaki meta verileri depolar. Anahtarı test adıdır ve özellikleri, uyarı işlerinin onu güncelleştirdiği andan itibaren başarısızlık sayısını, geçme sayısını ve test senaryosu kesintilerinin listesini içerir.
  • Test Çalıştırma Varlığı . Belirli bir testin çalıştırmalarından meta veriler içerir. Test başlangıç ​​ve bitiş zaman damgalarını, test oluşturma kimliğini, geçen ve başarısız olan test senaryolarının sayısını, çalıştırma türünü (örn. gönderim öncesi, gönderim sonrası veya yerel), günlük bağlantılarının bir listesini, ana bilgisayarı saklamalıdır. makine adı ve kapsam özeti sayıları.
  • Cihaz Bilgisi Varlığı . Test çalıştırması sırasında kullanılan cihazlarla ilgili ayrıntıları içerir. Cihaz yapı kimliğini, ürün adını, yapı hedefini, şubeyi ve ABI bilgilerini içerir. Bu, birden çoğa bir biçimde çoklu cihaz test çalıştırmalarını desteklemek için test çalıştırması varlığından ayrı olarak depolanır.
  • Nokta Çalıştırmalı Varlık Profili Oluşturma . Bir test çalıştırmasında 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.
  • Kapsama Kuruluşu . Bir dosya için toplanan kapsam verilerini açıklar. Git proje bilgilerini, dosya yolunu ve kaynak dosyadaki satır başına kapsam sayımlarının listesini içerir.
  • Test Senaryosu Çalıştırma Varlığı . Test senaryosunun adı ve sonucu da dahil olmak üzere, bir test çalıştırmasındaki belirli bir test senaryosunun sonucunu açıklar.
  • Kullanıcı Favorileri Varlığı . Her kullanıcı aboneliği, teste bir referansı ve App Engine kullanıcı hizmetinden oluşturulan kullanıcı kimliğini içeren bir varlıkta temsil edilebilir. Bu, verimli iki yönlü sorgulamaya olanak tanır (yani bir teste abone olan tüm kullanıcılar ve bir kullanıcı tarafından favorilere eklenen tüm testler için).

Varlık gruplaması

Her test modülü bir varlık grubunun kökünü temsil eder. Test çalıştırması varlıkları, bu grubun hem alt öğeleridir hem de ilgili test ve test çalıştırması atası ile ilgili cihaz varlıkları, profil oluşturma noktası varlıkları ve kapsam varlıkları için üst öğelerdir.

Şekil 1 . Varlık kökenini test edin.

Anahtar Nokta: Kök ilişkilerini tasarlarken, etkili ve tutarlı sorgulama mekanizmaları sağlama ihtiyacını, veritabanı tarafından uygulanan sınırlamalara karşı dengelemelisiniz.

Faydalar

Tutarlılık gereksinimi, bir işlemin gerçekleştirilene kadar gelecekteki operasyonların etkilerini görmemesini ve geçmişteki işlemlerin mevcut operasyonlar tarafından görülebilmesini sağlar. Cloud Datastore'da varlık gruplaması, grup içinde güçlü okuma ve yazma tutarlılığı adaları oluşturur; bu durumda bu adalar, test çalıştırmalarının ve bir test modülüyle ilgili verilerin tamamını oluşturur. Bu, aşağıdaki avantajları sunar:

  • Uyarı işleriyle test modülü durumuna yönelik okumalar ve güncellemeler atomik olarak değerlendirilebilir
  • Test modülleri içindeki test senaryosu sonuçlarının garantili tutarlı görünümü
  • Soy ağaçlarında daha hızlı sorgulama

Sınırlamalar

Bazı yazma işlemleri reddedilebileceğinden, bir varlık grubuna saniyede bir varlıktan daha hızlı yazma önerilmez. Uyarı işleri ve yükleme, saniyede bir yazma hızından daha hızlı gerçekleşmediği sürece yapı sağlamdır ve güçlü tutarlılığı garanti eder.

Sonuç olarak, test modülü başına saniyede bir yazma sınırı makuldür çünkü test çalıştırmaları genellikle VTS çerçevesinin ek yükü de dahil olmak üzere en az bir dakika sürer; Bir test 60'tan fazla farklı ana bilgisayarda tutarlı bir şekilde eşzamanlı olarak yürütülmedikçe yazma darboğazı olamaz. Her modülün genellikle bir saatten uzun süren bir test planının parçası olduğu göz önüne alındığında, bu daha da olası hale geliyor. Ana bilgisayarlar testleri aynı anda çalıştırıp aynı ana bilgisayarlara kısa süreli yazma işlemlerine neden olursa (örneğin, yazma hatalarını yakalayıp yeniden deneyerek) anormallikler kolayca ele alınabilir.

Ölçeklendirmeyle ilgili hususlar

Bir test çalışmasının mutlaka testin ana öğesi olarak bulunmasına gerek yoktur (örn. başka bir anahtar alabilir ve özellikler olarak test adı, test başlangıç ​​zamanı olabilir); ancak bu, güçlü tutarlılığın nihai tutarlılıkla değiş tokuş edilmesini sağlayacaktır. Örneğin, uyarı işi, bir test modülü içindeki 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ırmaları dizisinin tam olarak doğru bir temsilini tasvir edemeyebileceği anlamına gelir. Bu aynı zamanda tek bir test modülü içindeki test çalıştırmalarının görüntülenmesini de etkileyebilir; bu, çalıştırma sırasının tutarlı bir anlık görüntüsü olmayabilir. Sonunda anlık görüntü tutarlı olacaktır, ancak en güncel verilerin olacağının garantisi yoktur.

Test senaryoları

Bir diğer potansiyel darboğaz ise birçok test senaryosunun yer aldığı büyük testlerdir. İki operasyonel kısıtlama, bir varlık grubu içindeki saniyede bir yazma verimi ve maksimum 500 varlıklık işlem boyutudur.

Bir yaklaşım, atası olarak bir test çalıştırması olan bir test senaryosunu belirtmek olacaktır (kapsam verilerinin, profil oluşturma verilerinin ve cihaz bilgilerinin nasıl depolandığına benzer şekilde):

Şekil 2 . Test Senaryoları Test Çalıştırmalarından kaynaklanır (ÖNERİLMEZ).

Bu yaklaşım atomiklik ve tutarlılık sunarken, testlere güçlü sınırlamalar getirir: Bir işlem 500 varlıkla sınırlıysa, bir testte 498'den fazla test senaryosu olamaz (kapsam veya profil oluşturma verileri olmadığı varsayılarak). Bir testin bunu aşması durumunda, tek bir işlem tüm test senaryosu sonuçlarını aynı anda yazamaz ve test senaryolarını ayrı işlemlere bölmek, saniyede bir yinelemelik maksimum varlık grubu yazma verimini aşabilir. Bu çözüm performanstan ödün vermeden iyi ölçeklenemeyeceğinden önerilmez.

Bununla birlikte, test senaryosu sonuçlarını test çalıştırmasının alt öğeleri olarak saklamak yerine, test senaryoları bağımsız olarak saklanabilir ve bunların anahtarları test çalıştırmasına sağlanabilir (bir test çalıştırması, test senaryosu varlıklarına yönelik tanımlayıcıların bir listesini içerir):

Figür 3 . Test Durumları bağımsız olarak saklanır (ÖNERİLİR).

İlk bakışta bu, güçlü tutarlılık garantisini bozuyor gibi görünebilir. Ancak istemcinin bir test çalıştırması varlığı ve test senaryosu tanımlayıcılarının bir listesi varsa, bir sorgu oluşturmasına gerek yoktur; bunun yerine test senaryolarını her zaman tutarlı olması garanti edilen tanımlayıcılarına göre doğrudan alabilir. Bu yaklaşım, bir varlık grubu içinde aşırı yazmayı tehdit etmeden güçlü bir tutarlılık elde ederken, bir test çalıştırmasının sahip olabileceği test senaryolarının sayısı üzerindeki kısıtlamayı büyük ölçüde hafifletir.

Veri erişim kalıpları

VTS Kontrol Paneli aşağıdaki veri erişim modellerini kullanır:

  • Kullanıcı favorileri Özellik olarak belirli App Engine Kullanıcı nesnesine sahip olan kullanıcı favorileri varlıklarında bir eşitlik filtresi kullanılarak sorgulanabilir.
  • Test listesi . Test varlıklarının basit sorgusu. Ana sayfayı oluşturmak için bant genişliğini azaltmak amacıyla, başarısız test durumu kimliklerinin potansiyel olarak uzun listesini ve uyarı işleri tarafından kullanılan diğer meta verileri atlayacak şekilde geçen ve başarısız olan sayımlarda bir projeksiyon kullanılabilir.
  • Test çalıştırmaları . Test çalıştırması varlıkları için sorgulama, anahtarda (zaman damgası) bir sıralama ve yapı kimliği, geçiş sayısı vb. gibi test çalıştırması özelliklerinde olası filtreleme gerektirir. Bir test varlığı anahtarıyla bir ata sorgusu gerçekleştirildiğinde, okuma oldukça tutarlı olur. Bu noktada tüm test senaryosu sonuçları, bir test çalıştırması özelliğinde saklanan kimliklerin listesi kullanılarak alınabilir; bunun aynı zamanda veri deposu alma işlemlerinin doğası gereği oldukça tutarlı bir sonuç olacağı da garanti edilir.
  • Profil oluşturma ve kapsam verileri . Bir testle ilişkili profil oluşturma veya kapsam verileri için sorgulama, başka herhangi bir test çalıştırması verisi (diğer profil oluşturma/kapsam verileri, test senaryosu verileri vb.) alınmadan da yapılabilir. Test testi ve test çalıştırması varlık anahtarlarını kullanan bir üst sorgu, test çalıştırması sırasında kaydedilen tüm profil oluşturma noktalarını alacaktır; profil oluşturma noktası adını veya dosya adını da filtreleyerek tek bir profil oluşturma veya kapsam varlığı alınabilir. Ata sorgularının doğası gereği bu işlem oldukça tutarlıdır.

Kullanıcı arayüzüne ilişkin ayrıntılar ve bu veri modellerinin kullanımdaki ekran görüntüleri için bkz . VTS Kontrol Paneli Kullanıcı Arayüzü .