Atilla Tanrikulu

I am an experienced software engineer and architect living in Germany. I’m passionate about distributed scalable enterprise web-based microservices/applications and delivering great user experiences. I have created some amazing enterprise-level applications that many people have used and hopefully enjoyed.

Articles

Java Quick Reference Apache Kafka Tutorial Guvenli Kod Gelistirme Making an Enterprise Scale Angular Project Step by Step Nightly SQL Server Database Backup with command line batch file and windows scheduler AOP Framework without proxy pattern IdentityServer Nedir Middleware Pattern With Csharp And Javascript Docker most used commands Online Proje Dokumantasyonu, Docker, Nginx, mdwiki How to use Github Pages for static websites Inheritance with JavaScript, EC6 (ECMAScript 6, ECMAScript 2015) Object oriented javascript and Inheritance Singleton Pattern with Javascript Factory Pattern with Javascript Open terminal here mac os x service IdentityServer4-Angular-6-integration JMater notlari, kurulum ve kullanim Learn Jekyll in 12 Steps Make Mac Application with Automater from sh script Make spotlight index markdown or code files OAuth 2.0 Nedir (RFC6749) Using Custom CSS and Custom JavaScript to an Angular Project Cross Platform Desktop Application With .Net Core 2x and Angular 6x front-end projects with nodejs gulp bower yeoman and angularjs Host Asp.Net Core on Linux with Apache Redis kurulumu ve ayarlari Useful Mac OS Apps Choosing internet connection on multiple interface windows Name Server Kurulumu How to define domain name for your dynamic IP SQL table data compare, and prepare insert satements Useful Git Commands TFS ile Otomatik deployment yapmak Spring Boot Tutorial Sql server icin maliyetli sorgularin tespit edilmesi Arama Motoru Optimizasyonu (SEO) My installed mac apps

JMETER NOTLARI, KURULUM VE KULLANIM

Basliklar

1. JMeter Nedir?

  • JMeter load test (yuk testi) yada stress testi yapmak icin kullanilan, Apache tarafindan gelistirilen ucretsiz bir aractir.
  • JMeter kullanarak, bir web sitesi uzerinde yaptiginiz islemleri kaydederek daha sonra bu kaydi ayni anda binlerce defa calistirabilirsiniz. Bu sayede, test yapacaginiz sistem uzerinde ayni anda binlerce kullanicinin bulunma durumunu simule etmis olursunuz.

  • Kaydederek daha sonra calistirdiginiz test yapisina “Test Senaryosu” yada “Test script” denir.
  • Test scriptler tek kullanici icin kaydedildikten sonra, cok kullanici testleri yapabilmek icin, olusan jmeter test adimlarini amaca uygun sekilde degistirilmesi gerekir.
  • JMeter, test yapilacak sisteme gonderilecek verileri (parametre yada degisken de diyebiliriz) farkli kaynaklardan alabilir.
    • Bir dosya icinden alabilir, genellikle bu dosya csv dosyasi olur, ornegin bir csv dosya icine bin adet kullaniciadi, parola kaydederek, jmeter ayarlarini yaptiktan sonra login testi yapabilirsiniz.
    • Test parametresi olarak, jmeter elemenlerinden bazi veriler alinabilir.
    • Karsidaki sistemin, bir onceki response (cevabindan) ayiklanarak (parse, extrack) alinabilir.

2. JMeter Kurulumu ve Ayarlar

www.apache.org sitesinden son surumu indirilebilir. indirdikten sonra, terminal ekranindan kurulum klasorune gidilerek

  • mac osx icin
     $ sh jmeter
    
  • windows icin
    > jmeter.bat
    

    seklinde calistirilabilir.

  • Windows’ta calistirilirken “bin” klasoru altindaki “jmeter.bat” dosyasini calistirmak yeterli olacaktir,
  • Uygulamanin 32bit calismamasini saglamak lazim, Jre (Java Runtime Environment) 64bit olursa daha iyi olur. bunu anlamak icin windows task manager a bakilabilir. windows 32bit calistirdiklari uygulamanin yanina (32bit) seklinde belirtiyor. Ikici olarak 32bit uygulamalar icin maksimum bellek (RAM) 2048MB tir, daha buyuk bir XMS vererek deneme yapilabilir. yapacaginiz testteki kullanici (thread) sayisina gore memory degerinizi belirleyebilirsiniz.

  • ornegin:
    JVM_ARGS="-Xms4G -Xmx6G"
    echo  "JVM_ARGS: $JVM_ARGS"
    

    seklinde ayar yapiliyor, echo ile console/terminal e bastirilan ayarlari kullanarak baslayacaktir. diger yandan jmeter adinda bir script dosyasi var oradan da detayli ayarlamalar yapabilirsiniz.

3. JMeter test dosyalarini otomatik calistirmak

  • Blazemeter adli siteye jameter scriptini (.jmx dosya) gonderdiginiz zaman, belirli bir ucret karsiliginda istediginiz kadar client IP den test uygulayabilirsiniz.
  • Blazemeter uzerinden yapilan testler sayesinde tamamen gercek ortam simule edilebilir. Request lerin hepsi farkli IP adreslerinden gelecektir.
  • Calistiginiz kurum buna kaynak ayirirsa daha guzel olur.

  • https://blazemeter.com/ : tesetleri otomatik calistiran cloud

4. JMeter Egitimi

  • JMeter hakkinda detayli bilgi edinmek icin asagidaki web adresleri incelenebilir. https://blazemeter.com/resources http://mwebhack.blogspot.com.tr/
  • Benim burada yazdigim makale ise, daha cok ogrendiklerimi unutmamak adina, kendi notlarimdan olusturdugum bir derlemedir.
  • Bana gore test yapabilmek icin bilinmesi gereken minimum bilgiyi icermektedir.

5. Bilinmesi Geken Bazi Kavramlar

1.png

  • JMeter ilk acildiginda, ekranin 2 bolmeden olustugunu gorursunuz.
    • Sol Panel: Test planindaki tum elementleri/objelerin listesini hiyerarsik bir bicimde duzenli olarak gosterir
    • Orta Panel: Sol panelden secilen objelerin ayarlari orta kisimda acilir.
  • Menu de Options/Coose language (Ayarlar/ Dil secimi) dil degistirebilirsiniz. Dil degisimi yaptiginizda, tum ekran arayuzleri sectiginiz dile uygun sekilde acilacaktir. fakat Help/Yardim kismi herzaman ingilizce acilacaktir.
  • Burada ingilizce ekranlar uzerinden anlatim yapilacaktir.
  • JMeter yardim ekranina menuden ulasabilirsiniz. Cok detayli ve cok guzel bir anlatimi vardir.
  • Yardim icin, cok cok guzel bir ozellik ise sudur, sol paneldeki herhangi bir obje uzerinde sag tikladiktan sonra “Help” tiklandiginda, direk olarak ilgili yardim konusuna gitmektedir.
  • JMeter ilk acildiginda, sol panel de iki obje yer alir. “Test Plan”, “WorkBench” bu container lara asagida deginilmistir.
  • JMeter da, sol paneldeki herhangi bir element uzerinde sag tiklayip “Add” kismina gelindiginde,

3.png

