Çatal Almayın: Konstantinopolis ve Ethereum Müşteri Yükseltmelerini Yönetmek İçin En İyi Uygulamalar

Güvenlik hatalarını düzeltmek, hataları düzeltmek veya yeni özellikler eklemek için yazılım güncellemeleri genellikle her gün kullandığımız uygulamalar için iyi bir şeydir ve bunları uygulama konusunda iki kez düşünmüyoruz. Ancak temel altyapı parçalarına yapılan güncellemeler, bağımlı uygulamalar için kırılma değişiklikleri veya beklenmeyen davranışlar ortaya çıkardıklarında korkutucu olabilir veya diğer durumlarda zamanında güncelleme yapılmaması kırılmaya neden olabilir. Bu sorun küçük ve büyük varlıkları etkiler ve blok zincir istisna değildir.

Alchemy'de, müşterilerimize hizmet olarak güvenilir, ölçeklenebilir ve hızlı Ethereum altyapısı sağlıyoruz; Çalışmalarımız boyunca, ağ çatallarını ve müşteri güncellemelerini en iyi şekilde nasıl kullanabileceğimizle ilgili birçok ders (bazen zor yoldan!) Öğrendik. Yaklaşan Konstantinopolis sert çatalıyla, bunun en iyi uygulamalarımızdan bazılarını paylaşmak için harika bir fırsat olacağını düşündük.

Bu, Ethereum altyapısını güvenilir, performanslı ve ölçeklenebilir bir şekilde çalıştırmak için yazacağımız blog yazılarının ilkidir.

İstanbul

Konstantinopolis Ethereum’un bir sonraki sistem genelindeki yükseltmesidir ve Ethereum 2.0’a yönelik daha büyük bir yol haritasının parçası olan beş EIP’yi uygulayacaktır. Spesifik değişiklikleri tartışan çok sayıda mesaj var, ancak dikkat edilmesi gereken en önemli şey, tartışmasız sert bir çatal olduğu için toplumun yeni çatalı benimsemesi, belirteçleri ve diğer durumları güncellenmemiş düğümlerde değersiz hale getirmesi.

Bu sizi nasıl etkiler?

DAP geliştiricileri için, anahtar paket servisi, düğümünüzü Konstantinopolis uyumlu bir sürümle güncellemeniz gerekeceği veya ağın geri kalanıyla 7,080,000 bloğun diğerleriyle uyumsuz olacağınızdır. Ethereum müşterileri büyük olasılıkla zincirin sert çatallarında güncel olacak ve müşterisinin kararlı, uyumlu bir versiyonunu tahmini çatal tarihine göre önceden yayınlayacaklardır; Geth ve parite. Kendi Ethereum istemci düğümünüzü yönetiyorsanız, ethereum istemcinizi sert çatalla uyumlu bir sürüme güncellemeniz gerekir; parite 2.1.10 istikrarlı veya daha yüksek olur ve geth 1.8.20 veya daha yüksek olur.

Sert çatal güncellemeleri aralarında çok az olmalı, ancak Ethereum istemci güncellemeleri çok daha yaygın olabilir. Zincire bağlı bir servis kullanıyorsanız, müşterinizi güncel tutmak güvenlik kusurlarını düzeltmek veya yeni işlevlerden yararlanmak için faydalı olabilir. Ancak, uygulamanıza beklenmeyen sorunları girmediğinizden emin olmalısınız.

En İyi Uygulamalar

Ethereum blockchain ile düzenli etkileşim gerektiren bir servis kullanıyorsanız, birkaç temel en iyi uygulama, düğümlerinizi güncellediğinizde sizi potansiyel felaket hatalardan koruyacaktır. Bu blog yayınının itici gücü olan kötü giden güncellemelerin bazı gerçek senaryolarını gözden geçireceğiz.

Birden Çok Düğüm Çalıştırma

Artan güvenilirlik ve ölçeklenebilirlik dahil olmak üzere birçok fayda nedeniyle şirket içi Ethereum altyapısını korumak için en iyi uygulama olarak birden fazla düğüm çalıştırmanızı şiddetle öneririz. Ancak bu, daha sonraki bir blog yazısında ele alacağımız sisteminize tutarlılık ve önemsizlik sorunları getirebilir.

Güncellemeler söz konusu olduğunda, birden fazla düğüm çalıştırmak birkaç ek fayda sağlar:

  1. Ekstra düğümler, bir güncellemenin yanlış gitmesi durumunda bir düğüm oluşturur ve bir düğümü kurtarılamaz duruma getirir
  2. Düğümleri yuvarlanan şekilde güncellerken yüksek kullanılabilirlik ve kesinti yok
  3. Beklenen davranışı sağlamak için güncellenmiş düğümleri orijinal düğümlerle karşılaştıran regresyon testine izin verir

Kurtarılamaz bir düğüm senaryosunda, yeni bir tam arşiv düğümü tamamen eşitlenecek iki hafta sürebilir. Yedekleme olmadan, bu kabul edilemez bir kesintidir.

