# Arka Uçlar (Backends) ve Health Probes

Şimdiye kadar ele aldığımız tüm VCL, Varnish’in davranışını değiştirmemize izin veren rutinler ile ilgiliydi. Ancak, Varnish'in asıl amacı arka uç yanıtlarını önbelleğe almak olduğunu unutmayın. Bu yüzden arka uçların VCL yönünü ele almamızın zamanı geldi. Genel olarak aşağıdaki gibi gözükür.

```c
backend name {
  .attribute = "value";
}
```

{% hint style="info" %}
Varnish, önce tanımlanmış olan arka uca otomatik olarak bağlanır. Diğer arka uçlar sadece **req.backend\_hint** değişkenine değer atayarak kullanılabilir.
{% endhint %}

Desteklenen arka uç nitelik listesi:

| Nitelik                     | Görevi                                                                                                                                                               |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **hostname**                | Arka ucun alan adını veya IP'sini temsil eden zorunlu bir nitelik.                                                                                                   |
| **port**                    | Kullanılacak olan arka uç bağlantı noktası. Varsayılan bağlantı noktası 80'dir.                                                                                      |
| **connect\_timeout**        | Varnish, arka uç ile bağlantı için beklediği süredir. Varsayılan değer 3,5 saniyedir.                                                                                |
| **first\_byte\_timeout**    | Varnish'in ilk bağlantıdan sonra arka uçtan geri döndürülecek ilk bayt için beklediği süre. Varsayılan değer 60 saniyedir.                                           |
| **between\_bytes\_timeout** | Varnish'in eşit miktarda veri akışı sağlamak için her bayt arasında beklediği süre miktarı. Varsayılan değer 60 saniyedir.                                           |
| **max\_connections**        | Arka uçla eşzamanlı bağlantıların toplam sayısı. Sınıra ulaşıldığında, yeni bağlantılar kesilir. Arka ucunuzun bu miktarda bağlantıyı kaldırabileceğinden emin olun. |
| **prob**                    | Arka ucun sağlığını kontrol etmek için kullanılır.                                                                                                                   |

```c
backend default {
  .host = "127.0.0.1";
  .port = "8080";
  .connect_timeout = 2s;
  .first_byte_timeout = 5s;
  .between_bytes_timeout = 1s;
  .max_connections = 150;
}
```

Yukarıdaki örnekte, 8080 numaralı bağlantı noktasında yerel makineyle bağlantı kurulur. İlk bağlantı için en fazla iki saniye bekleyecek. Bağlantı kurulduktan sonra, ilk baytı almak için beş saniye kadar bekleyecek. Bundan sonra düzenli bir frekans ile bayt almak istiyoruz. Her bayt arasında en fazla bir saniye bekleyecek. Arka uçla aynı anda 150 bağlantıya izin verecek.

{% hint style="info" %}
Arka uçtan daha fazla istek **max\_connections** ayarında izin verilenden daha fazla olursa, başarısız olurlar.
{% endhint %}

Kriterlerden herhangi biri karşılanmazsa, arka uç hatası atılır ve **HTTP 503** durum koduyla **vcl\_backend\_error**'a iletilir.

Bir arka uç **probu** kullanılmadan, sağlıksız bir arka uç ancak bağlantı koptuğunda tespit edilebilir. Sözde bir arka uç **probu**, arka uçları düzenli olarak sorgulayacak ve belirli koşullara dayanarak sağlığını kontrol edecektir. **problar** arka uçlara benzer şekilde tanımlanabilir.

```c
probe name {
  .attribute = "value";
}
```

| **Nitelik**            | Görevi                                                                                                                    |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **url**                | prob tarafından istek yapılacak url. Bu varsayılan olarak / olarak ayarlanmıştır.                                         |
| **request**            | Arka uçlara gönderilecek HTTP isteği.                                                                                     |
| **expected\_response** | Arka uç tarafından döndürülmesi beklenen HTTP durum kodu. Bu, varsayılan değer 200'dür.                                   |
| **timeout**            | probun bir arka uç yanıtı için beklediği süre. Varsayılan değer 2 saniyedir.                                              |
| **interval**           | probun ne sıklıkla çalıştırılacağı. Varsayılan değer 5 saniyedir.                                                         |
| **window**             | Arka uç sağlığını belirlemek için yapılan yoklama sayısı. Varsayılan değer 8'dir.                                         |
| **threshold**          | **window'da** arka ucun sağlıklı olması için başarılı olunması gereken yoklama sayısı. Bu, varsayılan değer 3'tür.        |
| **initial**            | Varnish bir arka uç sağlığı kontrol edilmeye başlamadan ilk kontrol de gerekli başarı sayısı. Varsayılan eşik değeri - 1. |

Örnek bir kod aşağıda:

```c
backend default {
  .host = "127.0.0.1";
  .port = "8080";
  .probe = {
    .url = "/";
    .expected_response = 200;
    .timeout = 1s;
    .interval = 1s;
    .window = 5;
    .threshold = 3;
    .initial = 2;
  }
}
```

Yukarıdaki örnekte: arka uç 8080 numaralı bağlantı noktasındaki yerel ana bilgisayara bağlanmaya çalışır. Arka uç sağlığını belirleyen bir arka uç probu vardır. **prob**, kök URL'deki 8080 numaralı bağlantı noktasında arka uça *yoklama* yapar. Bir *yoklamanın* başarılı olması için 200 durum kodlu bir HTTP yanıtı bekleniyor ve bu yanıt bir saniye içinde verilmeli.&#x20;

Her saniye, prob arka ucu yoklayacak ve beş *yoklama* sonucu sağlığı belirlemek için kullanılıyor. Bu beş yoklamadan en az üçünün, arka uç sağlıklı olduğunu düşünmesi için başarılı olması gerekir. Başlangıçta, bu iki yoklama olmalıdır.&#x20;

Ayrıca bir probu açıkça tanımlayabilir, adlandırabilir ve bu probu çoklu arka uçlar için yeniden kullanabiliriz. İşte bunu yapan bir kod örneği:

```c
probe myprobe {
    .url = "/";
    .expected_response = 200;
    .timeout = 1s;
    .interval = 1s;
    .window = 5;
    .threshold = 3;
    .initial = 2;
}

backend default {
    .host = "my.primary.backend.com";
    .probe = myprobe;
}

backend backup {
   .host = "my.backup.backend.com";
   .probe = myprobe;
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://oguzhaninan.gitbook.io/varnish-cache/varnish-yapilandirma-dili-vcl/arka-uclar-backends-ve-health-probes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
