IPFS Nedir?
Gezegenler Arası Dosya Sistemi (IPFS), dağıtılmış bir dosya sisteminde veri depolamak ve paylaşmak için bir protokol, hiper ortam ve eşler arası dosya paylaşım ağıdır. IPFS; veriler, web siteleri, dosyalar ve uygulamalar dahil olmak üzere her türlü içeriği depolamak ve bu içeriğe merkezi olmayan bir şekilde erişebilmek için tasarlanmış bir protokol olarak tanımlanabilir. IPFS, dosyaları depolamak ve dosyalara erişmek için P2P (Peer to Peer / eşler arası) tabanlı merkeziyetsiz bir alternatif olarak tasarlandı. Aslında tasarlanan bu çalışma Torrent’teki çalışma prensibi ile benzerlik gösteriyor çünkü Torent’te de data karşı taraftaki eşlerden data blokları halinde çekiliyor.
İlk olarak 2013 yılında tohumları atılan IPFS, 2015 yılında Protocol Labs şirketi tarafından geliştirildi. IPFS üzerinde çalışan ekip, şirketin kurucusu ve CEO’su Juan Benet tarafından yönetilen küçük bir geliştirici ekibiydi. Şirket aynı zamanda $FIL (File coin)’in de babası. Şirket açık kaynak kodlu IPFS ile günümüz internetinin sansür ve arızaya açık nokta gibi sorunlarını çözmeyi ve geleceğin internetini yaratmaya katkıda bulunmayı amaçlıyor.
İçerik Tabanlı Adresleme
IPFS’in mevcut internet ile temelden farklı olduğu konulardan biri konum tabanlı adresleme yerine içerik tabanlı adresleme kullanmasıdır. Yani bilgisayarınıza, dosyayı nerede bulacağını değil, neyi bulacağınız bilgisini verirsiniz. Bir başka deyişle, URL yerine hash kodu kullanırsınız.
Bu, içerik tabanlı adreslemenin doğru çalışabilmesi için gereklidir. Dosya veya verileri eşsiz kılan bir çalışma sistemi yaratılmalıdır ki tam olarak aranan şey bulunabilsin. Dosya ve verilere kimlik atamak için her dosyaya benzersiz bir hash kodu -burada IPFS söz konusu olduğu için içerik kimliği (CID — Content ID)- atanır.
İçerik tabanlı adreslemede bilgisayarınıza spesifik bir CID kodunu taşıyan dosyayı aradığınızı söylersiniz. Bilgisayarınız da bağlı olduğu ağdaki node’lara bu CID kodunu taşıyan dosyanın kimde olduğunu sorar. Ağa bağlı bir node’da bu dosya mevcutsa bu istemi aldığında dosyayı size yollar. Bu dosyanın üzerinde oynanmadığından ya da içine virüs konmadığından emin olmak için CID kodlarını karşılaştırıp bunun istediğimiz dosya olup olmadığını kontrol etmemiz yeterli. CID kodları benzersiz olduğundan, değiştirilmiş bir dosyanın CID kodu da değişecektir.
IPFS Nesneleri Nedir ve Nasıl Çalışır?
Konu depolama olduğunda dosyaları IPFS’te depolarken, sistem IPFS nesneleri oluşturuyor. Bunları blok zincirdeki bloklar gibi düşünebiliriz. IPFS nesneleri maksimum 256 KB’lık bir alana sahip olup bu alandan hariç olarak, başka IPFS nesnelerine linkler içerebiliyor. Yani bir IPFS nesnesi iki bölümden oluşuyor: 256 KB’lık veri alanı ve link alanı.
Basit bir “selam dünya!” mesajı bu 256 KB’lık nesneye rahatlıkla sığar. Ancak resim ya da video gibi dosyaların büyük çoğunlukla 256 KB’ın üzerinde olduğunu biliyoruz. Bu durumda IPFS’te 256 KB’tan büyük bir dosyayı depolayabilmek için dosyanın tamamı 256 KB’lık nesnelere bölünüyor. Büyük dosya daha küçük nesnelere bölünür bölünmez, sistem bu orijinal büyük dosyayı oluşturan tüm IPFS nesnelerine link veren boş bir referans nesnesi belirliyor. Bu oldukça basit bir çözüm olmakla birlikte o kadar etkilidir ki bir dosyalama sistemi olarak kullanılabiliyor.
Bu dosyalama sistemi içerik tabanlı bir sistem olduğundan, aynı Blockchain’de olduğu gibi, yaratılan ya da eklenen bir dosya değiştirilemiyor. Ancak IPFS versiyonlamayı destekleyen bir sistemdir. Diyelim ki başkalarıyla da paylaşmak istediğiniz önemli bir dosya üzerinde çalışıyorsunuz. Bu durumda sistem IPFS üzerinde bir “taahhüt nesnesi” oluşturuyor. Bu nesnenin oldukça basit bir işlevi vardır: IPFS’e hangi versiyonun kendinden önce geldiğini söylemek ve bunu IPFS nesnesine bağlamak. Siz üzerinde çalıştığınız dosyayı güncellediğinizde IPFS, dosyanıza bağlanan yeni bir taahhüt nesnesi yaratıyor ve bunu önceki versiyona bağlıyor. Bu işlem sonsuza kadar devam edebilir. IPFS, dosyanızı ve bunun bütün geçmişini yani farklı sürümlerini ağdaki bütün node’lara paylaşıyor. Böylece dosya, bütün geçmişiyle birlikte ağa açılmış oluyor.
Özetle IPFS nesneleri;
A- Büyük bir dosyanın 256 KB’lık parçaları olabilir. Referans nesnesi bu parçalara link verir.
B- Üzerinde çalıştığınız bir dosyanın bütün versiyonlarını içerebilir. (Taahhüt Nesnesi)
Yönlendirilmiş Döngüsel Olmayan Grafikler (DAG)
IPFS’in yapısı bir dizin ve dosya sistemini takip edecek şekilde optimize edilmiştir. Yani, IPFS protokolü bir node’un içeriğini farklı bloklara böler. Bu, içeriğin daha yüksek bir hızda doğrulanmasını ve daha güvenli olmasını sağlar. Ayrıca, her klasörün bir CID’i, klasördeki dosyaların kendi CID’leri ve bu dosyaların bölünmüş parçalarının da CID’leri olduğu için bu yapıya Merkle DAG grafiği denir. Merkle ağacı kavramı 1979 yılında Ralph Merkle tarafından geliştirilmiştir.
Yönlendirilmiş Döngüsel Olmayan Grafikler (Directed Acyclic Graphs / DAG), birçok merkeziyetsiz sistem tarafından kullanılan bir veri yapısı biçimidir. IPFS, Merkle DAG’leri olarak bilinen DAG yapılarını kullanır. Bu veri yapısında, her node’un, sahip olduğu içeriği temsil eden benzersiz bir hash kodu vardır.
Şekildeki yeşil alanları (yaprakları) verinin 256 KB’lık parçaları olduğunu düşünelim. En üstteki kahverengi parça (kök) ise dosyanın bütün halini ifade ediyor. Bu şemayı aynı zamanda bir dosyanın eski versiyonları veya bir node’un içeriği olarak da düşünebiliriz.
Bu veri yapısını kullanmanın bir başka yararlı etkisi, benzer dosyaların Merkle DAG’ının bölümlerini paylaşabilmesidir. Yani, bir projeyi güncellediğimizde, yalnızca güncellenen dosyalar yeni bir CID alır. (Bu video, Merkle Ağaçlarını mükemmel bir şekilde açıklamaktadır.)
IPFS’in Dezavantajı
IPFS en büyük sorunu, teknoloji nispeten yeni olduğu için, yani henüz ana akım olmadığı için dosyaları sürekli olarak erişilebilir kılmakta yaşıyor. Eğer bir dosyanın kopyası sadece birkaç node’da bulunuyorsa ve bu node’lar o sırada çevrimdışıysa dosya ulaşılamaz olur. Tam olarak Torent’te bir dosyayı indireceğimiz zaman seeder olmaması gibi.
Bunu aşmanın iki yolu var:
1- Node’ları sürekli online olmak konusunda teşvik etmek
2- Dosyaları proaktif olarak dağıtmak ve belirli sayıda kopyanın mevcut olduğundan emin olmak.
Bugün, Blockchain tabanlı çeşitli dosyalama ve depolama projeleri bu yöntemleri kendi çalışma sistemlerine entegre ediyorlar.
Peki Neden Adı Gezegenler Arası?
Güzel soru! Diyelim ki Mars’ta yer edinen komünitenin bir parçasısınız ve dünyayı çok özlediniz. Dünyada var olan internet üzerinden dünyadaki güzel bir yerin fotoğrafını istediniz. Bu istem sinyali dünyaya 4 dakika ile 24 dakika arasında gider. Dünya bu istemi 10 milisaniyede tamamlar ve Mars’a geri gönderir. Bu sinyalin seyahati de iyi bir günde 4 dakika, kötü bir günde 24 dakika sürer. Yani basit bir fotoğrafı Mars’ta görüntülemek 8 ila 48 dakika arasında bir zaman alır. Fakat eğer daha önce Mars’taki bir başkası da bu fotoğrafı istemişse IPFS sistemi ile bu fotoğrafa saniyeler içerisinde ulaşabilirsiniz. Bu şekilde internet, güneş sistemimizdeki hatta daha uzaktaki gezegenler arasında da erişilebilir olur.
Özetle
IPFS, dosyaların tek bir merkezden herkese dağıtılması yerine, herkesin herkese dosya paylaşımı yaptığı bir sistem olarak tanımlanabilir. Bu sistemde dosyalar oluşturulurken ve paylaşılırken 256 KB’lık parçalara bölünüyor. Bu parçalara nesneler deniyor ve her biri bir nevi “ben orijinal dosyanın bir parçasıyım” diyen bir link içeriyor. Orijinal dosya, dosyanın bulunduğu klasör ve bu içeriğe sahip olan node CID adı verilen hash kodlarını alıyor. Bu şekilde hız ve güvenlik sağlanıyor.
Böylece dosyalar (web sayfaları, uygulamalar, videolar vs) merkezi bir sistem üzerinden dağıtılmadığı için sansürlenmesi de mümkün olmuyor. Böyle bir internet tam olarak Web 3’ün ihtiyaç duyduğu altyapı…
IPFS Nasıl İndirilir?
Dokümantasyon: https://docs.ipfs.tech/install/ipfs-desktop/#windows
IPFS’in Yanıt Vermesi Gereken Sorular:
1) Günümüzün ağ ekosistemi istemci-sunucu modeli için gelişti, bu eşler arası modele geçiş için ne tür sorunlar yaratabilir? İkinci olarak, ISP’ler (iyi ya da kötü), diğer ISP’lerle eş zamanlı olarak trafik şekillendirme/mühendislik sorumluluklarını üstlenecek şekilde gelişti. Bu karmaşık bir sistemdir. Popüler IPFS kullanımı bu ekosistemle nasıl etkileşime girer?
2) İlgili bir nokta olarak, akıllı telefonlar günümüz internetinde birincil vatandaşlık statüsü kazanmıştır. Eşler arası ve IPFS akıllı telefonlarla ne kadar iyi geçinebilir? Akıllı telefonlar, bulut bilgi işlem modelinde ince istemciler olmaya çok uygundur, ancak eşler arası bir sistemde eşler olarak hareket etmeye uygun değildir (hem pil hem de bağlantı bant genişliği nedenleriyle).
3) İşin akademik tarafında, IPFS için merkezi olmayan bir arama motoru tasarlamak harika bir araştırma problemi gibi görünüyor. Google, veri merkezinde işi kolaylaştırdı, ancak IPFS düğümleri üzerinden P2P tarzında tutulan merkezi olmayan bir anahtar kelime/içerik tabanlı arama motoru (veya bir günlük dizinler) tasarlayabilir misiniz? Bir dosyanın sistemdeki popülaritesi (sistemde kaç kopyası olduğu), anahtar kelime için alaka sıralamasında rol oynayabilir.
4) Aşağıda, ademi merkeziyetçilikle ilgili daha sinir bozucu sorunlar var. Bunlara tatmin edici cevaplar olup olmadığı konusunda net değilim. IPFS, diğer kullanıcılar tarafından oluşturulan bazı yasa dışı içerikleri depoluyor olabileceğim anlamına mı geliyor? IPFS oynaklıkla nasıl başa çıkıyor? Sadece geceleri dizüstü bilgisayarları kapatmak, talihsiz olaylar dizisi altında kullanılamamasına neden olabilir. Bu kaderden kaçınmak için bir veri için uygun kopya sayısı nedir? Muhafazakar olmak ve kullanılabilirlik sağlamak için aşırı çoğaltmamız gerekir mi? IPFS yaygın olarak kullanılıyorsa, içeriklerinin ağ üzerinden viral hale gelmesinden yararlanan büyük içerik sağlayıcılarından nasıl ücret alırız? Her eş, bu içeriği dağıtırken çipler, ancak içerik oluşturucu, diyelim ki satış yoluyla fayda sağlar. Bu sorunu çözmek için her şeyi gören ve adil olan bir jeton ekonomisi olması gerekir mi?
5) IPFS ile Reed-Solomon silme kodlaması kullanmak mümkün müdür? Reed-Solomon kodları, replikasyon için büyük tasarruf sağladıkları için veri merkezlerinde çok popülerdir.
6) IPFS, Bizans Generaller Problemine müsamaha göstermez, değil mi? Düğüm Kimliği için gerekli olan kripto bulmacası, bazı işleri yapmalarını sağladığı için sahte spam göndericileri azaltmaya yardımcı olabilir. Ancak katıldıktan sonra, akranların adil oynayacağının garantisi yok: Bizanslı olabilirler ve sistemi alt üst edebilirler. Ama ne kadar soruna neden olabilirler? Kriptoları ve imzaları kullanmak birçok sorunu önler. Ancak Bizans düğümleri, bir şekilde sistemde veri kaybına neden olarak, oluşturucunun verilerin kopyalandığını düşünmesine neden olarak, ancak daha sonra bu verileri silmesine neden olabilir mi? Başka hangi şeyler ters gidebilir?