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:

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.

Altyapı seçeneklerimiz hakkında daha fazla bilgi için şuraya göz atın:

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.

Hata işleme 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ı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çin
  • cpupro - 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:

Yığın anlık görüntü analizi için:

  1. Anlık görüntü oluşturmak için v8-profiler-next yükleyin
  2. Oluşturulan anlık görüntüleri analiz etmek için cpupro kullanın
  3. monitor-server.js dosyamıza benzer şekilde izleme eşikleri uygulayın
  4. Anlık görüntü depolamasını yönetmek için otomatik temizleme ayarlayın
  5. Üretimde isteğe bağlı profilleme için sinyal işleyicileri oluşturun

CPU profili için:

  1. Yüksek yük dönemlerinde CPU profilleri oluşturun
  2. Darboğazları belirlemek için cpupro ile analiz edin
  3. Sıcak yollara** ve optimizasyon fırsatlarına odaklanın
  4. 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:

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:

  1. Yapılandırma: config/index.js
  2. İzleme: helpers/monitor-server.js
  3. Hata işleme: helpers/is-code-bug.js
  4. Günlük kaydı: helpers/logger.js
  5. İşlem durumu: jobs/check-pm2.js

Blog Yazılarımızdan Öğrenin

Node.js üretimi için teknik uygulama kılavuzlarımız:

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

Sunucu Uygulamalarımız

Altyapı Otomasyonumuz

Teknik Blog Yazılarımız

Kurumsal Vaka Çalışmalarımız