İçeriğe geç
Yasir Uslu
Tüm işler

Dağıtık telemetri platformu (EdgePulse)

CorePulse

EdgePulse, makinelerin CPU, bellek ve çalışma süresi verisini toplayıp eşik aşımlarında anında alarm veren dağıtık bir telemetri platformu. CorePulse ise aynı fikrin portföyde çalışan canlı web demosu: sunucunun ve ziyaretçinin kendi cihazının donanımını gerçek zamanlı gösterir.

Durum
Canlıda
Araçlar
.NET 8 · ASP.NET Core · RabbitMQ · SignalR · PostgreSQL · Angular 17 · Docker · Next.js
CorePulse ekran görüntüsü

Problem

Telemetri toplamak kolay; zor olan, ölçümleri kaybetmeden taşımak, alarmı toplama işini yavaşlatmadan değerlendirmek ve sonucu arayüze anında iletmek. Amaç, bu parçaları birbirinden ayrık servislerle kurmaktı.

Rolüm

Tek geliştirici: servis mimarisi, .NET servisleri, toplayıcı ajan, Angular arayüzü ve portföydeki web demosu.

Yaklaşım

  1. 01

    Olay hattı

    Toplayıcı ajan → YARP ağ geçidi (.NET 8) → Telemetry.API (ASP.NET Core 8) → RabbitMQ → Alert.Worker → SignalR → Angular. Ölçümü alan servis ile alarmı değerlendiren servis kuyrukla ayrıldığı için biri yavaşlasa diğeri etkilenmez.

  2. 02

    Kural tabanlı alarm

    .NET 8 Worker Service, her metrik için ayarlanabilir eşikleri değerlendirir ve alarmı SignalR hub’ı üzerinden açık panolara anında iter; veriler PostgreSQL 16’da saklanır.

  3. 03

    Kopmaya dayanıklı ajan

    Node.js toplayıcı ajan, ağ geçidine ulaşamadığında ölçümleri yerelde kuyruğa alır ve bağlantı dönünce gönderir. Tüm servisler Docker Compose ile tek komutla ayağa kalkar.

  4. 04

    Portföydeki canlı demo

    CorePulse sayfası kurulum istemeden çalışsın diye Next.js üzerinde: bir route handler Node’un os modülünden CPU ve belleği okur, ziyaretçinin ekran kartı WebGL ile tespit edilir, grafikler SVG ile çizilir; istek üzerine sunucuda yük testi çalışır.

Zorlu an

Tek okuma yük söylemez

İşletim sistemi CPU zamanlarını açılıştan beri birikmiş olarak verir; tek bir okuma anlık yükü göstermez. Önceki okuma bellekte tutulur ve yük iki ardışık okuma arasındaki boşta/toplam farkından hesaplanır; ilk okuma yalnızca başlangıç noktasını kaydeder.