Microservice Task

Proje içinde 5 adet servis bulunmaktadır, çoğu HTTP ile haberleşiyorken, bazıları RabbitMQ ile haberleşiyor.

Beklentiler

  • Micro servis mimarisinde olmalıdır.
  • Her servisin kendi database’i olmalıdır.
  • Servisler kendi arasında Request atarak yada bir servis bus(rabbitmq yada kafka) vasıtasıyla konuşmalıdır.
  • Test caseler yazılmalıdır.
  • Sistem docker üzerinde çalışmalıdır.
  • Laravel 10 yada daha yeni sürüm kullanılmalıdır.

Servislerin Tanımı

api-gateway

api-gateway servisi, diğer servislere gitmek isteyen kullanıcıları yönlendirir ve burdan oturumlarını kontrol eder. Oturumu geçerli olan kullanıcı, diğer servislere erişebilir hale geliyor. Normal şartlarda dışarıya açık olması gereken tek servistir. Diğer servislere, parametre olarak user_id iletir.

security

security servisi, kullanıcı yönetimiyle ilgilenir ve kullanıcının oturumunu doğrular. Kullanıcının diğer servisleri kullanabilmesi için bu servisi kullanmalıdır.

  • Sadece user modeli vardır
  • User create hariç tüm endpointlere token ile gidilmelidir
  • User oluşturulduktan sonra hoşgeldin maili gönderilmelidir (içerik önemsiz)
  • User oluşturulduktan sonra kullanıcıya lisans atanmalıdır. (30 günlük demo lisans) (mümkünse rabbitmq üzerinden oluşturulmalıdır.)

license

license servisi, kullanıcının lisansıyla ilgilenir, lisansın süresi dolarsa kullanıcıyı bilgilendirir ve diğer servislere kullanıcılarla ilgili kısıtlamalar uygulanması için bilgi sağlar.

  • Her kullanıcının bir aktif lisansı olabilir

  • Lisans demo olabilir

  • Demo lisansı bir kez atanabilir

  • Demo lisans 30 gün kullanılabilir

  • Lisans maximum dosya boyutu bilgisi tutar (default 100 mb)

  • Lisans günlük gönderilecek dosya sayısını tutar (default 5)

  • Lisans kota bilgisi tutar

  • Cron ile lisans kontrolü yapılıp, süresi dolmuşsa bildirim atıyor.

file-management

file-management servisi, kullanıcıların dosyalarıyla ilgilenir. file-management servisi, license servisini de kullanır. Bunu kullanmasının sebebi; kullanıcının kısıtlamalarına göre hareket etmesini sağlamaktır.

  • Dosya oluşturma ve transferinden sorumludur.
  • Dosya S3, Minio gibi bir ortamda tutulabilir. Ancak Storage altında da olabilir. (Optional) // Storage
  • File Create ederken upload yapılabilir.
  • File Download edilmelidir.
  • File Create Yada Upload aşamasında lisans kontrolü yapılmalıdır.
  • Lisans üzerindeki kısıtlamalara uygun davranılmalıdır.
  • Dosya yüklendiğinde yada silindiğinde bildirim gönderilmelidir.
  • Kota aşım durumlarında da bildirim gönderilmelidir.

notification

notification servisi, kullanıcının bildirimleriyle ilgilenir. Diğer servislerden yapılan bildirimleri, kullanıcıya bildirmek üzere toplar.

  • Gönderilen notificationlar görüntülenebilmelidir (Horizon)
    • Bu kısım ile ilgili redis sorunları yaşadım ve atladım, onun haricindeki maddeler tamamlandı.
  • Bu serviste bir endpoint yoktur
  • Haberleşme rabbitmq üzerinden yapılmalıdır

Bazı Açıklamalar

  • file-management, license, notification ve security servislerinde, her serviste docker/supervisord.conf dosyası var ve bu dosya ile servislerin ihtiyaç duyduğu bazı işlevleri yerine getirmesini sağlar.

  • Notification servisi haricinde, tüm servislerde Feature Test yazıldı.

Kurulum

git clone https://github.com/ahmetbarut/microservice-task.git
docker-compose up # veya docker-compose up -d