የአገልግሎት ፍለጋ፣ ክፍት ትራሲንግ እና ጄገር

የአገልግሎት ፍለጋ፣ ክፍት ትራሲንግ እና ጄገር

በፕሮጀክቶቻችን ውስጥ የማይክሮ ሰርቪስ አርክቴክቸር እንጠቀማለን። የአፈጻጸም ማነቆዎች ሲከሰቱ፣ ብዙ ጊዜ መዝገቦችን በመከታተል እና በመተንተን ያሳልፋል። የግለሰቦችን ኦፕሬሽኖች ጊዜ ወደ ሎግ ፋይል በሚገቡበት ጊዜ ፣ለእነዚህ ኦፕሬሽኖች ጥሪ ያደረሰውን ምክንያት ለመረዳት ፣የድርጊቶችን ቅደም ተከተል ወይም የአንድ ኦፕሬሽንን የጊዜ ፈረቃ በተለያዩ አገልግሎቶች ውስጥ ለመከታተል ብዙውን ጊዜ አስቸጋሪ ነው።

የእጅ ሥራን ለመቀነስ, አንዱን የመከታተያ መሳሪያዎች ለመጠቀም ወስነናል. ፍለጋን እንዴት እና ለምን መጠቀም እንደሚችሉ እና እንዴት እንደሰራን, እና በዚህ ጽሑፍ ውስጥ ይብራራል.

በክትትል ምን ችግሮች ሊፈቱ ይችላሉ

  1. በአንድ አገልግሎት ውስጥ እና በሁሉም ተሳታፊ አገልግሎቶች መካከል ባለው የአፈፃፀም ዛፍ ላይ ሁለቱንም የአፈፃፀም ማነቆዎችን ያግኙ። ለምሳሌ:
    • በአገልግሎቶች መካከል ብዙ አጭር ተከታታይ ጥሪዎች ለምሳሌ ወደ ጂኦኮዲንግ ወይም ወደ የውሂብ ጎታ።
    • ረጅም I/O ይጠብቃል፣ ለምሳሌ የአውታረ መረብ ዝውውሮች ወይም ዲስክ ማንበብ።
    • ረጅም ውሂብ መተንተን።
    • ሲፒዩ የሚያስፈልጋቸው ረጅም ክዋኔዎች።
    • የመጨረሻውን ውጤት ለማግኘት የማያስፈልጉ እና ሊወገዱ ወይም ሊዘገዩ የሚችሉ የኮድ ክፍሎች።
  2. ቀዶ ጥገናው በሚካሄድበት ጊዜ ምን እንደሚጠራ እና ምን እንደሚከሰት በግልጽ ይረዱ.
    የአገልግሎት ፍለጋ፣ ክፍት ትራሲንግ እና ጄገር
    ለምሳሌ ጥያቄው ወደ WS አገልግሎት እንደመጣ ማየት ይቻላል -> የ WS አገልግሎት መረጃውን በ R አገልግሎት በኩል አጠናክሯል -> ከዚያም ወደ ቪ አገልግሎት ጥያቄ ልኳል -> የቪ አገልግሎቱ ብዙ መረጃዎችን ከ R አገልግሎት -> ወደ ፒ አገልግሎት ሄደ -> የፒ አገልግሎት እንደገና ወደ አገልግሎት ሄደ R -> አገልግሎት V ውጤቱን ችላ በማለት ወደ አገልግሎት J -> ሄደ እና ከዚያ በኋላ ብቻ መልሱን ለአገልግሎት WS መለሰ ፣ ሌላ ነገር ማስላት ሲቀጥል ዳራ ።
    ለጠቅላላው ሂደት እንደዚህ ያለ ዱካ ወይም ዝርዝር ሰነድ ከሌለ ፣ ለመጀመሪያ ጊዜ ኮዱን ሲመለከቱ ምን እየተፈጠረ እንዳለ ለመረዳት በጣም ከባድ ነው ፣ እና ኮዱ በተለያዩ አገልግሎቶች ውስጥ ተበታትኖ እና ከባንኮች እና መገናኛዎች በስተጀርባ ተደብቋል።
  3. ለቀጣይ የዘገየ ትንተና ስለ ማስፈጸሚያ ዛፍ መረጃ መሰብሰብ. በእያንዳንዱ የአፈጻጸም ደረጃ፣ በዚህ ደረጃ ላይ ባለው ፈለግ ላይ መረጃን ማከል እና ምን አይነት የግቤት ውሂብ ወደ ተመሳሳይ ሁኔታ እንዳመጣ ማወቅ ይችላሉ። ለምሳሌ:
    • የተጠቃሚው መለያ
    • መብቶች
    • የተመረጠው ዘዴ ዓይነት
    • የምዝግብ ማስታወሻ ወይም የአፈፃፀም ስህተት
  4. ዱካዎችን ወደ የመለኪያዎች ስብስብ እና ተጨማሪ ትንተና ቀድሞውኑ በመለኪያዎች መልክ መለወጥ።

