---
title: 'Bildirim ve E-posta Servisleri'
source: 'https://academia.sh/tr/kurslar/sunucusuz/bildirim-ve-e-posta-servisleri'
course: 'Sunucusuz ve Kenar Bilişim'
language: tr
updated: '2026-08-17T18:06:57+00:00'
license: 'CC BY-SA 4.0'
---

# Bildirim ve E-posta Servisleri

Gönderimin bir hizmete devredilmesinin kısıtı: geri dönen ileti ile şikâyetin birer olay olarak geri gelmesi, bu geri bildirim akışının işlenme oranı taranarak otuz günün sonundaki itibar puanı, kısılan gün sayısı ve teslim edilen ileti sayısının ölçülmesi ve işlemenin maliyetiyle işlememenin bedelinin karşılaştırılması.

Geçit dışarıdan gelen isteği içeri alıyordu. Ölçüm ağının dışarıya **gönderdiği** bir akış daha
var: doğrulama başarısız olduğunda saha ekibine giden iş bildirimi, fatura kesildiğinde aboneye
giden ileti, sayaç arızasında şube sorumlusuna giden uyarı. Bu gönderimler de bir hizmete
devredilir.

Teslim edilebilirliğin kendisi daha önce ölçüldü ve o ölçüm burada tekrarlanmaz. Bu dersin
sorusu şudur: gönderimi bir hizmete devretmek hangi kısıtı geri getirir? Yanıt, buraya kadar
görülen bütün kısıtlardan farklı bir yerden gelir — **gönderimin başarısı gönderenin elinde
değildir.**

## Devredilen Karar ve Elde Kalmayan Şey

Devredilenler tanıdık: gönderim sunucusunu işletmek, adres kayıtlarını tutmak, yeniden deneme
kuyruğunu yönetmek, alan adı doğrulama kayıtlarını yenilemek. Devredilmeyen, ama zaten hiç
kimsenin elinde olmayan bir şey var: alan tarafın kararı. Bir ileti kabul edilir, geri
çevrilir, sessizce bir klasöre atılır ya da şikâyet olarak işaretlenir; bu kararı veren, gönderen
değildir.

Hizmet bu kararı ölçer ve gönderene bir **itibar** olarak yansıtır. Karşılığında gelen kısıt
buradan doğar: gönderim kotası itibara bağlıdır. İtibar düşünce kota düşer, kota düşünce
gönderilebilecek ileti sayısı düşer. Buraya kadarki derslerde kısıt bir ayardı — görünürlük
süresi, azami teslim, zaman aşımı. Burada kısıt **kazanılan bir sayıdır** ve doğrudan
ayarlanamaz; ancak davranışla yükseltilir.

Kısıtın bir de başlangıç hali vardır. Yeni bir gönderim akışının geçmişi yoktur, dolayısıyla
itibarı da yoktur; hizmet bu durumda hacmi baştan açmaz, geçmiş biriktikçe açar. Bunun pratik
sonucu, gönderim kapasitesinin **anlık olarak ölçeklenememesidir.** Buraya kadarki bütün
hizmetlerde ölçek talep edildiği anda geliyordu — kuyruk derinliği artınca örnek eklendi, istek
sayısı artınca geçit taşıdı. Gönderimde böyle olmaz: bir günde 8.000 iletiden 80.000'e çıkmak
teknik bir sınır değil, kazanılmamış bir izindir. Ölçüm ağının yeni bir bölgeyi devreye alması
planlanıyorsa, gönderim hacminin o tarihten haftalar önce kademeli olarak yükseltilmesi gerekir.

Hizmetin bu kararı ilettiği yol da tanıdıktır. Geri dönen ileti ve şikâyet, gönderene birer
**olay** olarak geri gelir; tıpkı bu konunun ilk dersindeki olaylar gibi bir veri yoluna ya da
konuya yazılırlar. Buradan doğrudan bir sonuç çıkar: o olayları alacak bir kural yoksa, hiçbir
hata üretmeden düşerler. İlk derste ölçülen 433 sessiz düşme burada bir liste hijyeni sorununa
dönüşür.

Ölçüm kurgu bölgesel ölçüm ağının saha bildirimleri üzerindedir; adresler `ornek.gecersiz`
biçiminde kurgu adlardır.

