Kesintisiz Ölçeklendirme; Bu Neden Hayati Önem Taşır?
Site veya hizmetinizin trafiği arttığında aklınıza gelen ilk şey sunucu kaynaklarını artırmaktır. Ancak bunu yanlış yaparsanız, performansı iyileştirmek yerine hizmet kesintisiyle karşılaşırsınız. Bulut ortamında ölçeklendirme, doğru planlanmadığında kolayca bir kabusa dönüşebilir; özellikle gerçek kullanıcılar hizmeti kullanırken.
Bu makalede, pratik ve detaylara girmeden iki ana ölçeklendirme yöntemini inceleyeceğiz: mevcut sunucuyu güçlendirmek anlamına gelen dikey ölçeklendirme (Vertical Scaling) ve altyapıya yeni düğümler eklemeyi içeren yatay ölçeklendirme (Horizontal Scaling). Her iki yöntem için de belirli talimatlar, gerçek örnekler ve sorun giderme ipuçları sunacağız; böylece altyapınızı bir saniye bile kesinti olmadan yükseltebilirsiniz.
Dikey Ölçeklendirme; En Hızlı Yol Ama Ciddi Sınırlamaları Var
Dikey ölçeklendirme, tek bir sunucunun kaynaklarını artırmak anlamına gelir: daha fazla RAM, daha güçlü CPU veya daha hızlı disk. Bulut ortamında bu genellikle Flavor veya Instance Type değiştirilerek yapılır. Örneğin, bir bulut panelinde 4 GB RAM ve 2 CPU çekirdeğine sahip bir sunucunuz varsa, bunu 8 GB RAM ve 4 çekirdeğe yükseltebilirsiniz.
Kesintisiz Dikey Ölçeklendirme Adımları
Birçok bulut yönetim paneli, sunucu boyutunu çevrimiçi olarak (Live Resize) değiştirme imkânı sunar. Ancak bu özellik her zaman mevcut değildir ve bazı durumlarda yeniden başlatma gerektirir. Bunu kesintisiz yapmak için şu adımları izleyin:
- Live Resize Desteğini Kontrol Edin: Öncelikle panelinizin belgelerini inceleyin. Paneliniz OpenStack kullanıyorsa
openstack server resizekomutunu deneyebilirsiniz. Ancak bu komutun bazı dağıtımlarda yeniden başlatma gerektirdiğini unutmayın. - Yükü Geçici Sunucuya Taşıyın: Live Resize desteklenmiyorsa, en iyi yol daha yüksek kaynaklara sahip yeni bir sunucu oluşturmak, verileri aktarmak ve ardından trafiği ona yönlendirmektir. Bu, DNS kullanılarak ve TTL düşürülerek yapılır.
- Snapshot Kullanın: Herhangi bir işlemden önce sunucunun bir Snapshot'ını alın. Bu, bir sorun oluşursa önceki duruma dönmenizi sağlar.
Dikey Ölçeklendirmenin Sınırlamaları
Dikey ölçeklendirmenin belirli bir sınırı vardır. Bir sunucuyu sonsuza kadar büyütemezsiniz. Her bulut altyapısında Instance boyutunun bir maksimumu vardır. Örneğin, atanabilir maksimum RAM 64 GB ise, bundan sonra dikey ölçeklendirme için başka bir yol yoktur. Ayrıca dikey ölçeklendirme, tek bir hata noktası (Single Point of Failure) oluşturur; bu sunucuda donanımsal bir sorun olursa tüm hizmet kaybolur.
Yaygın Hata: Birçok kullanıcı, RAM artırmanın tek başına sitenin yavaşlık sorununu çözeceğini düşünür. Oysa sorun ağır veritabanı sorguları veya disk I/O sınırlamasıysa, RAM artırmak hiçbir etki yaratmaz. Dikey ölçeklendirmeden önce, hangi kaynağın gerçekten doygunluğa ulaştığını top, htop ve iostat ile mutlaka kontrol edin.
Yatay Ölçeklendirme; Sürdürülebilir Büyüme İçin Uzun Vadeli Çözüm
Yatay ölçeklendirme, altyapıya yeni düğümler eklemek anlamına gelir. Tek bir büyük sunucu yerine, birkaç küçük sunucuyu bir araya getirir ve trafik yükünü aralarında dağıtırsınız. Bu yöntem yalnızca dikey ölçeklendirmenin sınırlamalarına sahip olmakla kalmaz, aynı zamanda altyapının güvenilirliğini (Reliability) de artırır; bir düğüm arızalanırsa diğer düğümler hizmeti sunmaya devam eder.
Uygulamayı Yatay Ölçeklendirmeye Hazırlama
Yatay ölçeklendirmenin en önemli kısmı uygulamanızı hazırlamaktır. Uygulamanız stateful ise (yani kullanıcı bilgilerini sunucunun kendisinde saklıyorsa), yatay ölçeklendirme kolayca mümkün değildir. Bu sorunu çözmek için aşağıdaki değişiklikleri yapmanız gerekir:
- Oturumları (Session) Paylaşımlı Belleğe Taşıyın: Oturumları dosyada veya yerel bellekte saklamak yerine Redis veya Memcached kullanın. Örneğin, PHP'de
php.inidosyasındasession.save_handler = redisayarını yaparak oturumları Redis'e taşıyabilirsiniz. - Dosyaları Paylaşımlı Depolama Alanına Yükleyin: Kullanıcıların yüklediği dosyaları yerel diske kaydetmeyin. S3 gibi Object Storage veya benzeri hizmetleri kullanın.
- Yapılandırmaları Yönetin: Uygulama yapılandırmalarını Ortam Değişkenlerine (Environment Variables) koyun; böylece her düğüm ayarları kolayca alabilir.
Altyapıya Yeni Düğüm Ekleme
Uygulamayı hazırladıktan sonra sıra yeni düğümler eklemeye gelir. Şu adımları izleyin:
- Temel Sunucudan Image Oluşturun: Uygulamanın ve temel ayarların kurulu olduğu ana sunucudan bir Image hazırlayın. Bu Image'ı bulut panelinizde saklayabilirsiniz.
- Yeni Düğümü Başlatın: Image'dan yeni bir Instance oluşturun. Yeni düğümün, veritabanı ve Redis ile iletişim kurabilmesi için aynı dahili ağda (VPC) olduğundan emin olun.
- Load Balancer'a Bağlayın: Yeni düğümü Load Balancer'a ekleyin. Load Balancer olarak Nginx kullanıyorsanız, yapılandırma dosyasında yeni düğümün IP adresini upstream'e eklemeniz yeterlidir:
upstream backend {
server 10.0.0.11:8080 weight=3;
server 10.0.0.12:8080 weight=3;
server 10.0.0.13:8080 weight=3; # yeni düğüm
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Değişiklikleri uyguladıktan sonra Nginx'i nginx -s reload komutuyla yeniden yükleyin. Bu işlem hizmet kesintisi olmadan yapılır ve trafik kademeli olarak düğümler arasında dağıtılır.
Yatay Ölçeklendirmede Veritabanı Yönetimi
Veritabanı genellikle yatay ölçeklendirmenin en zorlu kısmıdır. Uygulamanız MySQL kullanıyorsa Replication kullanabilirsiniz: yazma için bir ana sunucu (Master) ve okuma için birkaç okuma sunucusu (Replica). Bu durumda uygulamanın bu iki sunucu türü arasında ayrım yapması gerekir. Örneğin, Laravel'de veritabanı bağlantı yapılandırmasında şu şekilde yapabilirsiniz:
'mysql' => [
'read' => [
'host' => ['10.0.0.21', '10.0.0.22'],
],
'write' => [
'host' => ['10.0.0.20'],
],
'driver' => 'mysql',
'database' => 'app_db',
'username' => 'app_user',
'password' => 'secret',
'charset' => 'utf8mb4',
]
MySQL'de Replication kurmak için önce ana sunucuda yapılandırma dosyasını düzenleyin:
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = app_db
Ardından Replica sunucusunda aşağıdaki ayarları uygulayın:
[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
Ve son olarak Replication'ı şu komutlarla başlatın:
CHANGE MASTER TO MASTER_HOST='10.0.0.20', MASTER_USER='replica_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;
START SLAVE;
Ölçeklendirmede Yaygın Hatalar ve Çözümleri
Yıllar boyunca bulut altyapılarıyla çalışırken hizmet kesintisine yol açan tekrarlayan hatalarla karşılaştım. İşte önemli birkaç tanesi:
- Aynı Anda Birden Fazla Değişkeni Değiştirmek: Aynı anda hem dikey ölçeklendirme yapıp hem de uygulama kodunu değiştirirseniz, hangi değişikliğin soruna yol açtığını bilemezsiniz. Her zaman tek seferde tek bir değişiklik yapın.
- Health Check'i Unutmak: Load Balancer'a yeni bir düğüm eklediğinizde mutlaka Health Check'i etkinleştirin. Yeni düğüm düzgün başlatılmadıysa, Load Balancer onu otomatik olarak devre dışı bırakmalıdır. Nginx'te
nginx_upstream_check_modulemodülünü kullanabilirsiniz. - Ağ Kapasitesini Göz Ardı Etmek: Yatay ölçeklendirme, dahili ağ trafiğini artırabilir. Sınırlı bant genişliğine sahip bir ağ kullanıyorsanız ağ darboğazıyla karşılaşabilirsiniz. Çok sayıda düğüm eklemeden önce dahili ağ bant genişliğini kontrol edin.
Özet; Akıllı Ölçeklendirme Stratejisi
Ölçeklendirme için tek bir doğru çözüm yoktur. En iyi strateji, dikey ölçeklendirmeyle başlayıp sınırına ulaştığınızda yatay ölçeklendirmeye geçmektir. Ancak bunu akıllıca yapın:
- Öncelikle Prometheus ve Grafana gibi izleme araçlarıyla darboğaz noktalarını belirleyin.
- Uygulamayı en baştan yatay ölçeklendirme için tasarlayın; şu anda ihtiyacınız olmasa bile.
- Her zaman Snapshot alın ve geri alma (Rollback) sürecini pratik edin.
- Değişiklikleri düşük trafik saatlerinde uygulayın ve trafiği kademeli olarak dağıtmak için Load Balancer araçlarını kullanın.
Sonuç olarak, kolay ve sorunsuz ölçeklendirme imkânı sunan bir altyapı arıyorsanız ServerNet bulut hizmetleri iyi bir seçenek olabilir; ancak en önemli nokta, ölçeklendirme sürecini doğru planlamak ve herhangi bir işlemden önce altyapınızı iyi tanımaktır. Bu makaledeki ipuçlarına uyarak altyapınızı bir saniye bile kesinti olmadan yükseltebilir ve kusursuz bir kullanıcı deneyimi sağlayabilirsiniz.