ምን ዱካ ሊመዘገብ ይችላል። ስፋት

በክትትል ውስጥ የስፓን ጽንሰ-ሀሳብ አለ ፣ ይህ የአንድ ሎግ አናሎግ ነው ፣ ወደ ኮንሶሉ። ስፓው አለው:

  • ስም ፣ ብዙውን ጊዜ የተከናወነው ዘዴ ስም
  • ስፋቱ የተፈጠረበት የአገልግሎት ስም
  • የራሱ ልዩ መታወቂያ
  • በውስጡ የገባ በቁልፍ/ዋጋ መልክ የሆነ ዓይነት ሜታ መረጃ። ለምሳሌ የስልት መለኪያዎች ወይም ዘዴው በስህተት አልቋል ወይም አላበቃም።
  • ለዚህ ጊዜ የሚጀምር እና የሚያበቃበት ጊዜ
  • የወላጅ ስፋት መታወቂያ

እያንዳንዱ ስፓን አፈፃፀሙን እንዳጠናቀቀ በኋላ ለግምገማ በዳታቤዝ ውስጥ እንዲከማች ወደ ስፓን ሰብሳቢው ይላካል። ለወደፊት በወላጅ መታወቂያ በማገናኘት ሁሉንም አይነት ዛፎች መገንባት ይችላሉ. ሲተነተኑ፣ ለምሳሌ፣ ከተወሰነ ጊዜ በላይ የፈጁ አንዳንድ አገልግሎቶችን ሁሉንም ክፍተቶች ማግኘት ይችላሉ። በተጨማሪ፣ ወደ አንድ የተወሰነ ቦታ በመሄድ፣ ሙሉውን ዛፍ ከዚህ ስፋት በላይ እና በታች ይመልከቱ።

የአገልግሎት ፍለጋ፣ ክፍት ትራሲንግ እና ጄገር

Opentrace፣ Jagger እና ለፕሮጀክቶቻችን እንዴት እንደተገበርነው

አንድ የተለመደ መስፈርት አለ ክፍት ቦታ, እንዴት እና ምን መሰብሰብ እንዳለበት የሚገልጽ, በየትኛውም ቋንቋ ውስጥ አንድ የተወሰነ አተገባበርን በመከታተል ሳይታሰር. ለምሳሌ ፣ በጃቫ ፣ ሁሉም ከዱካዎች ጋር የሚሰሩት ስራዎች በተለመደው Opentrace API በኩል ይከናወናሉ ፣ እና በእሱ ስር ፣ ለምሳሌ ፣ ጄገር ወይም ምንም የማያደርግ ባዶ ነባሪ ትግበራ ሊደበቅ አይችልም።
እየተጠቀምን ነው። ጀዋር እንደ Opentrace ትግበራ. እሱ በርካታ ክፍሎችን ያቀፈ ነው-

የአገልግሎት ፍለጋ፣ ክፍት ትራሲንግ እና ጄገር

  • Jaeger-ኤጀንት አብዛኛውን ጊዜ በእያንዳንዱ ማሽን ላይ የተጫነ እና አገልግሎቶች በአካባቢው ነባሪ ወደብ ላይ የሚገቡት የአገር ውስጥ ወኪል ነው. ወኪል ከሌለ በዚህ ማሽን ላይ ያሉት ሁሉም አገልግሎቶች ዱካዎች ብዙውን ጊዜ ይሰናከላሉ።
  • ጃገር ሰብሳቢ - ሁሉም ወኪሎች የተሰበሰቡ ዱካዎችን ወደ እሱ ይልካሉ እና በተመረጠው የውሂብ ጎታ ውስጥ ያስቀምጣቸዋል.
  • የመረጃ ቋቱ የእነርሱ ተመራጭ ካሳንድራ ነው፣ እኛ ግን elasticsearchን እንጠቀማለን፣ ለሌላ ሁለት የውሂብ ጎታዎች አተገባበር እና በዲስክ ላይ ምንም ነገር የማያስቀምጥ የማስታወሻ ትግበራ አለ።
  • Jaeger-query ወደ ዳታቤዝ የሚሄድ እና አስቀድሞ የተሰበሰቡ ዱካዎችን ለመተንተን የሚመልስ አገልግሎት ነው።
  • Jaeger-ui ዱካዎችን ለመፈለግ እና ለመመልከት የድር በይነገጽ ነው፣ ወደ jaeger-query ይሄዳል።

