<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>n Mimari Evrimi</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Ömer KÕ rka÷ açl÷ÕR</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Görkem Giray</string-name>
          <email>gorkem.giray@kokteyl.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Arif Ersin</string-name>
          <email>arif.ersin@kokteyl.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Cem ÇatÕ kkaú</string-name>
          <email>cem.catikkas@kokteyl.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Sena Koçer</string-name>
          <email>sena.kocer@kokteyl.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Tolga ù eremet</string-name>
          <email>tolga.seremet@kokteyl.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Murat Osman ÜnalÕ r</string-name>
          <email>murat.osman.unalir@ege.edu.tr</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Anahtar Kelimeler: YazOÕ m Mimarisi Evrimi, YazÕO m Mimari TasarÕP Kalite Özelli÷ i</institution>
          ,
          <addr-line>Mobil ReklamcÕkO</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Ege Üniversitesi</institution>
          ,
          <addr-line>Bilgisayar Mühendisli÷ i Bölümü, ø zmir</addr-line>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Kokteyl A.ù .</institution>
          , ø
          <addr-line>stanbul</addr-line>
          ,
          <country country="TR">Türkiye</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Özet. Mobil cihazlarÕn ve uygulamalaÕnr yaygÕnla ú masÕyla birlikte mobil reklamcÕkO sektörünün önemi de son y Õllarda artm rWÕú. Mobil reklamc ÕOk iú inin merkezinde yazÕOm sistemleri bulunmaktad Õr. Performans gibi kalite özellikleri gereksinimleri zorla yÕF hale gelen mobil reklamcÕkO sektöründeki yaz ÕOm sistemleri için bu deúL÷ imlere paralel olarak çözümler üretilmesi gerekmektedir. Bu bildiride bir reklam aracÕV yaz ÕOnQP de úL÷ en iú levsel ve kalite özellikleri gereksinimleri do÷ rultusunda mimarisinin nasÕ l evrildi÷ i anlatÕlmaktad Õr. Ortaya oÕ kan, performans baOÕú÷ alt Õnda sfÕQland UÕ labilecek problemlere literatürde bulunan mimari tasarÕm desenleri ve tasaÕ mr taktikleri kullanÕlarak çözümler üretilmiú tir.</p>
      </abstract>
      <kwd-group>
        <kwd>Software Architecture Evolution</kwd>
        <kwd>Software Architecture Design</kwd>
        <kwd>Quality Attribute</kwd>
        <kwd>Mobile Advertising</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Giriú</title>
      <p>Gerek dünyada gerekse Türkiye’de son birkaÕ çlday mobil cihazl aÕnr kulla nPÕ
oldukça yaygÕ nlaWPÕú r. Bu cihazlarÕ n kullanÕF lar tarafÕ ndan benimsenmesinin temel
nedenlerinden biri bu cihazlar üzerinde Õú çaanl uygulamalarÕn sa yÕQV n artmasÕ,
çeú itlenmesi ve ku lÕFlaarn Õ n birçok gereksinimini Õú lkaamralarÕ na ya rÕdmcÕ
olmalarÕG r. Mobil uygulamalaÕrn kullanQPÕ n artma sÕyla da çevrimiçi reklam cOkÕ
sektöründe mobil kanallara ÷Õ arlÕk verilmeye baúlanmWÕú r. Bu b÷alamda mobil
uygulamada reklam gösterimini destekleyen çok saÕ yda reklam a÷Õ ortaya çÕkmÕúW r.
Bu reklam ÷ alarQnÕ temel amac Õ reklam verenler ile reklam Õ nyalayyanlar (bu
durumda mobil uygulamalar) aÕrnadsa bir köprü kurmÕ ark.t Reklam ÷laar QÕ n
sayÕQV n artmasÕyla birlikte de çok sÕdaay reklam aÕ÷ ile reklam yayÕnlayanlar
arasÕ nda köprü kurma görevini reklam aracÕ larÕ üstlenmeye baú lamÕúW r.</p>
      <p>Mobil çevrimiçi reklamcOÕk sektörü tamamen yaz ÕmO üzerinde yap Õland UÕ lmWÕú r.
Çevrimiçi reklam a÷larÕ, reklam aracÕ larÕ ve reklam ya yÕnc Õ larÕ yazÕOm sistemleri
aracOy÷Õla bu sektör içindeki görevlerini yerine getirmektedir. Dolay ÕV yla yazÕO m
mühendisli÷ i kapsamÕndaki tüm temel etkinlikler mobil çevrimiçi reklam aO÷Õrac
yazÕOmlar Õ nda da gerçekleú tirilmelidir.</p>
      <p>Bu çalÕú mada Kokteyl ú irketinin reklam aracÕO k yazQPÕO n mimari evrimi yazmÕO
mühendisli÷ i literatüründeki çalÕú malarla ba÷ lantÕ kurularak anlat Õ lmWÕú r.</p>
      <p>ø kinci bölüm Kokteylú irketi, mobil çevrimiçi rekla mOÕck sektörü veú irketin
