Node.js Üretim Altyapısını Nasıl Optimize Edilir: En İyi Uygulamalar
Ö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.
İlgili İçerik
Altyapı seçimlerimiz hakkında daha fazla bilgi için bakınız:
- En İyi E-posta Yönlendirme Servisi - Performans karşılaştırmaları
- Kendi Kendine Barındırılan Çözüm - Donanım önerileri
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-ratelimitNode.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.
İlgili İçerik
Hata yönetimi kalıplarımız hakkında daha fazla bilgi edinin:
- Güvenilir Ödeme Sistemi Kurmak - Hata yönetimi kalıpları
- E-posta Gizlilik Koruması - Güvenlik hata yönetimi
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çincpupro- 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:
- Sunucu izleme uygulaması - Heap izleme ve anlık görüntü oluşturma
- Temizlik işi - Anlık görüntü saklama ve temizlik
- Logger entegrasyonu - Performans kaydı
Node.js Uygulamanız İçin Önerilen Uygulama
Heap anlık görüntü analizi için:
- Anlık görüntü oluşturmak için v8-profiler-next’i yükleyin
- Oluşturulan anlık görüntüleri analiz etmek için cpupro’yu kullanın
monitor-server.jsbenzeri izleme eşik değerleri uygulayın- Anlık görüntü depolamasını yönetmek için otomatik temizlik kurun
- Üretimde talep üzerine profil oluşturma için sinyal işleyicileri oluşturun
CPU profilleme için:
- Yüksek trafik dönemlerinde CPU profilleri oluşturun
- Darboğazları tespit etmek için cpupro ile analiz edin
- Sıcak yollar ve optimizasyon fırsatlarına odaklanın
- 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:
- En İyi Güvenlik Denetim Şirketleri
- Kuantum Güvenli Şifreli E-posta
- Neden Açık Kaynak E-posta Güvenliği
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:
@ladjs/mongoose@ladjs/mongoose-error-messages@zainundin/mongoose-factoryKurulum uygulamamız:helpers/setup-mongoose.js
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:
- Yapılandırma:
config/index.js - İzleme:
helpers/monitor-server.js - Hata yönetimi:
helpers/is-code-bug.js - Kayıt tutma:
helpers/logger.js - Süreç sağlığı:
jobs/check-pm2.js
Blog Yazılarımızdan Öğrenin
Node.js üretimi için teknik uygulama rehberlerimiz:
- NPM Paketleri Ekosistemi
- Ödeme Sistemleri Kurmak
- E-posta Gizliliği Uygulaması
- JavaScript İletişim Formları
- React E-posta Entegrasyonu
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
- Ana yapılandırma
- Paket bağımlılıkları
- Sunucu izleme
- Hata sınıflandırması
- Kayıt sistemi
- PM2 sağlık kontrolleri
- Otomatik temizlik
Sunucu Uygulamalarımız
Altyapı Otomasyonumuz
Teknik Blog Yazılarımız
- NPM Ekosistem Analizi
- Ödeme Sistemi Uygulaması
- E-posta Gizliliği Teknik Rehberi
- JavaScript İletişim Formları
- React E-posta Entegrasyonu
- Kendi Kendine Barındırılan Çözüm Rehberi