Bu değerlendirme işe başvuru sürecindeki adaylar için hazırlanmış olup, katılacak kimselerin yaklaşım ve yetkinliklerini değerlendirmede bizlere yardımcı olmak için tasarlanmıştır.
Değerlendirme dahilinde; belirtilen süre içerisinde aşağıda kapsamı ve detayları belirlenmiş projeyi tamamlamanızı beklemekteyiz. Dikkat edebileceğiniz bir diğer husus ise, bizlerin doğru bir değerlendirme yapmamıza yardımcı olacak şekilde iletebileceğiniz en iyi çalışmayı bizlere teslim ediyor olmanız.
Birçok mikroservisin olduğu bir sistemde, diğer servislerde oluşan olay/eventleri toparlayacak yeni bir mikroservis oluşturacağız.
Yeni servisimiz üzerindeki tek REST API endpoint aracılığı ile diğer servislerden olayı detaylarıyla birlikte alacak ve Kafka'ya iletecek.
Kafka ise aldığı mesajları minimum 2 farklı sisteme dağıtacak. Bu iki sistemde de bu mesajları karşılamak yine bizim görevimiz olacak.
-
Kaynak sistemde oluşan olay/eventler, oluşturulacak yeni bir servise HTTP kanalı üzerinden bir dizi/array biçiminde iletilecektir.
-
Servise iletilen her bir olay/event mesaj kuyruğuna bir mesaj nesnesi olarak eklenecektir.
-
Mesaj kuyruğu işlenirken mesajların yazıldığı kanalda n adet abone/subscriber olacak, Örneğin:
-
İlk abone olayı detayları ile ElasticSearch üzerine yazacak,
-
İkinci abone olayı Postgres’de oluşturulmuş tablo üzerine kaydedecek,
-
NOT: Değerlendirme ile ilgili beklentiler için Teknik Beklentiler bölümünü dikkatli okuyunuz.
-
Kullanılacak Teknolojiler:
- JavaScript veya .NET Core
- Kafka
- Docker
- Git
-
Kısıtlamalar ve Gereksinimler:
- Projenin sık commitlerle Git üzerinde geliştirilmesi
- Git üzerinde master, development branchleri ve sürüm taglemelerinin kullanımı
- Minimum %60 unit testing code coverage
- Mesajları diğer servislerden toplayan ve kanallarda karşılayan tüm uygulamaların docker-compose dosyasına işlenmesi
docker-compose up
komutu ile tüm sistemin ayağa kaldırılabilirliği- Projenin nasıl çalıştırılacağına dair README.md dokümantasyonu
-
Akış:
- HTTP üzerinden oluşturulacak bir mikroservis oluşturularak aşağıdaki API yapısını benimsemesi sağlanmalı
- Mikroservis mesajları ayağa kalkan bir Kafka'ya iletmeli
- Kafka'daki mesajlar oluşturulacak başka mikroservisleri tetiklemeleri sağlanmalı
- Minimum 2 servisin tetiklenmesi beklenmektedir
- Tetiklenen servislerin diagram'da yer aldığı gibi Postgres ve Elastic Search'e yazmak yerine karşıladıkları mesajları console'a yansıtmaları yeterlidir
Request:
POST /
Content-Type: application/json
{
"events": [
{
"app": "1231232-321312-12312321-21312",
"type": "HOTEL_CREATE",
"time": "2020-02-10T13:40:27.650Z",
"isSucceeded": true,
"meta": {
},
"user": {
"isAuthenticated": true,
"provider": "b2c-internal",
"id": 231213,
"e-mail": "[email protected]"
},
"attributes": {
"hotelId": 4123,
"hotelRegion": "Antalya",
"hotelName": "Rixos"
}
}
]
}
Response:
HTTP 200 OK
Alanlar:
Alan | Açıklama | Tip | Zorunluluk |
---|---|---|---|
app | Guid cinsinden uygulamanın kimliği | Guid | Evet |
type | Event/olay kategorisi | Enum | Evet |
time | Olayın gerçekleştiği zaman | DateTime | Evet |
isSucceeded | İlgili olay başarıyla sonlanmış mı? | Boolean | Evet |
meta.* | Olaya ait ek detaylar | Object | Hayır |
user.isAuthenticated | Olayı gerçekleştiren kullanıcı giriş yapmış mı? | Boolean | Evet |
user.provider | Olayı gerçekleştiren kullanıcının kaydı hangi sistemde? | String | Evet |
user.id | Olayı gerçekleştiren kullanıcının id’si | Any? | Evet |
user.e-mail | Olayı gerçekleştiren kullanıcının e-mail bilgisi | String | Hayır |
attributes.* | Olaya kategorisine özel detaylar | Object | Hayır |
Bir proje tabanı oluşturarak başlayabilirsiniz. Yararlanmak isterseniz:
- sample/ klasörü altında Kafka için bir docker-compose dosyası bulunuyor,
Ardından bu codebase'i bir git repository'sine aktarmanız, çalışma bitiminde de bu repository adresiyle paylaşmanız gerekecek.
Değerlendirmelerle ilgili sorularınızı [email protected] adresine iletebilirsiniz.
Apache 2.0 ile lisanslanmıştır.