﻿
{"id":26978,"date":"2024-05-06T21:44:36","date_gmt":"2024-05-06T21:44:36","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=26978"},"modified":"2025-11-01T11:02:50","modified_gmt":"2025-11-01T11:02:50","slug":"yarp-load-balancing-ile-yatay-olceklendirmehorizontally-scaling-scaling-out","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/yarp-load-balancing-ile-yatay-olceklendirmehorizontally-scaling-scaling-out\/","title":{"rendered":"YARP Load Balancing \u0130le Yatay \u00d6l\u00e7eklendirme(Horizontally Scaling-Scaling Out)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Biliyorsunuz ki, bir yaz\u0131l\u0131mdan beklenen m\u00fchim davran\u0131\u015flardan biri s\u00fcrd\u00fcr\u00fclebilirliktir. Tek bir sunucuda \u00e7al\u0131\u015ft\u0131r\u0131lan yaz\u0131l\u0131mlar artan say\u0131da kullan\u0131c\u0131lara hizmet verirken kaynaklar\u0131n yetenek s\u0131n\u0131rlar\u0131na ula\u015f\u0131ld\u0131\u011f\u0131nda istemsizce performans d\u00fc\u015fmesi, yava\u015f yan\u0131t s\u00fcreleri, trafikte dalgalanmalar ve hatta tamamen kesinti durumlar\u0131 s\u00f6z konusu olabilmektedir. \u0130\u015fte bu durumlara istinaden load balancing davran\u0131\u015f\u0131 ile uygulamalar \u00f6l\u00e7eklendirilerek bu zorluklar\u0131n \u00fcstesinden gelinebilmektedir. Bizler bu i\u00e7eri\u011fimizde YARP(<em>Yet Another Reverse Proxy<\/em>) k\u00fct\u00fcphanesi ile load balancing davran\u0131\u015f\u0131n\u0131n nas\u0131l sa\u011flanaca\u011f\u0131n\u0131 ve bunun yan\u0131nda y\u00fck testi arac\u0131 olan K6&#8217;n\u0131n nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 inceleyecek ve bu temel hat \u00fczerinden genel anlamda konuyu detayland\u0131r\u0131yor olaca\u011f\u0131z. O halde buyurun ba\u015flayal\u0131m&#8230;<\/p>\n<p>\u00d6ncelikle yaz\u0131l\u0131mdaki \u00f6l\u00e7eklendirmenin temellerini ele alarak, yani \u00f6l\u00e7eklendirme t\u00fcrlerini hat\u0131rlayarak ba\u015flayal\u0131m. Malumunuz, \u00f6l\u00e7eklendirmede <strong>Scale-Up<\/strong> ve <strong>Scale-Out<\/strong> olmak \u00fczere iki yakla\u015f\u0131m s\u00f6z konusudur. K\u0131saca bu yakla\u015f\u0131mlar\u0131 izah etmemiz gerekirse e\u011fer; <strong>Scale-Up<\/strong>, donan\u0131msal kaynak art\u0131r\u0131m\u0131yken <strong>Scale-Out<\/strong> ise sistemdeki sunucu say\u0131s\u0131n\u0131n niceliksel olarak art\u0131r\u0131lmas\u0131d\u0131r.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/05\/Load-BalancingYuk-Dengeleme-ve-Load-BalancerYuk-Dengeleyici-Nedir..png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/05\/Load-BalancingYuk-Dengeleme-ve-Load-BalancerYuk-Dengeleyici-Nedir..png\" alt=\"Load Balancing(Y\u00fck Dengeleme) ve Load Balancer(Y\u00fck Dengeleyici) Nedir?\" width=\"638\" height=\"161\" class=\"aligncenter size-full wp-image-21798\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/05\/Load-BalancingYuk-Dengeleme-ve-Load-BalancerYuk-Dengeleyici-Nedir..png 638w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/05\/Load-BalancingYuk-Dengeleme-ve-Load-BalancerYuk-Dengeleyici-Nedir.-300x76.png 300w\" sizes=\"auto, (max-width: 638px) 100vw, 638px\" \/><\/a><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/05\/Load-BalancingYuk-Dengeleme-ve-Load-BalancerYuk-Dengeleyici-Nedir.-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/05\/Load-BalancingYuk-Dengeleme-ve-Load-BalancerYuk-Dengeleyici-Nedir.-1.png\" alt=\"Load Balancing(Y\u00fck Dengeleme) ve Load Balancer(Y\u00fck Dengeleyici) Nedir.\" width=\"614\" height=\"141\" class=\"aligncenter size-full wp-image-21801\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/05\/Load-BalancingYuk-Dengeleme-ve-Load-BalancerYuk-Dengeleyici-Nedir.-1.png 614w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/05\/Load-BalancingYuk-Dengeleme-ve-Load-BalancerYuk-Dengeleyici-Nedir.-1-300x69.png 300w\" sizes=\"auto, (max-width: 614px) 100vw, 614px\" \/><\/a><span style=\"font-size:12px;\">Konuya dair daha teferruatl\u0131 bilgiyi \u00f6nceden klavyeye alm\u0131\u015f oldu\u011fumuz <a href=\"https:\/\/www.gencayyildiz.com\/blog\/load-balancingyuk-dengeleme-ve-load-balanceryuk-dengeleyici-nedir\/\" rel=\"noopener\" target=\"_blank\">Load Balancing(Y\u00fck Dengeleme) ve Load Balancer(Y\u00fck Dengeleyici) Nedir?<\/a> ba\u015fl\u0131kl\u0131 makalemizden inceleyebilirsiniz.<\/span><br \/>\nYARP k\u00fct\u00fcphanesi ile <em>Scale-Out<\/em> yakla\u015f\u0131m\u0131nda \u00f6l\u00e7eklendirmeyi gayet efektif bir \u015fekilde uygulayabilmekteyiz. Bunun i\u00e7in <a href=\"https:\/\/www.nuget.org\/packages\/Yarp.ReverseProxy\/\" rel=\"noopener\" target=\"_blank\">Yarp.ReverseProxy<\/a> k\u00fct\u00fcphanesi e\u015fli\u011finde \u00f6nceki <a href=\"https:\/\/www.gencayyildiz.com\/blog\/yarp-ile-microserviceler-de-api-gateway-implementasyonu\/\" rel=\"noopener\" target=\"_blank\">YARP \u0130le Microservice\u2019ler de API Gateway Implementasyonu<\/a> ba\u015fl\u0131kl\u0131 makalemizde anlat\u0131lan temel yap\u0131land\u0131rmalar\u0131n sa\u011flanmas\u0131 gerekmektedir.<\/p>\n<p>Ayr\u0131ca load balancing i\u00e7in a\u015fa\u011f\u0131daki gibi bir yap\u0131land\u0131rma yeterlidir.<\/p>\n<p><em>appsettings.json<\/em> yap\u0131land\u0131rmas\u0131;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n{\r\n  .\r\n  .\r\n  .\r\n  &quot;ReverseProxy&quot;: {\r\n    &quot;Routes&quot;: {\r\n      &quot;API1-Route&quot;: {\r\n        &quot;ClusterId&quot;: &quot;API1-Cluster&quot;,\r\n        &quot;Match&quot;: {\r\n          &quot;Path&quot;: &quot;{**catch-all}&quot;\r\n        },\r\n        &quot;Transforms&quot;: &#x5B;\r\n          {\r\n            &quot;PathPattern&quot;: &quot;{**catch-all}&quot;\r\n          }\r\n        ]\r\n      }\r\n    },\r\n    &quot;Clusters&quot;: {\r\n      &quot;API1-Cluster&quot;: {\r\n        &quot;LoadBalancingPolicy&quot;: &quot;RoundRobin&quot;,\r\n        &quot;Destinations&quot;: {\r\n          &quot;destination1&quot;: {\r\n            &quot;Address&quot;: &quot;https:\/\/localhost:7177&quot;\r\n          },\r\n          &quot;destination2&quot;: {\r\n            &quot;Address&quot;: &quot;https:\/\/localhost:7178&quot;\r\n          },\r\n          &quot;destination3&quot;: {\r\n            &quot;Address&quot;: &quot;https:\/\/localhost:7179&quot;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p><em>In-Memory<\/em> yap\u0131land\u0131rmas\u0131;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\nbuilder.Services.AddReverseProxy()\r\n    .LoadFromMemory(new List&lt;RouteConfig&gt;()\r\n    {\r\n        new()\r\n        {\r\n            RouteId = &quot;API1-Route&quot;,\r\n            ClusterId = &quot;API1-Cluster&quot;,\r\n            Match = new(){ Path = &quot;{**catch-all}&quot; },\r\n            Transforms = new List&lt;Dictionary&lt;string, string&gt;&gt;()\r\n            {\r\n                new()\r\n                {\r\n                    { &quot;PathPattern&quot;, &quot;{**catch-all}&quot; }\r\n                }\r\n            }\r\n        }\r\n    },\r\n    new List&lt;ClusterConfig&gt;\r\n    {\r\n        new()\r\n        {\r\n            ClusterId = &quot;API1-Cluster&quot;,\r\n            LoadBalancingPolicy = &quot;RoundRobin&quot;,\r\n            Destinations = new Dictionary&lt;string, DestinationConfig&gt;()\r\n            {\r\n                { &quot;destination1&quot;, new(){  Address = &quot;https:\/\/localhost:7177&quot; } },\r\n                { &quot;destination2&quot;, new(){  Address = &quot;https:\/\/localhost:7178&quot; } },\r\n                { &quot;destination3&quot;, new(){  Address = &quot;https:\/\/localhost:7179&quot; } },\r\n            }\r\n        }\r\n    });\r\n.\r\n.\r\n.\r\n<\/pre>\n<\/div>\n<p>\u015eimdi burada yap\u0131lan konfig\u00fcrasyonun izah\u0131na gelirsek e\u011fer <em>API1-Cluster<\/em> isimli cluster&#8217;da \u00fc\u00e7 adet destination tan\u0131mlanm\u0131\u015ft\u0131r. \u0130\u015fte bu destination&#8217;larda ki adreslere <code>LoadBalancingPolicy<\/code> \u00f6zelli\u011finde belirtilen <em>RoundRobin<\/em> algoritmas\u0131nda load balancing davran\u0131\u015f\u0131 uygulanacakt\u0131r.<\/p>\n<p>Yukar\u0131daki sat\u0131rlarda referans edilen<span style=\"font-size:12px;\">(bknz: <a href=\"https:\/\/www.gencayyildiz.com\/blog\/load-balancingyuk-dengeleme-ve-load-balanceryuk-dengeleyici-nedir\/\" rel=\"noopener\" target=\"_blank\">Load Balancing(Y\u00fck Dengeleme) ve Load Balancer(Y\u00fck Dengeleyici) Nedir?<\/a>)<\/span> makalemizden de biliyorsunuz ki load balancing&#8217;in request&#8217;leri da\u011f\u0131tabilme algoritmas\u0131 birden fazlad\u0131r. YARP&#8217;da, bu algoritmalar\u0131n bir\u00e7o\u011fu ortak olsa da a\u015fa\u011f\u0131daki gibi kendine \u00f6zel olarak davran\u0131\u015f sergileyenleri de mevcuttur;<\/p>\n<ul>\n<li><strong><em>Round Robin (D\u00f6n\u00fc\u015f\u00fcml\u00fc)<\/em><\/strong> &#8211; <span style=\"color:#EEBD66;\"><em>RoundRobin<\/em><\/span><br \/>\nGelen istekler s\u0131rayla hedefler aras\u0131nda dola\u015farak da\u011f\u0131t\u0131l\u0131r. Her bir istek, bir sonraki hedefe y\u00f6nlendirilir. Haliyle hedefler aras\u0131nda e\u015fit bir \u015fekilde y\u00fck da\u011f\u0131t\u0131m\u0131 i\u00e7in olduk\u00e7a basit ve etkili bir algoritmad\u0131r.\n<\/li>\n<li><strong><em>Least Connections (En Az Ba\u011flant\u0131)<\/em><\/strong> &#8211; <span style=\"color:#EEBD66;\"><em>LeastRequests<\/em><\/span><br \/>\nMevcut ba\u011flant\u0131 say\u0131s\u0131na g\u00f6re hedefler aras\u0131nda bir se\u00e7im yap\u0131l\u0131r ve en az ba\u011flant\u0131ya sahip olan hedefe gelen istek y\u00f6nlendirilir. Bu algoritma ile hedeflerin mevcut y\u00fck durumlar\u0131 dikkate al\u0131narak daha dengeli bir da\u011f\u0131t\u0131m sa\u011flanmaktad\u0131r.\n<\/li>\n<li><strong><em>Random (Rastgele)<\/em><\/strong> &#8211; <span style=\"color:#EEBD66;\"><em>Random<\/em><\/span><br \/>\nGelen istekler herhangi bir kriter g\u00f6zetmeksizin rastgele bir \u015fekilde hedefler aras\u0131nda da\u011f\u0131t\u0131l\u0131r.\n<\/li>\n<li><strong><em>First Alphabetical (\u0130lk Alfabetik)<\/em><\/strong> &#8211; <span style=\"color:#EEBD66;\"><em>FirstAlphabetical<\/em><\/span><br \/>\nHedeflerin isimleri alfabetik olarak s\u0131ralan\u0131r ve gelen istekler y\u00fck\u00fc dikkate almaks\u0131z\u0131n bu s\u0131raya g\u00f6re da\u011f\u0131t\u0131l\u0131r.\n<\/li>\n<li><strong><em>Power Of Two Choices (\u0130ki Se\u00e7imin G\u00fcc\u00fc)<\/em><\/strong> &#8211; <span style=\"color:#EEBD66;\">PowerOfTwoChoices<em><\/em><\/span><br \/>\nBazen <em>Ramdom<\/em> algoritmas\u0131 gelen iste\u011fi \u00e7ok yo\u011fun olan bir sunucuya y\u00f6nlendirebilir. Bu istemeyece\u011fimiz bir durumdur. Haliyle <em>Random<\/em> algoritmas\u0131n\u0131n bu yaratabilece\u011fi k\u00f6t\u00fc durumu \u00f6nlemek i\u00e7in <em>Least Connections<\/em> algoritmas\u0131n\u0131n mant\u0131\u011f\u0131ndan <u>k\u0131smi olarak<\/u> yararlanmak isteyebiliriz. <em>Power Of Two Choices<\/em> ile <em>Random<\/em> algoritmas\u0131yla iki hedef se\u00e7ilmekte ve ard\u0131ndan <em>Least Connections<\/em> mant\u0131\u011f\u0131nda bu iki sunucudan yo\u011funlu\u011fu az olana istek y\u00f6nlendirilmektedir.<\/p>\n<blockquote><p><em>YARP k\u00fct\u00fcphanesinin default algoritmas\u0131 Power Of Two Choices&#8217;d\u0131r.<\/em><\/p><\/blockquote>\n<\/li>\n<\/ul>\n<h3>Test Edelim<\/h3>\n<p>\u015eimdi yapt\u0131\u011f\u0131m\u0131z bu \u00e7al\u0131\u015fmay\u0131 test edebilmek i\u00e7in \u00f6ncelikle local&#8217;de bir API uygulamas\u0131n\u0131 farkl\u0131 instance&#8217;larla aya\u011fa kald\u0131rarak ba\u015flayal\u0131m. Bunun i\u00e7in dileyenler Docker&#8217;dan istifade edebilirler. Lakin ben, farkl\u0131 port&#8217;lara g\u00f6re ayarlanm\u0131\u015f uygun profiller olu\u015fturarak uygulamay\u0131 terminal \u00fczerinden dotnet cli arac\u0131l\u0131\u011f\u0131yla aya\u011fa kald\u0131rmaya \u00e7al\u0131\u015faca\u011f\u0131m. Dolay\u0131s\u0131yla olu\u015fturulan herhangi bir Asp.NET Core uygulamas\u0131n\u0131n &#8216;launchSettings.json&#8217; dosyas\u0131nda a\u015fa\u011f\u0131daki gibi profilleri kullanabiliriz;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n{\r\n  .\r\n  .\r\n  .\r\n  &quot;profiles&quot;: {\r\n    .\r\n    .\r\n    .\r\n    &quot;https1&quot;: {\r\n      &quot;commandName&quot;: &quot;Project&quot;,\r\n      &quot;dotnetRunMessages&quot;: true,\r\n      &quot;applicationUrl&quot;: &quot;https:\/\/localhost:7177;http:\/\/localhost:5000&quot;,\r\n      &quot;environmentVariables&quot;: {\r\n        &quot;ASPNETCORE_ENVIRONMENT&quot;: &quot;Development&quot;\r\n      }\r\n    },\r\n    &quot;https2&quot;: {\r\n      &quot;commandName&quot;: &quot;Project&quot;,\r\n      &quot;dotnetRunMessages&quot;: true,\r\n      &quot;applicationUrl&quot;: &quot;https:\/\/localhost:7178;http:\/\/localhost:5001&quot;,\r\n      &quot;environmentVariables&quot;: {\r\n        &quot;ASPNETCORE_ENVIRONMENT&quot;: &quot;Development&quot;\r\n      }\r\n    },\r\n    &quot;https3&quot;: {\r\n      &quot;commandName&quot;: &quot;Project&quot;,\r\n      &quot;dotnetRunMessages&quot;: true,\r\n      &quot;applicationUrl&quot;: &quot;https:\/\/localhost:7179;http:\/\/localhost:5002&quot;,\r\n      &quot;environmentVariables&quot;: {\r\n        &quot;ASPNETCORE_ENVIRONMENT&quot;: &quot;Development&quot;\r\n      }\r\n    },\r\n    .\r\n    .\r\n    .\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>Buradaki adreslere dikkat ederseniz load balancing yap\u0131land\u0131rmas\u0131nda kulland\u0131\u011f\u0131m\u0131z adreslerle birebir uyu\u015fmaktad\u0131rlar. Uygulaman\u0131n i\u00e7eri\u011fi i\u00e7in de a\u015fa\u011f\u0131daki gibi bir \u00e7al\u0131\u015fma k\u00e2fidir diyebiliriz;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\ninternal class Program\r\n{\r\n    private static void Main(string&#x5B;] args)\r\n    {\r\n        var builder = WebApplication.CreateBuilder(args);\r\n\r\n        var app = builder.Build();\r\n\r\n        app.MapGet(&quot;\/&quot;, () =&gt; args&#x5B;0]);\r\n\r\n        app.Run();\r\n    }\r\n}\r\n<\/pre>\n<\/div>\n<p>Evet, burada da g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere uygulama aya\u011fa kald\u0131r\u0131l\u0131rken &#8216;Main&#8217; metodunda ald\u0131\u011f\u0131 parametre de\u011ferini direkt olarak &#8216;\/&#8217; endpoint&#8217;inde geriye d\u00f6nd\u00fcrmektedir. Haliyle bu de\u011feri dotnet cli talimat\u0131 s\u00fcrecinde vermemiz gerekmektedir. Dolay\u0131s\u0131yla bu uygulaman\u0131n yukar\u0131da olu\u015fturulan profiller ile birlikte a\u015fa\u011f\u0131daki talimatlar e\u015fli\u011finde \u00fc\u00e7 farkl\u0131 instance&#8217;\u0131n\u0131 aya\u011fa kald\u0131ral\u0131m;<\/p>\n<div style=\"text-align:center;\">\n<code>dotnet run '1. server' --launch-profile https1<\/code><br \/>\n<code>dotnet run '2. server' --launch-profile https2<\/code><br \/>\n<code>dotnet run '3. server' --launch-profile https3<\/code>\n<\/div>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere her bir talimat farkl\u0131 bir &#8216;Main&#8217; de\u011feri ile belirtilen profil ayarlar\u0131nda uygulama instance&#8217;\u0131n\u0131 aya\u011fa kald\u0131rmaktad\u0131r.<\/p>\n<p>Art\u0131k bizler direkt YARP ile geli\u015ftirdi\u011fimiz load balancer uygulamas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rarak yukar\u0131daki konfig\u00fcrasyona g\u00f6re <em>RoundRobin<\/em> algoritmas\u0131nda gelen istekleri bu instance&#8217;lara da\u011f\u0131tabiliriz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out.gif\" alt=\"YARP Load Balancing \u0130le Yatay \u00d6l\u00e7eklendirme(Horizontally Scaling-Scaling Out)\" width=\"744\" height=\"232\" class=\"aligncenter size-full wp-image-26988\" \/><\/a><\/p>\n<h3>K6 \u0130le Performans Testi Ger\u00e7ekle\u015ftirelim<\/h3>\n<p>Bizler, yaz\u0131l\u0131m s\u00fcre\u00e7lerinde yap\u0131land\u0131rd\u0131\u011f\u0131m\u0131z load balancing davran\u0131\u015flar\u0131n\u0131 test edebilmek i\u00e7in yukar\u0131daki gibi manuel ve basit seviyeli bir s\u00fcre\u00e7ten ziyade K6 gibi modern, geli\u015ftirici dostu ve kompleks test ara\u00e7lar\u0131ndan istifade etmeyi tercih ederiz. K6, web uygulamalar\u0131n\u0131n performans testlerinde kullan\u0131lan open source bir test arac\u0131d\u0131r. Basit ve esnek bir kullan\u0131c\u0131 aray\u00fcz\u00fcne sahip olsa da karma\u015f\u0131k senaryolar\u0131 sim\u00fcle edebilmek i\u00e7in kullan\u0131labilmektedir. Bu ara\u00e7 sayesinde uygulamam\u0131zdaki kullan\u0131c\u0131 trafi\u011fini belirledi\u011fimiz maksimum \u015fartlara g\u00f6re sim\u00fcle edecek ve uygulaman\u0131n bu \u015fartlardaki davran\u0131\u015flar\u0131n\u0131 \u00f6l\u00e7\u00fcmleyerek, de\u011ferlendirmede bulunaca\u011f\u0131z.<\/p>\n<p>Tabi \u00f6ncelikle K6&#8217;n\u0131n kurulumunu ger\u00e7ekle\u015ftirmek gerekmektedir. K6&#8217;y\u0131 kurabilmek i\u00e7in <a href=\"https:\/\/k6.io\/docs\/get-started\/installation\/\" rel=\"noopener\" target=\"_blank\">birka\u00e7 y\u00f6ntem<\/a> olsa da bizler <em>Windows Package Manager<\/em> \u00fczerinden kurulumu ger\u00e7ekle\u015ftirece\u011fiz. Bunun i\u00e7in PowerShell \u00fczerinden<br \/>\n<code>winget install k6 --source winget<\/code> talimat\u0131n\u0131n verilmesi yeterlidir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out.png\" alt=\"YARP Load Balancing \u0130le Yatay \u00d6l\u00e7eklendirme(Horizontally Scaling-Scaling Out)\" width=\"879\" height=\"171\" class=\"aligncenter size-full wp-image-26989\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out.png 879w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out-300x58.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out-768x149.png 768w\" sizes=\"auto, (max-width: 879px) 100vw, 879px\" \/><\/a>Bu kurulumdan sonra herhangi bir terminal ya da PowerShell ekran\u0131nda <code>k6<\/code> komutunu yazd\u0131\u011f\u0131m\u0131zda bir sonu\u00e7 alam\u0131yorsan\u0131z e\u011fer <a href=\"https:\/\/dl.k6.io\/msi\/k6-latest-amd64.msi\" rel=\"noopener\" target=\"_blank\">y\u00fckleyici<\/a> \u00fczerinden de K6&#8217;y\u0131 kurmay\u0131 deneyebilirsiniz.<\/p>\n<p>Kurulumdan sonra a\u015fa\u011f\u0131daki gibi basit bir K6 script&#8217;i ile y\u00fck testini ger\u00e7ekle\u015ftirebiliriz;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport http from 'k6\/http';\r\n\r\nexport const options = {\r\n    stages: &#x5B;\r\n        { duration: '10s', target: 20 }, \/\/ \u0130lk 10 saniye boyunca 20 istek\r\n        { duration: '10s', target: 50 }, \/\/ Sonraki 10 saniye boyunca 50 istek\r\n        { duration: '1m5s', target: 1000 }, \/\/ 1 dakika 5 saniye boyunca 1000 istek\r\n    ],\r\n};\r\n\r\nexport default function () {\r\n\r\n    \/\/ GET iste\u011fi yapal\u0131m\r\n    const response = http.get('https:\/\/localhost:7180');\r\n\r\n    \/\/ Yan\u0131t\u0131 kontrol edelim\r\n    \/\/if (response.status === 200) {\r\n    \/\/    console.log(`\u0130stek ba\u015far\u0131l\u0131\ud83d\udc4d Yan\u0131t:`, response.body);\r\n    \/\/} else {\r\n    \/\/    console.log('\u0130stek ba\u015far\u0131s\u0131z\ud83d\udc4e Durum kodu:', response.status);\r\n    \/\/}\r\n}\r\n<\/pre>\n<\/div>\n<p>Bu script&#8217;i <code>k6 run --out json=result.json .\\k6-test.js<\/code> talimat\u0131yla \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi test s\u00fcreci ba\u015flayacak ve netice raporlanacakt\u0131r. Tabi burada test s\u00fcrecinde \u00f6rnekte de g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere console&#8217;a \u00e7\u0131kt\u0131larda bulunabilir ya da sadece testin raporlanmas\u0131n\u0131 bekleyebiliriz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out-1.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out-1.gif\" alt=\"\" width=\"800\" height=\"285\" class=\"aligncenter size-full wp-image-26992\" \/><\/a>Evet, yap\u0131lan test neticesinde elde edilen sonu\u00e7lar\u0131 incelersek e\u011fer taraf\u0131m\u0131za a\u015fa\u011f\u0131daki gibi bir rapor sunulmu\u015ftur.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out-1.png\" alt=\"\" width=\"873\" height=\"254\" class=\"aligncenter size-full wp-image-26995\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out-1.png 873w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out-1-300x87.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/YARP-Load-Balancing-Ile-Yatay-OlceklendirmeHorizontally-Scaling-Scaling-Out-1-768x223.png 768w\" sizes=\"auto, (max-width: 873px) 100vw, 873px\" \/><\/a>Bu raporda bizler i\u00e7in \u00f6nemli metrikleri de\u011ferlendirirsek e\u011fer;<\/p>\n<ul>\n<li><strong><em>data_received<\/em><\/strong> : Sunucudan al\u0131nan toplam veri miktar\u0131 2.2 MB.<\/li>\n<li><strong><em>data_sent<\/em><\/strong> : Sunucuya g\u00f6nderilen toplam veri miktar\u0131 858 KB.<\/li>\n<li><strong><em>http_req_duration<\/em><\/strong> : \u0130steklerin ortalama i\u015flenme s\u00fcreleri 3.79s.<\/li>\n<li><strong><em>http_req_receiving<\/em><\/strong> : Yan\u0131tlar\u0131n ortalama al\u0131nma s\u00fcreleri 5.36s.<\/li>\n<\/ul>\n<p>\u015feklinde bir yorumda bulunulabilir.<\/p>\n<p>Nihai olarak;<br \/>\nBu i\u00e7eri\u011fimizde YARP ile web uygulamalar\u0131nda performans art\u0131\u015f\u0131 ve etkili bir \u00f6l\u00e7eklenebilirlik sa\u011flayacak olan load balancing davran\u0131\u015f\u0131n\u0131 incelemi\u015f ve \u00f6zelliklerini de\u011ferlendirmi\u015f bulunuyoruz.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Not : \u00d6rnek \u00e7al\u0131\u015fmaya a\u015fa\u011f\u0131daki github adresinden eri\u015febilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/Load_Balancing_Scale_Out_With_YARP\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/Load_Balancing_Scale_Out_With_YARP<\/a><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Biliyorsunuz ki, bir yaz\u0131l\u0131mdan beklenen m\u00fchim davran\u0131\u015flardan biri s\u00fcrd\u00fcr\u00fclebilirliktir. Tek bir sunucuda \u00e7al\u0131\u015ft\u0131r\u0131lan yaz\u0131l\u0131mlar artan say\u0131da kullan\u0131c\u0131lara hizmet verirken kaynaklar\u0131n yetenek s\u0131n\u0131rlar\u0131na ula\u015f\u0131ld\u0131\u011f\u0131nda istemsizce performans d\u00fc\u015fmesi, yava\u015f yan\u0131t s\u00fcreleri, trafikte dalgalanmalar ve hatta&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":21830,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2739,12,3573],"tags":[5052,4257,5051,4258,5053,5046,5050,5049],"class_list":["post-26978","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-core","category-c-sharp-c","category-microservices","tag-k6","tag-load-balancing","tag-scale-out","tag-scale-up","tag-windows-package-manager","tag-yarp","tag-yarp-load-balancing","tag-yet-another-reverse-proxy"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/26978","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=26978"}],"version-history":[{"count":12,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/26978\/revisions"}],"predecessor-version":[{"id":28139,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/26978\/revisions\/28139"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/21830"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=26978"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=26978"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=26978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}