Uber Tech Yığını ve Yazılım Mimarisi – Uber Nasıl İnşa Edildi?

Yayınlanan: 2022-01-17

Uber bir ev ismi haline geldi. İnanılmaz platform, kullanıcıların yalnızca dört basit adımda taksi hizmeti rezervasyonu yapmalarını sağlar. Uber uygulaması, hızlı hizmetin yanı sıra optimum rahatlığı garanti eder, popülaritesinin patlamasına şaşmamalı.

Uber'in aylık 98 milyon aktif kullanıcısı olduğunu biliyor muydunuz? Ayrıca, şirket 2020'de 11,1 milyar dolar gelir elde etti mi? Uber, yeni başlayanlar ve mevcut taksi hizmetleri için klasik bir örnek oluşturdu. Her kuruluş, hızlı ve kullanışlı taksi çağırma hizmetleri sunarak Uber'in başarısını tekrarlamayı hedefliyor.

Uber'in muazzam başarısına da hayransanız, bu makale tam size göre. Burada Uber teknoloji yığını ve yazılım mimarisini tartışacağız ve bu size platformu daha iyi anlamanızı sağlayacak ve taksi hizmetleri uygulamanızı sıfırdan oluşturmanıza yardımcı olacak. Öyleyse başlayalım.

Uber Gibi Gerçek Zamanlı Bir Uygulamayı Nasıl Oluştururum?

Uber gibi gerçek zamanlı bir uygulama oluşturmak için önce aşağıdaki gibi farklı bileşenlerini anlamanız gerekir:

yolcu uygulaması

Uber uygulamasını daha önce kullandıysanız, yolcu uygulaması işleviyle kolayca özdeşleşeceksiniz. Uygulamanın bu bileşeni, yolculuk seçimi, ücret hesaplayıcı, çevrimiçi ödemeler, GPS izleme vb. gibi kullanıcıların bir taksi rezervasyonu yapmak için ihtiyaç duyduğu tüm özelliklere sahiptir.

Sürücü uygulaması

Sürücü uygulaması, yolculardan gelen yeni taksi taleplerini gösteren taksi şoförleri tarafından kullanılır. Bu paneli kullanarak, sürücüler sürüş isteklerini kabul edebilir veya reddedebilir ve yerleşik haritayı kullanarak yolcunun tam konumunu kontrol edebilir.

pazar yeri

Pazar yeri iki uygulamayı (Yolcu uygulaması ve Sürücü uygulaması) birbirine bağlar. Yolcuları sürücülerle eşleştirmeyi ve ödemeleri halletmeyi içeren en karmaşık görevleri yerine getirir.

Bu nedenle, Uber gibi bir uygulama oluşturmak istiyorsanız, üç farklı panele ihtiyacınız olacak. İlk panel, yolcuların taksi rezervasyonu yapmasını sağlayacak ve ikinci panel, sürücülerin yolculuk taleplerini kabul etmesine izin verecek. Ve son olarak, üçüncü bir panel ilk ikisinden gelen talepleri alacak ve tüm çevrimiçi işlemleri yönetecek.

Bir Sonraki Uber Nasıl İnşa Edilir?

Uber, yolculara en üst düzeyde kolaylık sağlayan oldukça başarılı bir taksi çağırma hizmetidir. Uber gibi bir uygulama geliştirmek, önemli miktarda para ve yetkin bir uygulama geliştirme ekibi gerektirebilir.

Bunun dışında, Uber gibi bir uygulama geliştirirken göz önünde bulundurulması gereken birkaç şey daha var.

Rakiplerinizi inceleyin.

Şu anda uygulamanızla çözmeye çalıştığınız sorunu çözmeye çalışan uygulamaları aramak harika bir fikirdir. Bu uygulamalara bakmak, özellikleri, işlevleri ve hedef kitlesi hakkında bir fikir edinmenize yardımcı olacaktır.

