Skip to main content

Mimari

Tamamlanmadı

Dokümanın yazımı ve geliştirilmesi devam ediyor. Bu süreçte değişiklikler olabilir.

BiSearch uygulaması Fastify framework'u kullanılarak NodeJS ile geliştirilmiştir. Mevcut mobil uygulamaların v2 uygulamasında yarattığı trafik ve yük dikkate alınarak müşterilerin arama ihtiyacının ilk etabı için yükü bu uygulama üstlenecek ve arama sonucu çıktıların verisi yine v2 uygulamasından dönülecektir. BiSearch uygulaması temelde ElasticSearch'te arama yapabilme ve sonuçları API vasıtasıyla mobil istemcilere dönebilmek üzere hazırlanmıştır.

Ayrıca uygulama üzerinde yapılan aramaların kullanıcı bazlı olarak kaydedilmesi ve daha sonra arama yeteneğinin zenginleştirilmesi için bir veri toplama hattı (pipeline) kurulmuştur.

Aşağıda uygulamayı hazırlarken kullandığımız araçlar ve teknolojiler listelenmiştir.

Kullanılan Teknolojiler

Dil: Javascript
Ortam: NodeJS v16
Çerçeve: Fastify
İzin: Basic Auth
Önbellek: Redis
Loglama: AWS Cloudwatch

Veri Akışı İçin

Serverless bir yöntem izlenmiştir, BiSearch uygulamasında yapılan aramalar AWS SQS'e gönderilmekte ve bir Lambda fonksiyonu tetiklenerek gelen veriyi DynamoDB'e yazmaktadır. Burada akış şöyle diagram haline getirilmiştir:

Pipeline

Arama ve ElasticSearch

Arama işlevinin kazandırılabilmesi için bir arama motorunda karar kılınmıştır, bu noktada ElasticSearch tercih edilmiştir. ElasticSearch, Java ile yazılmış arkasında Apache'nin geliştirdiği Lucene adlı bir arama motoru üzerine inşa edilmiştir. Bugün dünyada bir çok firmanın arama ihtiyacının giderilmesinde ElasticSearch (ES) sıklıkla tercih edilmektedir.

ElasticSearch kullanmak için birden çok yöntem bulunmaktadır.Bunlardan biri ES'in açık kaynak olmasından dolayı kendimizin yönetebileceği bir sunucuya kurma ve dolayısıyla tüm kontrol ve sorumluluğun bizde olduğu, self-hosted yöntemi ile bir bulut sağlayıcı veya direkt ES'i geliştiren Elastic firmasının SaaS (Software as a Service) çözümü üzerinden barındırılan ve yönetilen bir servis olarak kullanmaktır, kısaca managed'de denilen bu yöntem genelde kritik servisleri barındırmak ve yüksek erişilebilirliğin önemli olduğu noktalarda tercih edilmektedir. Bu noktada servisin uygulamamız için kritikliğini göz önünde bulundurarak AWS'in artık OpenSearch adını almış hizmeti tercihedilmiştir. Yüksek erişilebilirliğin sağlanması adına AWS Frankfurt bölgesinde 2 ayrı AZ'de (Availability Zone) ElasticSearch konuşlandırılmıştır. Uyumluluk adına ElasticSearch 7.10 sürümü tercih edilmiştir.

ElasticSearch, HTTP API veya Kibana adlı Elastic firmasının geliştirdiği bir arayüzden yönetilebilmektedir. Kod tarafında HTTP API (npm paketi aracılığı ile) ile kullanılmıştır.