{"id":1109,"date":"2017-03-16T22:53:53","date_gmt":"2017-03-16T20:53:53","guid":{"rendered":"https:\/\/gokhan-gokalp.com\/?p=1109"},"modified":"2018-05-18T22:35:18","modified_gmt":"2018-05-18T19:35:18","slug":"microservice-mimarilerinde-consul-ile-service-discovery","status":"publish","type":"post","link":"https:\/\/gokhan-gokalp.com\/tr\/microservice-mimarilerinde-consul-ile-service-discovery\/","title":{"rendered":"Microservice Mimarilerinde Consul ile Service Discovery"},"content":{"rendered":"<p>Merhaba arkada\u015flar.<\/p>\n<p>Tekrardan microservice mimarilerine dayanan bir konu ile kar\u015f\u0131n\u0131zday\u0131m. Bu konu kapsam\u0131nda ise, &#8220;<strong>Service Discovery<\/strong> nedir?&#8221;, &#8220;Ne zaman ihtiya\u00e7 duyar\u0131z?&#8221; gibi kavramlardan bahsedip, bu i\u015flemleri\u00a0<strong>Consul<\/strong> ile nas\u0131l ger\u00e7ekle\u015ftirebilece\u011fimize de\u011finmeye \u00e7al\u0131\u015faca\u011f\u0131m.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/02\/service-discovery.png\"><img decoding=\"async\" class=\"aligncenter wp-image-1114 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/02\/service-discovery.png\" alt=\"\" width=\"648\" height=\"243\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/02\/service-discovery.png 800w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/02\/service-discovery-300x113.png 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/02\/service-discovery-768x288.png 768w\" data-sizes=\"(max-width: 648px) 100vw, 648px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 648px; --smush-placeholder-aspect-ratio: 648\/243;\" \/><\/a><\/p>\n<h4>Service Discovery Nedir?<\/h4>\n<p>Microservice&#8217;ler ile alakal\u0131 di\u011fer makalelerimde de bahsetti\u011fim gibi, bizlere katt\u0131\u011f\u0131 art\u0131lar\u0131n yan\u0131nda baz\u0131 challenge&#8217;lar\u0131\u00a0da beraberlerinde getirdiklerinden bahsetmi\u015ftik. Bu challenge&#8217;lardan belki de en \u00f6nemlileri ise,\u00a0<strong>management\u00a0<\/strong>ve <strong>monitoring\u00a0<\/strong>konular\u0131d\u0131r.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/building-microservices.jpg\"><img decoding=\"async\" class=\"aligncenter wp-image-1119 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/building-microservices.jpg\" alt=\"\" width=\"530\" height=\"298\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/building-microservices.jpg 638w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/building-microservices-300x169.jpg 300w\" data-sizes=\"(max-width: 530px) 100vw, 530px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 530px; --smush-placeholder-aspect-ratio: 530\/298;\" \/><\/a><\/p>\n<p>Monolithic yap\u0131lara bakt\u0131\u011f\u0131m\u0131zda ise her \u015fey tek bir \u00e7at\u0131 alt\u0131ndad\u0131r. Biz yaz\u0131l\u0131mc\u0131lar i\u00e7in proje git gide b\u00fcy\u00fcmeye ba\u015flad\u0131\u011f\u0131nda pek de ho\u015f olmasa da, operasyonel anlamda sistemciler i\u00e7in olduk\u00e7a rahat bir \u015fey asl\u0131nda. :) \u00a0Fakat microservice yap\u0131lar\u0131na bakt\u0131\u011f\u0131m\u0131zda ise, i\u015fler operasyonel anlamda biraz de\u011fi\u015fiyor. \u00c7\u00fcnk\u00fc hepimizin de bildi\u011fi gibi -n tane farkl\u0131 sorumluluklar\u0131 yerine getiren distributed \u00a0microservice&#8217;ler ortaya \u00e7\u0131kmaya ba\u015fl\u0131yor ve i\u015fte bu noktada microservice&#8217;lerin beraberlerinde getirdi\u011fi management ve monitoring gibi ortak challenge&#8217;lar ile, &#8220;<strong>Service Discovery<\/strong>&#8221;\u00a0kavram\u0131 ortaya \u00e7\u0131k\u0131yor.<\/p>\n<p><strong>\u00d6rne\u011fin<\/strong>:<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/difficult-service-discovery.png\"><img decoding=\"async\" class=\"aligncenter wp-image-1125 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/difficult-service-discovery.png\" alt=\"\" width=\"614\" height=\"626\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/difficult-service-discovery.png 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/difficult-service-discovery-294x300.png 294w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/difficult-service-discovery-768x783.png 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/difficult-service-discovery-1004x1024.png 1004w\" data-sizes=\"(max-width: 614px) 100vw, 614px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 614px; --smush-placeholder-aspect-ratio: 614\/626;\" \/><\/a><\/p>\n<p>Yukar\u0131daki yap\u0131ya bakt\u0131\u011f\u0131m\u0131zda, <strong>auto scale<\/strong> olan ve <strong>dynamic<\/strong> olarak de\u011fi\u015fen instance&#8217;lara sahip bir yap\u0131y\u0131 g\u00f6r\u00fcyoruz. Burada dikkat edersek IP adresleri de dynamic olarak assign edilmektedir. Bu gibi dynamic case&#8217;ler kar\u015f\u0131s\u0131nda, client hangi IP adresine istek ataca\u011f\u0131n\u0131 bilemeyecektir. Service discovery ise bu gibi durumlar\u0131 nas\u0131l <strong>otomatik<\/strong> olarak handle edebilirize odaklanmaktad\u0131r.<\/p>\n<p><strong>Service discovery \u00a0temel olarak \u00fc\u00e7 kavram \u00fczerinde durmaktad\u0131r<\/strong>:<\/p>\n<ol>\n<li><strong>Discovery<\/strong>: Service&#8217;lerin dynamic bir ortamda cluster i\u00e7erisindeki di\u011fer service&#8217;ler ile ileti\u015fim kurabilmeleri i\u00e7in, birbirlerinin IP ve port bilgilerini bulmaya ihtiya\u00e7lar\u0131 vard\u0131r. Discovery ise bunu sa\u011flamaktad\u0131r.<\/li>\n<li><strong>Health check<\/strong>:\u00a0Health check i\u015flemi ile sadece up olan service&#8217;lerin sistemde kalmalar\u0131, down olan&#8217;lar\u0131n ise dynamic bir \u015fekilde sistem d\u0131\u015f\u0131 kalmalar\u0131\u00a0sa\u011flanmaktad\u0131r.<\/li>\n<li><strong>Load balancing<\/strong>: Hepimizin de bildi\u011fi gibi bir hizmete gelmi\u015f olan request&#8217;in, bu hizmeti sa\u011flayan di\u011fer instance&#8217;lara da dynamic olarak da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flamakt\u0131r.<\/li>\n<\/ol>\n<p>Service discovery&#8217;i uygulayabilmek i\u00e7in &#8220;Client-side service discovery&#8221; ve &#8220;Server-side service discovery&#8221; olmak \u00fczere iki farkl\u0131 pattern bulunmaktad\u0131r. Dilerseniz ilk pattern olan client-side k\u0131sm\u0131na bir bakal\u0131m.<\/p>\n<h5>1) Client-side Service Discovery Pattern<\/h5>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/client-side-service-discovery-2.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1128 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/client-side-service-discovery-2.png\" alt=\"\" width=\"620\" height=\"387\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/client-side-service-discovery-2.png 620w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/client-side-service-discovery-2-300x187.png 300w\" data-sizes=\"(max-width: 620px) 100vw, 620px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 620px; --smush-placeholder-aspect-ratio: 620\/387;\" \/><\/a><\/p>\n<p>Bu yakla\u015f\u0131mda service instance&#8217;lar\u0131, kendi network location&#8217;lar\u0131n\u0131\u00a0<strong>Service Registery<\/strong> \u00fczerine kay\u0131t ederler. Service registery ise service discovery&#8217;nin bir par\u00e7as\u0131d\u0131r. Bu sayede buradaki service&#8217;lere, hangi IP ve port \u00fczerinden eri\u015filebilece\u011fi\u00a0bilgisi service\u00a0registery \u00fczerinde\u00a0bulunur. Client ise herhangi bir request&#8217;i g\u00f6ndermeden \u00f6nce service registery&#8217;e gelerek, request g\u00f6ndermek istedi\u011fi service&#8217;in location bilgilerini elde eder ve o bilgiler do\u011frultusunda request i\u015flemini ger\u00e7ekle\u015ftirir. Kompleks olarak g\u00f6z\u00fckebilir ama genel anlamda bak\u0131lacak olursa gayet kolay bir i\u015flemdir.<\/p>\n<p>Bir di\u011fer yandan bu pattern <strong>load balancer<\/strong> hatalar\u0131ndan sistemi korur, fakat balancing i\u015flemini ise client&#8217;a b\u0131rak\u0131r. \u00c7\u00fcnk\u00fc client, registery \u00fczerinden istedi\u011fi service&#8217;in IP ve port bilgilerini al\u0131r ve birden \u00e7ok IP adresine sahip ise kendi belirleyece\u011fi bir IP adresine request i\u015flemini ger\u00e7ekle\u015ftirir. Bu noktada dezavantaj\u0131na bakt\u0131\u011f\u0131m\u0131zda ise art\u0131k client&#8217;lar, service registery ile konu\u015fmas\u0131 gerekti\u011fini bilmek zorundad\u0131rlar ve balancing i\u015flemlerini kendileri handle etmelidirler.<\/p>\n<h5>2) Server-side Service Discovery Pattern<\/h5>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/server-side-service-discovery.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1130 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/server-side-service-discovery.png\" alt=\"\" width=\"620\" height=\"387\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/server-side-service-discovery.png 620w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/server-side-service-discovery-300x187.png 300w\" data-sizes=\"(max-width: 620px) 100vw, 620px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 620px; --smush-placeholder-aspect-ratio: 620\/387;\" \/><\/a><\/p>\n<p>Bu yakla\u015f\u0131mda ise dikkatinizi \u00e7ekmek istedi\u011fim ilk nokta: client&#8217;\u0131n art\u0131k ilk olarak service registery ile konu\u015fmak yerine direkt olarak load balancer \u00fczerine geliyor olmas\u0131d\u0131r. Load balancer ise service registery \u00fczerinden ilgili servis&#8217;in location bilgilerini alarak, route i\u015flemini kendisi ger\u00e7ekle\u015ftirmektedir.<\/p>\n<p>Bu pattern&#8217;\u0131n avantaj\u0131 ise, client ile service registery&#8217;nin <strong>decoupled<\/strong> bir\u00a0\u015fekilde olmalar\u0131 ve\u00a0client&#8217;\u0131n hangi service&#8217;in hangi node&#8217;da oldu\u011fundan bir haberi olmamas\u0131d\u0131r. Dezavantaj\u0131 ise buradaki load balancer&#8217;\u0131n,\u00a0<strong>single point of failure<\/strong> durumda olmas\u0131d\u0131r.<\/p>\n<h4>Consul Nedir?<\/h4>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-1137 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/consul.png\" alt=\"\" width=\"411\" height=\"119\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul.png 947w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-300x87.png 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-768x222.png 768w\" data-sizes=\"(max-width: 411px) 100vw, 411px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 411px; --smush-placeholder-aspect-ratio: 411\/119;\" \/><\/p>\n<p>Consul, kapsaml\u0131 bir service <strong>discovery<\/strong> arac\u0131d\u0131r. \u00d6ncelikle consul&#8217;\u00fcn mimarisine biraz de\u011finecek olursak consistency i\u00e7in server node&#8217;lar\u0131nda <strong>Raft consensus<\/strong>&#8216;u kullanmaktad\u0131r.<\/p>\n<p>Raft consensus ise:<\/p>\n<blockquote><p><strong>Paxos<\/strong> temelli bir consensus algoritmas\u0131d\u0131r.<\/p><\/blockquote>\n<p>Konu konuyu a\u00e7\u0131yor fakat nedir bu Paxos da dersek e\u011fer: distributed computing&#8217;de, consensus&#8217;u sa\u011flayabilmek i\u00e7in kullan\u0131lan\u00a0bir protokol olarak tan\u0131mlayabiliriz.\u00a0Paxos hakk\u0131ndaki detayl\u0131 bilgiye ise, <em><a href=\"https:\/\/en.wikipedia.org\/wiki\/Paxos_%28computer_science%29\" target=\"_blank\" rel=\"noopener\">buradan<\/a> <\/em>ula\u015fabilirsiniz. Raft&#8217; a geri d\u00f6necek olursak, Paxos&#8217;a g\u00f6re daha basit ve anla\u015f\u0131labilir bir algoritma olarak tasarlanm\u0131\u015ft\u0131r. Consul ise Raft&#8217;\u0131, node&#8217;lar aras\u0131ndaki consistency durumunu veya leader election&#8217;\u0131 sa\u011flayabilmek i\u00e7in kullanmaktad\u0131r.<\/p>\n<p>\u00d6rnek vermek gerekirse: 3\u00a0adet server node&#8217;u oldu\u011funu d\u00fc\u015f\u00fcnelim. Bu node&#8217;lar aralar\u0131ndaki consistency&#8217;i sa\u011flayabilmek i\u00e7in leader node, a\u015fa\u011f\u0131daki gibi di\u011fer node&#8217;lara bir heartbeat g\u00f6ndermektedir.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/raft-consensus.jpg\"><img decoding=\"async\" class=\"aligncenter wp-image-1134 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/raft-consensus.jpg\" alt=\"\" width=\"545\" height=\"409\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/raft-consensus.jpg 638w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/raft-consensus-300x225.jpg 300w\" data-sizes=\"(max-width: 545px) 100vw, 545px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 545px; --smush-placeholder-aspect-ratio: 545\/409;\" \/><\/a><\/p>\n<p>E\u011fer bu heartbeat timeout&#8217;a u\u011frar ise, x node&#8217;undan birtanesi yeni bir election(oylama) ba\u015flatacakt\u0131r. Bu election ise node&#8217;lar aras\u0131ndan hangisinin yeni leader olaca\u011f\u0131na karar verilebilmesi i\u00e7in yap\u0131lmaktad\u0131r.\u00a0Bu i\u015flemin ger\u00e7ekle\u015febilmesi i\u00e7in ise election&#8217;\u0131 ba\u015flatan node, a\u015fa\u011f\u0131daki gibi di\u011fer node&#8217;lardan leader olabilmek i\u00e7in oy istemektedir.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/raft-consensus-election.jpg\"><img decoding=\"async\" class=\"aligncenter wp-image-1135 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/raft-consensus-election.jpg\" alt=\"\" width=\"557\" height=\"418\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/raft-consensus-election.jpg 638w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/raft-consensus-election-300x225.jpg 300w\" data-sizes=\"(max-width: 557px) 100vw, 557px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 557px; --smush-placeholder-aspect-ratio: 557\/418;\" \/><\/a><\/p>\n<p>Di\u011fer node&#8217;lardan gerekli oyu alabilirse e\u011fer, leader olarak se\u00e7ilmektedir. Bu oy isteme i\u015flemine ise &#8220;Quorum&#8221; denmektedir ve bu i\u015flem i\u00e7in (n\/2)+1 kadar \u00fcye gerekmektedir.\u00a0Raft hakk\u0131nda daha fazla bilgi edinebilmek i\u00e7in,\u00a0<em><a href=\"https:\/\/www.consul.io\/docs\/internals\/consensus.html\" target=\"_blank\" rel=\"noopener\">buray\u0131<\/a><\/em>\u00a0ziyaret edebilirsiniz.<\/p>\n<p>Consul&#8217;\u00fcn di\u011fer baz\u0131 architectural detaylar\u0131na bakt\u0131\u011f\u0131m\u0131zda ise:<\/p>\n<ul>\n<li>Etkile\u015fim i\u00e7in bir <strong>REST<\/strong> endpoint&#8217;i\u00a0sunmaktad\u0131r<\/li>\n<li><strong>Dynamic load balancing<\/strong>\u00a0i\u015flemini ger\u00e7ekle\u015ftirebilmektedir<\/li>\n<li>Multiple datacenter deste\u011fi vard\u0131r<\/li>\n<li>In-built olarak kapsaml\u0131 bir\u00a0service <strong>health checking<\/strong> sa\u011flamaktad\u0131r<\/li>\n<li>Service database&#8217;i i\u00e7in, distributed key-value store&#8217;a sahiptir<\/li>\n<\/ul>\n<p>Bunlara ek olarak consul,\u00a0<strong>highly fault tolerant<\/strong>&#8216;a sahiptir. T\u00fcm Consul service cluster&#8217;\u0131 down oldu\u011funda\u00a0dahi, bu durum service discovery i\u015flemini durdurmayacakt\u0131r. Bu i\u015flemi ise Consul,\u00a0<em><strong>Serf<\/strong><\/em> ile sa\u011flamaktad\u0131r. Serf, tamamen bir\u00a0Gossip protokol&#8217;\u00fc olup bir nevi node orchestration tool&#8217;udur. Serf membershipment&#8217;\u0131 y\u00f6netmek, failure detection ve event broadcasting yapabilme i\u015flemlerini sa\u011flayabilmektedir. Ayr\u0131ca server node&#8217;lar\u0131 i\u00e7in ise clustering sa\u011flamaktad\u0131r. Consul&#8217;\u00fc tan\u0131mlamaya \u00e7al\u0131\u015f\u0131rken bir \u00e7ok farkl\u0131 konuya de\u011findik ve Consul nedir&#8217;i art\u0131k toparlamak gerekirse e\u011fer, g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi bir \u00e7ok bile\u015feni mevcuttur Consul&#8217;\u00fcn.<\/p>\n<p>Fakat bir b\u00fct\u00fcn olarak bakt\u0131\u011f\u0131m\u0131zda ise altyap\u0131m\u0131zdaki service&#8217;leri <strong>discovery<\/strong>\u00a0edebilmemiz ve <strong>configuring<\/strong> i\u015flemlerini yapabilmemiz i\u00e7in geli\u015ftirilmi\u015f\u00a0bir tool&#8217;dur diyebiliriz. Consul&#8217;\u00fcn mimarisi ile ilgili son olarak da health checking konusuna da de\u011finmek gerekirse,\u00a0health checking i\u015flemini ise client agent&#8217;lar\u0131 arac\u0131l\u0131\u011f\u0131 ile yapabilmektedir. Consul mimarisi hakk\u0131nda daha detayl\u0131 bilgi edinebilmek isterseniz, <a href=\"https:\/\/www.consul.io\/docs\/internals\/architecture.html\" target=\"_blank\" rel=\"noopener\">buray\u0131<\/a> inceleyebilirsiniz.<\/p>\n<h4>Basic Implementasyon<\/h4>\n<p>Ger\u00e7ekle\u015ftirecek oldu\u011fumuz implementasyon da, local ortamda Consul&#8217;\u00fc\u00a0development modunda \u00e7al\u0131\u015ft\u0131raca\u011f\u0131z. Ard\u0131ndan \u00f6rnek olarak olu\u015fturacak oldu\u011fumuz bir Web API projesini, Consul&#8217;\u00fcn .NET client library&#8217;sini kullanarak iki farkl\u0131 port \u00fczerinden IIS alt\u0131nda host edip, Consul \u00fczerine registration i\u015flemini ger\u00e7ekle\u015ftirece\u011fiz. Dilerseniz \u00f6ncelikle <a href=\"https:\/\/www.consul.io\/downloads.html\" target=\"_blank\" rel=\"noopener\">buradan<\/a>, Consul&#8217;\u00fcn windows i\u00e7in olan versiyonunu indirelim ve istedi\u011fimiz bir dizin alt\u0131na koyal\u0131m.<\/p>\n<p>Komut istemcisini a\u00e7al\u0131m ve a\u015fa\u011f\u0131daki komutu, Consul&#8217;\u00fc koydu\u011fumuz dizinde \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\n<pre class=\"lang:default decode:true \">consul agent -dev<\/pre>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/consul-agent-dev-cmd.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1144 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/consul-agent-dev-cmd.jpg\" alt=\"\" width=\"906\" height=\"737\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-agent-dev-cmd.jpg 906w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-agent-dev-cmd-300x244.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-agent-dev-cmd-768x625.jpg 768w\" data-sizes=\"(max-width: 906px) 100vw, 906px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 906px; --smush-placeholder-aspect-ratio: 906\/737;\" \/><\/a><\/p>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra Consul, agent&#8217;\u0131n\u0131\u00a0in-memory olarak development modunda yukar\u0131daki gibi \u00e7al\u0131\u015ft\u0131rmaktad\u0131r. Log&#8217;lara bakt\u0131\u011f\u0131m\u0131zda ise bir tek &#8220;GOKGOKALP&#8221; node&#8217;u oldu\u011fu i\u00e7in, leader election&#8217;da &#8220;1&#8221; oya ihtiyac\u0131 oldu\u011funu ve oylamay\u0131 yaparak\u00a0kendisini leader olarak se\u00e7ti\u011fini g\u00f6rebiliriz.<\/p>\n<p>UI&#8217;\u0131na ise localhost \u00fczerinden &#8220;8300&#8221; port&#8217;u ile eri\u015febiliriz. &#8220;<em>http:\/\/localhost:8500\/ui<\/em>&#8221;<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/consul-ui.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1145 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/consul-ui.jpg\" alt=\"\" width=\"1034\" height=\"479\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui.jpg 1034w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-300x139.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-768x356.jpg 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-1024x474.jpg 1024w\" data-sizes=\"(max-width: 1034px) 100vw, 1034px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1034px; --smush-placeholder-aspect-ratio: 1034\/479;\" \/><\/a><\/p>\n<p>Default olarak Consul, kendi servisi ile gelmektedir. &#8220;Serf Health Status&#8221; \u00fc ile ise &#8220;GOKGOKALP&#8221; node&#8217;u \u00fczerine bulunan consul servis&#8217;inin, &#8220;alive&#8221; ve &#8220;reachable&#8221; olup olmad\u0131\u011f\u0131na bakmaktad\u0131r.<\/p>\n<p>Dilerseniz \u015fimdi basit bir service olu\u015ftural\u0131m ve Consul i\u00e7erisine register edelim. Bunun i\u00e7in &#8220;ConsulSampleAspNetCore&#8221; isminde bir Asp.NET Core Application Web API projesi olu\u015fturuyorum ve i\u00e7erisine a\u015fa\u011f\u0131daki gibi bir &#8220;HelpController&#8221; ekliyorum.<\/p>\n<pre class=\"lang:c# decode:true\">namespace ConsulSampleAspNetCore.Controllers\r\n{\r\n    [Route(\"[controller]\")]\r\n    public class HelpController : Controller\r\n    {\r\n        [HttpGet(\"\")]\r\n        public string Ping()\r\n        {\r\n            return \"OK\";\r\n        }\r\n    }\r\n}<\/pre>\n<p>Bu endpoint&#8217;i Consul taraf\u0131nda health check i\u015flemi i\u00e7in kullan\u0131yor olaca\u011f\u0131z. Controller&#8217;\u0131 tamamlad\u0131ktan sonra, Nuget Package Manager \u00fczerinden a\u015fa\u011f\u0131daki gibi &#8220;Consul&#8221; paketini projeye dahil edelim.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/consul-nuget.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1146 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/consul-nuget.png\" alt=\"\" width=\"687\" height=\"214\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-nuget.png 687w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-nuget-300x93.png 300w\" data-sizes=\"(max-width: 687px) 100vw, 687px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 687px; --smush-placeholder-aspect-ratio: 687\/214;\" \/><\/a><\/p>\n<p>Client library&#8217;sini ekledikten sonra ise, API projesi ile birlikte gelen &#8220;Startup.cs&#8221; i a\u00e7al\u0131m ve i\u00e7erisine a\u015fa\u011f\u0131daki gibi &#8220;RegisterServiceToConsul&#8221; isminde yeni bir method olu\u015ftural\u0131m.<\/p>\n<pre class=\"lang:c# decode:true \">private void RegisterServiceToConsul()\r\n{\r\n    using (var client = new ConsulClient())\r\n    {\r\n        var registration = new AgentServiceRegistration()\r\n        {\r\n            ID = \"consul-sample-api-9090\",\r\n            Name = \"consul-sample-api\",\r\n            Address = \"localhost\",\r\n            Port = 9090,\r\n            Check = new AgentCheckRegistration()\r\n            {\r\n                HTTP = \"http:\/\/localhost:9090\/health\",\r\n                Interval = TimeSpan.FromSeconds(10)\r\n            }\r\n        };\r\n\r\n        client.Agent.ServiceRegister(registration).Wait();\r\n    }\r\n}<\/pre>\n<p>Burada en basit hali ile bir agent registration i\u015flemi olu\u015fturuyoruz. Service&#8217;in &#8220;localhost&#8221; \u00fczerinde oldu\u011funu ve &#8220;9090&#8221; port&#8217;u ile eri\u015filebilece\u011fini belirtiyoruz. Health checking i\u015flemi i\u00e7in ise, \u00f6ncesinde olu\u015fturmu\u015f oldu\u011fumuz URL adresini veriyoruz ve bu i\u015flemi &#8220;10&#8221; saniyelik aral\u0131klar ile ger\u00e7ekle\u015ftirmesi gerekti\u011fini bildiriyoruz. Sonras\u0131nda ise bu method&#8217;u, &#8220;Startup&#8221; method&#8217;u i\u00e7erisinde call ediyoruz.<\/p>\n<pre class=\"lang:default decode:true \">public Startup(IHostingEnvironment env)\r\n{\r\n    ...\r\n\r\n    RegisterServiceToConsul();\r\n}<\/pre>\n<p>Art\u0131k bu service ilk aya\u011fa kalkt\u0131\u011f\u0131nda, kendisini Consul \u00fczerine register edecektir.<\/p>\n<p>Test i\u015flemlerine haz\u0131r durumday\u0131z. Web API projesini publish ederek, IIS \u00fczerinde &#8220;9090&#8221; port&#8217;undan host edelim. Ben bu noktada host i\u015fleminin, nas\u0131l oldu\u011funun konusuna de\u011finmeyece\u011fim. Host i\u015flemini ba\u015far\u0131yla ger\u00e7ekle\u015ftirdi isek, &#8220;<em>http:\/\/localhost:9090\/health<\/em>&#8221; URL&#8217;ine gidelim ve &#8220;OK&#8221; result&#8217;\u0131n\u0131 g\u00f6relim.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/consul-health-check-1.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1147 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/consul-health-check-1.jpg\" alt=\"\" width=\"643\" height=\"258\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-health-check-1.jpg 643w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-health-check-1-300x120.jpg 300w\" data-sizes=\"(max-width: 643px) 100vw, 643px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 643px; --smush-placeholder-aspect-ratio: 643\/258;\" \/><\/a><\/p>\n<p>Bu result&#8217;\u0131 g\u00f6rmemiz ile beraber service, Consul \u00fczerine kendisinin registration i\u015flemini ger\u00e7ekle\u015ftirecektir. \u00d6ncelikle Consul&#8217;\u00fcn console \u00fczerindeki log&#8217;lar\u0131na bir bakal\u0131m.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/consul-agent-service-register-1.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1149 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/consul-agent-service-register-1.jpg\" alt=\"\" width=\"906\" height=\"737\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-agent-service-register-1.jpg 906w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-agent-service-register-1-300x244.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-agent-service-register-1-768x625.jpg 768w\" data-sizes=\"(max-width: 906px) 100vw, 906px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 906px; --smush-placeholder-aspect-ratio: 906\/737;\" \/><\/a><\/p>\n<p>Log&#8217;lara bakt\u0131\u011f\u0131m\u0131zda kendisine bir HTTP request&#8217;i geldi\u011fini ve ard\u0131ndan &#8220;consul-sample-api-9090&#8221; ismi ile <strong>sync<\/strong> etti\u011fini g\u00f6rebiliyoruz. Bunun yan\u0131nda ise &#8220;Check &#8216;service:consul-sample-api-9090&#8217; is passing&#8221; sat\u0131r\u0131 ile eklemi\u015f oldu\u011fumuz service&#8217;in health check endpoint&#8217;ine giderek, up\u00a0olup olmad\u0131\u011f\u0131n\u0131 kontrol etti\u011fi log&#8217;unu da\u00a0g\u00f6rebiliyoruz.<\/p>\n<p>\u015eimdi Consul&#8217;\u00fcn UI ekran\u0131na girelim ve bir de oradan bakal\u0131m. UI ekran\u0131na girdikten sonra &#8220;SERVICES&#8221; tab&#8217;\u0131na girelim ve buraya yeni eklenmi\u015f olan &#8220;consul-sample-api&#8221; service&#8217;ine t\u0131klayal\u0131m.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/consul-ui-2.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1151 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/consul-ui-2.jpg\" alt=\"\" width=\"1233\" height=\"528\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-2.jpg 1233w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-2-300x128.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-2-768x329.jpg 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-2-1024x439.jpg 1024w\" data-sizes=\"(max-width: 1233px) 100vw, 1233px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1233px; --smush-placeholder-aspect-ratio: 1233\/528;\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi sa\u011f k\u0131s\u0131mda bulunan nodes tab&#8217;\u0131n\u0131n alt\u0131ndaki &#8220;Service &#8216;consul-sample-api&#8217; check&#8221; bilgisini, <strong>passing<\/strong> olarak\u00a0g\u00f6stermektedir.<\/p>\n<p>Detay\u0131na t\u0131klad\u0131\u011f\u0131m\u0131zda ise a\u015fa\u011f\u0131daki gibi bir ekran bizi kar\u015f\u0131l\u0131yor olacakt\u0131r.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/consul-ui-3.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1152 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/consul-ui-3.jpg\" alt=\"\" width=\"1233\" height=\"826\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-3.jpg 1233w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-3-300x201.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-3-768x514.jpg 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-3-1024x686.jpg 1024w\" data-sizes=\"(max-width: 1233px) 100vw, 1233px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1233px; --smush-placeholder-aspect-ratio: 1233\/826;\" \/><\/a><\/p>\n<p>Burada sa\u011f altta bulunan output k\u0131sm\u0131na bakt\u0131\u011f\u0131m\u0131zda ise, service&#8217;i register ederken kulland\u0131\u011f\u0131m\u0131z health check endpoint&#8217;ine bir GET request&#8217;i att\u0131\u011f\u0131n\u0131 ve ard\u0131ndan &#8220;OK&#8221; response&#8217;unu ald\u0131\u011f\u0131 bilgisini g\u00f6rebilmekteyiz.<\/p>\n<p>Dilerseniz birde olumsuz durumlarda ne yapt\u0131\u011f\u0131na bir bakal\u0131m. Bunun i\u00e7in IIS \u00fczerinden olu\u015fturdu\u011fumuz host&#8217;u stop edelim ve mevcut UI ekran\u0131n\u0131 tekrardan geri d\u00f6nelim.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/consul-ui-4.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1153 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/consul-ui-4.jpg\" alt=\"\" width=\"1233\" height=\"826\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-4.jpg 1233w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-4-300x201.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-4-768x514.jpg 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-ui-4-1024x686.jpg 1024w\" data-sizes=\"(max-width: 1233px) 100vw, 1233px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1233px; --smush-placeholder-aspect-ratio: 1233\/826;\" \/><\/a><\/p>\n<p>Art\u0131k &#8220;consul-sample-api&#8221; i\u00e7in durumun <strong>critical\u00a0<\/strong>oldu\u011funu ve output k\u0131sm\u0131nda ise ilgili health check endpoint&#8217;ine gitmeye \u00e7al\u0131\u015f\u0131l\u0131rken ald\u0131\u011f\u0131 hata message&#8217;\u0131n\u0131 da g\u00f6rebilmekteyiz. Consul,\u00a0endpoint&#8217;e tekrar eri\u015febildi\u011finde\u00a0ise, service&#8217;in status&#8217;\u00fcn\u00fc passing olarak g\u00f6sterip, aktif service&#8217;ler aras\u0131na dahil edecektir.<\/p>\n<p>Dilerseniz \u015fimdi ayn\u0131 service&#8217;i bu sefer &#8220;8080&#8221; port&#8217;u \u00fczerinden IIS&#8217;de tekrar host edelim ve ard\u0131ndan &#8220;<em>http:\/\/localhost:8080\/health<\/em>&#8221; health check endpoint&#8217;ini call edelim. Mevcut service&#8217;de oldu\u011fu gibi &#8220;OK&#8221; response&#8217;unu ald\u0131ktan sonra UI ekran\u0131na tekrar d\u00f6nelim.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/consul-services-load.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1155 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/consul-services-load.jpg\" alt=\"\" width=\"1231\" height=\"663\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-services-load.jpg 1231w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-services-load-300x162.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-services-load-768x414.jpg 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/consul-services-load-1024x552.jpg 1024w\" data-sizes=\"(max-width: 1231px) 100vw, 1231px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1231px; --smush-placeholder-aspect-ratio: 1231\/663;\" \/><\/a><\/p>\n<p>Sa\u011f tarafa bakt\u0131\u011f\u0131m\u0131zda ise art\u0131k iki adet &#8220;consul-sample-api&#8221; oldu\u011funu ve &#8220;8080&#8221; ile &#8220;9090&#8221; port&#8217;lar\u0131 \u00fczerinden sa\u011fl\u0131kl\u0131 bir \u015fekilde hizmet verdiklerini g\u00f6rebilmekteyiz.<\/p>\n<p>Bunlara ek olarak birde, Consul&#8217;\u00fcn API&#8217;\u0131ndan bahsetmek istiyorum. Client-side taraf\u0131 i\u00e7in yararl\u0131 olabilecek olan health endpoint&#8217;i ile, query&#8217;leme yaparak sadece passing durumda bulunan service host bilgilerini elde edebilmek m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<p>Bunun i\u00e7in &#8220;http:\/\/127.0.0.1:8500\/v1\/health\/service\/<strong>consul-sample-api<\/strong>?passing&#8221; URL&#8217;ine bir GET request&#8217;inde bulunal\u0131m.<\/p>\n<pre class=\"lang:java decode:true\">[\r\n    {\r\n        \"Node\": {\r\n            \"ID\": \"e93cdbc2-0a30-42f5-8f12-e32e690b24cd\",\r\n            \"Node\": \"GOKGOKALP\",\r\n            \"Address\": \"127.0.0.1\",\r\n            \"TaggedAddresses\": {\r\n                \"lan\": \"127.0.0.1\",\r\n                \"wan\": \"127.0.0.1\"\r\n            },\r\n            \"Meta\": {},\r\n            \"CreateIndex\": 4,\r\n            \"ModifyIndex\": 5\r\n        },\r\n        \"Service\": {\r\n            \"ID\": \"consul-sample-api-8080\",\r\n            \"Service\": \"consul-sample-api\",\r\n            \"Tags\": null,\r\n            \"Address\": \"localhost\",\r\n            \"Port\": 8080,\r\n            \"EnableTagOverride\": false,\r\n            \"CreateIndex\": 585,\r\n            \"ModifyIndex\": 585\r\n        },\r\n        \"Checks\": [\r\n            {\r\n                \"Node\": \"GOKGOKALP\",\r\n                \"CheckID\": \"serfHealth\",\r\n                \"Name\": \"Serf Health Status\",\r\n                \"Status\": \"passing\",\r\n                \"Notes\": \"\",\r\n                \"Output\": \"Agent alive and reachable\",\r\n                \"ServiceID\": \"\",\r\n                \"ServiceName\": \"\",\r\n                \"CreateIndex\": 4,\r\n                \"ModifyIndex\": 4\r\n            },\r\n            {\r\n                \"Node\": \"GOKGOKALP\",\r\n                \"CheckID\": \"service:consul-sample-api-8080\",\r\n                \"Name\": \"Service 'consul-sample-api' check\",\r\n                \"Status\": \"passing\",\r\n                \"Notes\": \"\",\r\n                \"Output\": \"HTTP GET http:\/\/localhost:8080\/health: 200 OK Output: OK\",\r\n                \"ServiceID\": \"consul-sample-api-8080\",\r\n                \"ServiceName\": \"consul-sample-api\",\r\n                \"CreateIndex\": 585,\r\n                \"ModifyIndex\": 586\r\n            }\r\n        ]\r\n    },\r\n    {\r\n        \"Node\": {\r\n            \"ID\": \"e93cdbc2-0a30-42f5-8f12-e32e690b24cd\",\r\n            \"Node\": \"GOKGOKALP\",\r\n            \"Address\": \"127.0.0.1\",\r\n            \"TaggedAddresses\": {\r\n                \"lan\": \"127.0.0.1\",\r\n                \"wan\": \"127.0.0.1\"\r\n            },\r\n            \"Meta\": {},\r\n            \"CreateIndex\": 4,\r\n            \"ModifyIndex\": 5\r\n        },\r\n        \"Service\": {\r\n            \"ID\": \"consul-sample-api-9090\",\r\n            \"Service\": \"consul-sample-api\",\r\n            \"Tags\": null,\r\n            \"Address\": \"localhost\",\r\n            \"Port\": 9090,\r\n            \"EnableTagOverride\": false,\r\n            \"CreateIndex\": 538,\r\n            \"ModifyIndex\": 538\r\n        },\r\n        \"Checks\": [\r\n            {\r\n                \"Node\": \"GOKGOKALP\",\r\n                \"CheckID\": \"serfHealth\",\r\n                \"Name\": \"Serf Health Status\",\r\n                \"Status\": \"passing\",\r\n                \"Notes\": \"\",\r\n                \"Output\": \"Agent alive and reachable\",\r\n                \"ServiceID\": \"\",\r\n                \"ServiceName\": \"\",\r\n                \"CreateIndex\": 4,\r\n                \"ModifyIndex\": 4\r\n            },\r\n            {\r\n                \"Node\": \"GOKGOKALP\",\r\n                \"CheckID\": \"service:consul-sample-api-9090\",\r\n                \"Name\": \"Service 'consul-sample-api' check\",\r\n                \"Status\": \"passing\",\r\n                \"Notes\": \"\",\r\n                \"Output\": \"HTTP GET http:\/\/localhost:9090\/health: 200 OK Output: OK\",\r\n                \"ServiceID\": \"consul-sample-api-9090\",\r\n                \"ServiceName\": \"consul-sample-api\",\r\n                \"CreateIndex\": 538,\r\n                \"ModifyIndex\": 539\r\n            }\r\n        ]\r\n    }\r\n]<\/pre>\n<p>Gelen response i\u00e7erisinde ise &#8220;GOKGOKALP&#8221; node&#8217;unda, &#8220;consul-sample-api&#8221; \u0131n &#8220;9090&#8221; ve &#8220;8080&#8221; port&#8217;lar\u0131nda\u00a0healthy\u00a0durumda yer ald\u0131klar\u0131n\u0131 g\u00f6rebiliyoruz.<\/p>\n<p>Daha \u00f6nce de ger\u00e7ekle\u015ftirdi\u011fimiz gibi service&#8217;lerden herhangi birisini durdurdu\u011fumuz durumda\u00a0ise, durdurulan service bu response i\u00e7erisine dahil olmayacakt\u0131r. Bu sayede client istedi\u011fi bir service&#8217;in, healthy olanlar\u0131n\u0131n hangi adres bilgileri \u00fczerinden eri\u015filebilir oldu\u011funu bilerek,\u00a0istedi\u011fi bir adres \u00fczerinden consume i\u015flemlerini ger\u00e7ekle\u015ftirebilmektedir. Bunun d\u0131\u015f\u0131nda kullan\u0131\u015fl\u0131 olan bir di\u011fer endpoint ise, &#8220;<strong>Key\/Value Store<\/strong>&#8221; endpoint&#8217;idir. Bu endpoint arac\u0131l\u0131\u011f\u0131 ise, config transform i\u00e7in\u00a0service configuration bilgilerini tutup, elde edebilmek m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<p>Bu makale kapsam\u0131nda asl\u0131nda <strong>Service Discovery<\/strong> ve <strong>Consul<\/strong> kavramlar\u0131na de\u011finip,\u00a0IIS \u00fczerinde Consul ile discovery i\u015flemini nas\u0131l\u00a0ger\u00e7ekle\u015ftirebiliriz konusuna bir giri\u015f yapmak istedim. Bundan sonraki makalede ise, Consul ile dynamic load balancing nas\u0131l yapabiliriz konusuna de\u011finmeyi planl\u0131yorum. \u00d6rne\u011fimizdeki Consul projesine ise, a\u015fa\u011f\u0131daki link \u00fczerinden eri\u015febilirsiniz.<\/p>\n<p>Umar\u0131m faydal\u0131 bir yaz\u0131 olmu\u015ftur.<\/p>\n<p><a href=\"https:\/\/github.com\/GokGokalp\/consul-aspnetcore-sample\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/GokGokalp\/consul-aspnetcore-sample<\/a><\/p>\n<p>Kaynaklar<\/p>\n<blockquote><p>https:\/\/www.consul.io\/intro\/index.html<br \/>\nhttp:\/\/www.ryantomlinson.com\/consul-service-discovery-in-a-microservice-world\/<br \/>\nhttps:\/\/technologyconversations.com\/2015\/09\/08\/service-discovery-zookeeper-vs-etcd-vs-consul\/<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba arkada\u015flar. Tekrardan microservice mimarilerine dayanan bir konu ile kar\u015f\u0131n\u0131zday\u0131m. Bu konu kapsam\u0131nda ise, &#8220;Service Discovery nedir?&#8221;, &#8220;Ne zaman ihtiya\u00e7 duyar\u0131z?&#8221; gibi kavramlardan bahsedip, bu i\u015flemleri\u00a0Consul ile nas\u0131l ger\u00e7ekle\u015ftirebilece\u011fimize de\u011finmeye \u00e7al\u0131\u015faca\u011f\u0131m. Service Discovery Nedir? Microservice&#8217;ler ile alakal\u0131 di\u011fer makalelerimde de bahsetti\u011fim gibi, bizlere katt\u0131\u011f\u0131 art\u0131lar\u0131n&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/gokhan-gokalp.com\/tr\/microservice-mimarilerinde-consul-ile-service-discovery\/\">Devam\u0131n\u0131 okuyun<span class=\"screen-reader-text\">Microservice Mimarilerinde Consul ile Service Discovery<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":1114,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,68,368,257],"tags":[383,388,387,259,384,386,385],"class_list":["post-1109","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net","category-architectural","category-microservices","category-soa","tag-consul","tag-consul-kullanimi","tag-consul-nedir","tag-microservice","tag-service-discovery","tag-service-discovery-with-consul","tag-service-registery","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"tr","enabled_languages":["en","tr"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"tr":{"title":false,"content":false,"excerpt":false}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Microservice Mimarilerinde Consul ile Service Discovery - G\u00f6khan G\u00f6kalp<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Microservice Mimarilerinde Consul ile Service Discovery - G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/\" \/>\n<meta property=\"og:site_name\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-16T20:53:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-05-18T19:35:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/02\/service-discovery.png\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/\"},\"author\":{\"name\":\"G\u00f6khan G\u00f6kalp\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"headline\":\"Microservice Mimarilerinde Consul ile Service Discovery\",\"datePublished\":\"2017-03-16T20:53:53+00:00\",\"dateModified\":\"2018-05-18T19:35:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/\"},\"wordCount\":2219,\"commentCount\":15,\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"image\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2017\\\/02\\\/service-discovery.png\",\"keywords\":[\"consul\",\"consul kullan\u0131m\u0131\",\"consul nedir\",\"MicroService\",\"service discovery\",\"service discovery with consul\",\"service registery\"],\"articleSection\":[\".NET\",\"Architectural\",\"Microservices\",\"SOA\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/\",\"name\":\"Microservice Mimarilerinde Consul ile Service Discovery - G\u00f6khan G\u00f6kalp\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2017\\\/02\\\/service-discovery.png\",\"datePublished\":\"2017-03-16T20:53:53+00:00\",\"dateModified\":\"2018-05-18T19:35:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/#primaryimage\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2017\\\/02\\\/service-discovery.png\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2017\\\/02\\\/service-discovery.png\",\"width\":800,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microservice-mimarilerinde-consul-ile-service-discovery\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microservice Mimarilerinde Consul ile Service Discovery\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"description\":\"C# &amp; Python lover\",\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gokhan-gokalp.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"pronouns\":\"he\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"caption\":\"G\u00f6khan G\u00f6kalp\"},\"logo\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\"},\"sameAs\":[\"https:\\\/\\\/gokhan-gokalp.com\"],\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/tr\\\/author\\\/gok-gokalp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Microservice Mimarilerinde Consul ile Service Discovery - G\u00f6khan G\u00f6kalp","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/","og_locale":"tr_TR","og_type":"article","og_title":"Microservice Mimarilerinde Consul ile Service Discovery - G\u00f6khan G\u00f6kalp","og_url":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/","og_site_name":"G\u00f6khan G\u00f6kalp","article_published_time":"2017-03-16T20:53:53+00:00","article_modified_time":"2018-05-18T19:35:18+00:00","og_image":[{"width":800,"height":300,"url":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/02\/service-discovery.png","type":"image\/png"}],"author":"G\u00f6khan G\u00f6kalp","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"G\u00f6khan G\u00f6kalp","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/#article","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/"},"author":{"name":"G\u00f6khan G\u00f6kalp","@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"headline":"Microservice Mimarilerinde Consul ile Service Discovery","datePublished":"2017-03-16T20:53:53+00:00","dateModified":"2018-05-18T19:35:18+00:00","mainEntityOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/"},"wordCount":2219,"commentCount":15,"publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"image":{"@id":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/#primaryimage"},"thumbnailUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/02\/service-discovery.png","keywords":["consul","consul kullan\u0131m\u0131","consul nedir","MicroService","service discovery","service discovery with consul","service registery"],"articleSection":[".NET","Architectural","Microservices","SOA"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/","url":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/","name":"Microservice Mimarilerinde Consul ile Service Discovery - G\u00f6khan G\u00f6kalp","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/#primaryimage"},"image":{"@id":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/#primaryimage"},"thumbnailUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/02\/service-discovery.png","datePublished":"2017-03-16T20:53:53+00:00","dateModified":"2018-05-18T19:35:18+00:00","breadcrumb":{"@id":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/#primaryimage","url":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/02\/service-discovery.png","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/02\/service-discovery.png","width":800,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/gokhan-gokalp.com\/microservice-mimarilerinde-consul-ile-service-discovery\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gokhan-gokalp.com\/"},{"@type":"ListItem","position":2,"name":"Microservice Mimarilerinde Consul ile Service Discovery"}]},{"@type":"WebSite","@id":"https:\/\/gokhan-gokalp.com\/#website","url":"https:\/\/gokhan-gokalp.com\/","name":"G\u00f6khan G\u00f6kalp","description":"C# &amp; Python lover","publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gokhan-gokalp.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe","name":"G\u00f6khan G\u00f6kalp","pronouns":"he","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","url":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","caption":"G\u00f6khan G\u00f6kalp"},"logo":{"@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659"},"sameAs":["https:\/\/gokhan-gokalp.com"],"url":"https:\/\/gokhan-gokalp.com\/tr\/author\/gok-gokalp\/"}]}},"_links":{"self":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/1109","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/comments?post=1109"}],"version-history":[{"count":26,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/1109\/revisions"}],"predecessor-version":[{"id":2265,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/1109\/revisions\/2265"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media\/1114"}],"wp:attachment":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media?parent=1109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/categories?post=1109"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/tags?post=1109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}