स्प्रिंग क्लाउड यूरेका सर्वर स्व संरक्षण और थ्रेशोल्ड को समझना


83

मैं विकासशील सूक्ष्मजीवियों के लिए नया हूं, हालांकि मैं इसके बारे में थोड़ी देर के लिए शोध कर रहा हूं, स्प्रिंग के डॉक्स और नेटफ्लिक्स दोनों को पढ़ रहा हूं।

मैंने जीथब पर उपलब्ध एक साधारण परियोजना शुरू की है । यह मूल रूप से यूरेका सर्वर (आर्किमिडीज) और तीन यूरेका क्लाइंट माइक्रोसर्विसेज (एक सार्वजनिक एपीआई और दो निजी) हैं। विस्तृत विवरण के लिए गितूब की रीडमी की जाँच करें।

मुद्दा यह है कि जब सब कुछ चल रहा है, तो मैं चाहूंगा कि यदि निजी माइक्रोसर्विस में से एक को मार दिया जाए, तो यूरेका सर्वर को एहसास होता है और इसे रजिस्ट्री से हटा देता है।

मैंने Stackoverflow पर यह प्रश्न पाया , और समाधान enableSelfPreservation:falseयूरेका सर्वर कॉन्फिगरेशन का उपयोग करके गुजरता है । थोड़ी देर के बाद ऐसा करने से मार दी गई सेवा उम्मीद के मुताबिक गायब हो जाती है।

हालाँकि मैं निम्नलिखित संदेश देख सकता हूँ:

SELF PRESERVATION MODE को बंद कर दिया गया है। नेटवर्क्स / अन्य प्रोब्लम के मामले में किसी भी तरह का इन्स्टीट्यूशन एक्सपोर्ट नहीं किया जा सकता है।

1. स्व संरक्षण का उद्देश्य क्या है? डॉक कहा गया है कि पर आत्म संरक्षण के साथ "ग्राहकों उदाहरणों कि अब मौजूद नहीं है प्राप्त कर सकते हैं" । तो यह कब चालू / बंद करना उचित है?

इसके अलावा, जब आत्म संरक्षण चालू है, तो आपको यूरेका सर्वर कंसोल चेतावनी में एक उत्कृष्ट संदेश मिल सकता है:

आपातकालीन! यूरेका ने उत्तर प्रदेश में अवैध रूप से सीलिंग कर रहे हैं, जब वे नहीं थे। रेनसमूह इस साल से कम हैं और INSTANCES सुरक्षित होने के लिए केवल अपेक्षित नहीं हैं।

अब, स्प्रिंग यूरेका कंसोल के साथ चल रहा है।

Lease expiration enabled    true/false
Renews threshold    5
Renews (last min)   4

मैं थ्रेशोल्ड काउंट का एक अजीब व्यवहार भर में आया हूं: जब मैं अकेले यूरेका सर्वर शुरू करता हूं, तो थ्रेशोल्ड 1 है।

2. मेरे पास एक एकल यूरेका सर्वर है और registerWithEureka: falseइसे दूसरे सर्वर पर पंजीकृत होने से रोकने के लिए कॉन्फ़िगर किया गया है। फिर, यह दहलीज की गिनती में क्यों दिखाई देता है?

3. हर ग्राहक के लिए मैं थ्रेशोल्ड काउंट +2 से बढ़ाता हूं। मुझे लगता है कि यह है क्योंकि वे प्रति मिनट 2 नवीनीकृत संदेश भेजते हैं, क्या मैं सही हूं?

4. यूरेका सर्वर कभी भी रिन्यू नहीं भेजता है इसलिए अंतिम मिनिमम रिन्यूअल हमेशा दहलीज के नीचे होता है। क्या यह सामान्य है?

renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4

सर्वर cfg:

server:
  port: ${PORT:8761}

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    enableSelfPreservation: false
#   waitTimeInMsWhenSyncEmpty: 0

ग्राहक 1 cfg:

spring:
  application:
    name: random-image-microservice

server:
  port: 9999

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
    healthcheck:
      enabled: true