የአገልግሎት ፍለጋ፣ ክፍት ትራሲንግ እና ጄገር

የተለየ ክፍል ለተወሰኑ ቋንቋዎች ክፍት ትራስ jaeger ትግበራ ተብሎ ሊጠራ ይችላል ፣ በዚህ በኩል ወደ jaeger-agent ይላካል።
ጃገርን በጃቫ በማገናኘት ላይ የ io.opentracing.Tracer በይነገጽን ለመተግበር ይወርዳል፣ ከዚያ በኋላ ሁሉም ዱካዎች ወደ እውነተኛው ወኪል ይበርራሉ።

የአገልግሎት ፍለጋ፣ ክፍት ትራሲንግ እና ጄገር

እንዲሁም ለፀደይ አካል, መገናኘት ይችላሉ የመክፈቻ-የፀደይ-ደመና-ጀማሪ እና ትግበራ ከጃገር ክፍት-ስፕሪንግ-ጃገር-ደመና-ጀማሪ በእነዚህ ክፍሎች ውስጥ ለሚያልፍ ነገር ሁሉ ፍለጋን በራስ-ሰር ያዋቅራል፣ ለምሳሌ http ለተቆጣጣሪዎች ጥያቄዎች፣ የመረጃ ቋቱ ጥያቄዎች በ jdbc ወዘተ.

በጃቫ ውስጥ የመግባት ዱካዎች

በከፍተኛ ደረጃ ላይ ያለ ቦታ, የመጀመሪያው ስፓን መፈጠር አለበት, ይህ በራስ-ሰር ሊከናወን ይችላል, ለምሳሌ, ጥያቄ ሲደርሰው በፀደይ መቆጣጠሪያ, ወይም በእጅ ከሌለ. ከዚያም ከታች ባለው ወሰን በኩል ይተላለፋል. ከታች ካሉት ዘዴዎች ውስጥ አንዳቸውም ስፓን ለመጨመር ከፈለጉ የአሁኑን አክቲቭስፓን ከ ስኮፕ ይወስዳል፣ አዲስ Span ይፈጥራል እና ወላጁ የነቃ እስፓን ነው ይላል እና አዲሱን እስፓን ንቁ ያደርገዋል። የውጭ አገልግሎቶችን በሚደውሉበት ጊዜ፣ አሁን ያለው ንቁ ጊዜ ወደ እነርሱ ይተላለፋል፣ እና እነዚያ አገልግሎቶች ይህንን ጊዜ በማጣቀስ አዲስ ክፍተቶችን ይፈጥራሉ።
ሁሉም ስራዎች በ Tracer ምሳሌ በኩል ያልፋሉ፣ በ DI ሜካኒካል ወይም GlobalTracer.get () እንደ አለምአቀፍ ተለዋዋጭ የ DI ዘዴ የማይሰራ ከሆነ ሊያገኙት ይችላሉ። በነባሪነት፣ መከታተያ ካልተጀመረ ኖፕትራክተር ምንም የማያደርግ ይመለሳል።
በተጨማሪም የአሁኑ ወሰን ከክትትል በ ScopeManager በኩል የተገኘ ነው, ከአሁኑ አዲስ ወሰን ከአዲሱ ስፔን ጋር በማያያዝ አዲስ ወሰን ይፈጠራል, ከዚያም የተፈጠረውን ወሰን ይዘጋል, ይህም የተፈጠረውን ስፋት ይዘጋዋል እና የቀደመውን ወሰን ወደነበረበት ይመልሳል. ንቁ ሁኔታ. ወሰን ከክር ጋር የተሳሰረ ነው፣ስለዚህ ባለብዙ-ክር ፕሮግራሚንግ ሲሰራ የሌላውን ክር ወሰን የበለጠ ለማግበር የነቃውን ስፋት ወደ ሌላ ክር ማስተላለፍን መርሳት የለብዎትም።

io.opentracing.Tracer tracer = ...; // GlobalTracer.get()

