Sidecar Deseni
- İngilizcesi
- Sidecar Pattern
- Okunuşu
- saydkar
Kısaca
Sidecar deseni, bir uygulamanın yanında yaşam döngüsünü ve ağını paylaşan yardımcı bir süreç çalıştırarak loglama, proxy ya da güvenlik gibi özellikler ekler.
Sidecar deseni (sidecar pattern) nedir?
Sidecar, ana uygulamanın yanına dağıtılan ayrı bir süreç ya da konteynerdir; bir motosikletin yanına takılan sepet gibi: uygulama nereye giderse o da gider, onunla birlikte başlar ve durur, ağını ve depolamasını paylaşır. Uygulama kendi işini yapar, sidecar ise log göndermek, sertifikaları yenilemek, metrik toplamak ya da trafiğe proxy'lik etmek gibi destekleyici bir işi üstlenir.
Kazanç ayrıştırmadır. Destekleyici bir özellik kendi kodunda, kendi dilinde ve kendi sürümleriyle yaşar; aynı sidecar Java, Go ya da Python ile yazılmış uygulamalara onları değiştirmeden hizmet verebilir. Service mesh'ler bu fikir üzerine kuruludur: her servis, Envoy gibi, her çağrı için şifrelemeyi, yeniden denemeleri ve yönlendirmeyi üstlenen bir proxy sidecar alır; böylece uygulama kodunun bunlarla uğraşması gerekmez.
Kubernetes'te sidecar aynı pod içindeki başka bir konteynerdir; bu yüzden pod'un ağını paylaşır ve volume'lerini de paylaşabilir. Kubernetes yerleşik sidecar konteynerlerini 1.28 sürümünde ekledi ve 1.33'te kararlı hâle getirdi: restartPolicy: Always olan bir init konteyneri uygulamadan önce başlar ve onun yanında çalışmayı sürdürür. Bedeli kaynak ve karmaşıklıktır, çünkü her örnek fazladan bir süreç taşır; bu yüzden bazı service mesh'ler artık bunun yerine her node için tek bir ortak proxy de sunuyor.
Önemli noktalar
- Sidecar, bir uygulamanın yanına dağıtılan ve onun yaşam döngüsünü paylaşan yardımcı bir süreçtir.
- Uygulamayı değiştirmeden loglama ya da proxy gibi destekleyici özellikler ekler.
- Kubernetes'te sidecar aynı pod içindeki başka bir konteynerdir.
- Service mesh'ler her servisin yanına bir proxy sidecar koyar.
Örnek
apiVersion: v1
kind: Pod
metadata:
name: web
spec:
initContainers:
- name: log-shipper # the sidecar: starts first, then runs alongside
image: example/log-shipper:1.0
restartPolicy: Always
volumeMounts:
- { name: logs, mountPath: /var/log/app }
containers:
- name: app # the application writes logs, the sidecar ships them
image: example/web:1.4
volumeMounts:
- { name: logs, mountPath: /var/log/app }
volumes:
- name: logs
emptyDir: {}Sık sorulan sorular
Sidecar ile kütüphane arasındaki fark nedir?
Kütüphane uygulamanın süreci içinde çalışır ve uygulamanın diline uygun bir sürümünün olması gerekir. Sidecar ise ayrı bir süreç olarak çalışır; bu yüzden her dille çalışır ve kendi başına güncellenebilir, bedeli de fazladan bir süreç ve ağda fazladan bir adımdır.
Sidecar'lar istekleri yavaşlatır mı?
Bir proxy sidecar aynı makinede kısa bir adım ekler, genellikle milisaniyenin bir kesri kadar, ve her örnekte biraz bellek ve CPU kullanır. Çoğu servis için üstlendiği işler düşünüldüğünde makul bir bedeldir, ama binlerce örnekte toplam maliyet birikir.
İlgili sayfalar
- PodDevOps ve Bulut, s. 39Pod, Kubernetes'te dağıtılabilen en küçük birimdir: ağ adresini ve depolamayı paylaşan, tek bir node'da birlikte zamanlanan bir ya da daha çok konteynerdir.
- Service MeshDevOps ve Bulut, s. 47Service mesh, mikroservisler arası trafiği yöneten; kod değiştirmeden şifreleme, yeniden deneme, yönlendirme ve izleme ekleyen bir altyapı katmanıdır.
- MikroservislerYazılım Mimarisi, s. 24Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- KonteynerDevOps ve Bulut, s. 28Konteyner, bir uygulamayı bağımlılıklarıyla paketleyip ana makinenin paylaşılan işletim sistemi çekirdeği üzerinde çalıştıran hafif, yalıtılmış bir pakettir.
- İlgilerin AyrılmasıYazılım Mimarisi, s. 19İlgilerin ayrılması, bir programı her biri davranışının açıkça tanımlanmış tek bir yönünden sorumlu ayrı parçalara bölen bir tasarım ilkesidir.
- GözlemlenebilirlikDevOps ve Bulut, s. 22Gözlemlenebilirlik, çalışan bir yazılım sisteminin içinde olup biteni log, metrik ve trace verilerini toplayıp analiz ederek anlayabilme yeteneğidir.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin