erlang

mzbench ile performans analizleri – 3

Selamlar,

Bu yazımda kurulumunu gerçekleştirdiğimiz mzbench sunucusu üzerinden performans testlerini nasıl yapabileceğimizi anlatmaya çalışacağım.

Kurulum için küçük bir güncelleme özellikle hızlı tek sunuculuk performans kullanımları için “docker image” kullanmanızı tavsiye ederim.

mzbench için performans testleri için BDL adını verdiği farklı, oldukça da basit, bir DSL (Domain Specific Language) türevi kullanıyor. Bu türev python’a oldukça benziyor.

Özellikle bu sayfadan tüm bilgilerine built-in tüm fonksiyonlarına / açıklamalarına erişilebilir. mzbench’in Open-Source olmasından eksik bir ürün olduğunu çıkarmayın lütfen. Oldukça profesyonel ve tamam bir ürün.

Bu adres üzerinden built-in verilen tüm komutlar için örneklere ulaşabilirsiniz.

Gelelim mzbench’in en önemli özelliğine :)

https://github.com/satori-com/mzbench/blob/master/doc/workers.md#how-to-write-a-worker

mzbench için kullanıcıyı mimic ettiği her bir öğeye “worker” adını veriyor. Bu worker’lar Erlang’ın worker’ları ile birebir aynı. Bu worker’ların belirli bir kriter ile istenildiği gibi yazılması mümkün. Yazılması da çok kolay. Erlang ve Python kullanarak yazılabiliyor ama tavsiyem Erlang’da yazılması.

Not: OTP21 ile beraber çalışan release henüz yayınlanmadı, bu nedenle OTP20 ile kullanılmalı.

Sistem içerisindeki kullanıcı hareketlerini bir worker ile baştan aşağıya net bir şekilde tanımlabilir. python ve erlang’ın tüm kütüphaneleri herhangi bir problem olmaksızın kullanılabilir.

Bu arada uzun süredir takip ettiğim bir podcast serisi, youtube, spotify veya itunes üzerinden takip edilip, dinlenebilir. Linki aşağıda;

Özellikle Engin Geçtan’ın İnsan olmak adlı kitabının yorumları dinlemeye değer.

https://www.google.com/search?q=engin+ge%C3%A7tan+insan+olmak

Sevgiler.

mzbench ile performans analizleri – 2

Selamlar,

Bugün daha önce başlamış olduğumuz mzbench ile performans analizlerinin 2. yazısı ile beraberiz. Bu yazımızda mzbench ve node’ları oluşturulmasından bahsedeceğim.

Kurulum aşaması oldukça basit ve uygulanabilir, ben özellikle “From source” bölümünü tavsiye ederim.

Bunun mzbench sunucu kurulumu linux türevi üzerine kurulması daha doğru olacaktır.

Küçük bir ek, yazını yazıldığı bu günlerde henüz mzbench kodları Erlang 21.x için uygun değildi. Bu nedenle Erlang 20.x versiyonlarını devam etmenizi öneriyorum. Erlang 21.x’e uygun gale getirmek biraz uğraştım ama o kadar da kolay değil.

Kurulum sonrasında hemen “Quickstart” bölümüne geçebilirsiniz. Bir küçük hatırlatma eğer işletim sistemi CentOs veya benzeri firewall ayarlarının tümü kapalı olan bir dağıtım ise “sudo” ile çalıştırmayı ve iptables üzerinden gerekli yetkileri vermeyi unutmayın.

İlk çalıştırma sırasında çalışması biraz uzun sürebilir, merak etmeyin ilk kez çalıştığı için kodlarını derliyor :) daha sonrasında çok hızlı açılacaktır.

Herhangi bir node tanımı yapmadık bu nedenle tek node (mzbench sunucusunun kendisi) olarak çalışacaktır. Günümüz sunucularında yer alan CPUx8 ve 32GB Memory ile aynı anda 2500 kullanıcıya kadar herhangi bir sorun çıkarmadan simule edecektir. bu birçok performans analizi yeterli bir sayıdır.

Bu sayıyı daha da arttırmak istiyorsak, mzbench sunucusuna node eklememiz gerekiyor, mzbench node’lar üzerindeki tüm işlemleri kendisi yapacaktır, sizin sadece çalışan bir linux dağıtımı ile passwordless ssh login işlemlerini gerçekleştirmeniz gerekli. Başka bir kurulum veya yetkilendirme adımına gerek yok.

Dikkat: mzbench “sudo” ile başladı ise root@xxxx olarak passwordless ssh tanımları yapılmalı.

mzbench’in konfigurasyon dosyası “/<kullanıcı adı>/config/mzbench/server.config” dır. Bu dosyanın içeriği aşağıdaki gibidir;

