Node.js Üretim Altyapısını Nasıl Optimize Edilir: En İyi Uygulamalar

Node.js performans optimizasyon rehberi

Önsöz

Forward Email olarak, Node.js üretim ortamı kurulumumuzu yıllar boyunca mükemmelleştirdik. Bu kapsamlı rehber, performans optimizasyonu, izleme ve günlük milyonlarca işlemi yönetmek için Node.js uygulamalarını ölçeklendirme konusunda öğrendiğimiz derslere odaklanarak, test edilmiş Node.js üretim dağıtım en iyi uygulamalarımızı paylaşıyor.

%573 Tek Çekirdek Performans Optimizasyonu Devrimiz

Intel'den AMD Ryzen işlemcilere geçiş yaptığımızda, Node.js uygulamalarımızda %573 performans artışı sağladık. Bu sadece küçük bir optimizasyon değildi—Node.js uygulamalarımızın üretimde nasıl performans gösterdiğini kökten değiştirdi ve herhangi bir Node.js uygulaması için tek çekirdek performans optimizasyonunun önemini gösteriyor.

Tip

Node.js üretim dağıtımı en iyi uygulamaları için donanım seçimi kritik önemdedir. JavaScript yürütmesi tek iş parçacıklı olduğu için Node.js uygulamalarında tek çekirdek performansı çok önemlidir; bu yüzden AMD Ryzen erişimi nedeniyle özellikle DataPacket barındırmayı seçtik.

Node.js için Tek Çekirdek Performans Optimizasyonu Neden Önemlidir