void DoSmth () {
   try (Scope scope = tracer.buildSpan("DoSmth").startActive(true)) {
      ...
   }
}
void DoOther () {
    Span span = tracer.buildSpan("someWork").start();
    try (Scope scope = tracer.scopeManager().activate(span, false)) {
        // Do things.
    } catch(Exception ex) {
        Tags.ERROR.set(span, true);
        span.log(Map.of(Fields.EVENT, "error", Fields.ERROR_OBJECT, ex, Fields.MESSAGE, ex.getMessage()));
    } finally {
        span.finish();
    }
}

void DoAsync () {
    try (Scope scope = tracer.buildSpan("ServiceHandlerSpan").startActive(false)) {
        ...
        final Span span = scope.span();
        doAsyncWork(() -> {
            // STEP 2 ABOVE: reactivate the Span in the callback, passing true to
            // startActive() if/when the Span must be finished.
            try (Scope scope = tracer.scopeManager().activate(span, false)) {
                ...
            }
        });
    }
}

ለባለብዙ-ክር ፕሮግራሚንግ፣ እንዲሁም TracedExecutorService እና ተመሳሳይ መጠቅለያዎች አልተመሳሰሉም ተግባራት ሲጀመሩ የአሁኑን ርቀት ወደ ክር በቀጥታ የሚያስተላልፍ።

private ExecutorService executor = new TracedExecutorService(
    Executors.newFixedThreadPool(10), GlobalTracer.get()
);

ለውጫዊ http ጥያቄዎች አሉ። የኤችቲቲፒ ደንበኛን መከታተል

HttpClient httpClient = new TracingHttpClientBuilder().build();

ያጋጠሙን ችግሮች

  • ባቄላ እና ዲአይዲ ሁልጊዜ አይሰሩም መፈለጊያው በአገልግሎት ወይም አካል ውስጥ ጥቅም ላይ ካልዋለ በራስ-ሰር የተሰራ Tracer ላይሰራ ይችላል እና GlobalTracer.get() መጠቀም አለብህ።
  • ማብራሪያዎች አካል ወይም አገልግሎት ካልሆነ ወይም ዘዴው ከተመሳሳይ ክፍል ጎረቤት ዘዴ ከተጠራ አይሰራም. የሚሰራውን ለመፈተሽ መጠንቀቅ አለብህ እና @Traced ካልሰራ በእጅ ፈለግ መፍጠርን ተጠቀም። እንዲሁም ለጃቫ ማብራሪያዎች ተጨማሪ ማጠናከሪያ ማያያዝ ይችላሉ, ከዚያ በሁሉም ቦታ መስራት አለባቸው.
  • በአሮጌው የፀደይ እና የፀደይ ቡት ውስጥ ፣ የመክፈቻው የፀደይ ደመና ራስ-ማዋቀር በ DI ውስጥ ባሉ ስህተቶች ምክንያት አይሰራም ፣ ከዚያ በፀደይ ክፍሎች ውስጥ ያሉ ዱካዎች በራስ-ሰር እንዲሰሩ ከፈለጉ ፣ በማመሳሰል ሊያደርጉት ይችላሉ። github.com/opentracing-contrib/java-spring-jaeger/blob/master/opentracing-spring-jaeger-starter/src/main/java/io/opentracing/contrib/java/spring/jaeger/starter/JaegerAutoConfiguration.java
  • ከሀብቶች ጋር ይሞክሩ በግሩቭ ውስጥ አይሰራም ፣ በመጨረሻ ይሞክሩት መጠቀም አለብዎት።
  • እያንዳንዱ አገልግሎት የራሱ የሆነ የስፕሪንግ.application.ስም ሊኖረው ይገባል ይህም ዱካዎች የሚመዘገቡበት ነው። ለሽያጭ እና ለሙከራው የተለየ ስም ምን ማለት ነው, ከእነሱ ጋር አንድ ላይ ጣልቃ እንዳይገቡ.
  • GlobalTracer እና Tomcat የምትጠቀም ከሆነ በዚህ ቶምካት ውስጥ የሚሰሩ ሁሉም አገልግሎቶች አንድ GlobalTracer ስላላቸው ሁሉም ተመሳሳይ የአገልግሎት ስም ይኖራቸዋል።
  • በአንድ ዘዴ ላይ ዱካዎችን ሲጨምሩ, በ loop ውስጥ ብዙ ጊዜ እንደማይጠራ እርግጠኛ መሆን አለብዎት. ለሁሉም ጥሪዎች አንድ የተለመደ ዱካ ማከል አስፈላጊ ነው, ይህም አጠቃላይ የስራ ጊዜን ያረጋግጣል. አለበለዚያ ከመጠን በላይ ጭነት ይፈጠራል.
  • አንዴ በጃገር-ዩኢ ውስጥ፣ በጣም ትልቅ ጥያቄዎች ለብዙ ቁጥር ፍለጋ ቀርበዋል፣ እና ምላሽ ስላልጠበቁ፣ እንደገና አደረጉት። በውጤቱም, ዣገር-ጥያቄ ብዙ ማህደረ ትውስታን መብላት እና የመለጠጥ ፍጥነት መቀነስ ጀመረ. jaeger-queryን እንደገና በማስጀመር ረድቷል።