Ek olarak, rekabet ortamına kapsamlı bir bakış, rakiplerinizin nasıl çalıştığını anlamanıza yardımcı olacaktır. Örneğin, sosyal medyalarını kontrol etmek, pazarlama stratejileri, ürün gelişimi ve müşteri memnuniyeti derecelendirmeleri hakkında fikir edinmenizi sağlayacaktır. Tüm bunlar, başarılı bir uygulama başlatmanıza yardımcı olacak uzun bir yol kat edecek.

Potansiyel kullanıcılarınızı tanıyın

Uygulama geliştirmeye geçmeden önce, uygulamanızı kimin kullanacağını bilmeniz gerekir. Yalnızca hedef kitlenizi tanıyorsanız, onlarla düzgün bir şekilde iletişim kurabilirsiniz.

Potansiyel kullanıcılarınızın yaş, konum, cinsiyet, davranışlar, tercihler vb. gibi tüm demografik verilerini toplayabilirsiniz. İşiniz bittiğinde, uygulamanızın fikrini çok sevdiğiniz kişilerle tartışabilirsiniz.

Kullanıcı deneyimine odaklanın.

Kullanıcı deneyimi, başarılı bir uygulamanın en önemli yönlerinden biridir. İnsanlar basit ama sezgisel bir kullanıcı arayüzü ve kullanıcı deneyimi sunan uygulamaları kullanmak istiyor. Çarpıcı bir UI, kusursuz bir navigasyon deneyimi sunar ve sezgisel bir UX, kullanım kolaylığı sağlar.

İyi bir kullanıcı deneyimi sağlamak, daha iyi kullanıcı edinme ve daha fazla indirme sağlar.

MVP ile test edin

Minimum uygulanabilir ürün (MVP), ürünün minimal ancak önemli özellikleri destekleyen ilk temel sürümüdür. Tam teşekküllü bir uygulama geliştirmeden önce bir MVP oluşturmak, daha hızlı pazara sunma süresi sağladığı, erken benimseyenleri cezbettiği ve ürün-pazar uyumunu erkenden sağladığı için tavsiye edilir.

MVP kullanıcılara sunulduktan sonra ilk geri bildirimleri alınır. Bu geri bildirime dayanarak, ürününüze rekabet avantajı sağlayacak yeni özellikleri tekrarlayabilir, hataları düzeltebilir ve yeni özellikler sunabilirsiniz.

Uber Uygulaması Teknik Olarak Nasıl Çalışır?

uber nasıl çalışır

Uber uygulaması, kurum içinde geliştirilen makine öğrenimi ve veri analizi platformlarından yararlanarak çok büyük miktarda veriyi işler. Bir yolcu taksi talep ettiğinde çok fazla veri üretilir. Örneğin, uygulama yolcu, konumu, kredi kartı bilgileri, yolculuk ücreti, yakındaki taksi şoförleri vb. hakkında verileri alır. Ve yavaş yavaş, tüm bu bilgiler tüm sistemde dolaşır. Nasıl olduğunu görelim.

Bir yolculuk talep edildiğinde, platform:

  • Tüm sürüş bilgilerini veritabanına kaydeder
  • Yolculuk talebini yolcunun coğrafi konumu ile işler
  • İşlenen tüm verileri ML tarafından desteklenen eşleştirme algoritmasına gönderir
  • Veritabanında yakınlarda bulunan sürücüler hakkında bilgi arar
uber'e Teknik Yığın Depolamaya Genel Bakış
uber'e Teknik Yığın Depolamaya Genel Bakış

Uber-Benzeri Projeler için Gereksinimler

Uber 2009'da piyasaya sürüldü ve en uzun süredir platformun monolitik bir mimariye sahip bir arka ucu vardı. Başka bir deyişle, uygulama, tüm çevrimiçi istekleri yönetmek için birkaç uygulama sunucusuyla birlikte tek bir veritabanı kullandı.

İlk dönem için bu gayet iyi çalıştı. Ancak platform büyüdükçe yeni özelliklere olan ihtiyaç da arttı. Ve yeni özellikleri entegre etmek için geliştirme ekibinin tüm kodu bir kerede dağıtması gerekiyordu. Bu, uygulamanın hızını etkiledi ve yeni özelliklerin tanıtılması sürecini son derece riskli ve zaman alıcı hale getirdi. Bunun nedeni, her entegrasyonun potansiyel olarak tüm sistemi çökertebilmesidir. Bu, mikro hizmet mimarisinin benimsenmesine yol açtı.