- **OS31.** Liste 12.000 alıcıdır; başlangıçta 480'i geçersizdir (kapanmış hesap, hatalı alan
  adı).
- **OS32.** Günlük taban kota 8.000 iletidir; gerçekleşen kota itibarla orantılıdır ve itibar
  60'ın altına inince ayrıca yarıya düşer.
- **OS33.** İtibar 100'den başlar; günlük geri dönme oranı 0,02'yi aşarsa 6 puan, şikâyet oranı
  0,001'i aşarsa 3 puan iner, ikisi de eşiğin altındaysa 2 puan çıkar.
- **OS34.** Şikâyet eden alıcı listeden çıkarılmazsa listede kalır ve sonraki gönderimlerde
  yeniden şikâyet eder.
- **OS35.** Geri bildirim işleme oranı, o gün gelen geri dönen ve şikâyet olaylarının kaçının
  listeye yansıdığıdır.
- **OS36.** Model tek bir gönderim akışı kurar; içerik, konu satırı ve gönderim saati etkileri
  ölçülmez. Modelde rastgelelik yoktur.

## İşleme Oranı ile Teslim Arasındaki Bağ

```js
// itibar.mjs — bildirim servisi modeli: geri bildirim islenmezse teslim ne oluyor
// Model: gercek bir gonderim degil, geri bildirim isleme orani ile teslimin baglanmasi.
const GUN = 30, LISTE = 12000, TABAN = 8000;
const GECERSIZ0 = 480;                         // kapanmis ya da hatali adres (kurgu liste)

function kosum(p) {                            // p: geri bildirim isleme orani
  let gecersiz = GECERSIZ0, sikayetci = 0, itibar = 100;
  let teslim = 0, donenTop = 0, sikTop = 0, kisilanGun = 0;
  for (let g = 0; g < GUN; g++) {
    const kisik = itibar < 60;                 // itibar esigin altina inince gonderim kisilir
    const kota = Math.round(TABAN * (itibar / 100) * (kisik ? 0.5 : 1));
    if (kisik) kisilanGun++;
    const gonderim = Math.min(kota, LISTE);
    const donen = Math.round(gonderim * (gecersiz / LISTE));
    const sik = Math.round(gonderim * (0.0006 + sikayetci / LISTE));
    teslim += gonderim - donen; donenTop += donen; sikTop += sik;
    const dOran = donen / gonderim, sOran = sik / gonderim;
    if (dOran > 0.02) itibar -= 6;
    if (sOran > 0.001) itibar -= 3;
    if (dOran < 0.01 && sOran < 0.0005) itibar += 2;
    itibar = Math.max(0, Math.min(100, itibar));
    gecersiz = Math.max(0, gecersiz - Math.round(donen * p));      // islenen geri bildirim
    sikayetci = Math.max(0, sikayetci + Math.round(gonderim * 0.0006) - Math.round(sik * p));
  }
  return { itibar, teslim, donenTop, sikTop, kisilanGun };
}

console.log("isleme orani".padEnd(14) + "30. gun itibar".padStart(16) + "teslim".padStart(9) +
  "geri donen".padStart(12) + "sikayet".padStart(9) + "kisilan gun".padStart(13));
for (const p of [0, 0.25, 0.5, 0.9, 1]) {
  const s = kosum(p);
  console.log(p.toFixed(2).padEnd(14) + String(s.itibar).padStart(16) +
    String(s.teslim).padStart(9) + String(s.donenTop).padStart(12) +
    String(s.sikTop).padStart(9) + String(s.kisilanGun).padStart(13));
}
console.log(`gun: ${GUN}, liste: ${LISTE}, gunluk taban kota: ${TABAN}, ` +
  `baslangictaki gecersiz adres: ${GECERSIZ0}`);
```

```sh
node itibar.mjs
```

```
isleme orani    30. gun itibar   teslim  geri donen  sikayet  kisilan gun
0.00                         0    40743        1697       65           25
0.25                         7    62990        1450       84           24
0.50                        88   211687         953      207            0
0.90                        94   225548         532      150            0
1.00                        94   225600         480      150            0
gun: 30, liste: 12000, gunluk taban kota: 8000, baslangictaki gecersiz adres: 480
```

