Bir tüketici, sağlayıcı listesini bir kayıt defterinden abonelik yoluyla alır. Kayıt defterinde değişiklik olması, beklenmedik bir sorunla karşılaşılması veya ağ ve CPU yükleri gibi faktörler nedeniyle sağlayıcı ile kayıt defteri arasındaki bağlantının kesilmesi durumunda abonelik istisnaları oluşabilir. Bu durumda tüketici boş bir sağlayıcı listesi alabilir. Sistemin genel kullanılabilirliğini artırmak için Nacos istemcisinde veya Microservices Engine (MSE) Nacos sunucusunda boş liste korumasını etkinleştirebilirsiniz.
Ön koşullar
MSE etkinleştirilmiş olmalıdır. Daha fazla bilgi için bkz. Activate MSE.
Bir Nacos motoru oluşturulmuş olmalıdır. Daha fazla bilgi için bkz. Nacos motoru oluşturma.
İstemcide boş liste korumasını etkinleştirme
Sınırlamalar
1.4.1 veya sonraki sürümlerdeki Nacos Java istemcisi boş liste korumasını destekler.
Belirli sürümlerden kaynaklanan riskleri önlemek için istemci, Spring Cloud uygulamaları ve Dubbo uygulamaları için önerilen sürümler temelinde uygun sürümleri seçmenizi öneririz.
Yordam
-
Nacos Java istemcisini kullanıyorsanız aşağıdaki adımları uygulayın:
-
Aşağıdaki
Nacos istemcisibağımlılığını ekleyin:<!-- ${nacos-client.version} must be 1.4.1 or later. --> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>${nacos-client.version}</version> </dependency> -
Uygulama kodunda aşağıdaki ayarları yapılandırın:
Properties properties = new Properties(); properties.put(PropertyKeyConst.SERVER_ADDR, "${Endpoint of the MSE Nacos instance}"); properties.put(PropertyKeyConst.NAMING_PUSH_EMPTY_PROTECTION, "true"); NamingService naming = NamingFactory.createNamingService(properties);
-
-
Uygulamanız bir Spring Cloud Alibaba uygulamasıysa uygulamanızın yapılandırma dosyasına aşağıdaki yapılandırmayı ekleyin:
spring.cloud.nacos.discovery.namingPushEmptyProtection=true -
Uygulamanız bir Dubbo uygulamasıysa Dubbo uygulamanızın yapılandırma dosyasına aşağıdaki kayıt defteri URL yapılandırmasını ekleyin:
dubbo.registry.address=nacos://${Endpoint of the MSE Nacos instance}:8848?namingPushEmptyProtection=true
Sunucuda boş liste korumasını etkinleştirme
Hala çok sayıda Java dışı istemci ve 1.4.1 öncesi sürümlerdeki Nacos Java istemcisi kullanılmaktadır. MSE, açık kaynaklı Nacos'a dayalı olarak Nacos sunucularının yeteneklerini optimize eder ve Nacos sunucuları için boş liste koruması sağlar.
Sınırlamalar
Nacos motoru sürümü 2.1.0.0 veya sonraki bir sürüm olmalıdır. Nacos motoru sürümünü yükseltme hakkında daha fazla bilgi için bkz. Nacos sürümünü güncelleme.
Yordam
Boş liste korumasını etkinleştirme yöntemi, MSE Nacos motorunuzun sürümüne göre değişir.
MSE Nacos motorunuzun sürümü 2.1.0.0 veya 2.1.0.1 ise herhangi bir işlem gerekmez. Bu sürümlerde boş liste koruması otomatik olarak etkindir.
-
MSE Nacos motorunuzun sürümü 2.1.0.2 veya sonraki bir sürümse boş liste korumasını etkinleştirmek için aşağıdaki adımları izleyin:
MSE konsolunda oturum açın ve üst gezinme çubuğundan bir bölge seçin.
Sol gezinme bölmesinde Microservices Registry > Instances öğelerini seçin.
Instances sayfasında örneğin adına tıklayın.
Sol gezinme bölmesinde Parameter Settings seçeneğine tıklayın. Parameter Settings sayfasının Real-time Effective Parameters bölümünde forcePushEmptyProtectionForAllService parametresinin Actions sütununda Edit seçeneğine tıklayın.
-
Edit Parameters iletişim kutusunda Value için Yes seçeneğini belirleyin ve OK seçeneğine tıklayın.
NotEn yüksek hizmet kullanılabilirliğini sağlamak için tüm durumlarda forcePushEmptyProtectionForAllService parametresinin Value değeri olarak Yes seçeneğini belirlemenizi öneririz.
Sonucu doğrulama
Bir hizmet boş liste korumasını tetiklediğinde tüketicinin bulunduğu düğümün ${user.home}/logs/nacos dizinindeki naming.log dosyasında Trigger push empty protection for Service mesajı görüntülenir.
Normal koşullarda bu tür bilgiler sık sık görünmez. Bu tür bilgiler sık sık görünürse sorunu aşağıdaki olası nedenlere göre giderebilirsiniz:
-
Tüketicinin abone olduğu sağlayıcılar mevcut değil.
Tüketici mevcut olmayan bir sağlayıcıya abone olduysa uygulama bağımlılığının gerekli olup olmadığını kontrol etmeniz gerekir. Uygulama bağımlılığı gerekli değilse geçersiz bağımlılığı silin. Uygulama bağımlılığı gerekliyse sağlayıcıyı yeniden yayınlamanız gerekir.
-
Örnek listesinde hiçbir sağlayıcı görüntülenmiyor.
Tüketicinin abone olduğu sağlayıcıların bağlantısının sık sık kesilip kesilmediğini kontrol edin.
Her sağlayıcı ile MSE Nacos örneği arasındaki ağ bağlantısının normal olup olmadığını kontrol edin. Ağ bağlantısı anormal ise MSE Nacos örneği sağlayıcının bağlantısının kesildiğini belirler.
Boş liste korumasını tetikleyen hizmeti tanımlama
Hata mesajı, boş liste korumasını tetikleyen hizmetle ilgili bilgileri içerir. Tüketicinin abone olduğu boş hizmeti Service{namespace='XXX', group='xx', name='xxxxxxx', ephemeral=true, revision=0} bilgisine göre tanımlayabilirsiniz.
Bilinen tetikleme senaryoları
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Boş liste korumasının zorla etkinleştirildiği senaryolar
MSE Nacos 2.1.0.2 veya sonraki sürümlerde boş liste korumasını etkinleştirme mantığı optimize edilmiştir. Bu optimizasyon, forcePushEmptyProtectionForAllService parametresinin Value değeri için Yes seçildiğinde yalnızca boş liste korumasının etkinleştirilmesini sağlar. Ancak sistem, forcePushEmptyProtectionForAllService parametresinin Value değeri için No seçilse bile kullanılabilirliği ve kararlılığı sağlamak için aşağıdaki senaryolarda boş liste korumasını otomatik olarak etkinleştirir.
Bir motor düğümü yükseltildiğinde, yeniden başlatıldığında veya arızadan kurtarıldığında düğüm, bu süre zarfında hizmet kullanılabilirliğini sağlamak için tüm uygulamalar için iki dakikalık boş liste korumasını otomatik olarak etkinleştirir.
Bir uygulamanın tüm örnekleri MSE örneğindeki uygulama örnek listesinden kaldırılırsa MSE örneği, uygulama için bir dakikalık boş liste korumasını otomatik olarak etkinleştirir. Bu işlem, kararsız ağ performansı ve hizmet sağlayıcılarının geçici arızaları gibi sorunlar ortaya çıktığında boş liste korumasının beklenmedik şekilde tetiklenmesini önler. Bu şekilde, bu senaryoda hizmet kullanılabilirliği sağlanır.
En yüksek hizmet kullanılabilirliğini sağlamak için tüm durumlarda boş liste korumasını etkinleştirmek üzere forcePushEmptyProtectionForAllService parametresinin Value değeri olarak Yes seçeneğini belirlemenizi öneririz.
Başvurular
MSE Microservices Registry tarafından sağlanan yüksek kullanılabilirlik yeteneklerini kullanarak uygulamaların risk yönetimi yeteneklerini önemli ölçüde artırabilirsiniz. Daha fazla bilgi için bkz. MSE Microservices Registry'nin yüksek kullanılabilirlik yeteneklerini uygulama.