Örnek 1: Buggy DB Migration

Eşliği 1.X.X'ten 2.X.X'e yükseltirken gördüğümüz bir sorun veritabanındaki bozulma oldu. Güncelleme, çiçeklenme filtresindeki blok numaralarını yanlış şekilde dönüştüren bir iç DB geçişi içeriyordu; bu, geçmiş bloklar için getLog istekleri için boş sonuçlara yol açtı. Veri kaybı geri döndürülemezdi, böylece düğüm kurtarılamadı. Kanarya düğümündeki dahili testlerden, sistemlerimizi ayakta tutmak için güncellenmeyen düğümlerimize geri döndüğümüz ve sorunun 2.2.3-beta’daki parite ekibi tarafından çözülene kadar beklediğimiz için şanslıyız.

Sıkı Regresyon Testi

Sisteminizde yapılacak herhangi bir değişiklik için sıkı testler daima önerilir. Bu bağlamda, düğümlerinizi güncellerken, uygulamanızın ve altyapınızın beklendiği gibi çalışmaya devam etmesini sağlamak için test etmek isteyeceksiniz. Aksi takdirde, kullanıcılarınızı ve sistemlerinizi kesintilere maruz bırakabilirsiniz. Birden fazla çalışan düğümde, bunu garanti etmenin en iyi yolu önceki kararlı düğümlerinizi güncellenmiş bir kanarya düğümüne karşı sınamaktır. Herhangi bir kırılma değişikliği tespit edilirse, kümenizin geri kalanını güncellemeden önce sistemlerinizin bunları güvenle kullanabildiğinden emin olun.

Regresyon testlerine gelince, üretim taleplerini düğümlerimize karşı tekrarlayarak doğrudan kaynağa gidiyoruz. Bu tek seferlik kontroller için manuel olarak yapılabilir, ancak çok fazla projeyi desteklediğimiz için, en son canlı istekleri örnekleyen, farklı müşteri sürümlerinde tekrarlayan ve sonuçları karşılaştıran kapsamlı bir otomatik test çerçevesi oluşturduk. Bu, kodumuzun üretime göndermeden önce güncellenmiş düğümlerle güvenli bir şekilde etkileşime girebileceğini doğrulamamızı sağlar. Bu çerçeve iç kod değişikliklerinde yapılan regresyon testleri için de kullanılabilir.

Örnek 2: Tepki Çıkışı Formatı Değişimi

Bu, yeni güncellenen bir müşterinin bir EVM yürütme hatasıyla ilgili farklı bir yanıt vermesiyle karşılaştığımız ilginç bir konuydu. Parity 1.11.1-beta buna benzeyen bir yanıt verdi:

{"Jsonrpc": "2.0", "hata": {"kod": - 32015, "mesaj": "VM yürütme hatası.", "Veri": "0x"} Döndürüldü "," id ": 1}

Buna benzeyen önceki sürümlerden gelen yanıtlar yerine:

{ “Jsonrpc”:”2.0" ,” kimlik”: 1,” Sonuç”:” 0 x”}

Yanıt formatındaki değişiklik aslında sessizce başarısız olmak yerine arayan kişiye daha fazla yürütme detayı getirmesi nedeniyle faydalıdır, ancak kodun işlenmesi için ayarlanmamışsa sorunlara neden olabilir. Bu senaryoda, yanıt çıktılarının karşılaştırılması değişikliği yakaladı ve sistemlerimizi basit bir şekilde güncelledik ve müşterilerimizi yeni yanıttan endişe etmemeleri için uyardık ve hizmetlerini uyumlu hale getirebilecekleri konusunda uyardık.

Üzerine inşa etmek!

Bunun yararlı olacağını ve bu en iyi uygulamaların gelecekte sizin için ağrısız güncellemeleri ağrısız hale getireceğini umuyoruz. Güncellemelerin hem kendi sistemlerimiz hem de bize güvenen müşteriler için her zaman sorunsuz bir şekilde yapıldığından emin olmamıza yardımcı oldular. Düğümleri koruma ve ölçeklendirme karmaşıklığının ne kadar zor olduğunu biliyoruz ve yıllar içinde edindiğimiz öğrenmeleri yaymak istiyoruz.

Bir Ethereum projesi üzerinde çalışıyorsanız ve nodları koruma ek yükü ile uğraşmak istemiyorsanız, bizimle konuşun! Alchemy, ürününüzü oluşturmaya odaklanabilmeniz için bir hizmet olarak en hızlı, en ölçeklenebilir ve en güvenilir Ethereum altyapısını sunar. Başlık altında, Alchemy, Augur, CryptoKitties gibi en iyi blok zinciri şirketleri ve en yüksek riskten korunma fonları (3 milyar doların üzerinde para yönetimi) gibi üst blok zincirleme projelerine güç veren devrim niteliğinde yeni bir altyapı inşa etti. Alchemyapi.io adresinde daha fazla bilgi alabilirsiniz.