İlk satır geri bildirimin hiç işlenmediği durumdur. Otuzuncu günün sonunda itibar **sıfırdır**,
otuz günün **25'inde gönderim kısılmıştır** ve toplam teslim 40.743'te kalmıştır. Hiçbir şey
bozulmadı: gönderim isteği her gün kabul edildi, hizmet hata döndürmedi, geri bildirim olayları
düzgün biçimde yayınlandı. Yalnız kimse onları okumadı.

Son satır aynı listenin, aynı içeriğin ve aynı otuz günün öteki ucudur. Geri bildirim tam
işlendiğinde itibar 94'te kalır, hiçbir gün kısılmaz ve teslim **225.600'e** çıkar. Aradaki
fark 184.857 iletidir — beş buçuk kat. İki koşum arasında değişen tek şey, geri dönen olayların
listeye yansıtılmasıdır.

Geri dönen sütunu bu mekanizmayı açıklıyor. Tam işlemede toplam geri dönen **480'dir**, yani
listedeki geçersiz adres sayısına eşittir: her geçersiz adres bir kez geri döner, işlenir,
listeden çıkar ve bir daha denenmez. İşleme yokken aynı 480 adres otuz gün boyunca yeniden
denenir ve 1.697 geri dönme üretir. Geri dönme oranı böylece hiç düşmez, eşiğin üstünde kalır ve
itibarı her gün aşağı çeker.

Kısılan gün sütunu bu düşüşün nasıl hızlandığını gösteriyor. İtibar 60'ın altına indiği anda
kota ayrıca yarıya iner; ilk satırda otuz günün 25'i bu durumdadır. Kısılma yalnız teslimi
azaltmaz, geri bildirim akışını da inceltir — daha az gönderim, daha az geri dönme, dolayısıyla
temizlenecek adresin bulunması da yavaşlar. Kısıt kendi düzelmesini geciktirir.

Şikâyet sütunu ilk bakışta ters görünüyor: işleme oranı yükseldikçe şikâyet sayısı 65'ten 150'ye
çıkıyor. Bunun nedeni paydadır — işlenmeyen koşumda kota çöktüğü için zaten çok az ileti
gönderilmiştir. Şikâyet **oranı** işlemeyle düşer, sayısı ise gönderim arttığı için yükselir.
Mutlak sayıya bakan bir gösterge burada tam ters yönde yorumlanır.

## Eşik Nerede

Tabloda asıl bulgu ikinci ile üçüncü satır arasındadır. İşleme oranı 0,25'te itibar 7,
teslim 62.990; 0,50'de itibar 88, teslim 211.687. Doğrusal bir ilişki yoktur — iki katına çıkan
işleme oranı teslimi üç buçuk katına çıkarır. Bunun nedeni eşik mantığıdır: geri dönme oranı
0,02'nin altına indiği anda ceza durur ve itibar kendini toplamaya başlar. Bu eşiği geçecek
kadar temizlik yapmak yetiyor; ondan sonrası kendiliğinden geliyor.

Bu yüzden "geri bildirimin yarısını işliyoruz" cümlesi bir eksiklik değil, sınırın hangi
tarafında durulduğu sorusudur. 0,25 ile 0,50 arasında bir yerde sistem iki kararlı durumdan
birine yerleşir: ya oran eşiğin altına iner ve teslim tavana yürür, ya eşiğin üstünde kalır ve
kota dibe iner. Ara bir denge yoktur, çünkü kısılan kota geri bildirim hacmini de düşürür ve
temizlenecek adres daha yavaş bulunur.

## Geri Bildirimi Yanlış İşlemek

İlk ölçüm işlemenin faydasını gösterdi, ama tek bir işleme biçimi varsaydı: geri dönen adres
listeden çıkar. Gerçek geri bildirim akışı tek türlü değildir. Bir bölümü kalıcı hatadır —
adres yok, alan adı yok, hesap kapanmış. Bir bölümü geçicidir: kutu dolu, alan sunucu meşgul,
geçici bir sınıra takılmış. İkisi aynı olay akışından, çoğu zaman benzer biçimde gelir.