reklam aracÕV yaz PÕO hakk Õ nda genel bir bilgi vermektedir. Üçüncü bölümde reklam
aracÕV yaQPÕO z n mimari evrimi ve bu evrim sürec÷irnedneilen ö dersler
anlatÕ lmaktadÕ r. Dördüncü ve son bölümde elde edilen sonuçlar ve gelecek çaÕú l malar
sunulmuú tur.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Arka Plan</title>
      <p>Bu bölümde reklam arac÷ÕO yazQPÕO geliú tiren ve iú leten Kokteyl ú irketi hakkÕ nda
genel bilgi verilmú i, ú irketin yer ald÷Õ mobil reklam sektörü vúeirketin ya zÕO m
ürünleri ta nlÕWmWÕú r. Son alt bölümde ise yÕmOaz mimarisi evrimi çalÕú ma ala nÕ
hakkÕ nda kÕ saca bilgi verilmiú tir.
2.1</p>
      <p>iùrket Hakk Õ nda Genel Bilgi
Kokteyl ú irketi 2002 ÕO ynda web tabÕanl uygulamalara odaklanmak üzere
kurulmuú tur. SonransdÕ a mobil uygula mÕnalar ve bulut teknolojilerinin
yaygÕnla ú masÕyla birlikte ú irketin oda÷Õ web, mobil ve bulut uygulamalaÕnra do÷ ru
evrilmiú tir. ù irket çok sayÕda yaz ÕO m ürününü gel iú tirmiú ve hizmete sunm uútur. Bu
ürünlerden en önemlisi mackolik uygulamasÕG r. Bu uygulama web ve mobil kanallar
üzerinden spor etkinlikleriyle ilgili bilgiler ve istatistiksel veriler sunma kÕrt.adBu
uygulamanÕ n bir kÕ smÕ 2012’de geri kalanÕ da 2016 yÕO nda øngiltere’deki bir medya
ú irketi tar aÕnfdan satÕn aÕnlmWÕú r. 2008 ÕO yndan bú alayarak ú irket çevrimiçi
reklamcOÕk sektörüne girmúi ve zaman içinde bir rekla mÕV yarzacPÕO
geliú tirmiú tir. ù irket 2016 ÕO yndan
geliú tirilmesine ve iú letilmesine yo÷ unlaWÕPú
bu
yana
bu
reklam ÕV
n
2.2</p>
      <p>Mobil Reklam Sektörü
Çevrimiçi reklam sektöründeki ana paydúlaar ù ekil 1’de gösterilmektedir.Reklam
verenler, reklam a÷ larÕ na ürünleri ve/veya hizmetleri haÕ knkda tüketicilere bilgi
vermek için reklam vermektedirlerY.ayÕ ncÕ lar, reklam a÷lar Õ ndan reklam talep
etmekte ve reklam a÷lar Õ yaÕ yncÕ ya mevcut durumdaki en uygun Õ reklam
sa÷lamaktad Õ r. Uygunluk konusundaki karar birçok ÷Lú dkeene (ya yÕncQÕ n hangi
uygulama oldu÷u, son kullan ÕF hakkÕ ndaki bilgiler, uygulamanÕ n çal÷ÕúW cihaz gibi)
ba÷OÕ olarak de÷Lú mektedir. YayÕ ncÕ larÕ n reklam a÷ larÕ ndan do÷ rudan reklam alma sÕ
durumunda bazÕ problemler ortaya Õ çkmaktadÕ r. Teknik açÕndan yayÕ ncÕ uygulama
reklam talep edece÷i tüm reklam a÷lar Õ yla entegre olmak zorundaÕ dr. úø amaçla rÕ
açÕV ndan bakÕ ldÕ÷ nda bir yayÕ ncÕ QÕ n birçok reklam a÷Õ ndan optimum reklamÕ (en
fazla geliri getirecek reklam) alamamasÕ durumunda gelir kaybÕ yaú ayacaktÕ r. Reklam
aracÕ larÕ birçok reklam a÷Õ ile entegre olarak optimum rekla mÕsa ÷ lama konusunda
uzmanlaú maktadÕ r. Böylece yayÕ ncÕ larÕ n reklam gelirlerini aÕrmtt asÕ na yar dÕmcÕ
olmaktadÕ r. Teknik a çÕdan ise çok saÕyda reklam aÕ÷ ile entegre olmaÕnn getird i÷ i
karmaÕkúlÕk reklam aracÕV tara fÕndan yönetilmekte ve yayÕ ncÕ larÕ n sadece reklam
aracÕV ile entegre olmÕ alaryeterli olmakt aÕrd. Son kullanFÕ lar ise yayÕ ncÕ
uygulamalarÕ kullanarak reklamlaÕ r görüntülemekte ve bu reklamlara Õkúar zaman
zaman bir davra nÕú (reklama Õtklama, uygulama indirme ve kurma, ürün sÕ ant alma
gibi) sergilemektedir. Bu tür davranÕú lar yayÕ ncÕ lara gelir sa÷ lamaktadÕ r.</p>
      <p>Reklam
Veren
reklam
verir
reklam talep eder
reklam saŒ lar
davranƔŦ sergiler (reklama tŦ klama, uygulama indirme ve kurma,
ürün satŦ n al ma, vs.)</p>
      <p>Son
KullanŦĐ
ù ekil 1. Çevrimiçi reklamcÕO k sektöründeki ana paydaú lar.</p>
      <p>Reklam AŒŦ