3
मैं इस प्रश्न का उत्तर देने के लिए समय लेना चाहता हूं। यह जटिल है। कुछ उत्तर नेटफ्लिक्स कोड और अन्य कॉन्फ़िगरेशन हैं। मैं अपना उत्तर स्प्रिंग क्लाउड डॉक्यूमेंटेशन के हिस्से के रूप में समाप्त करना चाहता हूं, लेकिन यह धन्यवाद के बाद की संभावना होगी, जब तक कि मेरे सहयोगी इससे पहले जवाब नहीं देते।
18-26 बजे स्पेंकेरजिब नोव

यह नेटफ्लिक्स से थोड़ी सी पृष्ठभूमि है: github.com/Netflix/eureka/wiki/…
spencergibb

यहाँ कुछ और पृष्ठभूमि दी गई है: github.com/spring-cloud/spring-cloud-netflix/issues/373
spencergibb

8
@spencergibb यह 9 महीने से आ रहा है और कोई जवाब नहीं .. कोई इनपुट?
निक

1
@spencergibb अब एक वर्ष से अधिक हो गया है। क्या अभी भी किसी भी समय एक स्पष्ट जवाब पाने का मौका है? क्रिसमस उपहार के कुछ प्रकार :)
OcuS

जवाबों:


63

मुझे वही प्रश्न मिला, जैसे @codependent मिले थे, मैंने बहुत कुछ जाना और कुछ प्रयोग किया, यहाँ मैं यूरेका सर्वर और उदाहरण के बारे में कुछ जानकारी देने के लिए काम करता हूँ।

प्रत्येक उदाहरण को अपने पट्टे को यूरेका सर्वर को 30 सेकंड प्रति एक बार की आवृत्ति के साथ नवीनीकृत करना होगा, जिसे परिभाषित किया जा सकता है eureka.instance.leaseRenewalIntervalInSeconds

Renews (अंतिम मिनट) : अंतिम मिनट में यूरेका उदाहरण से प्राप्त कितने नवीकरण का प्रतिनिधित्व करता है

Renews थ्रेशोल्ड : नवीनीकृत कि यूरेका सर्वर यूरेका उदाहरण से प्रति मिनट प्राप्त की उम्मीद है।

उदाहरण के लिए, यदि registerWithEurekaके लिए सेट है झूठे , eureka.instance.leaseRenewalIntervalInSeconds30 के लिए सेट और 2 यूरेका उदाहरण चलाया जाता है। दो यूरेका उदाहरण 4 मिनट के लिए यूरेका सर्वर को प्रति मिनट 4 नवीकरण भेजेंगे , यूरेका सर्वर न्यूनतम सीमा 1 (कोड में लिखा गया है) है, इसलिए थ्रेशोल्ड 5 है (यह संख्या एक कारक है eureka.server.renewalPercentThresholdजो बाद में चर्चा की जाएगी)।

SELF PRESERVATION MODE : यदि Renews (अंतिम मिनट) Renews थ्रेशोल्ड से कम है , तो आत्म संरक्षण मोड सक्रिय हो जाएगा।

इसलिए ऊपरी उदाहरण में, SELES PRESERVATION MODE सक्रिय है, क्योंकि सीमा 5 है, लेकिन यूरेका सर्वर केवल 4 नवीनीकरण / मिनट प्राप्त कर सकता है।

  1. प्रश्न 1:

SELF PRESERVATION MODE खराब नेटवर्क कनेक्टिविटी विफलता से बचने के लिए डिज़ाइन है। यूरेका उदाहरण ए और बी के बीच कनेक्टिविटी अच्छी है, लेकिन बी कनेक्टिविटी के हिचकी के कारण कम अवधि में यूरेका सर्वर के लिए अपने पट्टे को नवीनीकृत करने में विफल है, इस समय यूरेका सर्वर केवल उदाहरण बी को किक नहीं कर सकता है। A, B उपलब्ध होने के बावजूद यूरेका सर्वर से पंजीकृत सेवा उपलब्ध नहीं कराएगा। तो यह SELF PRESERVATION MODE का उद्देश्य है, और इसे चालू करना बेहतर है।

  1. प्रश्न 2:

न्यूनतम दहलीज 1 कोड में लिखा गया है। registerWithEurekaझूठे के लिए सेट है इसलिए कोई यूरेका उदाहरण रजिस्टर नहीं होगा, दहलीज 1 होगा।

