Sharding Nedir?
Sharding, veritabanı bölümlemenin türlerinden birine verilen isimdir. Yatay bölümleme olarak da bilinir.
Sharding, büyük bir veritabanının daha küçük, uğraşması daha kolay parçalara ayrılması şeklinde gerçekleştirilir. Bu sayede performans artar ve sorgu yanı süresi kısaltılmış olur.
Sharding yeni bir kavram değildir, bilindik merkezi veritabanı yönetiminde 90’lardan bu yana kullanılmaktadır. Sharding kavramının popülerleşmesinde, ünlü MMORPG oyunu Ultima Online’ın katkısı vardır. Oyunun geliştiricileri, trafiğin altından kalkabilmek adına oyuncuları farklı sunuculara -oyunda farklı ‘dünyalara’- dağıtma yolunu seçmişlerdi.
İş dünyasında sharding genellikle geniş bir müşteri veritabanını coğrafi konuma göre gruplandırma şeklinde kullanılır. Her coğrafi konumun kendi sunucusu vardır.
Blockchain ve Sharding
Blockchain ve sharding özünde benzer bir süreçte çalışırlar.
Blockchain ağı, her biri bir veri sunucusunu temsil eden node’ların bir araya getirdiği bir veritabanıdır. Eğer blockchain’e sharding uygulayacak olursak ağı, her bir parçası kendi akıllı sözleşmelerine ve bakiyesine sahip bireysel parçalara ayırmış oluruz. Bunun üzerine node’lar bu parçalara atanırlar, yani tüm ağın işlemleri yerine sadece atandıkları parçanın işlemlerinin doğrulanmasından sorumlu olurlar. Buradaki ana fikir, blockchain’in daha küçük parçalara ayrılarak yapılan işlem sayısının arttırılması ve sık karşılaşılan ölçeklenebilirlik sorununun çözülmesidir.
Sharding Nasıl Çalışır?
Sharding’i bir örnekle incelemek adına, Ethereum blockchain’ini ele alalım.
Ethereum blockchain’i binlerce bilgisayarın, yani node’un, birleşiminden oluşmaktadır. Bu makalenin yazıldığı an itibariyle sayısı 7807 olan bu bilgisayarlar, blockchain ağının kendi hash güçlerinden yararlanmasına izin verirler. Bu hash gücü sayesinde Ethereum sanal makinesi akıllı sözleşmeler yapabilir, merkezsizleşmiş uygulamalar çalıştırabilir ve daha birçok işlemi gerçekleştirebilir.
Ethereum ardışık yürütüm temelli bir sistem üzerine kuruludur, bu da her bir node’un yapılan her bir hareketi hesaplaması ve her bir işlemi yapması gerektiği anlamına gelir. Sürecin çetrefilli oluşu tek bir işlemin gerçekleştirilmesinin bile uzun zaman almasına sebep olur. Ethereum saniyede 10 işlem yapabilmektedir, bu Visa gibi finans devlerinin saniyede 24.000 işlemlik kapasitesiyle karşılaştırıldığında oldukça düşüktür. Ağa daha fazla bilgisayar eklemek süreci daha verimli hale getirmeyebilir çünkü defterin tamamının zaten ağdaki her bir bilgisayarda bulunması gerekmektedir.
Sharding kullanılmasının sebebi bu lineer yürütüm modelinden kaçınmak ve paralel yürütüm modeline geçmektir. Bu geçiş sağlandığı takdirde her bir bilgisayar her bir işlemle uğraşmak zorunda kalmayacak, bilgisayarlar yalnızca atandıkları spesifik işlemlerle ilgileneceklerdir. Bu da aynı anda birden fazla işlemin gerçekleştirilebileceği anlamına gelir. Blockchain münferit parçalara – başka bir deyişle alt alanlara- ayrılacaktır. Node’lar defterin tamamını yürütmek yerine yalnızca görevlendirildikleri işlemlerin defterini tutacaklardır.
Peki Sharding Ne Tür Sorunlara Çözüm Getirebilir?
Sharding, blockchain’in süregelen ölçeklenebilirlik problemine çözüm getirme potansiyeli çok yüksektir.
Blockchainlerin ölçeklenme sorunu zaman geçtikçe artar çünkü bir ağ ne kadar tercih edilirse, o kadar çok işlem gerçekleştirmek ve program çalıştırmak zorunda kalır. Ağda gerçekleştirilmesi gereken faaliyet sayısının artması, node’ların doğrulaması gereken işlem sayısının artması demektir.
Tüm bunların sonucunda blockchain tıkanabilir, bu da kullanıcıların son isteyeceği şeydir çünkü işlemler korkunç derecede yavaşlar. Yavaşlama blockchain’in imajını da zedeler ve gelecekte kullanıcı haline gelmesi beklenen hedef kitlenin hevesinin kırılmasına sebep olur. Her açıdan sürdürülebilir bir durum değildir.
Eğer blockchain daha küçük münferit parçalara ayrılırsa ve node’ların her biri farklı parçalara atanırsa her node’un defterine tamamına hakim olmasına gerek kalmaz. Aynı paralel bağlı bir elektrik devresinde olduğu gibi ağın parçaları üzerinde aynı anda birden fazla işlem gerçekleştirilebilir hale gelir. Bütün ağın hızının artmasını sağlayan bu bölümleme yöntemi uzun vadeli, sürdürülebilir bir çözümdür.
Ethereum’un kurucu ortağı Vitalik Buterin, ‘Blockchain Üçlü Çelişkisi’ olarak adlandırılan bir ifade ortaya atmıştır. Bu ifadede blockchain’in üç çekirdek özelliğini güvenlik, ölçeklenebilirlik ve merkezsizleşmişlik olarak tanımlayan Buterin, bir blockchain’in bu üç özellikten yalnızca ikisini aynı anda barındırabileceğini öne sürmüştür. Buterin’e göre bu özelliklerin ikisini ayakta tutabilmek adına üçüncüsünden feragat etmek kaçınılmazdır. Sharding sayesinde ölçeklenebilirlik sorununa çözüm bulunduğu takdirde diğer iki sorunun giderilmesi de mümkün olabilir.
Sharding’in Sakıncaları Neler?
Günümüzde sharding’e dair sakıncalar genellikle iletişim ve güvenlik konularına dairdir.
Bir blockchain’i parçaladığınız takdirde her bir parça birbirinden yalıtılmış ayrı blockchain ağları gibi görünecektir. Parçalar arasında iletişimi sağlayan bir mekanizma yoksa bir parçanın içindeki kullanıcılar ve uygulamalar, diğer parçaların içindeki kullanıcılardan ve uygulamalardan haberdar olamayacaklardır. Bir blockchain ağında iletişimsizlik kabul edilemeyeceğinden burada yazılımcılara çok büyük bir iş düşüyor.
Parçalanmış bir blockchain’de güvenlik sorunları da tezahür edebilir. Parçaların bireysel hash güçleri, bütün bir blockchain’in hash gücünün yanında oldukça düşük kalır. Bu da parçaları hacker saldırılarına karşı daha dayanıksız kılar çünkü hacker’lar için tek bir parçayı ele geçirmek kolaylaşır. Bu tarz saldırılara tekil parça saldırısı veya %1 saldırısı denir. Tek bir parçanın ele geçirilmesi halinde saldırganlar ana ağa geçersiz işlemler doğrulatabilirler ya da o parçada kaydedilen işlemlerin geçersiz kılınmasına sebep olabilirler.
Ethereum bu sakıncaya önlem olarak rastgele örneklemeyi öne sürüyor. Bu yöntem, parçaların özgünlüğünü tasdik etme görevi taşıyan bir parça görevlisinin rastgele parçaları ele alarak özgünlükleri denetlemesi şeklinde uygulanıyor.
Sharding’e Alternatif Olabilecek Başka Araçlar Var Mı?
Yazılımcılar şimdiye dek blockchain’i geliştirebilecek iki farklı öneri sundular.
Bu önerilerden ilki, blok boyutunu büyütmek. Basit bir mantıkla düşünülürse, blok boyu ne kadar büyük olursa o kadar çok işlem sığdırılabilir, saniye başına işlem sayısı da bu yolla arttırılabilir. Mantık doğru olsa da, blok boyutunun büyümesi, bloğu doğrulamak adına daha çok güç gerekeceği anlamına geldiğinden tercih edilmemesi olası görünüyor. Çünkü blok boyutu çok artarsa, yalnızca özel ekipmanlara sahip güçlü bilgisayarlar gereken işlem gücünü sağlayabilir hale gelir. Bu tarz bir ekipman edinmek kullanıcılar için maliyetli olacağından node havuzları küçülür. Küçülme, blockchain’in merkezsizleşmiş yapısına bir tehdit oluşturulabilir zira %51 saldırılarına daha açık hale gelmesine sebep olabilir. Bunun dışında blok boyutunun artması hard fork ihtiyacını beraberinde getirebilir. Herkes kendini yeni blockchain’e göre güncellemezse iki zincir aktif olarak kullanılıyor olur, bu da iki koinin ortaya çıkmasına sebep olur.
Tüm bu sebepler göz önünde bulundurulduğunda blok boyutunun büyütülmesi yalnızca kısa vadeli bir çözümdür.
İkinci öneri daha fazla altkoin kullanılmasıdır, bu sayede farklı uygulamalar kendi zincirleriyle kendi koinleriyle çalışmaya devam edebilirler. Bu metod performansı arttırabilir çünkü işlemler tek bir blockchain’e yığılmazlar. Lakin yine de güvenlik açıkları oluşabilir çünkü tüm hash gücü birden fazla blockchain’e dağılmış haldedir. Yine geldiğimiz nokta, blockchain’in %51 saldırılarına karşı dayanıksızlaşmasıdır.
Yani her iki öneri de sharding’den daha olumlu sonuçlar vermemektedir.
Kimler Sharding Kullanmaktadır?
Bazı blockchain’ler çoktan sharding kullanmaya başladılar, bazıları ise hala geçiş aşamasında.
Zilliqa, sharding kullanmaya başlayan ilk blockchain’dir. Sharding’in tatbik edilmesi sonucunda testlerde saniyede 2,828 işleme ulaşabildiği görülmüştür.
Merkezsizleşmiş uygulama geliştirme platformu Near, kendi blockchain ekosistemini ‘parçalı, geliştirici dostu, Payın Kanıtı ile çalışan bir blockchain’ olarak tanımlamaktadır. Near aynı zamanda sharding teknolojisi sayesinde bulut sunucularda çalıştırılabilecek kadar küçük node’lar elde edebilmiştir. Node’ların bu denli küçük boyutlara getirilebilmesi, ileride mobil cihazlarda da kullanılabilmesini sağlayabilir.
Ethereum Foundation, merakla beklenen Ethereum 2.0 güncellemesi ile sharding teknolojisini uygulamaya koymayı planlamaktadır. Ethereum Foundation, güncellemenin 2020 yılının Ocak ayında geleceğini açıklamıştı.
Cardano, QuarkChain ve PChain, sharding kullanmayı planlayan diğer projeler arasında.
Blockchain ve Sharding’in Geleceği Ne Durumda?
Facebook’un yayınladığı Libra koini sebebiyle sharding yeniden gündeme geldi.
Facebook, 2020 yılının ilk yarısında Libra koini piyasaya sürmeyi planlıyor. Koinin white paper’ını kısa süre önce yayınlayan Facebook, Chainspace’i satın aldı. Chainspace’in yazılımcı ekibi blockchain sharding üzerine çalışmalar yapmaktaydı, bu da Libra koinin de aynı teknolojiden faydalanabileceğine dair ipuçları veriyor.