Mimari
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:

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.