Intel'den AMD Ryzen'e geçişimiz sonucunda:

  • İstek işleme performansında %573 iyileşme (belgelenmiş durum sayfamızdaki GitHub Issue #1519)
  • İşlem gecikmelerinin ortadan kalkması ve neredeyse anlık yanıtlar (bahsedilen GitHub Issue #298)
  • Node.js üretim ortamları için daha iyi fiyat-performans oranı
  • Tüm uygulama uç noktalarımızda geliştirilmiş yanıt süreleri

Performans artışı o kadar önemliydi ki, artık AMD Ryzen işlemcileri web uygulamaları, API'ler, mikroservisler veya diğer herhangi bir Node.js iş yükü çalıştırıyor olun, ciddi bir Node.js üretim dağıtımı için vazgeçilmez olarak görüyoruz.

Altyapı seçimlerimiz hakkında daha fazla bilgi için bakınız:

Node.js Üretim Ortamı Kurulumu: Teknoloji Yığınımız

Node.js üretim dağıtımı en iyi uygulamalarımız, yılların üretim deneyimine dayalı kasıtlı teknoloji seçimlerini içerir. İşte kullandıklarımız ve bu seçimlerin herhangi bir Node.js uygulamasına neden uygulanabilir olduğu:

Paket Yöneticisi: Üretim Verimliliği için pnpm

Kullandığımız: pnpm (sabitlenmiş sürüm)

Node.js üretim ortamı kurulumumuz için npm ve yarn yerine pnpm'yi seçtik çünkü:

  • CI/CD boru hatlarında daha hızlı kurulum süreleri
  • Sert bağlantı yoluyla disk alanı verimliliği
  • Hayalet bağımlılıkları önleyen katı bağımlılık çözümü
  • Üretim dağıtımlarında daha iyi performans

Note

Node.js üretim dağıtımı en iyi uygulamalarımızın bir parçası olarak, pnpm gibi kritik araçların tam sürümlerini sabitleyerek tüm ortamlar ve ekip üyelerinin makinelerinde tutarlı davranış sağlıyoruz.

Uygulama detayları:

Web Çatısı: Modern Node.js Üretimi için Koa

Kullandıklarımız:

  • @koa/router
  • @koa/multer
  • @ladjs/koa-simple-ratelimit Node.js üretim altyapımız için Express yerine Koa'yı seçtik çünkü modern async/await desteği ve daha temiz middleware bileşimi sunuyor. Kurucumuz Nick Baugh, hem Express hem de Koa'ya katkıda bulundu, bu da bize her iki framework hakkında üretim kullanımı için derin bir içgörü sağladı.

Bu kalıplar, REST API'leri, GraphQL sunucuları, web uygulamaları veya mikroservisler inşa ediyor olun fark etmez geçerlidir.

Uygulama örneklerimiz:

Arka Plan İşlemeleri: Üretim Güvenilirliği için Bree

Kullandığımız: bree zamanlayıcı

Mevcut iş zamanlayıcıları, üretim Node.js ortamlarında işçi iş parçacığı desteği ve modern JavaScript özellikleri ihtiyaçlarımızı karşılamadığı için Bree'yi oluşturduk ve sürdürüyoruz. Bu, arka plan işlemleri, zamanlanmış görevler veya işçi iş parçacıkları gerektiren herhangi bir Node.js uygulaması için geçerlidir.

Uygulama örneklerimiz:

Hata Yönetimi: Üretim Güvenilirliği için @hapi/boom

Kullandığımız: @hapi/boom

Node.js üretim uygulamalarımızda yapılandırılmış hata yanıtları için @hapi/boom kullanıyoruz. Bu kalıp, tutarlı hata yönetimi gereken herhangi bir Node.js uygulaması için geçerlidir.

Uygulama örneklerimiz:

Üretimde Node.js Uygulamalarını Nasıl İzleriz

Üretimde Node.js uygulamalarını izleme yaklaşımımız, yıllarca ölçekli uygulamalar çalıştırarak evrildi. Her tür Node.js uygulaması için güvenilirlik ve performans sağlamak amacıyla izlemeyi birden fazla katmanda uyguluyoruz.

Sistem Seviyesinde Node.js Üretim İzleme

Temel uygulamamız: helpers/monitor-server.js

Kullandığımız: node-os-utils

Üretim izleme eşiklerimiz (gerçek üretim kodumuzdan):

  • 2GB heap boyutu limiti ile otomatik uyarılar
  • %25 bellek kullanımı uyarı eşiği
  • %80 CPU kullanımı uyarı eşiği
  • %75 disk kullanımı uyarı eşiği

Warning

Bu eşikler, bizim özel donanım konfigürasyonumuz için geçerlidir. Node.js üretim izlemesi uygularken, tam mantığı anlamak ve değerleri kendi kurulumunuza uyarlamak için monitor-server.js uygulamamızı inceleyin.

Uygulama Seviyesinde Node.js Üretim İzleme

Hata sınıflandırmamız: helpers/is-code-bug.js

Bu yardımcı fonksiyon şunları ayırt eder:

  • Derhal müdahale gerektiren gerçek kod hataları
  • Beklenen davranış olan kullanıcı hataları
  • Kontrol edemediğimiz dış servis hataları

Bu kalıp, web uygulamaları, API'ler, mikroservisler veya arka plan servisleri gibi herhangi bir Node.js uygulaması için geçerlidir. Kayıt uygulamamız: helpers/logger.js

Node.js üretim ortamımızda faydalı hata ayıklama yeteneklerini korurken hassas bilgileri korumak için kapsamlı alan sansürleme uyguluyoruz.

Uygulamaya Özel İzleme

Sunucu uygulamalarımız:

Kuyruk izleme: Kaynak tükenmesini önlemek için 5GB kuyruk sınırları ve istek işleme için 180 saniyelik zaman aşımı uyguluyoruz. Bu desenler, kuyrukları veya arka plan işlemleri olan herhangi bir Node.js uygulamasına uygulanır.

PM2 Sağlık Kontrolleri ile Node.js Üretim İzleme

Yılların üretim deneyimiyle PM2 kullanarak Node.js üretim ortamı kurulumumuzu geliştirdik. PM2 sağlık kontrollerimiz, herhangi bir Node.js uygulamasında güvenilirliği sürdürmek için çok önemlidir.

PM2 Sağlık Kontrol Sistemimiz

Temel uygulamamız: jobs/check-pm2.js

PM2 sağlık kontrolleri ile Node.js üretim izlememiz şunları içerir:

  • Her 20 dakikada bir çalışır cron zamanlaması ile
  • Bir işlemi sağlıklı saymadan önce en az 15 dakika çalışma süresi gerektirir
  • İşlem durumu ve bellek kullanımını doğrular
  • Başarısız işlemleri otomatik olarak yeniden başlatır
  • Akıllı sağlık kontrolü ile yeniden başlatma döngülerini önler

Caution

Node.js üretim dağıtımı en iyi uygulamaları için, yeniden başlatma döngülerini önlemek amacıyla bir işlemi sağlıklı saymadan önce 15+ dakika çalışma süresi gerektiriyoruz. Bu, işlemler bellek veya diğer sorunlarla mücadele ederken zincirleme hataları önler.

PM2 Üretim Yapılandırmamız

Ekosistem kurulumumuz: Node.js üretim ortamı kurulumu için sunucu başlatma dosyalarımızı inceleyin:

Bu desenler, Express uygulamaları, Koa sunucuları, GraphQL API'leri veya diğer herhangi bir Node.js uygulaması çalıştırıyor olsanız da geçerlidir.

Otomatik PM2 Dağıtımı

PM2 dağıtımı: ansible/playbooks/node.yml

Tüm PM2 kurulumumuzu Ansible ile otomatikleştiriyoruz, böylece tüm sunucularımızda tutarlı Node.js üretim dağıtımları sağlıyoruz.

Üretim Hata Yönetimi ve Sınıflandırma Sistemi

En değerli Node.js üretim dağıtımı en iyi uygulamalarımızdan biri, herhangi bir Node.js uygulamasına uygulanabilen akıllı hata sınıflandırmasıdır:

Üretim için isCodeBug Uygulamamız

Kaynak: helpers/is-code-bug.js

Bu yardımcı, üretimdeki Node.js uygulamaları için akıllı hata sınıflandırması sağlar:

  • Kullanıcı hatalarından ziyade gerçek hatalara öncelik verir
  • Gerçek sorunlara odaklanarak olay müdahalemizi iyileştirir
  • Beklenen kullanıcı hatalarından kaynaklanan uyarı yorgunluğunu azaltır
  • Uygulama ile kullanıcı kaynaklı sorunları daha iyi anlamamızı sağlar

Bu desen, e-ticaret siteleri, SaaS platformları, API'ler veya mikroservisler geliştiriyor olun fark etmeksizin herhangi bir Node.js uygulaması için çalışır.

Üretim Kayıtlarımızla Entegrasyon

Logger entegrasyonumuz: helpers/logger.js Logger’ımız, gerçek sorunlar hakkında bildirim almamızı sağlarken Node.js üretim ortamımızdaki gürültüyü filtrelemek için uyarı seviyelerini ve alan gizlemeyi belirlemek üzere isCodeBug kullanır.

Hata yönetimi kalıplarımız hakkında daha fazla bilgi edinin:

v8-profiler-next ve cpupro ile Gelişmiş Performans Hata Ayıklama

Üretim ortamımızda heap anlık görüntülerini analiz etmek ve OOM (Bellek Yetersizliği) sorunlarını, performans darboğazlarını ve Node.js bellek problemlerini hata ayıklamak için gelişmiş profil oluşturma araçları kullanıyoruz. Bu araçlar, bellek sızıntısı veya performans sorunları yaşayan herhangi bir Node.js uygulaması için çok önemlidir.

Node.js Üretimi İçin Profil Oluşturma Yaklaşımımız

Önerdiğimiz araçlar:

  • v8-profiler-next - Heap anlık görüntüleri ve CPU profilleri oluşturmak için
  • cpupro - CPU profilleri ve heap anlık görüntülerini analiz etmek için

Tip

Node.js uygulamalarımız için eksiksiz bir performans hata ayıklama iş akışı oluşturmak üzere v8-profiler-next ve cpupro’yu birlikte kullanıyoruz. Bu kombinasyon, bellek sızıntılarını, performans darboğazlarını tespit etmemize ve üretim kodumuzu optimize etmemize yardımcı olur.

Heap Anlık Görüntü Analizini Nasıl Uyguluyoruz

İzleme uygulamamız: helpers/monitor-server.js

Üretim izlememiz, bellek eşik değerleri aşıldığında otomatik heap anlık görüntüsü oluşturmayı içerir. Bu, uygulama çökmelerine neden olmadan önce OOM sorunlarını hata ayıklamamıza yardımcı olur.

Temel uygulama kalıpları:

  • Heap boyutu 2GB eşik değerini aştığında otomatik anlık görüntüler
  • Üretimde talep üzerine analiz için sinyal tabanlı profil oluşturma
  • Anlık görüntü depolamasını yönetmek için saklama politikaları
  • Otomatik bakım için temizlik işleri ile entegrasyon

Performans Hata Ayıklama İş Akışı

Gerçek uygulamamızı inceleyin:

Heap anlık görüntü analizi için:

  1. Anlık görüntü oluşturmak için v8-profiler-next’i yükleyin
  2. Oluşturulan anlık görüntüleri analiz etmek için cpupro’yu kullanın
  3. monitor-server.js benzeri izleme eşik değerleri uygulayın
  4. Anlık görüntü depolamasını yönetmek için otomatik temizlik kurun
  5. Üretimde talep üzerine profil oluşturma için sinyal işleyicileri oluşturun

CPU profilleme için:

  1. Yüksek trafik dönemlerinde CPU profilleri oluşturun
  2. Darboğazları tespit etmek için cpupro ile analiz edin
  3. Sıcak yollar ve optimizasyon fırsatlarına odaklanın
  4. Performans iyileştirmelerinden önce/sonra izleme yapın

Warning

Heap anlık görüntüleri ve CPU profilleri oluşturmak performansı etkileyebilir. Profil oluşturmayı yalnızca belirli sorunları araştırırken veya bakım pencerelerinde etkinleştirmenizi ve sınırlama uygulamanızı öneririz.

Üretim İzlememizle Entegrasyon

Profil oluşturma araçlarımız, daha geniş izleme stratejimizle entegre olur:

  • Bellek/CPU eşik değerlerine göre otomatik tetikleme
  • Performans sorunları tespit edildiğinde uyarı entegrasyonu
  • Zaman içinde performans trendlerini izlemek için tarihsel analiz
  • Kapsamlı hata ayıklama için uygulama metrikleri ile korelasyon Bu yaklaşım, bellek sızıntılarını tespit etmemize ve çözmemize, sıcak kod yollarını optimize etmemize ve Node.js üretim ortamımızda kararlı performansı sürdürmemize yardımcı oldu.

Node.js Üretim Altyapısı Güvenliği

Node.js üretim altyapımız için kapsamlı güvenliği Ansible otomasyonu ile uygularız. Bu uygulamalar herhangi bir Node.js uygulaması için geçerlidir:

Node.js Üretimi için Sistem Düzeyi Güvenlik

Ansible uygulamamız: ansible/playbooks/security.yml

Node.js üretim ortamları için temel güvenlik önlemlerimiz:

  • Swap devre dışı bırakıldı hassas verilerin diske yazılmasını önlemek için
  • Core dump devre dışı bırakıldı hassas bilgileri içeren bellek dökümlerini önlemek için
  • USB depolama engellendi yetkisiz veri erişimini önlemek için
  • Çekirdek parametre ayarları hem güvenlik hem performans için

Warning

Node.js üretim dağıtımı en iyi uygulamalarını uygularken, swap devre dışı bırakmak uygulamanız mevcut RAM'i aşarsa bellek yetersizliği nedeniyle süreçlerin sonlandırılmasına neden olabilir. Bellek kullanımını dikkatle izliyor ve sunucularımızı uygun şekilde boyutlandırıyoruz.

Node.js Uygulamaları için Uygulama Güvenliği

Log alanı sansürleme: helpers/logger.js

Parolalar, tokenlar, API anahtarları ve kişisel bilgiler dahil olmak üzere hassas alanları loglardan sansürlüyoruz. Bu, kullanıcı gizliliğini korurken herhangi bir Node.js üretim ortamında hata ayıklama yeteneklerini sürdürür.

Altyapı Güvenliği Otomasyonu

Node.js üretimi için tam Ansible kurulumu:

Güvenlik İçeriğimiz

Güvenlik yaklaşımımız hakkında daha fazla bilgi edinin:

Node.js Uygulamaları için Veritabanı Mimarisi

Node.js uygulamalarımız için optimize edilmiş hibrit bir veritabanı yaklaşımı kullanıyoruz. Bu desenler herhangi bir Node.js uygulamasına uyarlanabilir:

Node.js Üretimi için SQLite Uygulaması

Kullandıklarımız:

Yapılandırmamız: ansible/playbooks/sqlite.yml

Node.js uygulamalarımızda kullanıcıya özel veriler için SQLite kullanıyoruz çünkü:

  • Kullanıcı/tenant başına veri izolasyonu
  • Tek kullanıcı sorguları için daha iyi performans
  • Basitleştirilmiş yedekleme ve taşıma
  • Paylaşılan veritabanlarına kıyasla azalmış karmaşıklık

Bu desen SaaS uygulamaları, çoklu tenant sistemleri veya veri izolasyonu gereken herhangi bir Node.js uygulaması için iyi çalışır.

Node.js Üretimi için MongoDB Uygulaması

Kullandıklarımız:

Yapılandırmamız: config/mongoose.js

Node.js üretim ortamımızda uygulama verileri için MongoDB kullanıyoruz çünkü şunları sağlar:

  • Esnek şema gelişen veri yapıları için
  • Daha iyi performans karmaşık sorgular için
  • Yatay ölçeklenebilirlik yetenekleri
  • Zengin sorgu dili

Note

Hibrit yaklaşımımız belirli kullanım durumumuz için optimize edilmiştir. Bu yaklaşımın Node.js uygulamanızın ihtiyaçlarına uyup uymadığını anlamak için kod tabanındaki gerçek veritabanı kullanım desenlerimizi inceleyin.

Node.js Üretim Arka Plan İşlem İşleme

Arka plan iş mimarimizi güvenilir Node.js üretim dağıtımı için Bree etrafında kurduk. Bu, arka plan işlemi gereken herhangi bir Node.js uygulaması için geçerlidir:

Üretim için Bree Sunucu Kurulumumuz

Ana uygulamamız: bree.js

Ansible dağıtımımız: ansible/playbooks/bree.yml

Üretim İş Örnekleri

Sağlık izleme: jobs/check-pm2.js

Temizlik otomasyonu: jobs/cleanup-tmp.js

Tüm işlerimiz: Tam iş dizinimize göz atın

Bu desenler, aşağıdakilere ihtiyaç duyan herhangi bir Node.js uygulaması için geçerlidir:

  • Planlanmış görevler (veri işleme, raporlar, temizlik)
  • Arka plan işlemleri (resim yeniden boyutlandırma, e-posta gönderimi, veri aktarımları)
  • Sağlık izleme ve bakım
  • CPU yoğun görevler için işçi iş parçacığı kullanımı

Node.js Üretim için İş Zamanlama Desenlerimiz

Gerçek iş zamanlama desenlerimizi anlamak için iş dizinimizi inceleyin:

  • Node.js üretimde cron benzeri zamanlamayı nasıl uyguladığımız
  • Hata yönetimi ve yeniden deneme mantığımız
  • CPU yoğun görevler için işçi iş parçacıklarını nasıl kullandığımız

Üretim Node.js Uygulamaları için Otomatik Bakım

Yaygın Node.js üretim sorunlarını önlemek için proaktif bakım uygularız. Bu desenler herhangi bir Node.js uygulaması için geçerlidir:

Temizlik Uygulamamız

Kaynak: jobs/cleanup-tmp.js

Node.js üretim uygulamaları için otomatik bakımımız hedefler:

  • 24 saatten eski geçici dosyalar
  • Saklama sınırlarını aşan günlük dosyaları
  • Önbellek dosyaları ve geçici veriler
  • Artık ihtiyaç duyulmayan yüklenen dosyalar
  • Performans hata ayıklama için Heap anlık görüntüleri

Bu desenler, geçici dosya, günlük veya önbelleğe alınmış veri üreten herhangi bir Node.js uygulaması için geçerlidir.

Node.js Üretim için Disk Alanı Yönetimi

İzleme eşiklerimiz: helpers/monitor-server.js

  • Arka plan işlemleri için Kuyruk sınırları
  • %75 disk kullanımı uyarı eşiği
  • Eşikler aşıldığında otomatik temizlik

Altyapı Bakım Otomasyonu

Node.js üretim için Ansible otomasyonumuz:

Node.js Üretim Dağıtım Uygulama Kılavuzu

Üretim İçin Gerçek Kodumuzu İnceleyin

Node.js üretim ortamı kurulumu için bu temel dosyalarla başlayın:

  1. Yapılandırma: config/index.js
  2. İzleme: helpers/monitor-server.js
  3. Hata yönetimi: helpers/is-code-bug.js
  4. Kayıt tutma: helpers/logger.js
  5. Süreç sağlığı: jobs/check-pm2.js

Blog Yazılarımızdan Öğrenin

Node.js üretimi için teknik uygulama rehberlerimiz:

Node.js Üretimi İçin Altyapı Otomasyonu

Node.js üretim dağıtımı için incelemeniz gereken Ansible playbook’larımız:

Vaka Çalışmalarımız

Kurumsal uygulamalarımız:

Sonuç: Node.js Üretim Dağıtımı En İyi Uygulamaları

Node.js üretim altyapımız, Node.js uygulamalarının kurumsal düzeyde güvenilirliğe ulaşabileceğini göstermektedir:

  • Kanıtlanmış donanım seçimleri (AMD Ryzen ile %573 tek çekirdek performans optimizasyonu)
  • Sınırları belirlenmiş ve otomatik yanıtlar içeren savaşta test edilmiş Node.js üretim izleme
  • Üretim ortamlarında olay müdahalesini geliştiren akıllı hata sınıflandırması
  • OOM önleme için v8-profiler-next ve cpupro ile gelişmiş performans hata ayıklama
  • Ansible otomasyonu ile kapsamlı güvenlik sertleştirme
  • Uygulama ihtiyaçlarına göre optimize edilmiş hibrit veritabanı mimarisi
  • Yaygın Node.js üretim sorunlarını önlemek için otomatik bakım

Ana çıkarım: Genel en iyi uygulamaları takip etmek yerine gerçek uygulama dosyalarımızı ve blog yazılarımızı inceleyin. Kod tabanımız, web uygulamaları, API’ler, mikroservisler veya arka plan servisleri gibi herhangi bir Node.js uygulaması için uyarlanabilecek gerçek dünya Node.js üretim dağıtım kalıpları sunar.

Node.js Üretimi İçin Tam Kaynak Listesi

Temel Uygulama Dosyalarımız

Sunucu Uygulamalarımız

Altyapı Otomasyonumuz

Teknik Blog Yazılarımız

Kurumsal Vaka Çalışmalarımız