AWS EC2 üzerinde Docker Konteynerleri ile kurduğum sunucu ortamının performansından bahsetmeden önce, bu performans denemesini bugüne kadar neden yapmadım onu açıklayayım.
Çok uzun süredir AWS EC2 sunucularını kullanıyorum fakat AWS üzerinde konteyner teknolojisi ile bir deneyimim olmamıştı. EC2 üzerinde NGINX web sunucumu kurup, SQL/NoSql içinde Amazon’un hosted servislerini kullanıyordum. (Konteyner işini de EC2 kullanmadan ECS ile çözmek mümkün ama onu da hiç deneyimlemedim) Tüm sunucuları EC2 üzerinde kurmayı denemiş olsam da ortalık karıştığı için pek de rahat hissedemiyordum.
Geçmişte Docker’ı daha çok son kullanıcı uygulaması olarak kullanacağım ve docker konteyner’i olarak paketlenmiş uygulamalar için kullanıyordum. Geliştirme ortamım tüm sunucu yazılımlarını yerel makineme klasik yöntemle kurarak oluşturulmuştu. Son bir senedir geliştirme ortamında da herşeyi yavaş yavaş docker üzerine alınca son geliştirdiğim uygulamayı AWS’ye taşırken AWS hosted servisleri kullanmak aksine zor bile geldi. Sonuç olarak tüm sistemi EC2’de çalışan bir makinada docker konteynerleri üzerine inşa ettim.
Bütün sunucu ortamını sanallaştırarak kendim oluşturduğum için büyük bir projede “backup”, “persistent storage” ve “High-Availiability” e de ekstra kafa yormam gerekecek. (Ki bence gayet eğlenceli) ama sunucu ortamında %100 hakim olma duygusu da ayrı bir güven veriyor.
Neyse gelelim performans hakkındaki izlenimime
Kurulumu AWS’de uzun süredir boş bekleyen T3a.small instance’ı üzerinde yaptım. t3a.small instance’lar 2 vCPU ve 2.0 GiB memory içeriyor.
Bu instance üzerine Ubuntu 20 LTE Server sürümünü ve daha sonra onun da üzerine Docker’ı ekleyerek basit bir kurulum yaptım.
Docker üzerinde Portainer (Docker yönetimi için), Nginx, PhpFPM, MariaDB, Redis ve RabbitMQ için aktif konteynerler çalışıyor.
Çalışan PHP kod anlık olarak en fazla 3-4 kullanıcının girdiği, veri tabanı tarafı için herhangi bir cache vs. kullanılmayan (3-4 kullanıcının kullanacağı sistem için uğraşmaya değmezdi) hafif bir kod.
AWS monitor sayfasını incelediğimde sistemin CPU kullanım oranının %1 seviyesinde olduğunu görüyorum. Portainer Docker Swarm kullanırken sistemin geneli ile ilgili istatistik veriyor ama tek başına Docker kullanırken sadece konteyner istatistiklerini verdiğini farkettim. Bunları incelediğimde de incelediğimde hafıza kullanımının 300-400 mb seviyesinde olduğu görülüyor.
Sistemi yük altında denemedim fakat boşta çalışırken gösterdiği bu performans iyi bir optimizasyonla yük altında da yeterli olacağını gösteriyor. Bulut ortamının en güzel yanı yetmezse yatay veya dikey büyümeyi kolaylaştırıyor olması.
Mevcut şartlarda hem sistemin geneli, hem de tek tek sunucular gayet performanslı çalışıyorlar. Yerel’de 80-100ms arasında açılan sayfalar AWS üzerinde 8-10ms’de açılır hale geldi. Kod ve sistem optimizasyonu ile birlikte tatmin edici bir yükü kaldırabileceğini düşünüyorum.
Gerektiğinde sistemin scale edilmesi ile ilgili de bir şeyler yazacaktım fakat bunun ayrı bir yazı konusu yaparsam daha faydalı olacağını düşündüğüm için bu yazıya burada son vereceğim.
Bu Yazıda Yapılan Değişiklikler
- 11.05.2022: Yazı özeti düzenlendi.