r
e
d
e
p
e
l
a
t
m
a
l
k
e
r
r
a
Œla
s
m
a
l
k
e
r
ù irketin yazÕO m ürünleri ve bu ürünlerin sektördeki d÷eri payda ú larla olan iliú kileri
ù ekil 2’de gösterilmektedir. ù irketin reklam ara cÕV yaz QPÕO oluú turan iki bil eú en
ú ekilde yeúil renk ile gösteril mútir. Reklam AraÕV c Yaz QPÕO n (RAY) sunucu
uygulamasÕ , reklam ÷alarQÕ n yazÕOm geli ú tirme kitlerini (YKG) içermektedir. Bu
YKG’ler aracÕO÷ yla sunucu uygulama sÕ reklam a÷lar Õ ndan reklam talep etmekte ve
reklam almakta dÕr. Ya yÕncÕ uygulamalar ise RAY’nin YKG’sini uygulamaQÕlanr
içine yerl eútirerek RAY’den reklam talep etmekte ve almaÕrklatar.d Bir önceki
bölümde anlatÕld Õ÷ gibi, teknik açÕdan RAY birçok reklam aÕ÷ ile entegre olman Õ n
getirdi÷ i karmaÕkúl Õ÷ yayÕnc Õ uygulamalara saydam hale getirmektedir. øú amaçlarÕ
açÕV ndan ise RAY birçok reklam Õ÷ andan sa÷ ladÕ÷ reklamlar arasÕndan en uygun
reklamÕ yaÕnyc Õ uygulamaya göndererek reklam gelirlerin iUÕn lmasaQÕrtt
sa÷lamaktadÕ r.</p>
      <p>Reklam Ara cÕV Uygulamas Õ birçok iú levsel gereksinimi belirli kalite özelliklerini
sa÷ layarak ve bazÕ k ÕVtlar alt Õ nda karÕúlamaktad Õ r. RAY’nin mevcut mimarisi zaman
içinde birçok nedenden dolayÕ (de ÷Lú iklik istekleri, yaú anan problemler gibi) evrilerek
bugünkü halini almWÕú r.
3</p>
    </sec>
    <sec id="sec-3">
      <title>Reklam AracÕV</title>
      <p>YazÕOPQ</p>
      <p>
        n Mimari Evrimi
Bir yazÕO m sisteminin mimarisini belirleyen gereksinimler birçok biçimde kaPÕú r za
Õkomaktad Õ r: metinler, modeller, mevcut sistemler, kullÕamn senaryola rÕ, kullanÕ m
hikayeleri vs. Bu gereksinimler içinde mimari aÕdçan önemli gereksinimler mimari
kararlarÕ etkilemektedir. Gereksinimler, biçimlerinden ve kaynakÕ lnadran ba÷Õ msÕ z
olarak üç ana sQÕ fta incelenebilmektedir [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]:
1. øú levsel gereksinimler: Sistemin ne yapmasÕ gerekti÷ ini, sistemin nasÕl davranmas Õ
gerekti÷ini ya da bir girdiye nas Õ l bir tepki vermesi gerekti÷ ini tanÕ mlar.
2. Kalite özellikleri gereksinimleri (iú levsel olmayan gereksinimler): úø levsel
gereksinimlerin ya da ÕO yamz sisteminin niteliklerini belirtir. Búliervseil
gereksinimin niteli÷ i o iú levin ne kadar zamanda gerçekl eútirilmesi gerekti÷ ini ya
da hatalÕ bir veri giriú ine karÕú ne kadar dirençli olaca Q÷Õ belirtebilir. Bir yazÕmO
sisteminin niteili÷ ise sistemin ne kadar zamÕ anda ortamcaanl
konuú landUÕ labilece÷ ini ya da ilú etim maliyetleri için bir ÕQ s r olarak kaPÕúr za
Õkoabilir.
3. .ÕtVlar: Tas aÕrm yaparken mutlaka uyulÕmasgereken srQÕlamalara ú iaret
etmektedir. Örne÷in, belli bir programlama dilini kullanma zorunlul u÷ , mevcut
bir modülün kullanÕ lma zorunlulu÷u gibi.
      </p>
      <p>
        YazOÕ m mimarisi tasaPÕr ve gerçekúletirimi üzerinde derin etkileri olan