```js
// tur-ayrimi.mjs — geri bildirim turu ayirt edilmezse listeden kimler siliniyor
const GUN = 30, LISTE = 12000, KOTA = 8000;
const GECERSIZ0 = 480;          // kalici hata: adres yok, alan adi yok
const GECICI = 0.03;            // gecici hata: kutu dolu, alici sunucu mesgul

function kosum(ayrimVar) {
  let gecerli = LISTE - GECERSIZ0, gecersiz = GECERSIZ0, yanlis = 0, teslim = 0;
  for (let g = 0; g < GUN; g++) {
    const liste = gecerli + gecersiz;
    const gonderim = Math.min(KOTA, liste);
    const kalici = Math.round(gonderim * (gecersiz / liste));
    const gecici = Math.round((gonderim - kalici) * GECICI);
    teslim += gonderim - kalici - gecici;
    gecersiz = Math.max(0, gecersiz - kalici);          // kalici hata her iki modda silinir
    if (!ayrimVar) { gecerli -= gecici; yanlis += gecici; }   // gecici hata da silinirse
  }
  return { liste: gecerli + gecersiz, yanlis, teslim };
}

console.log("mod".padEnd(22) + "30. gun liste".padStart(15) + "yanlis silinen".padStart(16) +
  "teslim".padStart(9));
for (const [ad, v] of [["tur ayrimi yok", false], ["yalniz kalici silinir", true]]) {
  const s = kosum(v);
  console.log(ad.padEnd(22) + String(s.liste).padStart(15) + String(s.yanlis).padStart(16) +
    String(s.teslim).padStart(9));
}
console.log(`gun: ${GUN}, baslangic listesi: ${LISTE}, gunluk kota: ${KOTA}`);
```

```sh
node tur-ayrimi.mjs
```

```
mod                     30. gun liste  yanlis silinen   teslim
tur ayrimi yok                   5025            6495   210020
yalniz kalici silinir           11520               0   232334
gun: 30, baslangic listesi: 12000, gunluk kota: 8000
```

Tür ayırt edilmediğinde otuz günde **6.495 geçerli alıcı** listeden silindi ve liste 12.000'den
5.025'e indi. Silinenlerin hiçbirinde bir sorun yoktu; yalnız o gün kutuları doluydu. İkinci
satırda liste 11.520'de kalır — bu, başlangıçtaki 480 geçersiz adresin çıkarılmış halidir.

Buradaki kusur birinci ölçümdekinin tersidir. Orada geri bildirim işlenmiyordu ve itibar
düşüyordu; burada işleniyor, hem de fazlasıyla, ve teslim yine düşüyor: 232.334 yerine 210.020.
Geri bildirim akışını işlemek tek başına yeterli değildir; olayın **türünü** okumak gerekir.
Fark, olayı alan işlevin iki satırındadır ve iki satırın maliyeti 6.495 alıcıdır. Kalıcı ile
geçici arasındaki sınırı yanlış çizmenin bedeli, akışı hiç işlememenin bedeliyle aynı yöne
bakar.

## İşlemenin Maliyeti, İşlememenin Bedeli

Geri bildirim akışını işlemek bu konudaki en ucuz işlerden biridir. Tam işleme koşumunda otuz
günde 480 geri dönen ve 150 şikâyet olayı gelir: toplam 630 olay. Her olay bir işlev çağrısıyla
işlense ve önceki dersteki çağrı ücreti kullanılsa, otuz günün maliyeti 630 × 0,010 = **6,3
kurgu birimdir.** İşlememenin bedeli 184.857 teslim edilmemiş iletidir.

Oran bu kadar keskin olduğu halde bu akışın işlenmeden kalması olağandır ve nedeni ilk dersteki
ölçümde yazılıdır. Geri bildirim olayları bir konuya yazılır; o konunun abonesi yoksa olaylar
sessizce düşer. Ne hata sayacı artar ne bir eşik aşılır — abonesi olmayan bir konu, boş bir
kuyruğa benzer, sağlıklı görünür. Belirti, otuz gün sonra teslim sayısının düşmesiyle ortaya
çıkar ve o zaman da neden olarak gönderim hizmeti değil, "iletiler gitmiyor" gibi bir sonuç
görülür.

Bu akışın nasıl kurulacağı da bu konuda ölçülmüş parçalardan çıkar. Geri bildirim olayları bir
konuya yazılır, konunun bir aboneliği bir kuyruğa bağlanır, kuyruk bir işlevi uyandırır ve işlev
listeye yazar. Kuyruğun görünürlük süresi buradaki iş için kısa tutulabilir, çünkü liste yazması
birkaç birim sürer. Aynı geri dönme olayının iki kez teslim edilebileceği ise ikinci dersin
sonucudur; adresi listeden çıkarmak zaten etkisiz bir iştir, ama şikâyet sayacı tutuluyorsa o
sayacın dördüncü dersteki gibi bir etkisizlik anahtarına dayanması gerekir. Konu kapanırken
görülen şey budur: gönderim hizmetinin geri bildirim akışı, bu konudaki beş dersin hepsini aynı
anda kullanan tek örnektir.

