Bu proje, birden fazla sunucunun dağıtık bir küme (“family”) oluşturduğu, gRPC + Protobuf ile kendi aralarında haberleştiği ve aynı zamanda lider üye (cluster gateway) üzerinden dış dünyadan gelen TCP text mesajlarını tüm üyelere broadcast ettiği hibrit bir mimari örneğidir.
Sistem Programlama, Dağıtık Sistemler veya gRPC uygulama taslağı olarak kullanınız.
Her yeni Üye:
- 5555’ten başlayarak boş bir port bulur
- Kendinden önce gelen üyelere gRPC katılma (Join) isteği gönderir
- Aile (Family) listesine otomatik dahil olur.
İlk başlayan Üye (port 5555) otomatik olarak lider kabul edilir ve:
- TCP port 6666 üzerinden dış dünyadan text mesajı dinler
- Her mesajı Protobuf formatına dönüştürür
- Tüm diğer üyelere gRPC üzerinden gönderir
Üyeler kendi aralarında sadece protobuf message ile haberleşir:
message ChatMessage {
string text = 1;
string fromHost = 2;
int32 fromPort = 3;
int64 timestamp = 4;
}Her üye, düzenli olarak diğer aile üyeleri listesini ekrana basar:
======================================
Family at 127.0.0.1:5557 (me)
Time: 2025-11-13T21:05:00
Members:
- 127.0.0.1:5555
- 127.0.0.1:5556
- 127.0.0.1:5557 (me)
======================================
Health-check mekanizması ile kopan (offline) üyeler aile listesinden çıkarılır.
distributed-disk-register/
│
├── pom.xml
├── README.md
├── src
│ └── main
│ ├── java/com/example/family/
│ │ ├── NodeMain.java
│ │ ├── NodeRegistry.java
│ │ └── FamilyServiceImpl.java
│ │
│ └── proto/
│ └── family.proto
Yüksek seviyeli dillerde yazılım geliştirme işlemi basit bir editörden ziyade gelişmiş bir IDE (Integrated Development Environment) ile yapılması tavsiye edilmektedir. JVM ailesi dillerinin en çok tercih edilen IntelliJ IDEA aracını edu' lu mail adresinizle öğrenci lisanslı olarak indirip kullanabilirsiniz. Bu projeyi diskinize klonladıktan sonra IDEA' yı açıp, üst menüden Open seçeneği projenin pom.xml dosyasını seçtiğinizde projeniz açılacaktır.
Proje dizininde (pom.xml in olduğu):
mvn clean compileBu komut:
family.proto→ gRPC Java sınıflarını üretir- Tüm server kodlarını derler
Her bir terminal yeni bir üye demektir.
mvn exec:java -Dexec.mainClass=com.example.family.NodeMainÇıktı:
Node started on 127.0.0.1:5555
Leader listening for text on TCP 127.0.0.1:6666
...
Her yeni terminal:
mvn exec:java -Dexec.mainClass=com.example.family.NodeMainÜyeler 5556, 5557, 5558… portlarını otomatik bulur ve aileye katılır.
Lider Üye, dış dünyadan gelen text’i 6666 portunda bekler.
Yeni bir terminal aç:
nc 127.0.0.1 6666Veya:
telnet 127.0.0.1 6666Mesaj yaz:
Merhaba distributed world!
Bu mesaj protobuf mesajına çevrilip tüm üyelere gider.
💬 Incoming message:
From: 127.0.0.1:5555
Text: Merhaba distributed world!
Timestamp: 1731512345678
--------------------------------------
Yeni Üye, kendinden önceki portları gRPC ile yoklar:
5555 → varsa Join
5556 → varsa Join
...
Lider Üye:
- TCP 6666’dan text alır,
- Protobuf
ChatMessagenesnesine çevirir, - Tüm kardeş üyelere gRPC RPC gönderir.
Her üye 10 saniyede bir kendi ailesini ekrana basar.
Öğrenciler:
- Üye düşme tespiti (heartbeat)
- Leader election
- gRPC streaming ile real-time chat
- Redis-backed cluster membership
- Broadcast queue implementasyonu
- TCP’den gelen mesajların loglanması
- Çoklu lider senaryosu & conflict resolution
gibi özellikler ekleyebilir.
MIT — Eğitim ve araştırma amaçlı serbestçe kullanılabilir.
Pull request’e her zaman açığız! Yeni özellik önerileri için issue açabilirsiniz.