[{mzbench_api,
[{vm_args,[]},
{bench_poll_timeout,20000},
{max_bench_num,1000},
{bench_log_read_chunk,32000},
{node_git,"git@github.com:satori-com/mzbench.git"},
{worker_deployment_path,"~/.local/share/mzbench_workers"},
{user_authentication,[]},
{network_interface,"0.0.0.0"},
{keyfile,"~/.local/share/mzbench_api/server.key"},
{node_interconnect_port,4804},
{warn_free_disk_kb,100000},
{plugins_dir,"~/.local/share/mzbench_api/plugins"},
{final_metrics_percentiles,[min,50,90,95,max]},
{ntp_max_timediff_s,undefined},
{protocol,http},
{cacertfile,none},
{bench_metrics_compression,none},
{node_deployment_path,"~/.local/share"},
{bench_data_dir,"~/.local/share/mzbench_api/data"},
{listen_port,4800},
{bench_log_file,"log.txt"},
{metric_update_interval_ms,25000},
{tgz_packages_dir,["~/.local/cache/mzbench_api/packages",
"/opt/mzbench_api/cache"]},
{bench_metrics_file,"metrics_~s.txt"},
{white_list,[]},
{admin_list,[]},
{gc_sleep,10},
{black_list,[]},
{cloud_plugins,[{static,#{hosts => ["root@192.168.1.01","root@192.168.1.03","root@192.168.1.05", "root@192.168.1.02", "root@192.168.1.04","root@192.168.1.06"],
module => mzb_staticcloud_plugin}}]},
{bench_read_at_once,1024},
{custom_os_code_builds,enable},
{bench_log_compression,deflate},
{certfile,"~/.local/share/mzbench_api/server.crt"},
{bench_log_max_dashboard,2048000},
{auto_update_deployed_code,enable},
{bench_log_user_file,"log_user.txt"}]
}].

Özellikle kalın yazı ile belirttiğim ayarlar oldukça önemli. Bunlar;

cloud_plugins; Node listesini ve hangi kullanıcı ile bağlanacağını belirtir. Dediğim gibi passwordless ssh login ile mzbench sunucusu node’lara erişebilir olması gerekiyor. Kısaca sunucu üzerinde “ssh <kullanıcı_adı>@node_id” yazdığınızda sistemin şifre sormaması gerekiyor. Birden fazla node eklendiğinde mzbench son eklenen node’u sadece metrikleri tutmak için kullanır, yani son eklenen node yük için kullanmaz. Bunu engellemek için sunucunun kendi adresini de listenin en sonuna ekleyebilirsiniz. Bunu yaptığınızda özellikle metric_update_interval_ms ve bench_poll_timeout değerlerini yükseltmeniz gerekir ki aynı makine hem sunucu hem de metric collector olarak çalışabilsin.

metric_update_interval_ms; Bu bilgi ilgili node’ların oluşturdukları değerleri ne kadar sıklıkla sunucuya ileteceklerini gösteriyor. Gereksiz kısa bir değer sunucular üzerindeki yükü arttıracak ve node başına 2500 kullanıcı sayısı gittikçe azalacaktır.

final_metrics_percentiles; Belirlenen metriklere ait hangi değerlerin grafik olarak gösterileceğini ifade eder. Performans analizlerinde ortalama pek bir işe yaramaz. Bu nedenle bu varsayılan değerler yeterlidir, eğer çok hassas bir servis var ise 99’un da eklenmesi faydalı olacaktır.

bench_poll_timeout; Sonucunu node’lara dağıttığı kullanıcıların akıbetini öğrenmek için yaptığı çağrının zaman aşımı değeridir. Node’ların çok yoğun olduğu yüksek kullanıcılı testlerde Node’lar bazen sunucuya bu timeout değeri içerisinde yanıt veremezler. Mzbench node’lardan birisi kapandığını düşündüğü için tüm işlemleri durdurur.

Şimdilik yazacaklarım bu kadar, bir sonraki yazımda performans scriptlerinin bahsedeceğim.

Sevgiler.

mzbench ile performans analizleri

Selamlar,

Bugün özellikle geçmiş günahlarımdan biri olan performans analizleri konusunda yazacağım. Uzun bir süredir performans analizleri / iyileştirmeleri uğraşıyorum. Bu çalışmalar sırasında pek çok ürünle çalışma fırsatı buldum, bunlar arasında JMeter, IBM RPT, Microfocus (HP) Load Runner bunlardan bazıları. Bu ürünler kendi alanlarında oldukça iyi. JMeter herhangi bir “recording tool” u olmadığı için el ile çok işlem gerektiriyor ama aralarındaki en iyi de o açıkçası.

Fakat bu yazımda ben mzbench’den bahsedeceğim. Oldukça iyi ve tamamlanmış bir ürün. Hali hazırda 10k kullanıcıyı simule etmek için aktif halde kullanıyorum. Kullanmak için kesinlikle development yetenekleri gerekiyor (özellikle erlang). Hatta eğer development yeteneğiniz var ise JMeter’dan da oldukça iyi bir ürün. Eğer development yeteneğiniz yok ise topluluk desteği güçlü olmadığı için JMeter ile başa baş olabilir.

Özellikle erlang’ın gücü ile 4 node ile 10k kullanıcı etkisi yaratılabiliyor. Diğer ürünler ile bu rakamlara ulaşmak neredeyse imkansız.

Node’lar için pek de CPU’ya ihtiyaç yok fakat memory ve network sistemlerinin özellikle iyi olması gerekiyor. Herhangi bir linux dağıtımı ile sorunsuz çalışıyor. Ben CentOs ile mzbench’in adresinde verilen talimatları takip ederek sorunsuz şekilde çalışıyorum.

Cloud üzerinde yaygınlaşması ise mzbench server’ın node’lara passwordless ssh ile bağlanmalarını sağladığınızda ortadan kalkıyor.

Kendi ölçüm değerlerinizi kod içerisinde kendiniz belirtiyorsunuz. Tüm çalışmalarınızı ve raporlarınızı kayıt altında tutuyor.

Kısaca giriş seviyesinde erlang bilgisi ile belki de en iyi performans analiz ürününe sahip oluyorsunuz.

Bu performans analizleri beraber, hedef sunucu üzerindeki değerleri “node exporter” veya benzeri bir ürün ile prometheus + grafana ya almanızla beraber “high level” performans analizleri için gerekli tüm elementlere sahip olabilirsiniz. Tek yapmanız gereken şey developer olmak..

Sevgiler.