mikro hizmetler

Jaeger'den Uber'in mikro hizmet mimarisi 2018 ortalarında
Uber'in Jaeger'den 2018 ortalarında mikro hizmet mimarisi

Uber, 2014 yılında daha iyi hız ve performans sağlamak için mikro hizmet mimarisini benimsedi. Esasen, bu mimari, birbirinin işlevselliğini hedefleyen bir grup hizmet içerir. Böylece geliştirme ekibi, yeni kodu mikro hizmet mimarisiyle bağımsız olarak kolayca dağıtabilir ve eksiksiz sistem ölçeklendirmesini sağlar.

DOMA (Etki Alanına Yönelik Sistem Mimarisi)

Mikro hizmet mimarisi, monolitik mimariye yapılan büyük bir yükseltme olsa da, Uber'deki geliştirme ekibi burada durmadı. Zamanla DOMA- Etki Alanına Yönelik Sistem Mimarisi adı verilen yeni bir yaklaşımı benimsediler.

Bu yaklaşıma göre, geliştiriciler tasarımlarını ilgili mikro hizmet koleksiyonları etrafında yönlendirir. Ve bu koleksiyonlara alan adı verilir. Ayrıca, alanlar katman adı verilen farklı koleksiyonlara da sınıflandırılır. Her etki alanının ait olduğu belirli katman, o etki alanındaki mikro hizmetlerin hangi bağımlılıkları üstlenebileceğini belirler. Buna katman tasarımı denir.

Geliştiriciler daha sonra Gateway API kullanarak her etki alanını diğerlerinden bağımsız hale getirir. Böylece her etki alanının kendi mantığı vardır ve aynı katman içindeki diğer etki alanları ile ilişkili değildir.

Ağ Geçidi API'sı
etki alanlarının dahili ayrıntılarını gösteren ağ geçidi - birden çok hizmet, veri tablosu, ETL ardışık düzenleri, vb.

Basit bir deyişle, organize bir mimari, önceden tanımlanmış uzantı noktaları ve etki alanı ağ geçitleri sağlayarak DOMA, mikro hizmet mimarisini karmaşık bir şeyden kolayca anlaşılabilir bir şeye dönüştürür.

Uber Hangi UI Çerçevesini Kullanıyor?

Uber'in tasarım ekibi, yeni özellikler ekleyerek uygulamanın tasarımını sürekli olarak yükseltmeye odaklanır. Ancak bu zaman alan bir süreçtir. Bu nedenle, tasarım ekibinin çabalarını kolaylaştırmak için Base adlı bir React UI çerçevesi oluşturdular.

temel web çerçevesi ile tasarlanmış güç ölçer
temel web çerçevesi ile tasarlanmış güç ölçer

Base, renkler, ızgaralar, tipografi, listeler, düğmeler ve ikonografi gibi önceden tasarlanmış Uber uygulama öğelerini içerir. Çerçeve, tasarım ekibinin yüksek UI/UX standartlarını ve tutarlılığını korurken tasarımları daha hızlı oluşturmasını sağladı.

Yemek Dağıtımı Uygulaması Uber'in Arkasındaki Teknoloji Yığını Nedir?

2014'te Uber'in arka ucu Python, Mongo ve MySQL gibi dilleri içeriyordu. Öte yandan, sevk sistemi Node.js ve Redis'i kullanırken, mobil uygulamalar Java ve Objective-C tarafından destekleniyordu. Bununla birlikte, gereksinimler geliştikçe geliştiriciler, platformun neredeyse tüm bileşenlerini değiştirdi.

Pazar Yeri Teknolojileri Yığını

Uber'in pazarı, tüm veri akışını ve veri analitiğini yöneten önemli bir unsurdur. Ve bu pazar yerini oluşturmak için kullanılan teknoloji yığını Python, Go, Java ve Node.js gibi dilleri içerir. Şimdi bu pazaryeri teknolojileri yığınına ayrıntılı olarak bir göz atalım:

Yolculuk yürütme motoru

Trip yürütme motoru, pazaryerinin ayrılmaz bir parçası olduğundan, asenkron, basit ve tek iş parçacıklı işlemesi için tercih edilen Node.js'de yazılmıştır. Node.js ayrıca Uber ekibinin büyük miktarlarda eşzamanlı bağlantıyı yönetmesine izin verdi. Ancak şimdi şirket Go'da verimliliği, eşzamanlılığı ve tip güvenli işlemleriyle tanınan yeni hizmetler yaratıyor.

Ön saf API'si

Frontline API, sürücü ve yolcu mobil cihazlarından gelen istekleri diğer API'lere ve hizmetlere yönlendirir. Bu, kenar hariç Node.js'de yazılmıştır. Ön uç için NGINX kullanır ve SSL sonlandırması ve bazı kimlik doğrulama işlemleri gerçekleştirir.

Gerçek zamanlı bağlantı

En yüksek kullanılabilirlik taleplerini sorunsuz bir şekilde desteklemek için pazar yığınının gerçek zamanlı olarak bilgi alması gerekir. Bu nedenle geliştiriciler, işbirlikçi dağıtılmış sistemler oluşturmak için bir kütüphane olan Ringpop'u kullanır. Bu kitaplık sayesinde geliştiriciler, Riak ve DynamoDB gibi dağıtılmış veritabanlarıyla yüksek oranda erişilebilir bir bağlantı elde ediyor.

eşleşen mantık

Eşleştirme algoritması, yani sürücülerden ve sürücülerden gelen uyarıları gerçek zamanlı olarak yöneten ve ardından bunları eşleştiren sistem, Go ve Node.js'de yazılmıştır. Riak, dağıtılmış veritabanlarıdır, Redis ise önbelleğe alma sunar.

Dinamik fiyatlandırma optimizasyonu

Uber'deki pazar yeri ekibi, dinamik fiyatlandırma, akıllı eşleştirme ve tedarik konumlandırma yoluyla optimizasyonu ve dengeyi yönetir. Daha önce, bu yığının çoğu parçası Python ile Flask ve uWSGI kullanılarak oluşturuldu. Ancak şimdi geliştiriciler, daha yüksek performans elde etmek için Python'un çoğunu Go ile değiştiriyor.

Veri akışı ve makine öğrenimi

Uber, veri akışı için Kafka'yı ve kendi üretim veritabanlarını kullanır. Ve veri depolaması Hive, HDFS, Elasticsearch, MapReduce ve dosya depolama web hizmetlerine bağlıdır. Şirket ayrıca dahili paylaşımı sağlayan kendi LIDAR'ını da geliştirmiştir. LIDAR, Apache Spark ve kendi veri platformlarıyla entegre Jupyter, JupyterHub'ı çalıştırır.

Devam edersek, Uber'in kendi ML platformuna sahip olduğunu belirtmekte fayda var. 2015 yılında şirket, araçları ve iş akışlarını standart hale getirmek ve makine öğrenimi anti-kalıplarından kaçınmak için makine öğrenimini ölçeklendirmeye karar verdi. Sonuç olarak, 2017'de Michelangelo'yu geliştirdiler.

Michelangelo, verileri yönetmeye, modelleri değerlendirmeye ve dağıtmaya, trend tahminleri yapmaya ve prognozu izlemeye yardımcı olan yapay zeka ve makine öğrenimi destekli bir platformdur. ML platformu, aşağıdakiler gibi açık kaynak sistemleri ve şirket içi bileşenlerin bir karışımını içerir:

  • HDFS
  • samza
  • Kıvılcım
  • MLLib
  • TensorFlow
  • cassandra
  • XGBoost
UberEATS uygulaması tahmini teslim süresi özelliği
UberEATS uygulaması, Michelangelo üzerine kurulu makine öğrenimi modelleriyle desteklenen tahmini bir teslim süresi özelliğine ev sahipliği yapıyor.