Kısıtın etrafından dolaşmanın yolları vardır ve hepsinin kendi bedeli sayılabilir. Listeyi elle
temizlemek geri bildirimi işlemenin yerini tutar ama gecikmelidir: haftada bir yapılan temizlik,
tabloda 0,25 ile 0,50 arasındaki bölgeye denk düşer. Gönderimi ikiye ayırmak — işlemsel
bildirimler bir akıştan, toplu duyurular başka bir akıştan — birinin itibarını ötekinden korur;
bedeli iki ayrı yapılandırma yüzeyi ve iki ayrı geri bildirim akışıdır. Kotayı yükseltmek için
başvurmak ise kısıtı hiç kaldırmaz: kota itibarın sonucudur, girdisi değil. Bu, konu boyunca
sayılan kısıtların en katısıdır — görünürlük süresi değiştirilebilir, zaman aşımı yükseltilebilir,
adım sınırı yeniden çizilebilir; itibar yalnız kazanılır.

## Özet

- Gönderim hizmete devredildiğinde geriye alınamayan şey alan tarafın kararıdır; hizmet bu
  kararı itibar olarak yansıtır ve kota itibara bağlanır. Kısıt bu kez ayarlanan değil,
  kazanılan bir sayıdır.
- Geri dönen ileti ve şikâyet gönderene birer olay olarak döner; bu olayları alacak bir kural
  ya da abonelik yoksa hiçbir hata üretmeden düşerler.
- Geri bildirim hiç işlenmediğinde otuz günün 25'inde gönderim kısıldı, itibar sıfıra indi ve
  teslim 40.743'te kaldı; tam işlendiğinde itibar 94, kısılan gün 0, teslim 225.600 oldu —
  aradaki fark 184.857 iletidir.
- Tam işlemede toplam geri dönen 480'dir, yani listedeki geçersiz adres sayısına eşittir;
  işleme yokken aynı 480 adres 1.697 geri dönme üretir. İlişki doğrusal da değildir: işleme
  oranı 0,25'ten 0,50'ye çıkınca teslim 62.990'dan 211.687'ye çıkar, çünkü geri dönme oranı
  eşiğin altına indiği anda ceza durur.
- Olayın türünü okumamak ters yönde aynı zararı verir: kalıcı ile geçici hata ayırt edilmediğinde
  otuz günde 6.495 geçerli alıcı silindi ve teslim 232.334'ten 210.020'ye indi.
- 630 geri bildirim olayını işlemenin maliyeti 6,3 kurgu birimdir; işlememenin bedeli 184.857
  teslim edilmemiş iletidir.

## Sonraki Adım

Bu konu boyunca işlevler birbirine bağlandı. Olaylar kurallarla yönlendirildi, kuyruklar ve
konular araya tampon koydu, çok adımlı akışlar bir durum makinesine verildi, saatle başlayan
işler etkisiz kılındı, dışarıdan gelen istekler bir geçitten geçirildi ve dışarıya giden
iletiler bir geri bildirim akışına bağlandı. Her birinde aynı hesap tekrarlandı: bir karar
devredildi, karşılığında sayılabilir bir kısıt geldi.

Bütün bu düzeneğin ortak bir özelliği var ve şimdiye kadar hiç sorulmadı: hepsi **tek bir
bölgede** koşuyor. Kural motoru, kuyruk, orkestratör, zamanlayıcı, geçit ve gönderim hizmeti aynı
yerde duruyor; şube ekranındaki bir sorgu da, saha uygulamasındaki bir istek de o tek yere
gidiyor. Kullanıcıya yakın olan tek şey önbellekti — ve önbellek yalnız daha önce hesaplanmış
bir yanıtı saklayabilir. Sonraki konu bu sınırı ele alıyor: hesaplamanın kendisi kullanıcıya
yaklaştığında ne kazanılır, karşılığında hangi çalışma zamanı kısıtları kabul edilir.
