{"id":34835,"date":"2025-11-22T16:40:45","date_gmt":"2025-11-22T13:40:45","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34835"},"modified":"2025-11-22T16:40:45","modified_gmt":"2025-11-22T13:40:45","slug":"discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/","title":{"rendered":"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme"},"content":{"rendered":"<p><body><\/p>\n<h2>Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme<\/h2>\n<p>Discourse, modern, a\u00e7\u0131k kaynakl\u0131 bir forum yaz\u0131l\u0131m\u0131 olarak, kullan\u0131c\u0131 dostu aray\u00fcz\u00fc, g\u00fc\u00e7l\u00fc \u00f6zellik setleri ve geli\u015ftirici dostu yap\u0131s\u0131yla d\u00fcnya genelinde bir\u00e7ok topluluk ve \u015firket taraf\u0131ndan tercih edilmektedir. Ancak, bir topluluk b\u00fcy\u00fcd\u00fck\u00e7e, artan kullan\u0131c\u0131 trafi\u011fi ve veri hacmi, tek sunuculu bir Discourse da\u011f\u0131t\u0131m\u0131n\u0131 performans darbo\u011fazlar\u0131na s\u00fcr\u00fckleyebilir. Bu makale, Discourse da\u011f\u0131t\u0131m\u0131n\u0131z\u0131 y\u00fcksek eri\u015filebilirlik, performans ve \u00f6l\u00e7eklenebilirlik sa\u011flamak amac\u0131yla y\u00fck dengeleyici (load balancer) ve y\u00f6netilen veritaban\u0131 k\u00fcmesi (managed database cluster) kullanarak nas\u0131l \u00f6l\u00e7eklendirebilece\u011finizi detayl\u0131 bir \u015fekilde ele alacakt\u0131r.<\/p>\n<h3>Giri\u015f<\/h3>\n<p>Dijital topluluklar g\u00fcn\u00fcm\u00fcz\u00fcn ileti\u015fim ve bilgi payla\u015f\u0131m\u0131n\u0131n temel ta\u015flar\u0131ndan biridir. Discourse, bu topluluklara modern ve etkile\u015fimli bir platform sunarak pop\u00fclerli\u011fini art\u0131rm\u0131\u015ft\u0131r. K\u00fc\u00e7\u00fck bir topluluk i\u00e7in tek bir sunucuda \u00e7al\u0131\u015fan bir Discourse kurulumu genellikle yeterli olsa da, kullan\u0131c\u0131 say\u0131s\u0131 binleri, hatta on binleri a\u015ft\u0131\u011f\u0131nda, bu yap\u0131land\u0131rma yetersiz kalmaya ba\u015flar. Yava\u015f y\u00fckleme s\u00fcreleri, kesintiler ve veri kayb\u0131 riskleri, hem kullan\u0131c\u0131 deneyimini olumsuz etkiler hem de toplulu\u011fun b\u00fcy\u00fcmesini engeller. Bu t\u00fcr sorunlar\u0131 a\u015fmak i\u00e7in Discourse da\u011f\u0131t\u0131m\u0131n\u0131n \u00f6l\u00e7eklendirilmesi kritik hale gelir. \u00d6l\u00e7eklendirme, sistemin artan taleplere yan\u0131t verebilme yetene\u011fini art\u0131rmak anlam\u0131na gelir ve genellikle yatay \u00f6l\u00e7eklendirme (sisteme daha fazla sunucu ekleme) y\u00f6ntemleriyle ger\u00e7ekle\u015ftirilir. Bu makalede, bu yatay \u00f6l\u00e7eklendirme stratejilerinin temel bile\u015fenleri olan y\u00fck dengeleyiciler ve y\u00f6netilen veritaban\u0131 k\u00fcmeleri \u00fczerinde durulacakt\u0131r.<\/p>\n<h3>Neden \u00d6l\u00e7eklendirme Gerekli?<\/h3>\n<p>Discourse gibi dinamik uygulamalar i\u00e7in \u00f6l\u00e7eklendirme sadece performans art\u0131\u015f\u0131 de\u011fil, ayn\u0131 zamanda i\u015f s\u00fcreklili\u011fi ve kullan\u0131c\u0131 memnuniyeti i\u00e7in de hayati \u00f6neme sahiptir.<\/p>\n<h4>Artan Kullan\u0131c\u0131 Say\u0131s\u0131 ve Trafik<\/h4>\n<p>Toplulu\u011funuz b\u00fcy\u00fcd\u00fck\u00e7e, e\u015f zamanl\u0131 kullan\u0131c\u0131 say\u0131s\u0131 ve dolay\u0131s\u0131yla sunucuya gelen istek trafi\u011fi de artar. Tek bir sunucu, belirli bir e\u015fik de\u011ferinden sonra bu talepleri kar\u015f\u0131lamakta zorlanmaya ba\u015flar ve yan\u0131t s\u00fcreleri uzar.<\/p>\n<h4>Performans Darbo\u011fazlar\u0131<\/h4>\n<p>Y\u00fcksek trafik, sunucunun i\u015flemci (CPU), bellek (RAM), disk G\/\u00c7 (I\/O) ve a\u011f bant geni\u015fli\u011fi gibi kaynaklar\u0131nda darbo\u011fazlara yol a\u00e7abilir. \u00d6zellikle veritaban\u0131 i\u015flemleri, arka plan i\u015fleri ve statik varl\u0131klar\u0131n sunumu yo\u011fun kaynak t\u00fcketebilir.<\/p>\n<h4>Y\u00fcksek Eri\u015filebilirlik ve Hata Tolerans\u0131<\/h4>\n<p>Tek bir sunucuda \u00e7al\u0131\u015fan bir sistem, o sunucunun herhangi bir nedenle \u00e7evrimd\u0131\u015f\u0131 kalmas\u0131 durumunda t\u00fcm hizmeti durdurur. \u00d6l\u00e7eklendirilmi\u015f bir mimari, birden fazla sunucu aras\u0131nda y\u00fck\u00fc da\u011f\u0131tarak ve yedeklilik sa\u011flayarak tek hata noktas\u0131n\u0131 ortadan kald\u0131r\u0131r. Bu, sistemin daha dayan\u0131kl\u0131 olmas\u0131n\u0131 ve kesinti s\u00fcrelerini minimize etmesini sa\u011flar.<\/p>\n<h4>Kullan\u0131c\u0131 Deneyimi<\/h4>\n<p>H\u0131zl\u0131 y\u00fckleme s\u00fcreleri, kesintisiz eri\u015fim ve sorunsuz etkile\u015fim, kullan\u0131c\u0131lar\u0131n platformunuzda kalmas\u0131n\u0131 ve aktif olmas\u0131n\u0131 sa\u011flayan temel fakt\u00f6rlerdir. Yava\u015f veya eri\u015filemeyen bir Discourse platformu, kullan\u0131c\u0131 kayb\u0131na yol a\u00e7abilir.<\/p>\n<h3>Discourse Mimarisine K\u0131sa Bir Bak\u0131\u015f<\/h3>\n<p>Discourse, Ruby on Rails \u00e7er\u00e7evesi \u00fczerine in\u015fa edilmi\u015f, modern bir web uygulamas\u0131d\u0131r. Temel bile\u015fenleri \u015funlard\u0131r:<\/p>\n<p>*   <strong>Web Sunucusu (Nginx\/Puma):<\/strong> Gelen HTTP isteklerini kar\u015f\u0131lar ve Rails uygulamas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131ran Puma&#8217;ya iletir.<br \/>\n*   <strong>Uygulama Sunucusu (Ruby on Rails):<\/strong> \u0130\u015f mant\u0131\u011f\u0131n\u0131 y\u00fcr\u00fct\u00fcr, veritaban\u0131 ile etkile\u015fime girer ve HTML sayfalar\u0131n\u0131 olu\u015fturur.<br \/>\n*   <strong>Veritaban\u0131 (PostgreSQL):<\/strong> T\u00fcm kullan\u0131c\u0131 verileri, g\u00f6nderiler, ayarlar ve di\u011fer yap\u0131land\u0131r\u0131lm\u0131\u015f verileri saklar.<br \/>\n*   <strong>Arka Plan \u0130\u015fleri (Sidekiq, Redis):<\/strong> E-posta g\u00f6nderimi, resim i\u015fleme, \u00f6nbellek temizleme gibi zaman alan veya e\u015fzamans\u0131z \u00e7al\u0131\u015fmas\u0131 gereken g\u00f6revleri y\u00f6netir. Redis, Sidekiq i\u00e7in mesaj kuyru\u011fu olarak kullan\u0131l\u0131r.<br \/>\n*   <strong>Varl\u0131k Depolama:<\/strong> Kullan\u0131c\u0131lar\u0131n y\u00fckledi\u011fi resimler, dosyalar gibi statik varl\u0131klar genellikle dosya sisteminde veya S3 uyumlu bir depolama hizmetinde saklan\u0131r.<\/p>\n<p>Tek sunuculu bir kurulumda, t\u00fcm bu bile\u015fenler genellikle ayn\u0131 fiziksel veya sanal sunucuda \u00e7al\u0131\u015f\u0131r. Bu, ba\u015flang\u0131\u00e7ta kolay ve maliyet etkin olsa da, yukar\u0131da belirtilen \u00f6l\u00e7eklendirme sorunlar\u0131na yol a\u00e7ar.<\/p>\n<h3>Y\u00fck Dengeleyici (Load Balancer) Kullan\u0131m\u0131<\/h3>\n<p>Y\u00fck dengeleyici, \u00f6l\u00e7eklendirilmi\u015f bir Discourse mimarisinin en kritik bile\u015fenlerinden biridir. Gelen a\u011f trafi\u011fini birden fazla sunucu (uygulama sunucusu) aras\u0131nda e\u015fit veya \u00f6nceden belirlenmi\u015f kurallara g\u00f6re da\u011f\u0131tarak sistemin performans\u0131n\u0131 ve eri\u015filebilirli\u011fini art\u0131r\u0131r.<\/p>\n<h4>Nedir ve Neden Gerekli?<\/h4>\n<p>Y\u00fck dengeleyici, bir web sitesine gelen t\u00fcm istekleri tek bir giri\u015f noktas\u0131ndan al\u0131r ve bu istekleri arkas\u0131ndaki uygun sunuculara y\u00f6nlendirir. Bu, a\u015fa\u011f\u0131daki nedenlerle gereklidir:<\/p>\n<p>*   <strong>Trafi\u011fi Da\u011f\u0131tma:<\/strong> Gelen istekleri birden fazla uygulama sunucusu aras\u0131nda da\u011f\u0131tarak her bir sunucunun \u00fczerindeki y\u00fck\u00fc azalt\u0131r ve yan\u0131t s\u00fcrelerini iyile\u015ftirir.<br \/>\n*   <strong>Tek Hata Noktas\u0131n\u0131 Ortadan Kald\u0131rma:<\/strong> Bir uygulama sunucusu ar\u0131zaland\u0131\u011f\u0131nda, y\u00fck dengeleyici bu sunucuyu havuzdan \u00e7\u0131kar\u0131r ve trafi\u011fi \u00e7al\u0131\u015fan sunuculara y\u00f6nlendirir. Bu, hizmet kesintilerini \u00f6nler.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> \u0130htiya\u00e7 duyuldu\u011funda uygulama sunucular\u0131n\u0131 kolayca ekleyip \u00e7\u0131karmay\u0131 sa\u011flar.<br \/>\n*   <strong>SSL\/TLS Sonland\u0131rma:<\/strong> SSL sertifikalar\u0131n\u0131 y\u00fck dengeleyicide sonland\u0131rarak uygulama sunucular\u0131n\u0131n \u015fifreleme\/\u015fifre \u00e7\u00f6zme y\u00fck\u00fcn\u00fc hafifletir.<\/p>\n<h4>\u00c7al\u0131\u015fma Prensibi<\/h4>\n<p>Y\u00fck dengeleyiciler genellikle iki ana katmanda \u00e7al\u0131\u015f\u0131r:<\/p>\n<p>*   <strong>Katman 4 (TCP) Y\u00fck Dengeleme:<\/strong> Gelen TCP ba\u011flant\u0131lar\u0131n\u0131 hedef sunuculara iletir. IP adresi ve port numaras\u0131 gibi bilgileri kullanarak trafik y\u00f6nlendirmesi yapar. H\u0131zl\u0131d\u0131r ancak HTTP i\u00e7eri\u011fi hakk\u0131nda bilgi sahibi de\u011fildir.<br \/>\n*   <strong>Katman 7 (HTTP\/S) Y\u00fck Dengeleme:<\/strong> Gelen HTTP\/S isteklerini ayr\u0131\u015ft\u0131r\u0131r ve URL yolu, HTTP ba\u015fl\u0131klar\u0131, \u00e7erezler gibi bilgilere dayanarak daha ak\u0131ll\u0131 y\u00f6nlendirmeler yapar. SSL sonland\u0131rma, i\u00e7erik tabanl\u0131 y\u00f6nlendirme gibi geli\u015fmi\u015f \u00f6zellikler sunar. Discourse i\u00e7in genellikle Katman 7 y\u00fck dengeleme tercih edilir.<\/p>\n<h4>Pop\u00fcler Y\u00fck Dengeleyici \u00c7\u00f6z\u00fcmleri<\/h4>\n<p>*   <strong>Nginx (Ters Proxy Olarak):<\/strong> K\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli da\u011f\u0131t\u0131mlar i\u00e7in maliyet etkin bir \u00e7\u00f6z\u00fcm olabilir. Bir Nginx sunucusunu ters proxy olarak yap\u0131land\u0131rarak trafi\u011fi birden fazla uygulama sunucusuna y\u00f6nlendirebilirsiniz.<br \/>\n*   <strong>HAProxy:<\/strong> Y\u00fcksek performansl\u0131 ve esnek bir a\u00e7\u0131k kaynak y\u00fck dengeleyicidir. Hem Katman 4 hem de Katman 7 yetenekleri sunar ve karma\u015f\u0131k yap\u0131land\u0131rmalara izin verir.<br \/>\n*   <strong>Bulut Sa\u011flay\u0131c\u0131lar\u0131n Y\u00fck Dengeleyicileri:<\/strong><br \/>\n    *   <strong>AWS Elastic Load Balancer (ELB\/ALB):<\/strong> Amazon Web Services&#8217;\u0131n sundu\u011fu y\u00f6netilen bir hizmettir. Application Load Balancer (ALB) \u00f6zellikle HTTP\/S trafi\u011fi i\u00e7in Katman 7 \u00f6zellikleriyle \u00f6ne \u00e7\u0131kar.<br \/>\n    *   <strong>Google Cloud Load Balancing:<\/strong> Google Cloud Platform&#8217;un g\u00fc\u00e7l\u00fc ve k\u00fcresel y\u00fck dengeleme hizmetidir.<br \/>\n    *   <strong>Azure Load Balancer \/ Application Gateway:<\/strong> Microsoft Azure&#8217;\u0131n Katman 4 ve Katman 7 y\u00fck dengeleme \u00e7\u00f6z\u00fcmleri.<br \/>\n    *   Bu y\u00f6netilen hizmetler, \u00f6l\u00e7eklenebilirlik, y\u00fcksek eri\u015filebilirlik ve kolay y\u00f6netim avantajlar\u0131 sunar.<\/p>\n<h4>Discourse \u0130\u00e7in Yap\u0131land\u0131rma \u0130pu\u00e7lar\u0131<\/h4>\n<p>*   <strong>SSL Sonland\u0131rma:<\/strong> Y\u00fck dengeleyicide SSL sertifikalar\u0131n\u0131 sonland\u0131rmak, uygulama sunucular\u0131n\u0131z\u0131n \u015fifreleme y\u00fck\u00fcn\u00fc azalt\u0131r ve y\u00f6netim kolayl\u0131\u011f\u0131 sa\u011flar. Y\u00fck dengeleyiciden uygulama sunucular\u0131na olan ba\u011flant\u0131lar genellikle \u00f6zel bir a\u011f i\u00e7inde oldu\u011fundan HTTP olarak kalabilir veya i\u00e7 a\u011fda da SSL kullan\u0131labilir.<br \/>\n*   <strong>Sa\u011fl\u0131k Kontrolleri:<\/strong> Y\u00fck dengeleyicinin uygulama sunucular\u0131n\u0131n durumunu d\u00fczenli olarak kontrol etmesi \u00f6nemlidir. Sunucunun yan\u0131t verip vermedi\u011fini (\u00f6rne\u011fin, <code>\/healthz<\/code> gibi bir endpoint&#8217;e HTTP iste\u011fi g\u00f6ndererek) kontrol ederek ar\u0131zal\u0131 sunucular\u0131n otomatik olarak havuzdan \u00e7\u0131kar\u0131lmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>Oturum Kal\u0131c\u0131l\u0131\u011f\u0131 (Sticky Sessions):<\/strong> Discourse, temel olarak durumsuz (stateless) bir uygulama oldu\u011fu i\u00e7in genellikle oturum kal\u0131c\u0131l\u0131\u011f\u0131na ihtiya\u00e7 duymaz. Bu, herhangi bir iste\u011fin herhangi bir uygulama sunucusu taraf\u0131ndan i\u015flenebilece\u011fi anlam\u0131na gelir ve y\u00fck dengeleme algoritmalar\u0131 i\u00e7in daha fazla esneklik sa\u011flar. Ancak baz\u0131 \u00f6zel durumlarda veya eklentilerde oturum kal\u0131c\u0131l\u0131\u011f\u0131 gerekebilir. Genel olarak, bu \u00f6zelli\u011fi devre d\u0131\u015f\u0131 b\u0131rakmak performans\u0131 art\u0131r\u0131r.<\/p>\n<h3>Uygulama Katman\u0131n\u0131 \u00d6l\u00e7eklendirme (Web ve Sidekiq Sunucular\u0131)<\/h3>\n<p>Discourse&#8217;un en kolay \u00f6l\u00e7eklenebilen k\u0131sm\u0131, uygulama katman\u0131d\u0131r. Bu katman, web sunucular\u0131n\u0131 ve arka plan i\u015flerini y\u00fcr\u00fcten Sidekiq i\u015f\u00e7ilerini i\u00e7erir.<\/p>\n<h4>Stateless Yap\u0131<\/h4>\n<p>Discourse, kullan\u0131c\u0131 oturum bilgilerini veya di\u011fer durum verilerini do\u011frudan uygulama sunucular\u0131nda tutmaz. Bu bilgiler Redis veya PostgreSQL gibi merkezi veri depolar\u0131nda saklan\u0131r. Bu &#8220;durumsuz&#8221; tasar\u0131m, uygulama sunucular\u0131n\u0131 yatay olarak \u00f6l\u00e7eklendirmeyi son derece kolayla\u015ft\u0131r\u0131r; sadece yeni bir sunucu ekleyip Discourse&#8217;u kurmak yeterlidir. Her yeni sunucu, ba\u011f\u0131ms\u0131z olarak gelen istekleri i\u015fleyebilir.<\/p>\n<h4>Birden Fazla Uygulama Sunucusu<\/h4>\n<p>Y\u00fck dengeleyicinin arkas\u0131na birden fazla web\/uygulama sunucusu yerle\u015ftirerek gelen trafi\u011fi da\u011f\u0131tabilirsiniz. Her sunucu, ayn\u0131 Discourse kod taban\u0131na ve yap\u0131land\u0131rmas\u0131na sahip olmal\u0131d\u0131r. Bu sunucular genellikle ayn\u0131 sanal makine g\u00f6r\u00fcnt\u00fcs\u00fcnden (VM image) veya kapsay\u0131c\u0131dan (container) ba\u015flat\u0131l\u0131r.<\/p>\n<h4>Sidekiq \u0130\u015f\u00e7ileri<\/h4>\n<p>Discourse&#8217;un arka plan i\u015fleri (e-posta g\u00f6nderme, resim yeniden boyutland\u0131rma, \u00f6nbellek invalidasyonu vb.) Sidekiq taraf\u0131ndan i\u015flenir. Y\u00fcksek trafikli ortamlarda, bu i\u015flerin say\u0131s\u0131 artar ve tek bir sunucuda \u00e7al\u0131\u015fmak darbo\u011faz yaratabilir. Sidekiq i\u015f\u00e7ilerini ayr\u0131 sunucularda \u00e7al\u0131\u015ft\u0131rmak, web sunucular\u0131n\u0131n kullan\u0131c\u0131 isteklerine odaklanmas\u0131n\u0131 sa\u011flarken, arka plan i\u015flerinin de verimli bir \u015fekilde tamamlanmas\u0131n\u0131 sa\u011flar. Birden fazla Sidekiq sunucusu, ayn\u0131 Redis kuyru\u011funu kullanarak i\u015fleri paralel olarak i\u015fleyebilir.<\/p>\n<h4>Ortak Dosya Sistemi (veya S3)<\/h4>\n<p>Kullan\u0131c\u0131lar\u0131n y\u00fckledi\u011fi avatar resimleri, ekler ve di\u011fer dosyalar gibi varl\u0131klar\u0131n birden fazla uygulama sunucusu aras\u0131nda tutarl\u0131 olmas\u0131 gerekir. Bunun i\u00e7in iki ana yakla\u015f\u0131m vard\u0131r:<\/p>\n<p>*   <strong>Merkezi Dosya Depolama:<\/strong> NFS (Network File System), AWS EFS (Elastic File System) veya GlusterFS gibi payla\u015f\u0131ml\u0131 bir dosya sistemi kullanmak. T\u00fcm uygulama sunucular\u0131 bu merkezi depolama birimine ba\u011flanarak ayn\u0131 dosyalara eri\u015fir.<br \/>\n*   <strong>Nesne Depolama (S3 Uyumlu):<\/strong> En yayg\u0131n ve \u00f6nerilen y\u00f6ntem, Amazon S3 veya S3 uyumlu di\u011fer hizmetleri (DigitalOcean Spaces, MinIO vb.) kullanmakt\u0131r. Discourse, <code>discourse-s3-uploads<\/code> eklentisi ile bu t\u00fcr depolama \u00e7\u00f6z\u00fcmlerini sorunsuz bir \u015fekilde entegre edebilir. Bu, \u00f6l\u00e7eklenebilirlik, dayan\u0131kl\u0131l\u0131k ve maliyet etkinli\u011fi a\u00e7\u0131s\u0131ndan genellikle en iyi \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<h4>Redis<\/h4>\n<p>Discourse, \u00f6nbellekleme, oturum y\u00f6netimi ve Sidekiq kuyruklar\u0131 i\u00e7in Redis&#8217;i kullan\u0131r. \u00d6l\u00e7eklendirilmi\u015f bir ortamda, t\u00fcm uygulama ve Sidekiq sunucular\u0131n\u0131n merkezi bir Redis sunucusuna veya k\u00fcmesine ba\u011flanmas\u0131 gerekir. Y\u00f6netilen Redis hizmetleri (AWS ElastiCache for Redis, Google Cloud Memorystore for Redis, Azure Cache for Redis) y\u00fcksek eri\u015filebilirlik ve otomatik y\u00f6netim sunar.<\/p>\n<h3>Y\u00f6netilen Veritaban\u0131 K\u00fcmesi (Managed Database Cluster) Kullan\u0131m\u0131<\/h3>\n<p>Veritaban\u0131, bir Discourse da\u011f\u0131t\u0131m\u0131n\u0131n en kritik ve \u00f6l\u00e7eklendirilmesi en zor bile\u015fenidir. PostgreSQL, Discourse i\u00e7in varsay\u0131lan veritaban\u0131d\u0131r ve y\u00fcksek performansl\u0131 olsa da, artan y\u00fck alt\u0131nda performans sorunlar\u0131 ya\u015fayabilir. Y\u00f6netilen veritaban\u0131 k\u00fcmeleri, bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<h4>Neden Y\u00f6netilen Bir \u00c7\u00f6z\u00fcm?<\/h4>\n<p>Veritaban\u0131 y\u00f6netimi, yedekleme, yama, g\u00fcncelleme, g\u00fcvenlik ve \u00f6l\u00e7eklendirme gibi karma\u015f\u0131k g\u00f6revleri i\u00e7erir. Y\u00f6netilen veritaban\u0131 hizmetleri, bu y\u00f6netim y\u00fck\u00fcn\u00fc bulut sa\u011flay\u0131c\u0131lar\u0131na devrederek a\u015fa\u011f\u0131daki avantajlar\u0131 sa\u011flar:<\/p>\n<p>*   <strong>Kolay Kurulum ve Y\u00f6netim:<\/strong> Veritaban\u0131 sunucusunu kurma, yap\u0131land\u0131rma ve optimize etme ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r.<br \/>\n*   <strong>Otomatik Yedekleme ve Geri Y\u00fckleme:<\/strong> D\u00fczenli yedeklemeler ve kolay geri y\u00fckleme se\u00e7enekleri sunar, veri kayb\u0131 riskini minimize eder.<br \/>\n*   <strong>Y\u00fcksek Eri\u015filebilirlik ve Felaket Kurtarma:<\/strong> Otomatik failover (hata durumunda otomatik ge\u00e7i\u015f), \u00e7oklu b\u00f6lge da\u011f\u0131t\u0131m\u0131 ve replikasyon gibi \u00f6zelliklerle kesintisiz hizmet sa\u011flar.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong> Veritaban\u0131 g\u00fcvenli\u011fi i\u00e7in g\u00fcncel yamalar, a\u011f izolasyonu ve \u015fifreleme gibi \u00f6zellikler sunar.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> \u0130htiya\u00e7 duyuldu\u011funda i\u015flemci, bellek ve depolama kaynaklar\u0131n\u0131 kolayca art\u0131rma veya okuma replikalar\u0131 ekleme imkan\u0131 sunar.<\/p>\n<h4>PostgreSQL ve \u00d6l\u00e7eklendirme Zorluklar\u0131<\/h4>\n<p>PostgreSQL, ACID uyumlu, ili\u015fkisel bir veritaban\u0131d\u0131r. Ancak geleneksel olarak, yazma i\u015flemleri i\u00e7in tek bir &#8220;master&#8221; (ana) sunucuya ihtiya\u00e7 duyar. Bu, master sunucunun yazma yo\u011funlu\u011fu artt\u0131k\u00e7a darbo\u011faz haline gelebilece\u011fi anlam\u0131na gelir. Okuma i\u015flemleri ise &#8220;read replica&#8221; (okuma replikas\u0131) ad\u0131 verilen ikincil sunuculara y\u00f6nlendirilebilir.<\/p>\n<h4>Pop\u00fcler Y\u00f6netilen Veritaban\u0131 Hizmetleri<\/h4>\n<p>*   <strong>AWS RDS (Relational Database Service) for PostgreSQL:<\/strong> Amazon&#8217;un en pop\u00fcler y\u00f6netilen veritaban\u0131 hizmetlerinden biridir. Otomatik yedekleme, felaket kurtarma, okuma replikalar\u0131 ve kolay \u00f6l\u00e7eklendirme sunar. Multi-AZ (\u00e7oklu eri\u015filebilirlik b\u00f6lgesi) da\u011f\u0131t\u0131m\u0131 ile y\u00fcksek eri\u015filebilirlik sa\u011flar.<br \/>\n*   <strong>Google Cloud SQL for PostgreSQL:<\/strong> Google Cloud Platform&#8217;un y\u00f6netilen PostgreSQL hizmetidir. Benzer \u015fekilde otomatik yedekleme, replikasyon ve y\u00fcksek eri\u015filebilirlik \u00f6zellikleri sunar.<br \/>\n*   <strong>Azure Database for PostgreSQL:<\/strong> Microsoft Azure&#8217;\u0131n esnek ve \u00f6l\u00e7eklenebilir y\u00f6netilen PostgreSQL hizmetidir.<br \/>\n*   <strong>DigitalOcean Managed Databases for PostgreSQL:<\/strong> Daha k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli projeler veya b\u00fct\u00e7e dostu \u00e7\u00f6z\u00fcmler i\u00e7in uygun, kullan\u0131m\u0131 kolay bir se\u00e7enektir.<\/p>\n<h4>Y\u00fcksek Eri\u015filebilirlik ve Felaket Kurtarma<\/h4>\n<p>Y\u00f6netilen veritaban\u0131 hizmetleri, veritaban\u0131 sunucusunun ar\u0131zalanmas\u0131 durumunda otomatik olarak yedek bir sunucuya (standby replica) ge\u00e7i\u015f yaparak kesintisiz hizmet sa\u011flar. Bu, genellikle farkl\u0131 eri\u015filebilirlik b\u00f6lgelerinde (Availability Zones) birincil ve ikincil veritaban\u0131 sunucular\u0131n\u0131n konu\u015fland\u0131r\u0131lmas\u0131yla ger\u00e7ekle\u015ftirilir. Bu yap\u0131, bir b\u00f6lgedeki kesinti durumunda bile veritaban\u0131n\u0131n eri\u015filebilir kalmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Okuma Replikalar\u0131 (Read Replicas)<\/h4>\n<p>Discourse, genellikle yazma yo\u011fun bir uygulama de\u011fildir; ancak yo\u011fun okuma i\u015flemleri (\u00f6rne\u011fin, pop\u00fcler konular\u0131n g\u00f6r\u00fcnt\u00fclenmesi, arama i\u015flemleri) veritaban\u0131 \u00fczerinde y\u00fck olu\u015fturabilir. Okuma replikalar\u0131, master veritaban\u0131ndaki verilerin bir kopyas\u0131n\u0131 tutar ve okuma sorgular\u0131n\u0131 i\u015fleyerek master sunucunun y\u00fck\u00fcn\u00fc hafifletir. Discourse, varsay\u0131lan olarak okuma replikalar\u0131n\u0131 do\u011frudan kullanmaz; t\u00fcm sorgular\u0131 master&#8217;a g\u00f6nderir. Ancak, daha geli\u015fmi\u015f senaryolarda veya \u00f6zel eklentilerle okuma replikalar\u0131 kullan\u0131labilir. \u00d6zellikle raporlama veya analitik ama\u00e7l\u0131 sorgular i\u00e7in ayr\u0131 bir okuma replikas\u0131 kullanmak master&#8217;\u0131n performans\u0131n\u0131 korur.<\/p>\n<h4>Veritaban\u0131 Ba\u011flant\u0131 Havuzlama (Connection Pooling)<\/h4>\n<p>\u00c7ok say\u0131da uygulama sunucusu, veritaban\u0131na ayn\u0131 anda binlerce ba\u011flant\u0131 a\u00e7maya \u00e7al\u0131\u015fabilir. Bu, veritaban\u0131 sunucusu \u00fczerinde \u00f6nemli bir y\u00fck olu\u015fturabilir. PgBouncer gibi ba\u011flant\u0131 havuzlama ara\u00e7lar\u0131, uygulama sunucular\u0131 ile veritaban\u0131 aras\u0131nda bir arac\u0131 g\u00f6revi g\u00f6rerek ba\u011flant\u0131lar\u0131 y\u00f6netir. Bu sayede veritaban\u0131 sunucusuna a\u00e7\u0131lan toplam ba\u011flant\u0131 say\u0131s\u0131 s\u0131n\u0131rlan\u0131r ve veritaban\u0131 kaynaklar\u0131 daha verimli kullan\u0131l\u0131r. Y\u00f6netilen veritaban\u0131 hizmetleri genellikle bu t\u00fcr ara\u00e7lar\u0131 entegre veya kolayca kurulabilir \u015fekilde sunar.<\/p>\n<h3>\u00d6l\u00e7eklendirilmi\u015f Discourse Mimarisi (\u00d6rnek Senaryo)<\/h3>\n<p>Tipik bir \u00f6l\u00e7eklendirilmi\u015f Discourse da\u011f\u0131t\u0131m\u0131 a\u015fa\u011f\u0131daki bile\u015fenleri i\u00e7erir:<\/p>\n<p>1.  <strong>Alan Ad\u0131 (Domain Name):<\/strong> Kullan\u0131c\u0131lar\u0131n Discourse platformunuza eri\u015fti\u011fi adres.<br \/>\n2.  <strong>CDN (\u0130ste\u011fe Ba\u011fl\u0131):<\/strong> Statik varl\u0131klar\u0131n (CSS, JS, resimler) h\u0131zl\u0131 teslimat\u0131 i\u00e7in kullan\u0131l\u0131r.<br \/>\n3.  <strong>Y\u00fck Dengeleyici:<\/strong> Gelen t\u00fcm web trafi\u011fini kar\u015f\u0131lar, SSL sonland\u0131rmas\u0131 yapar ve trafi\u011fi uygulama sunucular\u0131na da\u011f\u0131t\u0131r.<br \/>\n4.  <strong>Birden Fazla Uygulama Sunucusu:<\/strong> Y\u00fck dengeleyicinin arkas\u0131nda \u00e7al\u0131\u015fan, Discourse uygulamas\u0131n\u0131 bar\u0131nd\u0131ran sunucular (Nginx\/Puma). Bu sunucular otomatik \u00f6l\u00e7eklendirme gruplar\u0131na dahil edilebilir.<br \/>\n5.  <strong>Ayr\u0131 Sidekiq Sunucular\u0131:<\/strong> Arka plan i\u015flerini i\u015flemek i\u00e7in ayr\u0131lm\u0131\u015f sunucular.<br \/>\n6.  <strong>Y\u00f6netilen Veritaban\u0131 K\u00fcmesi (PostgreSQL):<\/strong> Y\u00fcksek eri\u015filebilirli\u011fe sahip, master\/replica yap\u0131s\u0131nda y\u00f6netilen bir veritaban\u0131 hizmeti.<br \/>\n7.  <strong>Y\u00f6netilen Redis:<\/strong> \u00d6nbellek, oturumlar ve Sidekiq kuyruklar\u0131 i\u00e7in merkezi bir Redis hizmeti.<br \/>\n8.  <strong>S3 Uyumlu Nesne Depolama:<\/strong> Kullan\u0131c\u0131 y\u00fcklemeleri ve di\u011fer statik dosyalar i\u00e7in (\u00f6rne\u011fin, AWS S3).<\/p>\n<p>Bu mimaride, bir kullan\u0131c\u0131 iste\u011fi \u015fu yolu izler:<br \/>\nKullan\u0131c\u0131 -> DNS -> (CDN) -> Y\u00fck Dengeleyici -> Uygulama Sunucusu -> (Redis, S3) -> Y\u00f6netilen Veritaban\u0131.<br \/>\nArka plan i\u015fleri ise Sidekiq sunucular\u0131 taraf\u0131ndan Redis kuyru\u011fundan al\u0131n\u0131r ve gerekli i\u015flemleri yapar.<\/p>\n<h3>Uygulama ve Yap\u0131land\u0131rma Ad\u0131mlar\u0131<\/h3>\n<p>\u00d6l\u00e7eklendirilmi\u015f bir Discourse da\u011f\u0131t\u0131m\u0131 kurmak i\u00e7in dikkatli planlama ve yap\u0131land\u0131rma gereklidir.<\/p>\n<h4>DNS Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Discourse platformunuzun alan ad\u0131n\u0131 (\u00f6rne\u011fin, <code>forum.example.com<\/code>), y\u00fck dengeleyicinizin IP adresine veya DNS ad\u0131na (CNAME kayd\u0131) y\u00f6nlendirmelisiniz.<\/p>\n<h4>SSL\/TLS Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>En iyi uygulama, SSL sertifikas\u0131n\u0131 y\u00fck dengeleyicide sonland\u0131rmakt\u0131r. Bu, y\u00fck dengeleyicinin t\u00fcm gelen HTTPS trafi\u011fini \u015fifresini \u00e7\u00f6zmesini ve \u015fifrelenmemi\u015f (veya i\u00e7 a\u011fda yeniden \u015fifrelenmi\u015f) trafi\u011fi uygulama sunucular\u0131na iletmesini sa\u011flar. Bu, uygulama sunucular\u0131n\u0131n performans y\u00fck\u00fcn\u00fc azalt\u0131r. Let&#8217;s Encrypt gibi \u00fccretsiz sertifikalar veya bulut sa\u011flay\u0131c\u0131n\u0131z\u0131n sertifika y\u00f6netimi hizmetleri kullan\u0131labilir.<\/p>\n<h4>Discourse Uygulama Ayarlar\u0131<\/h4>\n<p>Discourse&#8217;un merkezi hizmetlere ba\u011flanabilmesi i\u00e7in baz\u0131 ortam de\u011fi\u015fkenlerinin veya yap\u0131land\u0131rma dosyalar\u0131n\u0131n g\u00fcncellenmesi gerekir:<\/p>\n<p>*   <code>DISCOURSE_DB_HOST<\/code>: Y\u00f6netilen PostgreSQL veritaban\u0131 k\u00fcmenizin u\u00e7 nokta adresi.<br \/>\n*   <code>DISCOURSE_DB_PORT<\/code>: PostgreSQL portu (genellikle 5432).<br \/>\n*   <code>DISCOURSE_DB_USERNAME<\/code>, <code>DISCOURSE_DB_PASSWORD<\/code>: Veritaban\u0131 kimlik bilgileri.<br \/>\n*   <code>DISCOURSE_REDIS_HOST<\/code>: Y\u00f6netilen Redis hizmetinizin u\u00e7 nokta adresi.<br \/>\n*   <code>DISCOURSE_REDIS_PORT<\/code>: Redis portu (genellikle 6379).<br \/>\n*   <code>S3_UPLOADS_BUCKET<\/code>, <code>S3_REGION<\/code>, <code>S3_ACCESS_KEY_ID<\/code>, <code>S3_SECRET_ACCESS_KEY<\/code>: S3 uyumlu depolama ayarlar\u0131.<br \/>\n*   <code>DISCOURSE_CDN_URL<\/code>: CDN kullan\u0131l\u0131yorsa, CDN URL&#8217;si.<\/p>\n<p>Bu ayarlar genellikle her uygulama sunucusunun Docker yap\u0131land\u0131rmas\u0131nda veya ortam de\u011fi\u015fkenlerinde tan\u0131mlan\u0131r.<\/p>\n<h4>Ortak Dosya Sistemi \/ S3 Entegrasyonu<\/h4>\n<p>Discourse&#8217;un <code>discourse-s3-uploads<\/code> eklentisi veya benzeri bir mekanizma ile S3&#8217;e y\u00fckleme yapacak \u015fekilde yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olun. Bu, t\u00fcm uygulama sunucular\u0131n\u0131n ayn\u0131 dosyalara eri\u015fmesini sa\u011flar ve yerel disk depolama sorunlar\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/p>\n<h4>Sa\u011fl\u0131k Kontrolleri<\/h4>\n<p>Y\u00fck dengeleyicinizin her uygulama sunucusunun sa\u011fl\u0131kl\u0131 olup olmad\u0131\u011f\u0131n\u0131 d\u00fczenli olarak kontrol etmesi i\u00e7in uygun sa\u011fl\u0131k kontrollerini yap\u0131land\u0131r\u0131n. Basit bir HTTP GET iste\u011fi (\u00f6rne\u011fin, <code>\/healthz<\/code> veya ana sayfa) ile sunucunun 200 OK yan\u0131t\u0131 verip vermedi\u011fini kontrol edebilirsiniz.<\/p>\n<h4>Otomatik \u00d6l\u00e7eklendirme (Opsiyonel ama \u00d6nemli)<\/h4>\n<p>Bulut sa\u011flay\u0131c\u0131lar\u0131n otomatik \u00f6l\u00e7eklendirme gruplar\u0131 (Auto Scaling Groups &#8211; AWS, Managed Instance Groups &#8211; GCP) kullanarak uygulama sunucular\u0131n\u0131z\u0131n y\u00fck\u00fcne g\u00f6re otomatik olarak eklenip \u00e7\u0131kar\u0131lmas\u0131n\u0131 sa\u011flayabilirsiniz. Bu, maliyetleri optimize ederken performans dalgalanmalar\u0131na dinamik olarak yan\u0131t vermenizi sa\u011flar. CPU kullan\u0131m\u0131, a\u011f trafi\u011fi gibi metrikler otomatik \u00f6l\u00e7eklendirme tetikleyicisi olarak kullan\u0131labilir.<\/p>\n<h3>Maliyet ve Performans Optimizasyonu<\/h3>\n<p>\u00d6l\u00e7eklendirilmi\u015f bir sistem kurmak, ba\u015flang\u0131\u00e7ta ve s\u00fcrekli olarak daha y\u00fcksek maliyetler getirebilir. Bu maliyetleri optimize etmek ve performans\u0131 en \u00fcst d\u00fczeye \u00e7\u0131karmak i\u00e7in baz\u0131 stratejiler:<\/p>\n<h4>Kaynak \u0130zleme (Monitoring)<\/h4>\n<p>T\u00fcm sistem bile\u015fenlerini (CPU, RAM, disk G\/\u00c7, a\u011f, veritaban\u0131 ba\u011flant\u0131lar\u0131, Redis kullan\u0131m\u0131, uygulama yan\u0131t s\u00fcreleri) izlemek kritik \u00f6neme sahiptir. Prometheus, Grafana, Datadog gibi ara\u00e7lar veya bulut sa\u011flay\u0131c\u0131n\u0131z\u0131n izleme hizmetleri (AWS CloudWatch, Google Cloud Monitoring) kullan\u0131larak performans darbo\u011fazlar\u0131 erkenden tespit edilebilir.<\/p>\n<h4>\u00d6nbellekleme Stratejileri<\/h4>\n<p>Discourse, dahili olarak Redis ve Rails \u00f6nbellekleme mekanizmalar\u0131n\u0131 kullan\u0131r. Ek olarak, CDN kullan\u0131m\u0131 statik varl\u0131klar\u0131n (CSS, JS, resimler) son kullan\u0131c\u0131lara daha h\u0131zl\u0131 ula\u015fmas\u0131n\u0131 sa\u011flar ve uygulama sunucular\u0131n\u0131n y\u00fck\u00fcn\u00fc azalt\u0131r.<\/p>\n<h4>Veritaban\u0131 Optimizasyonu<\/h4>\n<p>*   <strong>\u0130ndeksler:<\/strong> S\u0131k kullan\u0131lan sorgular\u0131n performans\u0131n\u0131 art\u0131rmak i\u00e7in do\u011fru indekslerin olu\u015fturuldu\u011fundan emin olun.<br \/>\n*   <strong>Sorgu Optimizasyonu:<\/strong> Yava\u015f \u00e7al\u0131\u015fan sorgular\u0131 tespit edin ve optimize edin.<br \/>\n*   <strong>Veritaban\u0131 Boyutu:<\/strong> Gerekli olmayan eski verileri ar\u015fivleyerek veya temizleyerek veritaban\u0131 boyutunu y\u00f6netin.<br \/>\n*   <strong>Ba\u011flant\u0131 Havuzlama:<\/strong> PgBouncer gibi ara\u00e7larla veritaban\u0131 ba\u011flant\u0131lar\u0131n\u0131 optimize edin.<\/p>\n<h4>CDN Kullan\u0131m\u0131<\/h4>\n<p>Statik varl\u0131klar\u0131n (resimler, CSS, JavaScript dosyalar\u0131) k\u00fcresel olarak da\u011f\u0131t\u0131lmas\u0131 ve \u00f6nbelle\u011fe al\u0131nmas\u0131 i\u00e7in bir \u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011f\u0131 (CDN) kullanmak, sayfa y\u00fckleme s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r ve uygulama sunucular\u0131n\u0131n \u00fczerindeki y\u00fck\u00fc hafifletir.<\/p>\n<h4>Bulut Sa\u011flay\u0131c\u0131lar\u0131n Maliyet Y\u00f6netimi Ara\u00e7lar\u0131<\/h4>\n<p>Bulut hizmetlerinin maliyetlerini takip etmek ve optimize etmek i\u00e7in bulut sa\u011flay\u0131c\u0131n\u0131z\u0131n sundu\u011fu b\u00fct\u00e7eleme, maliyet analizi ve rezervasyon \u00f6rnekleri (Reserved Instances) gibi ara\u00e7lar\u0131 kullan\u0131n.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Discourse da\u011f\u0131t\u0131m\u0131n\u0131z\u0131 y\u00fck dengeleyici ve y\u00f6netilen veritaban\u0131 k\u00fcmesi ile \u00f6l\u00e7eklendirmek, b\u00fcy\u00fcyen bir toplulu\u011fun ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak i\u00e7in g\u00fc\u00e7l\u00fc ve dayan\u0131kl\u0131 bir \u00e7\u00f6z\u00fcm sunar. Bu mimari, tek hata noktalar\u0131n\u0131 ortadan kald\u0131r\u0131r, performans\u0131 art\u0131r\u0131r, y\u00fcksek eri\u015filebilirlik sa\u011flar ve gelecekteki b\u00fcy\u00fcmeye olanak tan\u0131r. Uygulama katman\u0131n\u0131n durumsuz yap\u0131s\u0131, yatay \u00f6l\u00e7eklendirmeyi kolayla\u015ft\u0131r\u0131rken, y\u00f6netilen veritaban\u0131 ve Redis hizmetleri, y\u00f6netim y\u00fck\u00fcn\u00fc azalt\u0131r ve veri katman\u0131n\u0131n g\u00fcvenilirli\u011fini art\u0131r\u0131r.<\/p>\n<p>Bu makalede \u00f6zetlenen ad\u0131mlar\u0131 ve stratejileri uygulayarak, Discourse platformunuzu artan kullan\u0131c\u0131 taleplerine kar\u015f\u0131 haz\u0131rlayabilir, ola\u011fan\u00fcst\u00fc bir kullan\u0131c\u0131 deneyimi sunabilir ve toplulu\u011funuzun sorunsuz bir \u015fekilde b\u00fcy\u00fcmesini sa\u011flayabilirsiniz. \u00d6l\u00e7eklendirme, s\u00fcrekli bir s\u00fcre\u00e7tir ve sisteminizi d\u00fczenli olarak izlemek, optimize etmek ve gerekti\u011finde ayarlamak, uzun vadeli ba\u015far\u0131 i\u00e7in anahtard\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme\nDiscourse, modern, a\u00e7\u0131k kaynakl\u0131 bir forum yaz\u0131l","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-34835","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/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:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme\" \/>\n<meta property=\"og:description\" content=\"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme Discourse, modern, a\u00e7\u0131k kaynakl\u0131 bir forum yaz\u0131l\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-22T13:40:45+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme\",\"datePublished\":\"2025-11-22T13:40:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/\"},\"wordCount\":3610,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/\",\"name\":\"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-22T13:40:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/","og_locale":"tr_TR","og_type":"article","og_title":"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme","og_description":"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme Discourse, modern, a\u00e7\u0131k kaynakl\u0131 bir forum yaz\u0131l","og_url":"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-22T13:40:45+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme","datePublished":"2025-11-22T13:40:45+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/"},"wordCount":3610,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/","url":"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/","name":"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-22T13:40:45+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/discourse-dagitimini-yuk-dengeleyici-ve-yonetilen-veritabani-kumesi-ile-olceklendirme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Discourse Da\u011f\u0131t\u0131m\u0131n\u0131 Y\u00fck Dengeleyici ve Y\u00f6netilen Veritaban\u0131 K\u00fcmesi ile \u00d6l\u00e7eklendirme"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34835","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34835"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34835\/revisions"}],"predecessor-version":[{"id":34836,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34835\/revisions\/34836"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}