ናሙናዎች, ማከማቻ እና የእይታ ዱካዎች

ሦስት ዓይነት ዓይነቶች አሉ የናሙና ዱካዎች:

  1. ሁሉንም ዱካዎች የሚልክ እና የሚያስቀምጥ Const።
  2. በተወሰነ ዕድል ዱካዎችን የሚያጣራ ሊሆን ይችላል።
  3. በሰከንድ የመከታተያ ብዛት የሚገድበው ደረጃ መስጠት። እነዚህን መቼቶች በደንበኛው ላይ, በጃገር-ኤጀንት ወይም በአሰባሳቢው ላይ ማዋቀር ይችላሉ. አሁን const 1 ን በቫሉተር ቁልል ውስጥ እንጠቀማለን ፣ ምክንያቱም ብዙ ጥያቄዎች ስለሌሉ ፣ ግን ረጅም ጊዜ ይወስዳሉ። ለወደፊቱ, ይህ በሲስተሙ ላይ ከመጠን በላይ ጭነት የሚፈጥር ከሆነ, ሊገድቡት ይችላሉ.

ካሳንድራ የሚጠቀሙ ከሆነ በነባሪነት ለሁለት ቀናት ብቻ ዱካዎችን ያከማቻል። እየተጠቀምን ነው። እንጦጦ እና ዱካዎች ሁል ጊዜ ተከማችተዋል እና አይሰረዙም። ለእያንዳንዱ ቀን የተለየ መረጃ ጠቋሚ ተፈጥሯል፣ ለምሳሌ jaeger-service-2019-03-04። ለወደፊቱ, የድሮ ዱካዎችን በራስ-ሰር ማጽዳትን ማዋቀር ያስፈልግዎታል.

ዱካውን ለማየት የሚከተሉትን ያስፈልግዎታል

  • ዱካዎችን ለማጣራት የሚፈልጉትን አገልግሎት ይምረጡ ፣ ለምሳሌ ፣ tomcat7-default በቶምካት ውስጥ ለሚሰራ እና የራሱ ስም ሊኖረው አይችልም።
  • ከዚያም ቀዶ ጥገናውን, የጊዜ ክፍተቱን እና አነስተኛውን የአሠራር ጊዜ ይምረጡ, ለምሳሌ ከ 10 ሰከንድ, ረጅም ግድፈቶችን ብቻ ለመውሰድ.
    የአገልግሎት ፍለጋ፣ ክፍት ትራሲንግ እና ጄገር
  • ወደ አንዱ ዱካ ይሂዱ እና እዚያ ምን እየቀዘቀዘ እንዳለ ይመልከቱ።
    የአገልግሎት ፍለጋ፣ ክፍት ትራሲንግ እና ጄገር

እንዲሁም፣ አንዳንድ የጥያቄ መታወቂያ የሚታወቅ ከሆነ፣ ይህ መታወቂያ በክትትል ስፔን ውስጥ የገባ ከሆነ በዚህ መታወቂያ በመለያ ፍለጋ በኩል ዱካ ማግኘት ይችላሉ።

ሰነድ

ርዕሶች

Видео

  • www.youtube.com/watch?v=qg0ENOdP1Lo የመብረቅ ፈጣን የተጠቃሚ ጥያቄዎችን ለማቅረብ ጃገርን እና ፕሮሜቲየስን እንዴት እንደተጠቀምን - ብራያን ቦረሃም
  • www.youtube.com/watch?v=WRntQsUajow መግቢያ፡ ጃገር - ዩሪ ሽኩሮ፣ ኡበር እና ፓቮል ሎፋይ፣ ቀይ ኮፍያ
  • www.youtube.com/watch?v=fsHb0qK37bc ሰርጌይ ኢኮቭሌቭ፣ “የትልቅ ድል ትንሽ ታሪክ፡ ክፍት ትራሲንግ፣ AWS እና Jaeger”

ምንጭ: hab.com

አስተያየት ያክሉ