Page 139 - Yazılım Teknolojileri Araştırma Bülteni 2023
P. 139
REST API ve gRPC Mimari Stillerinin Karşılaştırılması | 139
1. Binary Tabanlı Mesaj Formatları
Bu bölümde binary tabanlı mesaj formatları; protokol arabellekleri, avro, thrift başlıkları altında
anlatılmıştır.
1.1. Protobuf (Protokol Arabellekleri)
Protobuf, istemci kütüphanelerinin otomatik olarak oluşturulmasını ve mikroservislerin basit bir
şekilde tanımlanmasını sağlayan bir serileştirme protokolüdür. Google, Protokol arabelleklerini
tasarlarken basitlik ve verimliliğe odaklanmıştır. Dil bağımsızdır ve herhangi bir dile kolaylıkla
entegre edilebilir. API geliştiricileri, proto dosyaları ile istemciler ve sunucular arasındaki hizmetleri
ve mesajları tanımlar. Protokol arabellekleri mesajlar üzerinden yapılandırılır. Her mesaj alan adı
verilen bir dizi anahtar değer çifti ve alan türünü içerir. Örnek bir proto mesajı aşağıdaki gibidir:
message Person {
string name = 1;
int32 id = 2;
bool has_ponycopter = 3;
}
Dosyalar, uzak hizmetlerle mesaj alışverişi yapmak için istemci ve sunucu kodu oluşturan protoc derleyici
tarafından yüklenir. Protokol arabellekleri kullanılarak kodlanan mesajlar binary biçiminde temsil ederken,
XML veya JSON temsillerinden çok daha küçüktür. Protokol arabellekleri insanlar tarafından okunulabilirlikten
ödün vererek daha az CPU-yoğunluğu, daha az bant genişliğine gereksinim duyar. Bu durum iletişim
gecikmesinin azalmasını sağlayarak ve daha yüksek performanslı sistemler oluşmasına imkân verir. En son
sürüm olan proto3 kullanımı daha basittir ve gRPC için en yeni yetenekleri sunar.
1.2. Avro
Avro, Apache Software Foundation tarafından geliştirilen bir veri serileştirme sistemi ve mesajlaşma
formatıdır. Temel olarak, Avro verileri şemalar kullanarak temsil eder ve bu sayede verilerin taşınması
ve paylaşılması kolaylaşır. Şema, verinin yapısını ve veri türlerini belirleyen bir JSON formatında
tanımlanır. Avro’nun en önemli özelliklerinden biri, şemaya dayalı olmasıdır. Şema, verinin doğru bir
şekilde seri hale getirilmesi (serialization) ve ayrıştırılması (deserialization) için gereken talimatları
sağlar. Bu sayede, veri gönderen ve alıcı arasında tutarlılık sağlanır. Ayrıca, Avro şemaları, dinamik
tip kontrolü sağlar ve verilerin uyumlu olup olmadığını doğrulamak için kullanılabilir. Avro, dil
bağımsız bir mesajlaşma formatıdır. Yani, farklı programlama dillerinde kullanılabilen kod üretebilir.
Bu özellik, farklı dillerde yazılmış sistemler arasında veri alışverişini kolaylaştırır. Bununla birlikte,
Avro veri sıkıştırma özelliği sunar. Verilerin sıkıştırılması, ağ trafiği ve depolama maliyetini azaltır.