yokluklarÕ durumunda mimarinin çok farklÕ olabilece ÷ i gereksinimler mimari a çÕdan
önemli gereksinimler olarak ÕtamnlanmaktadÕ r [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. RAY’nin mimari tQÕPasar
etkileyen gereksinimler aÕD÷ú daki gibidir:
x G1. Ara cÕO k ile ilgili gereksinimler: Hangi rekla mÕ÷ ndaan hangi Õ srada
reklam istenece÷ ini belirleyen optimize edilmiú karar a÷ acQÕ n oluú turulmasQÕ
ve reklam gösterim istatistiklerini istemcilerden t oQÕplanmiaçseren
gereksinimler.
      </p>
      <p>o G1.1. ø stemcilerden gelen talepler d÷ orultusunda optimize edilmú i
karar a÷ acQÕ n istemcilere gönderilmesi
o G1.2. Reklam gösterim istatistiklerinin sunucu</p>
      <p>saklanmasÕ
x G2. Analitik gereksinimler: Reklam gösterim istatistiklerinin kullanÕF(mobil
cihaz) ba zÕnda gruplanma sQÕ ve kullaÕlFnar/cihazlar hakk Õ ndaki bilgilerin
saklanmasQÕ içeren gereksinimler.</p>
      <p>o G2.1. KullanÕF /cihaz yaratÕ lmasÕ ya da güncellenmesi
o G2.2. KullanQÕF n uygulama içinde yapÕ÷ t sat Õ n alma iúlemlerinin
izlenmesi
o G2.3. KullanÕF dan/cihazdan reklam isteklerinin gelmesi
x G3. Kampanya izleme gereksinimleri:
o G3.1. Bir iste÷ in ilgili kayna÷ a yönlendirilmesi
o G3.2. Bir istek yönlendirildikten sonra gerekli</p>
      <p>güncellenmesi</p>
      <p>
        Birçok y aÕOmz sisteminin mimarisi, yeni istekler, yeni kalit e÷ i
gereksinimleri, teknolojideki de÷Lú imler ya da baú ka nedenlerle de÷Lú ikli÷e u ÷ rar [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
Nedeni ne olursa olsun ÕOmyaz sektöründeki projelerde mimarinin evrilmesi
ola÷ andÕ r.
uygÕ unldaamas
      </p>
      <p>ve
istatistiklerin
özelli
3.1</p>
      <sec id="sec-3-1">
        <title>AracÕO k Bileú eninin Mimarisinin Evrimi</title>
        <p>Yekpare
bileú enden
mimariye sahip bir yÕmOaz sistemi tüm iú levleri yerine getiren tek bir
ol uúur. Sistemde yaÕlpacak her de÷Lú iklikte sistemin tama mQÕ n yeni
versiyonu
tasarlanmÕú
programlama
istemcilere
kullanÕ lmWÕú
konú ulandUOÕ r. ù ekil 3’te RAY’nin yekpare mimari úÕP yaykllaa
ilk mimarisi gösterilmektedir. Bu mimaride tümú leivler bir uygulama</p>
        <p>arayüzü (UPA – API: Application Programming Interface)
sunulm uútur. Veri saklama için ú kiliisel bir veritabaÕ n (PostgreSQL)
r.
ile</p>
        <p>Yekpare mimarinin bir avantajÕ , de÷Lú ikliklerin canlÕ sistemde devreye alÕ nmasQÕ n
görece kolay olmaÕG s r (bir UPA’Õnn kon uú landUÕ lmasÕ). Bunun yanÕ nda ya zÕO m
sisteminin a nÕúlalmasQÕ n kolay oÕlmas da haÕ tnalar bulunmQÕ as da
kolaylaWÕú rmaktadÕ r. Di÷ er taraftan istemcilerden gelen isteklerin artma sÕyla ve belirli
zaman araÕkllarÕ nda y÷uonla ú masÕ yla birlikte yekpare mimarinin performans
açÕV ndan problemleri ortaya Õkçmaya ba ú lamWÕú r. G1.1 ve G1.2 gereksinimlerinin
gerektirdi÷ i çözümler birbirinden farÕ klolmasÕ na r a÷ men (ilkinde veritabaÕnndan
okuma, ikincisinde veritaba nÕna yazma úilemleri yo÷ un) yekpare mimari nedeniyle
aynÕ mimari çözüm uygulanmak zorunda ÕknamlÕúW r. UPA’nÕ n sÕk güncellenmesi
gereken durumlarda hangi iú levde güncelleme yapÕO rsa yapÕls Õ n tüm UPA’nÕ n belirli
bir süre devre Õú d kalma sÕ söz konusu olmaktaÕ dr. Bunun yanÕnda zaman zaman
reklam gösterim istatistiklerinin saklanmasÕ için veritaban Õ na gelen yazma isteklerinin
sunucuda oluú turdu÷u yo ÷unluk nedeniyle karar a ÷ac Õ gönderim taleplerine de cevap
verilememe durumu ortaya çÕkm WÕú r.</p>
        <p>
          Performans problemlerini çözmek için ilgilerin aÕO÷ yr(separation of concerns)
ilkesi [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] do÷ rultusunda veritabanÕ ndan okuma ve veritaba nÕna yazma iú lemleri ayrÕ
UPA ile yaÕlpmaya baú lanmWÕú r. Okuma ú ilemlerinde performan sÕ arttÕ rmak için
içerik dW÷Õ a m Õ÷ a ( ø ÇA – CDN: Content Delivery Network) Õ lmkuayllaan
baú lanmWÕú r [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]. ø ÇA kullanPÕ ile birlikte istemci taleplerine dönü ú performan sÕ
artmÕú ve okuma ilúemlerinin er iú ilebilir olma yüzdesinde, literatürdeki bulgularla
paralel olarak [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], yükselme gözlemlenmú itir. AyrÕca hem okuma iú lemleri hem de
yazma úi lemleri için gelen istekler yük dengeleyiciler (load balancer) ileÕ farkl
sunuculara d aW÷Õ lmaya b aú lanmÕúW r. ù ekil 4’te yekpare biúlenin iki sorumlulua÷
sahip iki ayrÕ bile ú en haline getirildi÷ i mimari gösterilmektedir.
        </p>
        <p>UPA
(Okuma
Ɣŝ lemleri)</p>
        <p>UPA
(Yazma
Ɣŝ lemleri)
ù ekil 4.ø kinci aú amadaki iki ana bileú enli mimari.</p>
        <p>
          Okuma ve yazma sorumluluklaQÕ r n ayrÕ bile ú enlere verilmesinden sonra yazma
Lú lemlerinde sistemin ÷ yuon kullaÕ nld÷Õ zamanlarda performans problemleri
yaú anmaya baú landÕ÷ görülm üú tür. Her yazma talebi verita bÕanyönetim sistemi
tarafÕ ndan karÕú landÕ ktan sonra istemcilere cevap dönülmesi, tepki süresini veritabanÕ
sunucusunun performansÕna b a÷OÕ kÕlmÕúW r. Dola yÕV yla veritaba nÕ sunucusundaki
problemlerde ya da yaOÕúkvlarda istemcilerin taleplerine tepki süresi artmaya
baú lamWÕú r. VeritabanÕ nda saklanan verinin her an tutarÕ lolma gereksinimi olmadÕ÷
için gelen yazma isteklerinin bir kuyrukta biriktirilmesi v eúçiler tara fÕndan belirli
aralÕklarla veritaban Õ na yazÕlmas Õ tercih edilmiú tir. Web-Kuyruk -øú çi mimari stiline
[
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] kaÕOúr k gelen bu mimari tÕamsar sonucunda sistemin mimari sùiekil 5’te
gösterilmektedir.
        </p>
        <p>7 stemci
7 çerik
DaŦƚŒ m
ŦŒ
(CDN)</p>
        <p>UPA
(Okuma
Ɣŝ lemleri)</p>
        <p>UPA
(Yazma
Ɣŝ lemleri)</p>
        <p>Kuyruk
Ɣ7 çi (Worker)
7 liƔ kisel VeritabanŦ
ù ekil 5. Üçüncü aú amadaki kuyruk ve iú çi bileú enleri eklenmiú ekliyle mimari.</p>
        <p>
          Bu mimarinin gerçekú letirimi için kúout zamanÕ l programlamayÕ destekleyen
Golang [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] dili kul lÕalmnWÕú r. Yazma lieúmlerinden sorumlu UPA gelen talebi
kuyru÷a ekler ve istemciye cevap dönmektedir. Bir veri birlú etirici kuyru÷u kontrol
eder; veriyi biriktirir ve belirli bir sürede ya da veri belirli bir hacme uÕ÷Wú la zaman
veriyi úiçiye gönderir. øú çi birikmiú veriyi kuyruktan Õ ra;l geçici bir veritabÕ an
tablosuna bu veriyi yazar; geçici tablodaki veriyi kalÕF tabloya ekler ve geçici tabloyu
temizler. øú çi, veri transferi ve ortak tablolara veri yazma iú iyle u÷ raWÕ÷ú için olas Õ bir
kilitlenmeyi (deadlock) engellemek için tek bir ú çii kullanÕ lmaktadÕ r. Bu mimarinin
olumsuz taraÕf ise iúçinin kuyr u÷ a eklenen veriyi yeterince ÕzlhÕ biçimde kalÕF
tablolara taÕyúamamas Õ durumunda biriken verinin bellek ve ú liemci kaynaklarÕ nda
darbo÷az olu ú turmasÕ durumuyla sonuçlanmakta dÕr. Bu problemi gidermek için ise
veriyi kuyruktan geçici tablolara aktarmaú ii ve geçici tablodan kaÕFl tabloya veri
yazma iú i farkÕl süreçlere payl aUWÕú lmWÕú r. Bu tasaÕ mrda veriyi kuyruktan geçici
tablolara aktarma úiini birden fazla süreç üstlenebilmektedir. Geçici tablodan kÕFal
tabloya veri aktaPÕr ise yine bir süreç ile s÷alanmaktadÕ r. Mimarinin bu son
Dú amadaki haliyle reklam gösterim isteklerinin sorunsuz biçim dÕúelankmaarsÕ
sa÷lanmaktad Õ r.
3.2
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>Analitik Bileú eninin Mimarisinin Evrimi</title>
        <p>
          Analitik bileú eninin temel görevi kulla nÕF bazlÕ verinin istemcilerden toplanmas Õ ve
saklanmasÕG r. Bu temel görev yeni kulÕFlanlarÕ n ka yÕtlarQÕ n yaratÕlmasÕ (G2.1),
gerekti÷ inde bilgilerinin güncellenmesi (iú letim sistemi, ülke, vs gibi) (G2.2), yayÕnc Õ
uygulamada yapÕ÷ t satnÕ alma verisinin toplan mÕasve uygulamada gösterilen
reklamlarÕ n verisinin toplanmQÕ as kapsamaktaÕdr. AraÕO c k bilú eeninde reklam
gösterim verisi reklam ÷ alarÕ ba zÕnda sakla nÕrken analitik bilú eende bu verilerin
kullanÕF bazÕ nda saklanmasÕ gerekmektedir. Bu gereksinim, mimarinin yo÷ un bir veri
yazma ú iyle bú aa Õ çkabilecek ú ekilde tasarlanm aQÕs ve gerçeúktlierilmesini
gerektirmektedir. Bu gereksinimi kúÕ arlayabilmek için NoSQL bir verita bÕan[
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]
kullanÕ lmWÕú r.
        </p>
        <p>
          Bu bil eúenin yazma görevini yerine getirmesi için kuyruk ú çvie biil eúenleri
kullanÕ lmWÕú r. Gelen istekler bir kuyrukta biriktirilmekte ve toplu halde bir NoSQL
veritabanÕ olan MongoDB’ye [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] yÕ alzmaktadÕ r. Bu çözüm yeni kullÕF ankaydÕ
yaratÕ lmasÕ, kullanÕF bilgilerinin güncellenmesi gibi görevler için gereksinimi
karÕúlamWÕú r. Ancak Õnyca yÕ uygulamada yÕlanp saÕ tn alma le miú lerinin
do÷ rulanmasÕ görevinin yerine getirilmesi noktasÕ nda bu mimaride problemler ortaya
Õkom WÕú r.
        </p>
        <p>Bir satÕ n alma iú leminin, bir kullanÕF adÕ na veritabanÕ na kaydedilmeden önce bu
satÕ n alma ú ileminin sahte olup olmaQ÷Õd n kontrol edilmesi gerekmektedir. Bu
kontrolü yapmak için Õ nApple’ve GoÕ ongle’ sun÷udu servislerden
faydalanÕ lmaktadÕ r. Ancak sistemin genel performansÕ bu servislerin performanÕ sna
do÷ rudan baOÕ÷ hale gelmúi tir. BazÕ durumlarda bu servislerdeki yav aOÕúktan dolay Õ
sistemin genel performanÕsnda düú gözlemlenm iú tir. Bunu engellemek için sÕant
alma iú leminin kontrolünü gerçekleútiren iú lev ay rÕ bir bileú en haline getirilmú itir.
Böylece istemciden Õ anlan veriler geçici olarak saklanmakta, istemciye
dönülmekte ve bkaaú bir bú ielen tar aÕnfdan s aÕnt alma leimúinin kontrolü
yapÕ lmaktadÕ r. Bu kontrolden cevap geldikten sonra hem ú kiliisel hem de NoSQL
veritabanÕ nda gerekli alanlar güncellenmektedir. Senkron olarak yapÕlúalenrin i
asenkron hale getirilmesi performans artÕú na neden olmuú tur.</p>
        <p>Analitik bileú eninin karÕúlad Õ÷ bir baú ka gereksinim yayÕnc Õ uygulama sahiplerine
uygulamalarQÕ belirli bir süre içerisinde aktif olarak kullanan tekil kullaÕF nsay ÕQV
vermektir. Mobil reklam cÕO k sektöründe de bu sayÕlar genellikle 1, 7, 14 ve 30 gün
için sa÷ lanmaktadÕ r. Bu sayÕlar Õ sa ÷ lamak için gerekli veriyi saklayan MongoDB’deki
bilgi sorgularken karÕú laúÕ lan zorluklardan dolayÕ son 30 günlük tüm verinin i lúikisel
bir veritaba nÕna ya zÕlmasÕ na karar verilmú itir. Bu da kull aÕFn bazÕl verinin hem
MongoDB’ye hem de iúlkiisel veritabanÕ na ya zÕlma gereklili÷ ini d o÷ urdu. Ancak
iliú kisel veritabanÕna yazma sürelerinin uzu÷nulu nedeniyle y÷oun istek gelen
zamanlarda sistem performans gereksinimlerini karÕú layamadÕ .</p>
        <p>
          Bu problemi gidermek için hemÕ zlÕ h yazma imk aÕn veren hem de verinin
raporlanmasÕ için gerekli yetenekleri ÷ lasya n Redis veritabÕ an [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] sisteme
eklenmiú tir. Redis veritab aÕn kulla nÕF bazÕl verileri gün içinde saklamakta gün
sonunda ise bu veriler iliú kisel veritabanÕ na aktarÕlmaktad Õ r. Bu de÷Lú iklik ile birlikte
hem kullaÕF n bazÕl verinin saklan mÕas hem de ist÷eindie raporlanm aÕs
gereksinimleri karÕú lanmWÕú r.
3.3
        </p>
      </sec>
      <sec id="sec-3-3">
        <title>Kampanya ø zleme Bileú eninin Mimarisi</title>
        <p>Bu bileú en, kritik müú terilerin (yayÕnc Õ uygulamalar) RAY’den ald Õ÷ linkler ile kendi
uygulamalarQÕ n reklamlarÕ ndan aldÕ klarÕ tÕ klamalarÕ takip ederek hangi kaynaktan ne
tür kullanÕF ald Õklar QÕ analiz etmelerini ÷ lsaamaktadÕ r. Reklam verenin para
ödeyerek verd÷i i reklamlara Õktland Õ÷ nda öncelikle bu biúleenin sund u÷ u servis
ça÷UÕO r. DolayÕV yla bu bil eú enin yüksek oranda kulla nÕlabilir olmasÕ gerekmektedir.
Bu servis tetiklendikten sonra takip için gerekli bilgiler toÕprlanve Google veya
Apple uygulama dükkanlarÕndaki uygulama sayfa sÕna yönlendirme ya pÕO r. Servisin
çalÕú r durumda olmama sÕ durumunda bu yönlendirme yapÕlamaz ve reklam verenin
kullanÕF kazanmak için yapt Õ÷ reklam búoa gitmiú olur. Bu önemli gereksinimi
karúÕ layan servis Google Cloud’da bÕ anrdUÕ lmaktadÕ r. Bu servise gelen isteklerin
yerine getirilmesi için ilgili verinin sürekli tuÕ taorlmasÕ gerekmektedir. Bundan
dolayÕ bir iste÷e gerekli tüm adÕ mlardan geçildikten sonra cevap dönülmektedir.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Sonuçlar ve Gelecek ÇalúÕ malar</title>
      <p>
        Yekpare bir mimari tasaÕmr ile búalayan RAY sunucu uygulam aÕ,s üç farkÕ l ana
bileú en ve üç yan süreç olarak búötlüürn.müHer búileende gereksinimlerin
farklÕO klarÕ ve servislerin bu farklÕO klarÕ na uygun tasarÕ m yapma fikri bulunmaktadÕ r.
Trafik y o÷unlu ÷u artt Õ kça ana bilú eenlerin daha küçük parçalara aÕylmra ihtiya cÕ
gündeme gelecektir. Bu da aslÕnda yekpare mimariden mikroservis mimarisine d o÷ ru
bir evrim [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] anlamÕ na gelmektedir. Mikroservislerin içinde barÕndÕ rdÕ÷ takip etme
(loglama), performans ölçümü, bir ist÷ei fark lÕ servisler arasÕ nda izleyebilme, hata
ayÕklama ve yayÕmlama konusundaki zorluklaQÕ r çözmek için bir tÕamk araçlar
gerekmektedir. Mevcut mimaride log dosyalarQÕ farklÕ sunuculardan ortak bir yerde
toplayÕ p iú lemek bir sorun haline gel mútir. Önümüzdeki dönemde trafik daha da
arttÕ kça performan sÕ izlemek ve log dosyaQÕlar analiz ederek sorun olan yerleri
bulabilmek daha kritik hale gelecektir. Bu sorunlarÕ çözmek için ELK (Elastic Search,
Logstash, Kibana) altyapÕQV [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] sistemimize entegre etmeyi planlanmaktadÕ r.
      </p>
      <p>
        Mimarinin evrim sürecinde ilgilerin ay r÷ÕO ilkesiyle ve tutar lÕkO gereksinimlerine
göre yapÕlan, iú lemlerin istemci isteklerinin yo÷ unlu÷ undan ba÷Õ msÕ z hale getirilmesi
Golang dili kullanÕ larak yapÕ lmWÕú r. Her ne kadar bu bileúenler yüksek performansla
çalÕú abilseler de Golang’in özelliklerinden kaynaklanan ba zÕgüvenilirlik problemleri
bulunmaktadÕ r. Örne÷in Golang’de bir kuyruktan okunan bir mesaj okund÷u anda
silinmekte ve mesaÕ jn iú lenmesi sÕrasÕ nda bir sorun o lúutu÷unda bu mesaja tekrar
eriú ilememektedir. Benzer ú ekilde çalÕú ma zamanÕ nda zaman aÕPú hatasÕ oldu÷ unda
o hata yÕ iú leyerek bir mesaj göndermek, oú i i kolayca durdurmak gibi özellikler
mevcut de÷ ildir. Kuyruk-iú çi mimarisi içeren kritik bilúeenlerin gelecekte Erlang ile
geliú tirilmesi planlanmaktadÕ r. Erlang’da bulunan OTP kütüphanesi bu problemler
için çözüm içermesinin yaÕ nnda yüksek oranda kullaÕ nlabilir durumda olma ve ú e
zamanlÕ iú lem yapabilme konularÕ nda da çeú itli avantajlar sa÷lamaktad Õ r [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ][
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
      </p>
      <p>
        Daha güvenilir kÕF al kuyruklar için de Kafka servisinin entegre edilmesi
planlanmaktadÕ r. Bir publish/subscribe servisi olan Kafka [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], bellQÕ i sftaki iú leri
takip eden iú çiler ve bu sÕQ flara yayÕn yapan da WF÷Õ mimarisini, kuyruktaki mesajlar
üzerinde Golang’de olmayan birçok özellik ekleyerek s÷laamaktad Õ r. Bunun yanÕ nda
Kafka’ya yazÕlan mesajlar, servisin yeniden ba ú latÕ lmasÕ veya çökmesi s Õras Õ nda diske
yazÕlarak veri kaybÕ önlenmi ú olmaktadÕ r. Golang’in kuyruklaÕr bellekte saklandÕ÷
için servislerin istem Õú dnda yeniden búalatÕ lmasÕ gibi durumlarda veri kaÕyb
yaú anabilmektedir.
      </p>
    </sec>
    <sec id="sec-5">
      <title>Kaynakça</title>
      <p>13:
649.
the
and
Data</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Barnes</surname>
            ,
            <given-names>J.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Garlan</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Schmerl</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Softw Syst Model</surname>
          </string-name>
          (
          <year>2014</year>
          ) https://doi.org/10.1007/s10270-012-0301-9
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>Len</given-names>
            <surname>Bass</surname>
          </string-name>
          , Paul Clements, and
          <string-name>
            <given-names>Rick</given-names>
            <surname>Kazman</surname>
          </string-name>
          .
          <year>2012</year>
          .
          <article-title>Software Architecture in Practice (3rd ed</article-title>
          .).
          <string-name>
            <surname>Addison-Wesley Professional</surname>
          </string-name>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>Cloud</given-names>
            <surname>Application Architecture Guide</surname>
          </string-name>
          , Mike Wasson,
          <source>Masashi Narumoto and Microsoft Patterns and Practices team</source>
          ,
          <year>2017</year>
          ,
          <string-name>
            <given-names>Microsoft</given-names>
            <surname>Corporation</surname>
          </string-name>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Balachander</given-names>
            <surname>Krishnamurthy</surname>
          </string-name>
          , Craig Wills,
          <string-name>
            <given-names>and Yin</given-names>
            <surname>Zhang</surname>
          </string-name>
          .
          <year>2001</year>
          .
          <article-title>On the use performance of content distribution networks</article-title>
          .
          <source>In Proceedings of the 1st ACM SIGCOMM Workshop on Internet measurement (IMW '01)</source>
          . ACM, New York, NY, USA,
          <fpage>169</fpage>
          -
          <lpage>182</lpage>
          . DOI: https://doi.org/10.1145/505202.505224
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Hürsch</surname>
          </string-name>
          , Walter L., and Cristina Videira Lopes. Separation of concerns. (
          <year>1995</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6. https://golang.org/ref/spec
          <source>Eriú im tarihi: 18 Haziran</source>
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>Rick</given-names>
            <surname>Cattell</surname>
          </string-name>
          .
          <year>2011</year>
          .
          <article-title>Scalable SQL and NoSQL data stores</article-title>
          .
          <source>SIGMOD Rec</source>
          .
          <volume>39</volume>
          ,
          <issue>4</issue>
          (May
          <year>2011</year>
          ),
          <fpage>12</fpage>
          -
          <lpage>27</lpage>
          . DOI: https://doi.org/10.1145/1978915.1978919
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8. Jing Han,
          <string-name>
            <surname>Haihong</surname>
            <given-names>E</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Guan</surname>
            <given-names>Le</given-names>
          </string-name>
          and
          <string-name>
            <given-names>Jian</given-names>
            <surname>Du</surname>
          </string-name>
          ,
          <article-title>"</article-title>
          <source>Survey on NoSQL database," 2011 6th International Conference on Pervasive Computing and Applications</source>
          , Port Elizabeth,
          <year>2011</year>
          , pp.
          <fpage>363</fpage>
          -
          <lpage>366</lpage>
          . doi:
          <volume>10</volume>
          .1109/ICPCA.
          <year>2011</year>
          .6106531
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>S.</given-names>
            <surname>Vinoski</surname>
          </string-name>
          ,
          <article-title>"Concurrency with Erlang,"</article-title>
          <source>in IEEE Internet Computing</source>
          , vol.
          <volume>11</volume>
          , no.
          <issue>5</issue>
          , pp.
          <fpage>90</fpage>
          -
          <lpage>93</lpage>
          ,
          <string-name>
            <surname>Sept</surname>
          </string-name>
          .-Oct.
          <year>2007</year>
          . doi:
          <volume>10</volume>
          .1109/MIC.
          <year>2007</year>
          .104
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>Jim</given-names>
            <surname>Larson</surname>
          </string-name>
          .
          <year>2009</year>
          .
          <article-title>Erlang for concurrent programming</article-title>
          .
          <source>Commun. ACM 52</source>
          ,
          <issue>3</issue>
          (March
          <year>2009</year>
          ),
          <fpage>48</fpage>
          -
          <lpage>56</lpage>
          . DOI: https://doi.org/10.1145/1467247.1467263
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Kreps</surname>
            , Jay,
            <given-names>Neha</given-names>
          </string-name>
          <string-name>
            <surname>Narkhede</surname>
            , and
            <given-names>Jun</given-names>
          </string-name>
          <string-name>
            <surname>Rao</surname>
          </string-name>
          .
          <article-title>"Kafka: A distributed messaging system for log processing</article-title>
          .
          <source>" Proceedings of the NetDB</source>
          .
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>J. Bai</surname>
          </string-name>
          ,
          <article-title>"Feasibility analysis of big log data real time search based on Hbase and ElasticSearch,"</article-title>
          <source>2013 Ninth International Conference on Natural Computation (ICNC)</source>
          ,
          <year>Shenyang</year>
          ,
          <year>2013</year>
          , pp.
          <fpage>1166</fpage>
          -
          <lpage>1170</lpage>
          . doi:
          <volume>10</volume>
          .1109/ICNC.
          <year>2013</year>
          .6818154
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Villamizar</surname>
          </string-name>
          ,
          <string-name>
            <surname>Mario</surname>
          </string-name>
          , et al.
          <article-title>"Evaluating the monolithic and the microservice architecture pattern to deploy web applications in the cloud</article-title>
          .
          <source>" Computing Colombian Conference (10CCC)</source>
          ,
          <year>2015</year>
          10th. IEEE,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Chodorow</surname>
            , Kristina. MongoDB: The Definitive Guide: Powerful and
            <given-names>Scalable</given-names>
          </string-name>
          <string-name>
            <surname>Storage. " O'Reilly Media</surname>
          </string-name>
          ,
          <source>Inc."</source>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>