mevcut element altina eklenebilecek elementlerin listesi gelmektedir.

  • Thread: User, her bir thread bir kullaniciyi simule eder.

  • Test Plan: JMeter script, yapilacak test scripti icindeki tum objeler bu container da yer alir. ana kapsayicidir. teste yonelik genel ayarlari icerir.

  • Thread Group: User grup, Test adimlarini yerlestirdigimiz container dir, burada conainer icinde bulunan, testin kac kullanici ile yapilacagini ayarlayabiliriz. Play butonuna basildiginda bu element calistirilir. ve icindeki elementler sira ila calistirilir.

  • Samplers: Request yapan elementler (make a request)

  • Config Elements: Browser, caches, cookies, headers, defaults gibi bircok ayarlarin yapilmasini saglayan elementlerdir. (some configurations, simulate like browser, caches, cookies)

  • Timer: Add a delay, gercek ortami simule etmek icin bazi bekleme degerleri eklenebilir.

  • Listener: Reporting, logging, and debugging, yapilan test sonuclarini dinleyip rapor olarak gosteren elemenlerin butunudur.

  • Assertions: Error checking, tekil request/response lardaki bazi kontroller yapmak icin kullanilabilir, ornegin response icinde bir text aratmak ve bu text gelmediginde hata firlatmak gibi.

  • Pre processor: Modify the request, before send, Request yapmadan once bir takim parametrelerin request icine ekleyebiliriz genel olarak ${parametere} seklinde kullanilir. bu parametreler bir onceki response icinden extract edilmis olabilir. veya genel parametre olabilir. Ornegin test ortamindaki tum kullanicilarin sifresi ayni yapilip, Login ekrani request ini yaparken genel parametre olarak eklenebilir. ${password}

  • Post processor: Parse the response, after response received, Request sonucunda aldigimiz Response lar icinde islemler yapmak icin bu elementi kullaniriz. ornegin login requesti sonucunda bize donen response icinde, eger karsidaki sayfa form authentication yapiyorsa ve cookie kullaniyorsa, response icinden Set-Cookie headersini extract (cikarmak) ederek bir sonraki requestlerde kullanmak uzere bir parametreye setlenebilir.

  • Logic Controller: Yazilimsal if, for, while gibi donguler kurulabiliryor

  • WorkBench: Temp working space (test record etc.)

  • Ramp-up: Kac saniyede bir belirtilen kullanici kadar thread canlandiracagini belirler ornegin thred group: 10 olursa ramp-up:10 olursa her saniye 1 thread calistirir toplam 10 saniye sonra tum thread lari calistirmis olur.

  • Once bir “Thread Group” olusturulur daha sonra eklenecek elementler bunun altina eklenir.
  • Play buttonuna tiklandiginda test plani icindeki islemler yukaridan asagiya dogru uygulanir.

