Microservices Best Practices listesi şöyle
1. Have A Domain-Driven Design2. Do Not Hard-Code values3. Maintain Logging4. Versioning5. Authentication and Authorization6. Dependency7. Make Executable Contracts8. Fault Tolerance9. Documentation - Swagger veya OpenApi
Loglama
Elimizde şöyle bir çağrı zinciri olsun.
Client -> A->B->C
Eğer C servisinde hata olursa ve tüm servisler aynı hata kodunu loglarsa, 3 tane kopya oluşur. Bu yüzden en doğrusu hatayı A servisinde loglamak. Açıklaması şöyle
If something fails, return immediately and don’t log everywhere. Only Log the error, where you initiated the process. So for the above scenario, you should log the error only in service “A”.
Hata Kodunun Değiştirilmesi
Birbirini zincirleme çağıran servislerde, hata kodu döndüren servis varsa, çağrıyı başlatan servis te aynı hata kodunu döndürmelidir. Eğer farklı bir hata kodu döndürülürse sebebi farklı yorumlanabilir.
Servisler hata kodları olarak HTTP Durum Kodları - 5XX SERVER ERROR Kodları kullanabilirler
Fan-Out/Fan-In API Integration Pattern yazısına da bakabilirsiniz.
Örnek - sıralı çağrılar
Elimizde şöyle bir çağrı zinciri olsun. Eğer C DB bakımda olduğu için isteği işleyemezse ve Http kodu 503 - Service Unavailable dönerse ancak B bunu 4XX haline getirirse ve A da 4XX dönerse, bu sefer Client kendi çağrısında bir parametre hatası olduğunu düşünecektir.
Client -> A->B->C->DB
Örnek - fan out çağrılar
Bir servis bir sürü servisi daha çağırıyorsa ve bunların sonuçlarını ayrı ayrı dönebilir.
Örnek
Çıktı şuna benzer
//response payload from Expedia flights service to Expedia{"httpCode": 200,"vendorAndFlights": [{"vendorName": "United Airline","statusCode": 500,"flights": null},{"vendorName": "Cathay Pacific Airways","statusCode": 404,"flights": null},{"vendorName": "Emirates","statusCode": 200,"flights":[{"from": ..."to": ...}]}}
Hiç yorum yok:
Yorum Gönder