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

Önsöz
Forward Email olarak, Node.js üretim ortamı kurulumumuzu mükemmelleştirmek için yıllar harcadık. Bu kapsamlı kılavuz, Node.js üretim dağıtımında en iyi uygulamalarımızı paylaşıyor ve performans optimizasyonu, izleme ve Node.js uygulamalarını milyonlarca günlük işlemi yönetecek şekilde ölçeklendirme konusunda edindiğimiz derslere odaklanıyor.
%573 Tek Çekirdek Performans Optimizasyonu Devrimimiz
Intel'den AMD Ryzen işlemcilere geçiş yaptığımızda, Node.js uygulamalarımızda %573'lük bir performans artışı elde ettik. Bu, yalnızca küçük bir iyileştirme değildi; Node.js uygulamalarımızın üretimdeki performansını temelden değiştirdi ve tüm Node.js uygulamaları için tek çekirdek performans optimizasyonunun önemini ortaya koydu.
Tip
Node.js üretim dağıtımının en iyi uygulamaları için donanım seçimi kritik öneme sahiptir. JavaScript yürütmesi tek iş parçacıklı olduğundan, tek çekirdek performansı Node.js uygulamaları için hayati önem taşıdığından, AMD Ryzen kullanılabilirliği nedeniyle özellikle DataPacket barındırma hizmetini seçtik.
Node.js için Tek Çekirdek Performans Optimizasyonunun Önemi
Intel'den AMD Ryzen'a geçişimiz şu sonuçları doğurdu:
- İstek işlemede %573 performans iyileştirmesi (Durum sayfamızın GitHub Sorunu #1519)
- İşlem gecikmeleri ortadan kaldırıldı ve neredeyse anında yanıtlar sağlandı ([GitHub Sorunu #298](https://github.com/forwardemail/forwardemail.net/issues/298]'de belirtilmiştir)
- Node.js üretim ortamları için daha iyi fiyat-performans oranı
- Tüm uygulama uç noktalarımızda iyileştirilmiş yanıt süreleri
Performans artışı o kadar önemliydi ki, ister web uygulamaları, ister API'ler, ister mikro hizmetler veya başka herhangi bir Node.js iş yükü çalıştırıyor olun, artık AMD Ryzen işlemcileri her türlü ciddi Node.js üretim dağıtımı için olmazsa olmaz olarak görüyoruz.
İlgili İçerikler
Altyapı seçeneklerimiz hakkında daha fazla bilgi için şuraya göz atın:
- En İyi E-posta Yönlendirme Hizmeti - Performans karşılaştırmaları bölümünde belgelenmiştir)
- Kendinden 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 dayanan bilinçli teknoloji seçimlerini içerir. Kullandığımız teknolojiler ve bu seçimlerin herhangi bir Node.js uygulaması için neden geçerli olduğu aşağıda açıklanmıştır:
Paket Yöneticisi: Üretim Verimliliği için pnpm
Ne kullanıyoruz: pnpm
(sabitlenmiş sürüm)
Node.js üretim ortamı kurulumumuzda npm ve yarn yerine pnpm'i seçtik çünkü:
- CI/CD süreçlerinde daha hızlı kurulum süreleri
- Sabit bağlantı sayesinde disk alanı verimliliği
- Hayali bağımlılıkları önleyen sıkı 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, tüm ortamlarda ve ekip üyelerinin makinelerinde tutarlı davranış sağlamak için pnpm gibi kritik araçların tam sürümlerini sabitliyoruz.
Uygulama detayları:
Web Çerçevesi: Modern Node.js Üretimi için Koa
Ne kullanıyoruz:
Node.js üretim altyapımız için Express yerine Koa'yı seçtik çünkü modern asenkron/bekleme desteği ve daha temiz ara yazılım yapısı sunuyor. Kurucumuz Nick Baugh, hem Express hem de Koa'ya katkıda bulunarak, her iki çerçevenin de üretimde kullanımı hakkında derinlemesine bilgi edinmemizi sağladı.
Bu kalıplar, REST API'leri, GraphQL sunucuları, web uygulamaları veya mikro hizmetler oluşturuyor olsanız da geçerlidir.
Uygulama örneklerimiz:
Arka Plan İş İşleme: Üretim Güvenilirliği için Bree
Ne kullanıyoruz: bree
zamanlayıcı
Bree'yi oluşturduk ve sürdürdük çünkü mevcut iş zamanlayıcıları, üretim Node.js ortamlarında çalışan iş parçacığı desteği ve modern JavaScript özellikleri için ihtiyaçlarımızı karşılamıyordu. Bu, arka plan işleme, zamanlanmış görevler veya çalışan iş parçacıklarına ihtiyaç duyan tüm Node.js uygulamaları için geçerlidir.
Uygulama örneklerimiz:
Hata İşleme: Üretim Güvenilirliği için @hapi/boom
Ne kullanıyoruz: @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 gerektiren tüm Node.js uygulamaları için uygundur.
Uygulama örneklerimiz:
Üretimde Node.js Uygulamaları Nasıl İzlenir?
Üretim ortamında Node.js uygulamalarını izleme yaklaşımımız, yıllardır büyük ölçekte uygulama çalıştırma deneyimimizle gelişti. Her türlü Node.js uygulaması için güvenilirlik ve performans sağlamak amacıyla izlemeyi birden fazla katmanda uyguluyoruz.
Sistem Düzeyinde Node.js Üretim İzleme
Temel uygulamamız: helpers/monitor-server.js
Ne kullanıyoruz: node-os-utils
Üretim izleme eşiklerimiz (gerçek üretim kodumuzdan):
- 2 GB yığın boyutu sınırı otomatik uyarılarla
- %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, özel donanım yapılandırmamız için geçerlidir. Node.js üretim izlemesini uygularken, tam mantığı anlamak ve değerleri kurulumunuza uyarlamak için monitor-server.js uygulamamızı inceleyin.
Node.js Üretimi için Uygulama Düzeyinde İzleme
Hata sınıflandırmamız: helpers/is-code-bug.js
Bu yardımcı şunları birbirinden ayırır:
- Acil müdahale gerektiren gerçek kod hataları
- Beklenen davranış olan kullanıcı hataları
- Kontrol edemediğimiz harici hizmet arızaları
Bu desen tüm Node.js uygulamalarına uygulanabilir - web uygulamaları, API'ler, mikro hizmetler veya arka plan hizmetleri.
Günlük kaydı uygulamamız: helpers/logger.js
Node.js üretim ortamımızda hassas bilgileri korurken, yararlı hata ayıklama yeteneklerini de koruyarak kapsamlı alan düzenlemesi uyguluyoruz.
Uygulamaya Özel İzleme
Sunucu uygulamalarımız:
Kuyruk izleme: Kaynak tükenmesini önlemek için istek işlemede 5 GB'lık kuyruk sınırlamaları ve 180 saniyelik zaman aşımları uyguluyoruz. Bu kalıplar, kuyruk veya arka plan işleme özelliğine sahip tüm Node.js uygulamaları için geçerlidir.
PM2 Sağlık Kontrolleriyle Node.js Üretim İzleme
Yılların üretim deneyimiyle Node.js üretim ortamı kurulumumuzu PM2 ile geliştirdik. PM2 sağlık kontrollerimiz, herhangi bir Node.js uygulamasında güvenilirliği korumak için olmazsa olmazdır.
PM2 Sağlık Kontrol Sistemimiz
Temel uygulamamız: jobs/check-pm2.js
PM2 sağlık kontrolleri içeren Node.js üretim izleme sistemimiz şunları içerir:
- Cron zamanlaması aracılığıyla her 20 dakikada bir çalışır
- Bir işlemin sağlıklı olarak değerlendirilmesi için en az 15 dakika kesintisiz çalışma süresi gerekir
- İşlem durumunu 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ü aracılığıyla yeniden başlatma döngülerini önler
Caution
Node.js üretim dağıtımının en iyi uygulamaları için, yeniden başlatma döngülerinden kaçınmak amacıyla bir işlemin sağlıklı olarak değerlendirilmesinden önce 15 dakikadan fazla çalışma süresine ihtiyacımız var. Bu, işlemler bellek veya diğer sorunlarla boğuştuğunda ardışık arızaların oluşmasını önler.
PM2 Üretim Yapılandırmamız
Ekosistem kurulumumuz: Node.js üretim ortamı kurulumu için sunucu başlangıç dosyalarımızı inceleyin:
Bu kalıplar, Express uygulamaları, Koa sunucuları, GraphQL API'leri veya diğer Node.js uygulamalarını çalıştırıyor olmanıza bakılmaksızın geçerlidir.
Otomatik PM2 Dağıtımı
PM2 dağıtımı: ansible/playbooks/node.yml
Tüm sunucularımızda tutarlı Node.js üretim dağıtımlarını garantilemek için tüm PM2 kurulumumuzu Ansible aracılığıyla otomatikleştiriyoruz.
Üretim Hata İşleme ve Sınıflandırma Sistemi
En değerli Node.js üretim dağıtım 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ı yerine gerçek hatalara öncelik verin
- Gerçek sorunlara odaklanarak olay müdahalemizi iyileştirin
- Beklenen kullanıcı hatalarından kaynaklanan uyarı yorgunluğunu azaltın
- Uygulama kaynaklı sorunları kullanıcı kaynaklı sorunlara kıyasla daha iyi anlayın
Bu model, e-ticaret siteleri, SaaS platformları, API'ler veya mikro hizmetler oluşturuyor olun, tüm Node.js uygulamaları için işe yarar.
Üretim Kaydımızla Entegrasyon
Kaydedici entegrasyonumuz: helpers/logger.js
Kaydedicilerimiz, uyarı seviyelerini ve alan düzenlemelerini belirlemek için isCodeBug
'ı kullanır ve Node.js üretim ortamımızda gürültüyü filtrelerken gerçek sorunlar hakkında bildirim aldığımızdan emin olur.
İlgili İçerik
Hata işleme kalıplarımız hakkında daha fazla bilgi edinin:
- Güvenilir Ödeme Sistemi Oluşturma - Hata işleme kalıpları
- E-posta Gizlilik Koruması - Güvenlik hatası işleme
v8-profiler-next ve cpupro ile Gelişmiş Performans Hata Ayıklama
Üretim ortamımızdaki yığın anlık görüntülerini analiz etmek ve OOM (Bellek Yetersizliği) sorunlarını, performans darboğazlarını ve Node.js bellek sorunlarını gidermek için gelişmiş profil oluşturma araçları kullanıyoruz. Bu araçlar, bellek sızıntıları veya performans sorunları yaşayan tüm Node.js uygulamaları için olmazsa olmazdır.
Node.js Üretimi için Profilleme Yaklaşımımız
Önerdiğimiz araçlar:
v8-profiler-next
- Yığın anlık görüntüleri ve CPU profilleri oluşturmak içincpupro
- CPU profillerini ve yığın 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 amacıyla v8-profiler-next ve cpupro'yu birlikte kullanıyoruz. Bu kombinasyon, bellek sızıntılarını, performans darboğazlarını belirlememize ve üretim kodumuzu optimize etmemize yardımcı oluyor.
Yığın Anlık Görüntü Analizini Nasıl Uyguluyoruz?
İzleme uygulamamız: helpers/monitor-server.js
Üretim izleme sistemimiz, bellek eşikleri aşıldığında otomatik yığın anlık görüntüsü oluşturmayı içerir. Bu, uygulama çökmelerine neden olmadan önce OOM sorunlarını gidermemize yardımcı olur.
Temel uygulama kalıpları:
- Yığın boyutu 2 GB eşiğini aştığında otomatik anlık görüntüler
- Üretimde isteğe bağlı analiz için Sinyal tabanlı profilleme
- Anlık görüntü depolamasını yönetmek için Saklama politikaları
- Otomatik bakım için Temizleme işlerimizle entegrasyon
Performans Hata Ayıklama İş Akışı
Gerçek uygulamamızı inceleyin:
- Sunucu uygulamasını izleyin - Yığın izleme ve anlık görüntü oluşturma
- Temizlik işi - Anlık görüntü saklama ve temizleme
- Logger entegrasyonu - Performans günlüğü kaydı
Node.js Uygulamanız İçin Önerilen Uygulama
Yığın anlık görüntü analizi için:
- Anlık görüntü oluşturmak için v8-profiler-next yükleyin
- Oluşturulan anlık görüntüleri analiz etmek için cpupro kullanın
- monitor-server.js dosyamıza benzer şekilde izleme eşikleri uygulayın
- Anlık görüntü depolamasını yönetmek için otomatik temizleme ayarlayın
- Üretimde isteğe bağlı profilleme için sinyal işleyicileri oluşturun
CPU profili için:
- Yüksek yük dönemlerinde CPU profilleri oluşturun
- Darboğazları belirlemek için cpupro ile analiz edin
- Sıcak yollara** ve optimizasyon fırsatlarına odaklanın
- Performans iyileştirmelerini önce/sonra izleyin
Warning
Yığın anlık görüntüleri ve CPU profilleri oluşturmak performansı etkileyebilir. Kısıtlama uygulamanızı ve profillemeyi yalnızca belirli sorunları araştırırken veya bakım aralıkları sırasında etkinleştirmenizi öneririz.
Üretim İzleme Sistemimizle Entegrasyon
Profil oluşturma araçlarımız daha geniş izleme stratejimizle bütünleşir:
- Bellek/CPU eşiklerine dayalı Otomatik tetikleme
- Performans sorunları tespit edildiğinde Uyarı entegrasyonu
- Zaman içindeki performans eğilimlerini izlemek için Geçmiş analizi
- Kapsamlı hata ayıklama için Uygulama ölçümleriyle korelasyon
Bu yaklaşım, bellek sızıntılarını tespit edip çözmemize, sıcak kod yollarını optimize etmemize ve Node.js üretim ortamımızda istikrarlı performansı korumamıza yardımcı oldu.
Node.js Üretim Altyapısı Güvenliği
Ansible otomasyonu aracılığıyla Node.js üretim altyapımız için kapsamlı güvenlik sağlıyoruz. Bu uygulamalar tüm Node.js uygulamaları için geçerlidir:
Node.js Üretimi için Sistem Düzeyinde Güvenlik
Ansible uygulamamız: ansible/playbooks/security.yml
Node.js üretim ortamları için temel güvenlik önlemlerimiz:
- Hassas verilerin diske yazılmasını önlemek için Swap devre dışı
- Hassas bilgiler içeren bellek dökümlerini önlemek için Çekirdek dökümleri devre dışı
- Yetkisiz veri erişimini önlemek için USB depolama engellendi
- Hem güvenlik hem de performans için Çekirdek parametresi ayarı
Warning
Node.js üretim dağıtım en iyi uygulamalarını uygularken, takas özelliğini devre dışı bırakmak, uygulamanızın kullanılabilir RAM'i aşması durumunda bellek yetersizliği nedeniyle çökmelere 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
Günlük alanı düzenlememiz: helpers/logger.js
Şifreler, belirteçler, API anahtarları ve kişisel bilgiler dahil olmak üzere hassas alanları günlüklerden düzenliyoruz. Bu sayede, herhangi bir Node.js üretim ortamında hata ayıklama yeteneklerini korurken kullanıcı gizliliğini de koruyoruz.
Altyapı Güvenlik Otomasyonu
Node.js üretimi için eksiksiz Ansible kurulumumuz:
Güvenlik İçeriğimiz
Güvenlik yaklaşımımız hakkında daha fazla bilgi edinin:
- En İyi Güvenlik Denetim Şirketleri
- Quantum Safe Şifreli E-posta
- Neden Açık Kaynaklı 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 kalıplar herhangi bir Node.js uygulamasına uyarlanabilir:
Node.js Üretimi için SQLite Uygulaması
Ne kullanıyoruz:
Yapılandırmamız: ansible/playbooks/sqlite.yml
Node.js uygulamalarımızda kullanıcıya özel veriler için SQLite kullanıyoruz çünkü şunları sağlıyor:
- Kullanıcı/kiracı başına veri izolasyonu
- Tek kullanıcı sorguları için daha iyi performans
- Basitleştirilmiş yedekleme** ve geçiş
- Paylaşımlı veritabanlarına kıyasla Daha az karmaşıklık
Bu model, SaaS uygulamaları, çok kiracılı sistemler veya veri izolasyonuna ihtiyaç duyan herhangi bir Node.js uygulaması için iyi çalışır.
Node.js Üretimi için MongoDB Uygulaması
Ne kullanıyoruz:
Kurulum 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ğlıyor:
- Gelişen veri yapıları için Esnek şema
- Karmaşık sorgular için Daha iyi performans
- Yatay ölçekleme** yetenekleri
- Zengin sorgu dili**
Note
Hibrit yaklaşımımız, özel kullanım senaryomuza göre optimize edilmiştir. Bu yaklaşımın Node.js uygulamanızın ihtiyaçlarına uygun olup olmadığını anlamak için kod tabanındaki gerçek veritabanı kullanım modellerimizi inceleyin.
Node.js Üretim Arkaplan İş İşleme
Güvenilir Node.js üretim dağıtımı için arka plan iş mimarimizi Bree etrafında oluşturduk. Bu, arka plan işlemeye ihtiyaç duyan tüm Node.js uygulamaları 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 İşi Örnekleri
Sağlık izleme: jobs/check-pm2.js
Temizlik otomasyonu: jobs/cleanup-tmp.js
Tüm işlerimiz: Tam iş ilanları dizinimize göz atın
Bu kalıplar, aşağıdakilere ihtiyaç duyan herhangi bir Node.js uygulaması için geçerlidir:
- Zamanlanmış görevler (veri işleme, raporlar, temizleme)
- Arka plan işleme (görüntü yeniden boyutlandırma, e-posta gönderme, veri içe aktarma)
- Sağlık izleme ve bakım
- CPU yoğun görevler için çalışan iş parçacığı kullanımı
Node.js Üretimi için İş Planlama Modellerimiz
İş rehberimizdeki gerçek iş planlama kalıplarımızı inceleyerek şunları anlayabilirsiniz:
- Node.js üretiminde cron benzeri zamanlamayı nasıl uyguluyoruz
- Hata yönetimi ve yeniden deneme mantığımız
- CPU yoğun görevler için çalışan iş parçacıklarını nasıl kullanıyoruz
Üretim Node.js Uygulamaları için Otomatik Bakım
Yaygın Node.js üretim sorunlarını önlemek için proaktif bakım uyguluyoruz. Bu kalıplar tüm Node.js uygulamaları için geçerlidir:
Temizleme Uygulamamız
Kaynak: jobs/cleanup-tmp.js
Node.js üretim uygulamaları için otomatik bakımımızın hedefleri:
- 24 saatten eski Geçici dosyalar
- Saklama sınırlarının ötesindeki Günlük dosyaları
- Önbellek dosyaları ve geçici veriler
- Artık ihtiyaç duyulmayan Yüklenen dosyalar
- Performans hata ayıklamasından Yığın anlık görüntüleri
Bu kalıplar, geçici dosyalar, günlükler veya önbelleğe alınmış veriler üreten tüm Node.js uygulamaları için geçerlidir.
Node.js Üretimi 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 temizleme
Altyapı Bakım Otomasyonu
Node.js üretimi için Ansible otomasyonumuz:
Node.js Üretim Dağıtım Uygulama Kılavuzu
Üretim En İyi Uygulamaları için Gerçek Kodumuzu İnceleyin
Node.js üretim ortamı kurulumu için şu temel dosyalarla başlayın:
- Yapılandırma:
config/index.js
- İzleme:
helpers/monitor-server.js
- Hata işleme:
helpers/is-code-bug.js
- Günlük kaydı:
helpers/logger.js
- İşlem durumu:
jobs/check-pm2.js
Blog Yazılarımızdan Öğrenin
Node.js üretimi için teknik uygulama kılavuzlarımız:
- NPM Paketleri Ekosistemi
- Bina Ödeme Sistemleri
- E-posta Gizliliği Uygulaması
- JavaScript İletişim Formları
- React E-posta Entegrasyonu
Node.js Üretimi için Altyapı Otomasyonu
Node.js üretim dağıtımı için inceleyeceğimiz Ansible kılavuzları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 aşağıdakiler aracılığıyla kurumsal düzeyde güvenilirliğe ulaşabileceğini göstermektedir:
- Kanıtlanmış donanım seçenekleri (%573 tek çekirdek performans optimizasyonu için AMD Ryzen)
- Savaşta test edilmiş Node.js üretim izleme, belirli eşikler ve otomatik yanıtlarla
- Üretim ortamlarında olay yanıtını iyileştirmek için 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 güçlendirmesi
- Uygulama ihtiyaçları için optimize edilmiş hibrit veritabanı mimarisi
- **Yaygın Node.js üretim sorunlarını önlemek için Otomatik bakım
Önemli Nokta: 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, mikro hizmetler veya arka plan hizmetleri gibi herhangi bir Node.js uygulamasına uyarlanabilen Node.js üretim dağıtımı için gerçek dünya kalıpları sunar.
Node.js Üretimi iç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 temizleme
Sunucu Uygulamalarımız
Altyapı Otomasyonumuz
Teknik Blog Yazılarımız
- NPM Ekosistem Analizi
- Ödeme Sistemi Uygulaması
- E-posta Gizliliği Teknik Kılavuzu
- JavaScript İletişim Formları
- React E-posta Entegrasyonu
- Kendinden Barındırılan Çözüm Kılavuzu