Valhalla Routing Engine Nedir, Nasıl Kurulur?
Bir ulaşım, taksi (ride-hailing) veya lojistik uygulaması geliştiriyorsanız temel sorunuz : “A noktasından B noktasına en hızlı nasıl…
Valhalla Routing Engine Nedir, Nasıl Kurulur?
Bir ulaşım, taksi (ride-hailing) veya lojistik uygulaması geliştiriyorsanız temel sorunuz : “A noktasından B noktasına en hızlı nasıl gidilir?” şeklinde olacaktır. Eğer bu soruyu Google Maps, Mapbox veya benzeri ticari API’lere sormaya kalkarsanız, ölçeklenme aşamasında tahminlerinizin ötesinde faturalarla karşılaşabilirsiniz. Maliyetten kaçmak için veritabanınızda sadece “Kuş Uçuşu” (Haversine) formülüyle eşleştirme yaparsanız da; ters yöndeki, araya nehir giren veya trafiğe kapalı sokaktaki sürücüyü müşteriye yönlendirerek sistem güvenirliğini azaltırsınız.
İşte tam bu noktada, arkasında Tesla, Mapbox’ın bulunduğu, tamamen ücretsiz ve açık kaynaklı bir yönlendirme motoru (routing engine) sahneye çıkıyor: Valhalla.
Bu makalede, Valhalla’nın mimari avantajlarını, rakiplerinden (OSRM vb.) neden üstün olduğunu ve kendi Linux sunucunuzda nasıl sıfırdan kurup başarılı bir şekilde nasıl ayağa kaldıracağınızı adım adım inceleyeceğiz.
Valhalla Nedir ve Neden Kullanmalıyız?
Valhalla, OpenStreetMap (OSM) verilerini kullanarak dünya çapında rota hesaplaması yapabilen, açık kaynaklı bir yönlendirme motorudur.
OpenStreetMap (OSM) verilerini kullanarak rota çizen birçok açık kaynaklı motor vardır. Bunların en bilineni OSRM’dir (Open Source Routing Machine). Peki onu OSRM gibi diğer popüler motorlardan ayıran, dev şirketlerin onu tercih etmesini sağlayan fark nedir?
OSRM gibi motorlar haritayı derlerken statik profiller kullanır. Haritayı otomobile göre derlerseniz, o sunucudan bisiklet rotası isteyemezsiniz. Valhalla ise “Geçici Grafikler” (Ad-hoc graph) yapısı sayesinde haritayı tek bir ham (raw) formatta tutar ve kuralları her bir API isteğinde hesaplar.
Valhalla ile neler yapabiliriz:
- Anlık Profil Değişimi: Tek bir sunucu üzerinden otomobil, motosiklet, bisiklet, yaya veya tır rotaları çizebilirsiniz.
- Sürüş Karakteristiği: “Müşterinin acelesi var, ücretli otoyolları tercih et” (use_tolls: 1) veya “Kurye motorla gidiyor, dar sokaklara girebilir” gibi dinamik kurallar koyabilirsiniz.
- Isochrone (Ulaşılabilirlik): “Şu an bu noktadan araçla 10 dakika içinde nerelere gidilebilir?” sorusunun cevabını haritada bir poligon (şekil) olarak alabilirsiniz.
Kuş Uçuşu Hesaplama ve Matrix API Karşılaştırması
Uygulamanızda müşterinize en yakın sürücüyü aradığınızı varsayalım. Valhalla’nın Matrix API özelliği size şu gerçeği gösterir:
- Sürücü A: Müşteriye kuş uçuşu mesafesi 1.1 km (Ama ters yönde, U dönüşü yapması lazım) -> Varış Süresi: 155 saniye.
- Sürücü B: Müşteriye kuş uçuşu mesafesi 1.6 km (Ana yolda ve yolu açık) -> Varış Süresi: 147 saniye.
Valhalla sayesinde, mesafe olarak daha uzakta olmasına rağmen müşteriye daha çabuk ulaşacak olan Sürücü B’yi saniyeler içinde tespit eder ve çağrıyı ona düşürürsünüz.
Valhalla Kurulumu
Valhalla’yı kendi Linux (Ubuntu/Debian) sunucumuzda Docker kullanarak ayağa kaldıracağız. Ama burada dikkat etmemiz gereken önemli bir nokta var. Valhalla’nın harita verisini ilk kez işlediği (derlediği) o 15–20 dakikalık süreçte RAM kullanımı anlık olarak çok yüksek seviyelere çıkabilir. Örneğin 8 GB RAM’e sahip bir sunucunuz varsa ve RAM dolarsa, Linux OOM Killer (Out of Memory Killer) devreye girip sunucuyu veya Docker’ı çökertebilir. Bunu aşmanın yolu ise sunucuya sanal bir RAM (Swap) alanı açmaktır.
Güvenlik Sübabı (Swap Alanı) Oluşturmak
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# Kalıcı olması için fstab'a ekleyelim:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Klasör Yapısı ve Harita İndirme
Sistemimizde /valhalla adında bir dizin oluşturup, OpenStreetMap verilerini (PBF formatında) indireceğiz. Örnek olarak ana dizinimizde valhalla adında oluşturduğumuz dizinin içince custom_files adında bir dizin daha oluşturup içerisine Türkiye haritasını indiriyoruz:
mkdir -p /valhalla/custom_files
cd /valhalla/custom_files
wget https://download.geofabrik.de/europe/turkey-latest.osm.pbf
cd /valhalla
Güvenli Docker Kurulumu (Localhost Binding)
Bu aşamada dikkat etmemiz gereken en önemli noktalardan biri rota motorunun portunu dış dünyaya açık bırakmakmaktır. Eğer portu herkese açarsanız, kötü niyetli botlar sunucunuzu ücretsiz bir harita API’si olarak kullanarak CPU’nuzu sömürür.
Bu yüzden Valhalla’yı sadece sunucumuzun içindeki uygulamaların (Backend servislerimizin) erişebileceği şekilde (127.0.0.1) çalıştırıyoruz:
docker run -dt --name valhalla-prod \
--restart always \
-p 127.0.0.1:8002:8002 \
-v /var/www/valhalla/custom_files:/custom_files \
ghcr.io/gis-ops/docker-valhalla/valhalla:latest
İşlemi başlattıktan sonra docker logs -f valhalla-prod komutuyla derleme sürecini izleyebilirsiniz. Harita boyutuna göre 15-30 dakika içinde [INFO] Server is listening on 0.0.0.0:8002 logunu gördüğünüzde motorunuz yayındadır!
Valhalla Matrix API ile Sürücü Eşleştirme Algoritması
Sistem hazır. Peki lojistik backend’imizde bunu nasıl kullanacağız? En güçlü kullanım senaryosu olan “Matrix API”ye bakalım.
Diyelim ki bir müşteriniz var ve etrafındaki (veritabanınızda kuş uçuşu 3 km yarıçapında bulduğunuz) 3 kuryeden/sürücüden hangisinin gerçekten en hızlı ulaşacağını bulmak istiyorsunuz.
Backend sunucunuzdan (Node.js, Laravel vb.) Valhalla’ya şu JSON isteğini atarsınız:
POST: [http://127.0.0.1:8002/sources_to_targets](http://127.0.0.1:8002/sources_to_targets)
{
"costing": "auto",
"sources": [
{"lat": 40.835, "lon": 35.655},
{"lat": 40.820, "lon": 35.660},
{"lat": 40.840, "lon": 35.640}
],
"targets": [
{"lat": 40.830, "lon": 35.650}
]
}
Valhalla’nın Yanıtı (ETA Süreleri): Valhalla size anında bu kuryelerin müşteriye olan sürüş sürelerini saniye cinsinden (time) döndürür:
- Sürücü 1: Mesafe 1.1 km -> Süre: 155 Saniye
- Sürücü 2: Mesafe 1.6 km -> Süre: 174 Saniye
- Sürücü 3: Mesafe 1.6 km -> Süre: 147 Saniye
Sonuç: Kuş uçuşu hesaplasaydınız işi Sürücü 1'e verecektiniz. Ancak Valhalla, Sürücü 1'in ters yönde olduğunu veya önünde bir kavşak olduğunu hesaplayarak, fiziksel olarak daha uzakta olan ama yol akışı daha hızlı olan Sürücü 3'ün müşteriye daha çabuk ulaşacağını kanıtladı. Backend’iniz bu listeyi time parametresine göre sıralayıp çağrıyı kusursuz bir şekilde en doğru kişiye atayabilir.
Performans İpuçları (Best Practices)
- Verbose (Detay) Yönetimi: Matrix API ile sürücü ararken Valhalla varsayılan olarak sokağın adı, dönüş açıları gibi gereksiz detayları (
verbose) kapatır ve sadece süre/mesafe döndürür. Bu, API'nin milisaniyeler içinde yanıt vermesini sağlar. Detaylı koordinatlara (polyline) sadece sürücü yola çıktığında, ekrana rotayı çizerken (/turn_by_turnveya/routeAPI'si ile) ihtiyaç duyarsınız. - Ön Filtreleme (Huni Mantığı): Sistemdeki 500 sürücünün hepsini aynı anda Valhalla’ya göndermeyin. Önce veritabanınızdan (PostGIS veya Redis Geo) müşteriye kuş uçuşu en yakın 15–20 sürücüyü bulun (Ön Filtreleme), sadece bu kısa listeyi gerçek rota hesaplaması için Valhalla’ya sokun.
Özet
Valhalla, dinamik maliyetlendirme mimarisi sayesinde, modern lojistik ve ulaşım sistemlerinin arkasındaki o kusursuz karar mekanizmasını oluşturur.
Doğru bir Linux konfigürasyonu (Swap alanları) ve lokal güvenlik önlemleriyle sunucunuza entegre ettiğinizde, uygulamanız sıradan bir harita projesi olmaktan çıkıp, “Uber standartlarında” anlık kararlar verebilen bağımsız bir lojistik altyapıya dönüşür. Üstelik Google veya Mapbox’a her ay binlerce dolar API faturası ödeme korkusu olmadan!
메타데이터
- post_id
- d136e04a4e62
- slug
- valhalla-routing-engine-nedir-nasıl-kurulur-d136e04a4e62
- url
- https://medium.com/@bolat.ferhat05/valhalla-routing-engine-nedir-nas%C4%B1l-kurulur-d136e04a4e62
- canonical_url
- https://medium.com/@bolat.ferhat05/valhalla-routing-engine-nedir-nas%C4%B1l-kurulur-d136e04a4e62
- author_url
- https://medium.com/@bolat.ferhat05
- status
- ok
- fetched_at
- 2026-07-16 11:16:19