6. Standart bir test icin eklenmesi gereken temel elementler.

  • Thread Group: Kullanici grubu,
  • Http Cache Manager: Image css filan bunlari cache leme simulasyonu yapar ornegin ilk request te ister ondan sonra browser gibi davranarak istemez. bu elementin ayarlarinda clear cache each iteration secilmez ise bircok requestte http 304 gorebiliriz bu da cache in kulanildigini gosterir.
  • User Defined Variables: Name/value collection dir, burada degisken ve degeri girilebilir, diger elemenler icinde ise Value icinde ${parameter} seklinde cagrilabilir. burada kullanilabilecek parametrelerden en uygunlari host=112.123.123.233, protocol=https v.b. daha sonra “Http Request Defaults” elementinde ${host} gibi cagrilabilir.
  • Http cookie Manager: Browser simulasyonu yapar, authentication icin kritiktir. tipki bir browser gibi websitesinin cookie kaydetmesine izin verir.
  • Http Request Defaults: Tum requestler icin ortak olan parametreler burada tanimlanir
  • Constant Time: H[erbir request arasinda nekadar beklenilecegini simule eder,
  • View Result Tree: Request/Response lari gosterir. bunun gibi rapor gostermi yapan baska elementler de vardir, kendiniz ekleyerek deneme yapabilirsiniz. test senaryosunu olustururken en cok kullanilan listener viewresult tree dir. fakat cok kullanici ile test ederken performans harcamamasi icin disable etmek daha iyi olur, cok kullanicili testlerde “Summary Report” daha uygundur.
  • Http Header Manager: Tum requestler deki header bilgisini override eder yani ezer.
  • Web sistesinde: documentation altindaki component reference kisminda, tum elementler hakkinda detayli anlatim mevcuttur.

7. Test script olusturmak,

Test scritp recording ozelligi kullanilarak otomatik olusturulabilir, fakat burada bircok gereksiz islem olabilir, bunun yerina scriptin manual olusturulmasi daha saglam bir yontemdir, bununla beraber recoding yapilarak, recod sonucu olusan script ten faydalanmak ve mauel olusturulan ile kiyaslamak iyi bir yontemdir.

8. Recording

File/Template -> Templates : Recording sablonu acilir. Create buttonuna tiklanir. WorkBench: Burada Test script recorder vardir. Bu bir proxy olarak davaranir burdaki 8888 portuna herhangi bir browser proxy tanimlamasi yapar ise, tum requestler jmeter tarafindan kaydedilr.

  • Test script recorder icinde “url pattern to exclude” ayari vardir burdan bazi dosya uzantilari exclude edilebilir. 4.png

  • Record yaptiktan sonra Thread Group altindaki, Recording Controller altina her bir sayfa requesti icin bir group olusturur, yani ayni sayfadaki tum requestleri group yapar.
  • JMeter sayfa bazinda yaptigi gruplamalari isimlendirirken numara verir. daha sonra bu isimleri degistirebilirsiniz. Ornek ekran goruntusundeki 362 ile baslayan grup, jmeter tarafindan isimlendirilmistir ve ismi degistirilmemistir. digerleri ise degistirilmistir. 2.png

    9. Regular expression Extractor:

    Response icinden bir datayi extract eder ve bir degiskene atar, bu degisken bir sonraki request te parametre olarak kullanilabilir. Bu yontem bircok jmeter tesinde kullanilan bir yontemdir. Bircok jmeter testinde, bir onceki response ta gonderilen veri ile bir sonraki request olusturulur. Ornegin kullanici adi sifre ile girilen bir web uygulamasi icin test yapacaksaniz, oncelikle login olmaniz gerekir, login olabilmeniz icin ise web uygulamasi tarafindan size gonderilen cookie deki sessionid yi kullanmaniz gerekir, cunku web uygulamasi icin sessionid tekil bir kullanicidir. requestlerde bu veriyi de gondermeniz durumunda siz bir tekil kullanici olmus olursunuz. gondermez iseniz, her requestiniz yeni bir session (oturum) olarak degerlendirilir.

  • Test yaparken, login ekraniniza ilk girisinizde web uygulamasinin response unda size “Set-Cookie” seklinde bir http-header gonderdigini gorebilirsiniz, test esnasinda request-response lari izlamak icin view results tree kullanabilirsiniz. ornek: Reference name= sessinid, regular expression= Set-Cookie: ASP\.NET_SessionId=(.\*); path, template= $1$

baska bir regex ornegi: ` fc-yellow[^.]? data-courseno=\”(.?)\”` fc-yellow ile baslayan ve aradaki karakterleri onemsemeden data-courseno= ile devam eden ifadeleri yakaliyor. regex icin kullanabileceginiz site www.regex101.com template: string olusturmak icin kullanilir. verilen numara ise regex teki match sirasini gostrerir ornegin soyad yakalayan bir regex yazilmis ise su sekilde bir string olusturulabilir. “Ad $1$” : Ad Soyad seklinde string olusturulmus olur ve bu bir degiskene setlenir. Degisken tum scope icin gecerli olacakdir. sonraki requestlerin hepsinde gecerli olacaktir.

  • Burda css/jquery selector gibi kullanim daha kolay olabiliyor:
    degisken1[^.]*?degisken2[^.]*?arananifade(secilenifade)
    
  • Authentication: web siteleri genelde ilk requestte browser’a bir key verir bunu cookie veya header ile verir, daha sonra yapilan tum isteklerde, bu key ile request yapilir. login olundugunda bu key kullanilarak token uretimi saglanir. Bu durumda eger cookie kullanilmiyor ise, jmeter da regular expression extractor ile pre processors’te key alinir, daha sonra login istegi yapilan yerde bu key kullanilir, gelen token yine response icinden parse edilerek alinabilir.

  • jmeter daki “http request” objesinin bir ozelligi olan ve tik atilabilen, “follow redirects” sunucu tarafinda yapilan yonlendirmeleri takip etmesini ayarlar. Eger “View resutl tree” de bir requestin altin 2 tane daha child request goruluyor ise bunlardan ilki redirect oldugu icindir, responsunda su yazar “Response code: 302” Moven temporarily seklindedir. response header daki Location: /account/login?returnurl=/ kismi sayfanin redirect edildigi adrestir.

  • Http Request objesinin parameterelerinde altta bulunan “Retrieve all embeded resources” seklinde bir tik var bu isaretlenirse, flash videolari filan da get yapilir, burada “URL must match” kismina regex girilecek mesela http://82.251.41.xxx/.*

  • __randomString(10,abcxyz,) : jmeter fonksiyonudur ve requestlerde kullanilabilir. bunun gibi bircok fonksiyon vardir options menusunda “function helper dialog” vardir buradan fonksiyonun parametreleri hakkinda bilgi bulunur, ayrica help buttonuna tiklanirsa help altindan ilgili fonksiyonun tum detaylarina erisilebilir. veya web sitesinden tum detaylar ogrenilebilir.

10. CSV kullanmak

  • Config element altinda “CSV data set config” olarak eklenir. jmx file ile ayni konuma konuldugunda, dosyanin ismini vermek yeterli. dosyadaki kolonlari ${columnname} seklinde herhangi bir post icinde veye get icinde kullanabiliriz.

  • Listeners: Genellikle en cok kullanilan listener “View result tree” fakat bunun disinda daha detayli bilgiler sunan listener lar olmasina ragmen listener lar makina kaynaklarini asiri tuketir, eger cok sayida kullanici ile test etmek istiyorsak listener sayisini dusurmemiz gerekmektedir. Az sayida kullanici ile debug yaparken yaygin olarak kullanilan listnerlar sunlardir

    • View results in table
    • Summary report
    • Graph results

    Not: Burada onemli olan bir web sitesinin limitlerini olcmektir, buna bagli olarak, senaryodaki kullanici sayisini lineer olarak artirmak ve yatay eksende artan kullanici sayisina gore response time daki farklilik raporu cok guzel fikir verecektir.

    Not: Graph result ta dikey eksen response time i gostermektedir.

11. Script logic controller

ForEach Contoller ifController: eger login olursa bunu yapsin, gibi bir kontrol olabilir. ifcontroller altina yeni elementler eklenerek yapiliyor, ifcontroller icindeki condition true donerse, controller altindaki islem yapilir. bu if in else i yok sadece condition true ise icine giriyor okadar WhileController

  • “Advanced web test plan” adinda bir template var onu kullanmakta fayda var

12. Assertions

Burada condition gerceklesmedigi zaman hata firalatir. Duration assertions: sayfadan belli bir sure cevap gelmediginde firlatir Response assestions: response icinde specifig bir text arar bulursa true doner

13. Functional testing and checking for errors

14. Beanshell scripting

Detayli bilgi not: options menusunden log viewer acilabilir

Ornek Script:

import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy;
import org.apache.jmeter.protocol.http.control.CookieManager;
import org.apache.jmeter.protocol.http.control.CacheManager;
import java.util.Date;
import java.text.SimpleDateFormat;

String response=new String(data);
log.info(response);

15. ThirtParty plugins

Detayli bilgi

16. Load and Throughput shaping

17. Gelismis raporlama

Not: Summary report kismi cok onemli, burada Max yazan kisim milisaniyeyi gosteriyor, Aferage ise oratalama response time ini gosteriyor. jmeterda response time lar cok uzar ise testlerin fail olmamasi icin asagidaki configurasyon yapilir.

user.properties dosyasyinda
httpclient4.retrycount=1
httpclient3.retrycount=1
hc.parameters.file=hc.parameters
httpclient.parameters.file=httpclient.parameters

hc.propertites dosyasyinda
http.socket.timeout$Integer=300000
http.connection.stalecheck$Boolean=false

httpclient.parameters dosyasinda
http.socket.timeout$Integer=300000
http.connection.stalecheck$Boolean=true

18. TUNING ve JMETER ile yasanan tecrubeler

yapilan yuk (stress) testlerinde yasanan ve duzeltme uygulanan bazi ornekler

18.1. Analize baslarken

Cogu sistemde kullanicilar belirli bir gun veya belirli bir saat araliginda sisteme yogun bir sekilde baglanirlar. Yuk testi hazirlanirken, bu yogun donemde kullanicilarin yapiti islemler dikkata alinarak yapilabilir. ornegin, yillik faaliyet beyannamesi abc tarihinde bitiyor ise, faaliyet beyanname verilmesi de birkac web formundan belki birkac rapor dan olusuyor olabilir. Yuk testinde, bu yogun donemde kullanicinin yaptigi tum islemler eklenmelidir. Test senaryosunu mumkun oldugu kadar gercekci hazirlamak gerekir. senaryo hazirlandiktan sonra, her bir test adimi ayrintili sekilde analiz edilmelidir. methodlarin yada requeslerin sureleri incelenmelidir. veritabani incelenmelidir.

jmeter ile kullanicilari ayni anda sisteme sokup kullanicilarin ayni anda ayni islemleri yapmasi saglanabilir. bu durumda test adimlarinin hangilerinin yogun yuk altinda sikistigini gozleyebilirsiniz.

fakat gercekci bir test yapilmasi daha da onemlidir. yani kullanicilarin bir kismi testin ilk adiminda iken bir kismi son adiminda olabilir. kullanicilar herzaman ayni anda ayni islemleri yapmazlar, bu sekilde test yapildiginda test adimlarinin birbirlerine etkisi de gozlenmis olur, ornegin son adimda “onayla” islemi bulunsun, 3. adimda da kaydet islemi bulunsun bu iki islemin ayni anda yuk altinda bulunmasi veritabaninda deadlock olusturabilir.

18.2. External servis baglantilari.

sistem islemler sirasinda dis bir sisteme baglaniyor ise, tehlikeli bir durumdur, kullanici yogun zamanlarda dis sistemin durmasi, mevcut sisteminde durmasina sebep olacagindan, dis sistemin durmasi durumu icin bir B plani hazirlamak, iyi bir cozum olabilir. yuk testlerini yaparken, dis sisteme yapilan Request/Response sureleri mutlaka izlenmeli, kullanicinin yogun oldugu zamanlarda dis sistemin tavri da izlenmelidir. yapilabiliryor ise, dis sistemi devre disi birakarak test yapilmasi ve dis sistem devrede oldugu durumla karsilastirilmasi cok faydali olacaktir, kumulatif olarak kullanilarin islem suresini cok uzatabilir.

18.3. Browser Cache in calismama durumu

Tum sayfalarda kullanilan html header i icinde yer alan bazi css veya scriplerin boyutlari cok fazla olabilr, bu durumlarda browser cache ozelliginin calisir durumda olmasi cok onemlidir. ciddi manada network I/O sorunu olusturabilir.

18.4. Web sitesinde loglamanin acilmasi ve izlenmesi

stres testinin uygulandigi sistemdeki loglarin acilmasi ve izlenmesi cok onemlidir. websitesinde icerik logunun izlenmesi lazim, eger bir web-api yada WCF servisi var ise method surelerinin izlenmesi gerekir.

18.5. Audit Logging izlenmesi

eger sistemde bir AuditLog yapisi var ise buradan cok faydalanilir. en cok cagrilan method, yada iclerik yada en uzun suren method, yada request uzerine yougunlasilarak tuning yapilabilir.

18.6. Veritabninin izlenmesi

Veribanini izlerken, cok kaynak tuketen queryler de duzenleme yapilabilir. burada cok fazla select atilan tablolar uzerinde indexleme yapilabilir, fakat index atilmasi herzaman iyi bir cozum olmayabilir. ayni tabloya cok fazla insert/delete olasi durumunda index sistemi asiri yavaslatacaktir. yasanilan iki tecrube su sekildedir.

  • index yanlis olusturuldugunda, insert/delete islemlerinde tablo lock olmasin seklinde ise bu durum asiri deadlock a sebebiyet vermektedir.
  • index yapilan tabloya cok fazla insert oluyor ayni zamanda delete yapiliyor ise. index in rebuild yapilmasindan dolayi, delete islemleri timeout olacaktir.
  • yogun cagrilan methodlarda, sql ler cok iyi analiz edilmeli, sql icinde birkac tabloda islem yapiliyor ise ve insert/update/delete ler var ise, bu durumda deadlock olusma olasili cok fazladir.

18.7. www.newrelic.com analizi

www.newrelic.com adresindeki sirket, sunucu performans analizi hizmeti vermektedir. burdan bir hesap acip, sunucular uzerine sireketin ajan(agent) yazilimlari kuruldugunda, agent yazilimlar sunucu daki web uygulamsinin database in ve IIS in tum performans counter larini topluyor. daha sonra www.newrelic.com adresinden detayli raporlar sunuyor. yuk testleri sirasinda cok faydali olacaktir.

18.8. Ic methodlar

loglara dusmeyen ic methodlarda

Stopwatch sw=new Stopwatch();
sw.Start();
//method.....
sw.Stop();
Console.Debug.WriteLine("Elapsed time:"+sw.ElapsedMilisecond);

18.9. Tail / Wintail

gibi programlar ile loglarda filtreleme yaparak, specific bir methoda odaklanmak mumkun

18.10. Cache

  • In Memory Caching (Uygulama capinda on bellek)

  • Yazilim icindeki sabit verilerin her saferinde veritabanindan cekilmesi performansi dusurebilir. yazilim icinde tuning yapilacaksa, Cache leme yontemi cok faydasini gorebilirsiniz. Cacleme yaparken, uygulama capinda cok sik degismeyen ve cok fazla cagrilan veriler cache lene bilir. genellikle sabit liste verileri (Combobox, Listbox) gibi verilerin cache lenmesi, guvenlik kontrolu yapilan collection un cache lenmesi, roller yetkiler. v.b bunlar cok ise yarayacaktir.
  • internal memory cache lerin sorgu performansi takip edilmeli, uygulamada Thread Lock durumlari olabilir, ozellikle custom cache implementasyonlarinda bu duruma cok raslanir, yazilimci cac icine liste atar, methodlar synronized tir ve methodlarin siraya girdigini dusunur fakat cache icine liste atildiginda listedeki birkac thered tarafindan alindiginda, referanslari ayni olacaktir, yani cache ten alinan objeler clone lanmayacaktir. buru durumda ayni referansli objelere birkac thread degisiklik yapmak isterse lock olusabilir.

  • Distributed Caching (Dagitik Bellek)

    Cache hizmeti veren bir ek yazilimdir, dis sistemlerden kullanilabilir. Kisacasi birden cok sunucudan yada uygulamadan kullanilabilien, networke servis veren merkezi bir cache sistmeidir. gunumuzde en cok ragbet goren cache servisi Redis tir.

  • Browser Caching (Tarayici Bellegi)

    Bazen kurumsal uygulamalarda, bazi script dosyalari, image lar v.b, MB seviyesinde olabiliyor, browser in her severing bu dosyalari cekmesi ciddi bir network I/O problemi olusturabilir. bu yuzden yazilim icinde tarayiciya hangi elementi nekadar belleginde tutacaginin talimati verilmelidir.

  • fakli platformlar icin cache kontolu

PHP:

header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1.
header("Pragma: no-cache"); // HTTP 1.0.
header("Expires: 0"); // Proxies.

Java Servlet, or Node.js:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setHeader("Expires", "0"); // Proxies.

ASP.NET-MVC

Response.Cache.SetCacheability(HttpCacheability.NoCache);  // HTTP 1.1.
Response.Cache.AppendCacheExtension("no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.

ASP.NET:

Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.

ASP:

Response.addHeader "Cache-Control", "no-cache, no-store, must-revalidate" ' HTTP 1.1.
Response.addHeader "Pragma", "no-cache" ' HTTP 1.0.
Response.addHeader "Expires", "0" ' Proxies.

Ruby on Rails, or Python on Flask:

response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" # HTTP 1.1.
response.headers["Pragma"] = "no-cache" # HTTP 1.0.
response.headers["Expires"] = "0" # Proxies.

Google Go:

responseWriter.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") // HTTP 1.1.
responseWriter.Header().Set("Pragma", "no-cache") // HTTP 1.0.
responseWriter.Header().Set("Expires", "0") // Proxies.

Apache .htaccess file:

<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>

HTML4:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

Python/Pyramid:

def my_api_call(context, request):

    # disable caching
    request.response.headerlist.extend(
        (
            ('Cache-Control', 'no-cache, no-store, must-revalidate'),
            ('Pragma', 'no-cache'),
            ('Expires', '0')
        )
    )
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="cache-control" content="no-store" />
<meta http-equiv="cache-control" content="must-revalidate" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 2016 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />

18.11. Cok sure alan 1000ms uzeri methodlar

bu method lar icinde zaman aldigi tahmin edilen kisimlarda sure hesabi yapilarak, methodu uzatan kisim tespit edilmeye calisilmalidir.

18.12. External Services (Dis servis)

dis serviste kullanilan data toplu cekilerek offline moda alindi online mod sure: 30 web servis offline 500 kullanici,

Date: 2017-10-23 10:20:00 +0000