enGrehber: Big Data, Machine Learning ve Deep Learning Projesi


Merhaba değerli takipçilerim,

İçişleri Bakanlığı sponsorluğunda devam eden enGrehber projesi için hangi teknolojileri kullanmam gerektiği konusunda nihai kararı verdiğime inanıyorum.

Öncelikle öğrenme güdüsüyle, çözüme en kısa yoldan ulaşma hedefi arasında sağlıklı karar vermek gerekiyor. Öğrenme amacıyla bulaştığımız teknolojiler böylesine bir projeyi bitmek bilmez ve yıldırıcı bir engele dönüştürme ihtimali vardır.

  1. Big Data, Machine Learning ve Deep Learning projelerinde Python tercih edilir. Ben de o yüzden Backend katmanını tamamen Python’la hazırlamaya karar verdim. Daha önce .NET Core ile hazırladığım backendi Python’a dönüştüreceğim. Böylece on-premise yapay zeka çözümü geliştirmek mümkün olacak. IoT projelerinde de big data söz konusudur. Milyonlarca küçük cihazdan akan verilerin depolanması ve bunlar üzerinde yapılan madencilik ve analiz çalışmalarında Python’un güçlü olduğunu ve yaygın olarak kullanıldığını biliyoruz.
  2. Big Data projelerinde HBase, Cassandra ve MongoDB veritabanları tercih edilir. HBase’de yüksek performanslı sorgulama yapmak isterseniz yabancı olduğum değişik bir protokol kullanmanız gerekiyor. MongoDB ise çok büyük projeler için uygun değil çünkü hem yüksek transaction desteklemiyor hem de satır başına veri büyüklüğü en fazla 16 MB olduğu için veritabanında resim ve video depolamanız neredeyse olanaksız. Ama Cassandra hem SQL’e çok benzeyen CQL sayesinde kolayca kullanılabilir hem de küçük dosyaları Cassandra’da depolayabiliyoruz.
  3. BlockChain projelerinde NodeJS ve Solidity kullanılmaktadır. Ethereum blockchain PoW, PoS ve PoA algoritmalarının tümünü desteklemektedir. Biz yüksek performans için PoA tercih edeceğiz. HyperLedger Besu, Truffle, NodeJS ve Solidity ile DApp uygulamamızı hazırlayabiliyoruz.
  4. Hybrid mi Native mi? Kesinlikle Native ama bir sorun var. Tasarım yapamıyorum ve React Native’in gerçekten çok inatçı bugları var. O yüzden React/Ionic‘teki mevcut tasarımla devam edersem hem web hem de mobilin ikisini birden çıkarmak bana acayip zaman kazandırıyor. Tek çalışma yapıyorum web ve mobil hazır oluyor. Dezavantajı nedir peki? Ionic projeleri telefonlarda biraz yavaş çalışıyor, aslında proje büyük olursa bu yavaşlığı belirgin derecede hissedebiliyorsunuz. Ancak Facebook ve Twitter dahi hybrid uygulamayla piyasada bulunuyor. Native’e geçmeyi gelecekte tekrar düşüneceğiz, öncelikli hedefim toplamdaki çalışmayı hızlandırmak.

    Burada bir sorunumuz daha var: Her ne kadar Twitter ve Facebook uygulamaları hybrid te olsa Jitsi toplantı uygulaması mobilde React Native ile yapılmış. Video ve animasyon içeren uygulamaların native olması önemli bir performans getirisi sağlıyor. Ancak daha önceki testlerimde hybrid mobil uygulamaların 4 adet canlı videoyu aynı anda görüntüleyebildiğini tespit ettim, ısınma sorunları oluyor ama Ionic ile canlı toplantıyı başarabiliriz.

    Buradaki bir diğer sorun Ionic ile toplantı yapılırken arama geldiğinde veya görüşme arka plana alındığında problemler oluşuyor olması. Ancak bu problemler React Native’de de var.

    Ionic ile ilgili bir diğer problem: bildirimler. Web push bildirimleri iOS’ta çalışmıyor ve Firebase kütüphaneleri gerçekten sıkıntılı, sanırım bu konuyu profesyonel bir firmadan bildirim hizmeti alarak çözeceğiz.

    Ayrıca Ionic’te güvenlik te önemli bir sorun, bu konuda öncelikle şuraya bakılması gerekiyor: https://cordova.apache.org/docs/en/4.0.0/guide/appdev/security/index.html
  5. Dosya Storage’ı için BlockChain tabanlı IPFS‘e bakacağım. IPFS en iyi GoLang’le çalışıyor ama NodeJS de destekliyor.
  6. Mimari nasıl olmalı? Kesinlikle mikro servis mimarisi olmalı. Çünkü mikro servis mimarisi yüksek yük kaldırabiliyor. Sanallaştırma için Kubernetes ve Docker tercih ediyorum. Yerelde Minikube ile çalışma yapmak mümkün. Ayrıca kod mimarisi için NX kullanacağım, buna kesin karar verdim. NX’in Python’la sıkıntısı var, ama bunu aşmayı başardım.

Stratejimiz Ne?

Neden bu teknolojileri tercih ettik?

Bu tercihlerimle projemizi ister yurtdışı bulutunda, istersem Ethereum MainNet’inde istersem de yurtiçi bulutunda deploy edebiliyorum. Ki nihayi hedefimiz yurtiçi bulutuna taşınmak olduğu için tercihlerimi böyle yaptım.

Media Server kullanacak mıyız?

Güvenlik için media server çok gerekli. Fakat muazzam bir bant-genişliği maliyetine neden oluyor. O yüzden başlangıçta Media Server kullanmayacağız. Böylece bu projeyi TV reklamlarında görseniz dahi gelen trafiği kolay müdahelelerle kaldırabilecek şekilde tasarlayacağım.

gRPC kullanmayacağız, Rest ve WebSockets kullanacağız, ama neden?

Anlık mesajlaşma bölümünde ve Mikro servis mimarisinde iletişim için gRPC kullanmayacağız Rest ve WebSockets kullanacağız. gRPC yerine WebSocket’i tercih ediyorum çünkü gRPC realtime değil.

ÖZET:

enGrehber’in yeni sürümünde kullanacağımız teknolojiler özetle şöyle:

  1. Python
  2. React/Ionic
  3. NodeJS ve Solidity
  4. Cassandra

Mutlu kodlamalar 🙂

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s