Bir web uygulamasının yığın teknolojileri

Web tabanlı uygulama için Uber geliştiricileri, büyük bir web mühendisleri topluluğuna sahip açık kaynaklı bir platform olan Node.js'yi kullanıyor. Node.js ayrıca geliştiricilerin evrensel web uygulamaları oluşturmak için sunucu ve istemci arasında JavaScript kodunu paylaşmasına olanak tanır. Son olarak, Node.js ile birlikte gelen tüm istemci tarafı paketleme için Browserify'ı kullanırlar. js tabanlı modül gereksinimleri.

Uber'in Bedrock adlı web sunucusu, eksiksiz güvenlik ve içselleştirme sunan popüler bir web çerçevesi olan Express.js üzerine kurulmuştur. Atreyu olarak bilinen şirket içi hizmet iletişim katmanı, tüm iletişimi arka uç hizmetleriyle yönetir ve Bedrock ile bütünleşir. Bu iletişim katmanı ayrıca şirketin SOA hizmeti API'lerine kolay ve hızlı bir şekilde istekte bulunmasını sağlar.

Uber, uygulama oluşturma ve durum işleme için standart Flux ve React.js kullanır. Yapı sistemi Core Tasks, Gulp.js üzerinde oluşturulmuş ön uç varlıklarını derlemek ve sürümlendirmek için önceden tanımlanmış bir komut dosyası grubudur.

Bir mobil uygulamanın yığın teknolojileri

Uber gibi bir uygulama geliştirmek için dört farklı mobil uygulama oluşturmanız gerekir: Android yolcusu, Android sürücüsü, iOS yolcusu ve iOS sürücüsü. Geliştiriciler, Objective-C ve Swift programlama dilini kullanarak IOS uygulamaları oluştururken, Android uygulaması Java kullanılarak geliştirilir. Ancak bunların dışında geliştiriciler tarafından kullanılan birkaç teknoloji daha var. Bunlar şunları içerir:

Android uygulaması teknoloji yığını

  • kepçe
  • OkHttp/Gson/Güçlendirme
  • Tereyağı bıçağı
  • Hançer
  • Espresso
  • Picasso
  • RxJava
  • Kereste

iOS uygulaması teknoloji yığını

  • para
  • Duvarcılık/ SnapKit
  • KSCrash
  • OCMock

Uber Gibi Bir Yemek Teslimat Uygulaması Oluşturmak İçin Hangi Programlama Dillerini Kullanabilirim?

Uber gibi bir uygulama geliştirmek istiyorsanız, aşağıdaki teknolojileri entegre etmeyi seçebilirsiniz:

  • Node.js – Marketplace web uygulaması için
  • Python – web tabanlı rezervasyon uygulaması için
  • Go- geliştirilmiş performans ve hız için
  • Browserify – istemci tarafı paketleme için
  • Java – üçüncü taraf hizmet entegrasyonları için
  • Apache Hive veri ambarı – analitik ve veri sorgulaması için
  • ELk – günlükleri depolamak, işlemek ve göndermek için
  • Apache Cassandra – büyük hacimli verileri yönetmek için
  • MySQL Veritabanı Hizmeti - ilişkisel veritabanı yönetimi için
  • Docker – veri merkezi altyapısı için
  • HAProxy – proxy sunucusu ve yük dengeleyici için

Bu, Uber'in teknoloji yığınının hızlı bir özetidir. Ancak, kendi araştırmanızı yapmadan bu teknoloji yığınını kopyalamak, iş modelinize zarar verebilir. Ayrıca, aynı teknolojileri uygulamak, taksi çağırma işiniz için başarıyı garanti etmeyecektir.

Bu nedenle, uygulamanızı mümkün olduğunca birkaç teknolojiyle oluşturmanız önerilir. Yavaş yavaş, işletmeniz büyüdükçe, daha yeni teknolojilerden yararlanarak yeni özellikler eklemeye devam edebilirsiniz. Başlamak için yalnızca Uber'in teknoloji yığınını ilham kaynağı olarak kullanmalısınız.