उत्पादन वातावरण में, आम तौर पर हम दो यूरेका सर्वर को तैनात करते हैं और registerWithEurekaइसे सही पर सेट किया जाएगा। तो दहलीज 2 होगी, और यूरेका सर्वर लीज को दो बार / मिनट में नवीनीकृत करेगा, इसलिए RENEWALS ARE LESSER THAN THRESHOLDकोई समस्या नहीं होगी।

  1. प्रश्न 3:

हाँ आप सही है। eureka.instance.leaseRenewalIntervalInSecondsपरिभाषित करता है कि सर्वर पर प्रति मिनट कितने नवीकरण भेजे जाते हैं, लेकिन यह eureka.server.renewalPercentThresholdऊपर वर्णित एक कारक को गुणा करेगा , डिफ़ॉल्ट मान 0.85 है।

  1. प्रश्न 4:

हां, यह सामान्य है, क्योंकि थ्रेशोल्ड प्रारंभिक मूल्य 1 पर सेट है। इसलिए यदि registerWithEurekaगलत पर सेट किया गया है, तो नवीनीकरण हमेशा थ्रेशोल्ड से नीचे होता है।

मेरे पास इसके लिए दो सुझाव हैं:

  1. दो यूरेका सर्वर को तैनात करें और सक्षम करें registerWithEureka
  2. यदि आप केवल डेमो / देव वातावरण में तैनात करना चाहते हैं eureka.server.renewalPercentThreshold, तो आप 0.49 पर सेट कर सकते हैं , इसलिए जब आप अकेले यूरेका सर्वर शुरू करते हैं, तो थ्रेशोल्ड 0 होगा।

हाय नी जिंग, क्या आप जानते हैं कि लेबल का अर्थ क्या है: "लीज़ की समय सीमा समाप्त होने में सक्षम:"
jabrena

हाय @jabrena, मुझे लगता है कि इसका मतलब है कि पट्टे की अवधि समाप्त हो जाएगी अगर उदाहरण यूरेका सर्वर को अपने पट्टे को नवीनीकृत नहीं करता है। यह eureka.instance.leaseExpirationDurationInSeconds से संबंधित हो सकता है, जिसका मूल्य डिफ़ॉल्ट रूप से 90 सेकंड है। यदि आप इस मान को 0 या एक नकारात्मक संख्या पर सेट करते हैं, तो लेबल "लीज़ की समय सीमा समाप्ति सक्षम: गलत" हो सकता है। आप इसे आजमा सकते हैं।
नी जिंग


काम नहीं करता है। थ्रेसहोल्ड = 0, Renews = 0 अभी भी चेतावनी को ट्रिगर करता है।
स्लेजहैमर

मैंने selfPreservationMode को अक्षम कर दिया है, लेकिन फिर भी मुझे यूरेका पर यह संदेश मिलता है - यूरेका मै बीई इनकॉरपोरेटली क्लिनिंग इंस्टीट्यूशंस यूपी हैं जब वे नहीं हैं। रेनसमूह इस साल से कम हैं और INSTANCES सुरक्षित होने के लिए केवल अपेक्षित नहीं हैं। यह सही नहीं होना चाहिए?
डीएचआरयूवी बंसल

31

मैंने यहां यूरेका के विवरण के साथ एक ब्लॉग पोस्ट बनाई है , जो स्प्रिंग डॉक या नेटफ्लिक्स ब्लॉग से कुछ गायब विवरण में भरता है। यह स्रोत कोड के माध्यम से डिबगिंग और खुदाई के कई दिनों का परिणाम है। मैं समझता हूं कि बाहरी URL से लिंक करने के बजाय कॉपी-पेस्ट करना बेहतर है, लेकिन SO उत्तर के लिए सामग्री बहुत बड़ी है।


2
ऐसी स्पष्ट पोस्ट को लिंक करने के लिए धन्यवाद। एक अनुशंसित पढ़ने !!
codependent

2
हाय @ अभिजीत सरकार, लेख अद्भुत है। मैंने कई कॉन्फ़िगरेशन संदेह हल किए।
जब्रीना

0

आप अपने यूरेका सर्वर गुणों में नवीकरण सीमा सीमा निर्धारित करने का प्रयास कर सकते हैं। यदि आपके पास यूरेका पर पंजीकरण करने के लिए लगभग 3 से 4 माइक्रोसर्विस हैं, तो आप इसे इस पर सेट कर सकते हैं:

eureka.server.renewalPercentThreshold=0.33
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.