{"id":17,"date":"2026-09-23T20:43:04","date_gmt":"2026-09-23T20:43:04","guid":{"rendered":"https:\/\/www.akifsen.com.tr\/blog\/?p=17"},"modified":"2026-09-23T20:43:04","modified_gmt":"2026-09-23T20:43:04","slug":"retry-timeout-backoff-jitter-distributed-systems","status":"publish","type":"post","link":"https:\/\/www.akifsen.com.tr\/blog\/2026\/09\/23\/retry-timeout-backoff-jitter-distributed-systems\/","title":{"rendered":"Retry Her Zaman \u00c7\u00f6z\u00fcm De\u011fildir: Timeout, Backoff ve Jitter Neden Birlikte Tasarlanmal\u0131?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Bir servis ba\u015fka bir servisi \u00e7a\u011f\u0131rd\u0131\u011f\u0131nda ba\u015far\u0131s\u0131zl\u0131k normaldir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Network paketi kaybolabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dependency k\u0131sa s\u00fcreli restart olabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Database connection pool dolabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu nedenle retry da\u011f\u0131t\u0131k sistemlerin temel ara\u00e7lar\u0131ndan biridir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ama yanl\u0131\u015f uygulanan retry sistemi iyile\u015ftirmek yerine ar\u0131zay\u0131 b\u00fcy\u00fctebilir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Be\u015f servis varsa retry say\u0131s\u0131n\u0131 \u00e7arp\u0131n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u015e\u00f6yle bir zincir d\u00fc\u015f\u00fcnelim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>API \u2192 Order \u2192 Payment \u2192 Fraud \u2192 Database<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Her katman\u0131n ba\u015far\u0131s\u0131z \u00e7a\u011fr\u0131y\u0131 \u00fc\u00e7 kez retry etti\u011fini varsay\u0131n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Database sorun ya\u015fad\u0131\u011f\u0131 anda yukar\u0131daki katmanlar\u0131n birbirini tekrar tekrar \u00e7a\u011f\u0131rmas\u0131 bekledi\u011finizden \u00e7ok daha b\u00fcy\u00fck bir trafik yaratabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sorun art\u0131k yaln\u0131zca database de\u011fildir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Retry storm<\/strong> olu\u015fmu\u015ftur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu y\u00fczden retry karar\u0131 en alt seviyeden ba\u015flayarak rastgele da\u011f\u0131t\u0131lmamal\u0131d\u0131r.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00d6nce timeout<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Retry politikas\u0131n\u0131 konu\u015fmadan \u00f6nce timeout tan\u0131mlanmal\u0131d\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bir dependency&#8217;nin normal response s\u00fcresi 100 ms ise client&#8217;\u0131n 60 saniye beklemesi genellikle anlams\u0131zd\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Timeout ayn\u0131 zamanda resource protection mekanizmas\u0131d\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bir servisin cevap vermeyen connection&#8217;lar\u0131 sonsuza kadar a\u00e7\u0131k tutmas\u0131n\u0131 engeller.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bununla birlikte timeout de\u011ferini rastgele <code>5 seconds<\/code> yapmak da do\u011fru de\u011fildir. Servisin ger\u00e7ek P95\/P99 latency de\u011ferlerine ve i\u015f ak\u0131\u015f\u0131n\u0131n toplam latency budget&#8217;\u0131na g\u00f6re belirlenmelidir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exponential backoff<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0130lk ba\u015far\u0131s\u0131z request&#8217;ten sonra an\u0131nda tekrar denemek dependency&#8217;nin toparlanmas\u0131na zaman tan\u0131maz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu nedenle retry aral\u0131klar\u0131 art\u0131r\u0131labilir:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100 ms\n200 ms\n400 ms\n800 ms\n1600 ms<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Fakat burada ba\u015fka bir problem ortaya \u00e7\u0131kar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bin client ayn\u0131 anda hata ald\u0131ysa hepsi ayn\u0131 aral\u0131klarla retry yapacakt\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yani 800 ms sonra tekrar ayn\u0131 trafik duvar\u0131n\u0131 olu\u015fturursunuz.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jitter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jitter retry s\u00fcresine randomness ekleyerek client&#8217;lar\u0131n ayn\u0131 anda tekrar sald\u0131rmas\u0131n\u0131 \u00f6nler.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AWS Well-Architected dok\u00fcmantasyonu retry \u00e7a\u011fr\u0131lar\u0131n\u0131n s\u0131n\u0131rland\u0131r\u0131lmas\u0131n\u0131, exponential backoff kullan\u0131lmas\u0131n\u0131 ve retry zamanlar\u0131n\u0131n jitter ile da\u011f\u0131t\u0131lmas\u0131n\u0131 a\u00e7\u0131k\u00e7a \u00f6neriyor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Basit \u00f6rnek:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>base delay = 800 ms\njitter     = random(0, 400)\n\nretry = 800\u20131200 ms<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bu k\u00fc\u00e7\u00fck fark b\u00fcy\u00fck sistemlerde ciddi etki yarat\u0131r.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Her hata retry edilmez<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">HTTP <code>500<\/code> bazen retry edilebilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>429 Too Many Requests<\/code> i\u00e7in <code>Retry-After<\/code> dikkate al\u0131nabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Connection timeout transient olabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ama validation hatas\u0131 retry edilmez.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>401 Unauthorized<\/code> y\u00fcz kez tekrar g\u00f6nderildi\u011finde authenticated olmaz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yanl\u0131\u015f retry politikas\u0131 sistem kaynaklar\u0131n\u0131 bo\u015fa harcar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bir di\u011fer kritik nokta da side effect olu\u015fturan i\u015flemlerdir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>GET \/product\/42<\/code> retry a\u00e7\u0131s\u0131ndan kolayd\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>POST \/payments<\/code> de\u011fildir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu nedenle retry tasar\u0131m\u0131 idempotency ile birlikte d\u00fc\u015f\u00fcn\u00fclmelidir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Da\u011f\u0131t\u0131k sistemlerde g\u00fcvenilirlik \u201chata olmas\u0131n\u201d demek de\u011fildir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hata oldu\u011funda sistemin <strong>panik yapmamas\u0131n\u0131 sa\u011flamakt\u0131r.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bir servis ba\u015fka bir servisi \u00e7a\u011f\u0131rd\u0131\u011f\u0131nda ba\u015far\u0131s\u0131zl\u0131k normaldir. Network paketi kaybolabilir. Dependency k\u0131sa s\u00fcreli restart olabilir. Database connection pool dolabilir. Bu nedenle retry da\u011f\u0131t\u0131k sistemlerin temel ara\u00e7lar\u0131ndan biridir. Ama yanl\u0131\u015f uygulanan retry sistemi iyile\u015ftirmek yerine ar\u0131zay\u0131 b\u00fcy\u00fctebilir. Be\u015f servis varsa retry say\u0131s\u0131n\u0131 \u00e7arp\u0131n \u015e\u00f6yle bir zincir d\u00fc\u015f\u00fcnelim: Her katman\u0131n ba\u015far\u0131s\u0131z \u00e7a\u011fr\u0131y\u0131 \u00fc\u00e7 kez retry etti\u011fini [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-17","post","type-post","status-publish","format-standard","hentry","category-mimari"],"_links":{"self":[{"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/posts\/17","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/comments?post=17"}],"version-history":[{"count":1,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/posts\/17\/revisions"}],"predecessor-version":[{"id":18,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/posts\/17\/revisions\/18"}],"wp:attachment":[{"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/media?parent=17"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/categories?post=17"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/tags?post=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}