ለቀጣይ ውህደት በ Docker ውስጥ የማይክሮ አገልግሎቶችን በራስ ሰር መሞከር

ከማይክሮ ሰርቪስ አርክቴክቸር ልማት ጋር በተያያዙ ፕሮጀክቶች CI/CD ከአስደሳች እድል ምድብ ወደ አስቸኳይ አስፈላጊነት ምድብ ይሸጋገራል። አውቶሜትድ ሙከራ ቀጣይነት ያለው ውህደት ዋና አካል ነው፣ ብቃት ያለው አቀራረብ ለቡድኑ ከቤተሰብ እና ከጓደኞች ጋር ብዙ አስደሳች ምሽቶችን ሊሰጥ ይችላል። ያለበለዚያ ፕሮጀክቱ ሙሉ በሙሉ አለመጠናቀቁን አደጋ ላይ ይጥላል።

ሙሉውን የማይክሮ ሰርቪስ ኮድ በዩኒት ሙከራዎች በአስቂኝ ነገሮች መሸፈን ይቻላል ነገር ግን ይህ በከፊል ችግሩን የሚፈታ እና ብዙ ጥያቄዎችን እና ችግሮችን ይተዋል, በተለይም ስራን በመረጃ ሲፈትሽ. እንደ ሁልጊዜው፣ በጣም የሚጨንቁት ግን በተዛማጅ ዳታቤዝ ውስጥ ያለውን የውሂብ ወጥነት መፈተሽ፣ ከደመና አገልግሎቶች ጋር መስራትን መፈተሽ እና አስቂኝ ነገሮችን በሚጽፉበት ጊዜ የተሳሳቱ ግምቶችን ማድረግ ናቸው።

ይህ ሁሉ እና ትንሽ ተጨማሪ ሙሉውን ማይክሮ ሰርቪስ በ Docker መያዣ ውስጥ በመሞከር ሊፈታ ይችላል. የፈተናዎችን ትክክለኛነት ለማረጋገጥ የማያጠራጥር ጥቅም ወደ ምርት የሚገቡት ተመሳሳይ Docker ምስሎች መሞከራቸው ነው።

የዚህ አቀራረብ ራስ-ሰር በርካታ ችግሮችን ያቀርባል, መፍትሄው ከዚህ በታች ይብራራል.

  • በተመሳሳዩ ዶከር አስተናጋጅ ውስጥ ትይዩ ተግባራት ግጭቶች;
  • በፈተና ድግግሞሾች ጊዜ በመረጃ ቋቱ ውስጥ ግጭቶችን መለየት;
  • ማይክሮ ሰርቪስ ዝግጁ እንዲሆን መጠበቅ;
  • ምዝግብ ማስታወሻዎችን ወደ ውጫዊ ስርዓቶች ማዋሃድ እና ማውጣት;
  • ወጪ HTTP ጥያቄዎችን መሞከር;
  • የድር ሶኬት ሙከራ (SignalR በመጠቀም);
  • የOAuth ማረጋገጫ እና ፍቃድን በመሞከር ላይ።

ይህ ጽሑፍ የተመሰረተው በ ንግግሬ በ SECR 2019. ስለዚህ ለማንበብ በጣም ሰነፍ ለሆኑ, የንግግሩ ቅጂ እዚህ አለ።.

ለቀጣይ ውህደት በ Docker ውስጥ የማይክሮ አገልግሎቶችን በራስ ሰር መሞከር

በዚህ ጽሑፍ ውስጥ አገልግሎቱን በፈተና ውስጥ ለማስኬድ ስክሪፕት እንዴት እንደሚጠቀሙ እነግርዎታለሁ ፣ የውሂብ ጎታ እና የአማዞን AWS አገልግሎቶች በ Docker ፣ ከዚያ በፖስትማን ላይ ሙከራ ያድርጉ እና ከተጠናቀቁ በኋላ የተፈጠሩትን መያዣዎች ያቁሙ እና ይሰርዙ። ኮዱ በተለወጠ ቁጥር ፈተናዎች ይከናወናሉ። በዚህ መንገድ እያንዳንዱ ስሪት ከ AWS የውሂብ ጎታ እና አገልግሎቶች ጋር በትክክል መስራቱን እናረጋግጣለን።

ተመሳሳዩ ስክሪፕት ሁለቱም በራሳቸው ገንቢዎች በዊንዶውስ ዴስክቶፕዎቻቸው እና በሊኑክስ ስር ባለው Gitlab CI አገልጋይ ነው የሚሰሩት።

ለማፅደቅ አዲስ ሙከራዎችን ማስተዋወቅ በገንቢው ኮምፒውተር ላይ ወይም ፈተናዎቹ በቁርጠኝነት በሚሰሩበት ሰርቨር ላይ ተጨማሪ መሳሪያዎችን መጫን አያስፈልግም።ዶከር ይህንን ችግር ይፈታል።

ፈተናው በሚከተሉት ምክንያቶች በአካባቢያዊ አገልጋይ ላይ መካሄድ አለበት፡

  • አውታረ መረቡ ሙሉ በሙሉ አስተማማኝ አይደለም. ከሺህ ጥያቄዎች ውስጥ አንዱ ሊወድቅ ይችላል;
    በዚህ ሁኔታ አውቶማቲክ ሙከራው አይሰራም, ስራው ይቆማል, እና ምክንያቱን በምዝግብ ማስታወሻዎች ውስጥ መፈለግ አለብዎት;
  • በጣም ተደጋጋሚ ጥያቄዎች በአንዳንድ የሶስተኛ ወገን አገልግሎቶች አይፈቀዱም።

በተጨማሪም, ማቆሚያውን መጠቀም የማይፈለግ ነው ምክንያቱም:

  • መቆሚያ በላዩ ላይ በሚሰራው መጥፎ ኮድ ብቻ ሳይሆን ትክክለኛው ኮድ ሊሰራ በማይችለው መረጃም ሊሰበር ይችላል።
  • በፈተናው በራሱ ጊዜ በፈተናው የተደረጉ ለውጦችን ወደ ኋላ ለመመለሾ የቱንም ያህል ብንሞክር አንድ ነገር ሊሳሳት ይችላል (አለበለዚያ ለምን ይፈተናል?)።

ስለ ፕሮጀክቱ እና የሂደቱ አደረጃጀት

ኩባንያችን በአማዞን AWS ደመና ውስጥ በ Docker ውስጥ የሚሰራ የማይክሮ ሰርቪስ ድር መተግበሪያን ሠራ። የክፍል ሙከራዎች ቀደም ሲል በፕሮጀክቱ ላይ ጥቅም ላይ ውለው ነበር፣ ነገር ግን የአሃዱ ፈተናዎች ስላላገኙ ስህተቶች ብዙ ጊዜ ተከስተዋል። ከመረጃ ቋቱ እና ከአማዞን አገልግሎቶች ጋር አንድ ሙሉ ማይክሮ አገልግሎትን መሞከር አስፈላጊ ነበር።

ፕሮጀክቱ መደበኛ የሆነ ቀጣይነት ያለው ውህደት ሂደትን ይጠቀማል፣ ይህም ማይክሮ ሰርቪሱን በእያንዳንዱ ቁርጠኝነት መሞከርን ያካትታል። አንድን ተግባር ከሾመ በኋላ ገንቢው በማይክሮ ሰርቪሱ ላይ ለውጦችን ያደርጋል፣ በእጅ ይፈትነዋል እና ሁሉንም የሚገኙ አውቶማቲክ ሙከራዎችን ያካሂዳል። አስፈላጊ ከሆነ ገንቢው ፈተናዎቹን ይለውጣል. ምንም ችግሮች ካልተገኙ, ለዚህ ጉዳይ ቅርንጫፍ ቃል ገብቷል. ከእያንዳንዱ ቃል በኋላ ሙከራዎች በራስ ሰር በአገልጋዩ ላይ ይሰራሉ። ወደ አንድ የጋራ ቅርንጫፍ መቀላቀል እና አውቶማቲክ ሙከራዎችን በእሱ ላይ ማስጀመር ከተሳካ ግምገማ በኋላ ይከሰታል። በተጋራው ቅርንጫፍ ላይ ያሉት ፈተናዎች ካለፉ፣ አገልግሎቱ በሙከራ አካባቢ በአማዞን ላስቲክ ኮንቴይነር አገልግሎት (ቤንች) ላይ በራስ-ሰር ይዘምናል። መቆሚያው ለሁሉም ገንቢዎች እና ሞካሪዎች አስፈላጊ ነው, እና እሱን ለማጥፋት አይመከርም. በዚህ አካባቢ ውስጥ ያሉ ሞካሪዎች የእጅ ሙከራዎችን በማከናወን ማስተካከያን ወይም አዲስ ባህሪን ይፈትሹ።

የፕሮጀክት አርክቴክቸር

ለቀጣይ ውህደት በ Docker ውስጥ የማይክሮ አገልግሎቶችን በራስ ሰር መሞከር

አፕሊኬሽኑ ከአስር በላይ አገልግሎቶችን ያካትታል። አንዳንዶቹ የተጻፉት በ NET Core እና በ NodeJs ውስጥ ነው። እያንዳንዱ አገልግሎት በአማዞን ላስቲክ ኮንቴይነር አገልግሎት ውስጥ በዶከር ኮንቴይነር ውስጥ ይሰራል። እያንዳንዳቸው የራሳቸው የፖስትግሬስ ዳታቤዝ አላቸው፣ እና አንዳንዶቹ ደግሞ Redis አላቸው። ምንም የተለመዱ የውሂብ ጎታዎች የሉም. ብዙ አገልግሎቶች አንድ አይነት ውሂብ የሚያስፈልጋቸው ከሆነ ይህ ውሂብ ሲቀየር ወደ እነዚህ አገልግሎቶች በ SNS (ቀላል የማሳወቂያ አገልግሎት) እና በ SQS (አማዞን ቀላል ወረፋ አገልግሎት) በኩል ወደ እያንዳንዳቸው ይተላለፋል እና አገልግሎቶቹ በራሳቸው የተለየ የውሂብ ጎታ ያስቀምጣሉ.

SQS እና SNS

SQS የኤችቲቲፒኤስ ፕሮቶኮልን በመጠቀም መልዕክቶችን ወደ ወረፋ እንድታስቀምጡ እና ከወረፋው የሚመጡ መልዕክቶችን እንድታነብ ይፈቅድልሃል።

ብዙ አገልግሎቶች አንድ ወረፋ ካነበቡ እያንዳንዱ መልእክት ወደ አንዱ ብቻ ይደርሳል። በመካከላቸው ያለውን ጭነት ለማሰራጨት ብዙ ተመሳሳይ አገልግሎቶችን ሲያካሂዱ ይህ ጠቃሚ ነው።

እያንዳንዱ መልእክት ለብዙ አገልግሎቶች እንዲደርስ ከፈለጉ፣ እያንዳንዱ ተቀባይ የራሱ ወረፋ ሊኖረው ይገባል፣ እና SNS መልዕክቶችን ወደ ብዙ ወረፋ ለማባዛት ያስፈልጋል።

በኤስኤንኤስ ውስጥ ርዕስ ፈጥረው ለሱ ደንበኝነት ይመዝገቡ፣ ለምሳሌ፣ SQS ወረፋ። ወደ ርዕስ መልእክት መላክ ትችላለህ። በዚህ አጋጣሚ መልእክቱ ለዚህ ርዕስ ለተመዘገበው እያንዳንዱ ወረፋ ይላካል። SNS መልዕክቶችን ለማንበብ ዘዴ የለውም። በማረም ወይም በሙከራ ጊዜ ወደ SNS የተላከውን ለማወቅ ከፈለጉ የ SQS ወረፋ መፍጠር፣ ወደሚፈለገው ርዕስ መመዝገብ እና ወረፋውን ማንበብ ይችላሉ።

ለቀጣይ ውህደት በ Docker ውስጥ የማይክሮ አገልግሎቶችን በራስ ሰር መሞከር

ኤፒአይ ጌትዌይ

አብዛኛዎቹ አገልግሎቶች ከበይነመረቡ በቀጥታ ተደራሽ አይደሉም። መዳረሻ በኤፒአይ ጌትዌይ በኩል ነው፣ እሱም የመዳረሻ መብቶችን ይፈትሻል። ይህ የእኛም አገልግሎት ነው፣ እና ለእሱ ፈተናዎችም አሉ።

ቅጽበታዊ ማሳወቂያዎች

አፕሊኬሽኑ ይጠቀማል ሲግናል አርለተጠቃሚው ቅጽበታዊ ማሳወቂያዎችን ለማሳየት። ይህ በማስታወቂያ አገልግሎት ውስጥ ተተግብሯል. በቀጥታ ከኢንተርኔት ማግኘት ይቻላል እና እራሱ ከOAuth ጋር አብሮ ይሰራል፣ ምክንያቱም OAuth እና የማሳወቂያ አገልግሎቱን ከማዋሃድ ጋር ሲነጻጸር ለድር ሶኬቶች ወደ ጌትዌይ ድጋፍ መገንባት ተግባራዊ ሊሆን አልቻለም።

የታወቀ የሙከራ አቀራረብ

የዩኒት ሙከራዎች እንደ ዳታቤዝ ያሉ ነገሮችን በአስቂኝ ነገሮች ይተካሉ። ማይክሮ ሰርቪስ ለምሳሌ የውጭ ቁልፍ ባለው ሠንጠረዥ ውስጥ መዝገብ ለመፍጠር ቢሞክር እና በዚህ ቁልፍ የተጠቀሰው መዝገብ ከሌለ ጥያቄው ሊጠናቀቅ አይችልም። የክፍል ሙከራዎች ይህንን ሊያውቁ አይችሉም።

В ከማይክሮሶፍት መጣጥፍ የውስጠ-ማህደረ ትውስታ ዳታቤዝ ለመጠቀም እና አስመሳይ ነገሮችን ተግባራዊ ለማድረግ ታቅዷል።

የማህደረ ትውስታ ዳታቤዝ በድርጅቱ መዋቅር ከሚደገፉት ዲቢኤምኤስ አንዱ ነው። የተፈጠረው ለሙከራ ነው. በእንደዚህ ዓይነት የውሂብ ጎታ ውስጥ ያለው ውሂብ የሚቀመጠው አጠቃቀሙ እስኪያልቅ ድረስ ብቻ ነው. ሠንጠረዦችን መፍጠር አይፈልግም እና የውሂብ ታማኝነትን አያረጋግጥም.

ሞክ ዕቃዎች የሚተኩትን ክፍል ሞዴል የሚመስለው የሙከራ ገንቢው እንዴት እንደሚሰራ እስከሚረዳ ድረስ ብቻ ነው።

ፈተናን በሚያካሂዱበት ጊዜ ፖስትግሬስ በራስ ሰር እንዲጀምር እና ፍልሰትን እንዴት ማከናወን እንደሚቻል በማይክሮሶፍት መጣጥፍ ውስጥ አልተገለጸም። የእኔ መፍትሔ ይህንን ያደርገዋል እና በተጨማሪ, ለማይክሮ ሰርቪስ እራሱ ለሙከራዎች ምንም አይነት ኮድ አይጨምርም.

ወደ መፍትሄው እንሂድ

በእድገት ሂደት ውስጥ, ሁሉንም ችግሮች በጊዜው ለማግኘት የዩኒት ሙከራዎች በቂ እንዳልሆኑ ግልጽ ሆነ, ስለዚህ ይህንን ጉዳይ ከተለየ አቅጣጫ ለመቅረብ ተወስኗል.

የሙከራ አካባቢን ማዘጋጀት

የመጀመሪያው ተግባር የሙከራ አካባቢን ማሰማራት ነው. የማይክሮ አገልግሎትን ለማስኬድ የሚያስፈልጉ ደረጃዎች፡-

  • በሙከራ ላይ ያለውን አገልግሎት ለአካባቢው አካባቢ ያዋቅሩ፣ ከመረጃ ቋቱ እና ከAWS ጋር ለመገናኘት ዝርዝሮችን በአካባቢ ተለዋዋጮች ይግለጹ።
  • Postgresን ይጀምሩ እና Liquibaseን በማሄድ ፍልሰትን ያከናውኑ።
    በተዛማጅ ዲቢኤምኤስ ውስጥ፣ ወደ ዳታቤዝ ውሂብ ከመፃፍዎ በፊት፣ የውሂብ ንድፍ መፍጠር ያስፈልግዎታል፣ በሌላ አነጋገር፣ ሠንጠረዦች። አፕሊኬሽኑን በሚያዘምኑበት ጊዜ ሠንጠረዦች በአዲሱ ስሪት ጥቅም ላይ በሚውልበት ቅጽ ላይ መቅረብ አለባቸው፣ እና በተለይም ውሂብ ሳያጡ። ይህ ስደት ይባላል። በመጀመሪያ ባዶ የውሂብ ጎታ ውስጥ ጠረጴዛዎችን መፍጠር ልዩ የስደት ጉዳይ ነው። ስደት በራሱ በመተግበሪያው ውስጥ ሊገነባ ይችላል። ሁለቱም .NET እና NodeJS የፍልሰት ማዕቀፎች አሏቸው። በእኛ ሁኔታ, ለደህንነት ሲባል, ማይክሮ ሰርቪስ የውሂብ መርሃ ግብሩን የመቀየር መብት ተነፍገዋል, እና ፍልሰት የሚከናወነው Liquibase በመጠቀም ነው.
  • Amazon LocalStackን ያስጀምሩ። ይህ በቤት ውስጥ የሚሰራ የAWS አገልግሎቶች ትግበራ ነው። ለLocalStack on Docker Hub የተዘጋጀ ምስል አለ።
  • በ LocalStack ውስጥ አስፈላጊ አካላትን ለመፍጠር ስክሪፕቱን ያሂዱ። የሼል ስክሪፕቶች AWS CLIን ይጠቀማሉ።

በፕሮጀክቱ ላይ ለሙከራ ጥቅም ላይ ይውላል ፖስትማን. ቀደም ብሎ ነበር፣ ነገር ግን በእጅ ተጀምሯል እና ቀደም ሲል በቆመበት ላይ የተዘረጋውን መተግበሪያ ሞክሯል። ይህ መሳሪያ የዘፈቀደ የኤችቲቲፒ(S) ጥያቄዎችን እንዲያደርጉ እና ምላሾቹ ከሚጠበቁት ጋር የሚዛመዱ መሆናቸውን ያረጋግጡ። መጠይቆች ወደ ስብስብ ይጣመራሉ, እና አጠቃላይ ስብስብ ሊካሄድ ይችላል.

ለቀጣይ ውህደት በ Docker ውስጥ የማይክሮ አገልግሎቶችን በራስ ሰር መሞከር

አውቶማቲክ ሙከራው እንዴት ነው የሚሰራው?

በሙከራ ጊዜ ሁሉም ነገር በዶከር ውስጥ ይሰራል፡ በሙከራ ላይ ያለው አገልግሎት፣ ፖስትግሬስ፣ የፍልሰት መሳሪያ እና ፖስትማን፣ ወይም ይልቁንም የኮንሶል ስሪቱ - ኒውማን።

ዶከር ብዙ ችግሮችን ይፈታል

  • ከአስተናጋጅ ውቅር ነፃ መሆን;
  • ጥገኛዎችን መጫን፡ Docker ምስሎችን ከ Docker Hub ያወርዳል;
  • ስርዓቱን ወደ መጀመሪያው ሁኔታ መመለሾ: በቀላሉ መያዣዎችን ማስወገድ.

ዶከር-አቀናብር ኮንቴይነሮችን በጎራ ስሞች የሚያገኙበት ከበይነመረቡ የተገለለ ወደ ቨርቹዋል አውታረ መረብ ያገናኛል።

ፈተናው የሚቆጣጠረው በሼል ስክሪፕት ነው። ፈተናውን በዊንዶው ላይ ለማስኬድ git-bash እንጠቀማለን። ስለዚህ አንድ ስክሪፕት ለሁለቱም ዊንዶውስ እና ሊኑክስ በቂ ነው። Git እና Docker በፕሮጀክቱ ላይ ባሉ ሁሉም ገንቢዎች ተጭነዋል። Git ን በዊንዶው ላይ ሲጭኑ git-bash ተጭኗል፣ ስለዚህ ሁሉም ሰው እንዲሁ አለው።

ስክሪፕቱ የሚከተሉትን ደረጃዎች ያከናውናል:

  • የዶክተር ምስሎችን መገንባት
    docker-compose build
  • የውሂብ ጎታውን እና LocalStackን ማስጀመር
    docker-compose up -d <контейнер>
  • የLocalStack የውሂብ ጎታ ፍልሰት እና ዝግጅት
    docker-compose run <контейнер>
  • አገልግሎቱን በሙከራ ላይ በማስጀመር ላይ
    docker-compose up -d <сервис>
  • ፈተናውን በመሮጥ ላይ (ኒውማን)
  • ሁሉንም መያዣዎች ማቆም
    docker-compose down
  • በ Slack ውስጥ ውጤቶችን በመለጠፍ ላይ
    አረንጓዴ ምልክት ወይም ቀይ መስቀል እና የምዝግብ ማስታወሻ አገናኝ ያላቸው መልዕክቶች የሚሄዱበት ውይይት አለን።

የሚከተሉት Docker ምስሎች በእነዚህ ደረጃዎች ውስጥ ይሳተፋሉ፡

  • እየተሞከረ ያለው አገልግሎት ከምርት ጋር ተመሳሳይ ነው. የፈተናው ውቅር በአካባቢ ተለዋዋጮች በኩል ነው።
  • ለ Postgres፣ Redis እና LocalStack፣ ከDocker Hub የተዘጋጁ ምስሎች ጥቅም ላይ ይውላሉ። ለ Liquibase እና Newman ዝግጁ የሆኑ ምስሎችም አሉ። የኛን ፋይሎቻችንን እዛ ላይ በመጨመር በአፅማቸው ላይ እንገነባለን።
  • LocalStackን ለማዘጋጀት ዝግጁ የሆነ AWS CLI ምስል ይጠቀሙ እና በእሱ ላይ የተመሠረተ ስክሪፕት የያዘ ምስል ይፍጠሩ።

በመጠቀም volumesፋይሎችን ወደ መያዣው ውስጥ ለመጨመር Docker ምስል መገንባት አያስፈልግም። ሆኖም ግን, ጥራዞች ለአካባቢያችን ተስማሚ አይደሉም, ምክንያቱም Gitlab CI ተግባራት እራሳቸው በእቃ መያዣዎች ውስጥ ይሰራሉ. ዶከርን ከእንደዚህ አይነት መያዣ መቆጣጠር ይችላሉ, ነገር ግን ጥራዞች አቃፊዎችን ከአስተናጋጁ ስርዓት ብቻ ይጭናሉ, እና ከሌላ መያዣ አይደለም.

ሊያጋጥሙዎት የሚችሉ ችግሮች

ዝግጁነትን በመጠባበቅ ላይ

አንድ አገልግሎት ያለው መያዣ ሲሰራ, ይህ ማለት ግንኙነቶችን ለመቀበል ዝግጁ ነው ማለት አይደለም. ግንኙነቱ እስኪቀጥል ድረስ መጠበቅ አለብዎት.

ይህ ችግር አንዳንድ ጊዜ ስክሪፕት በመጠቀም ይፈታል ጠብቅ-እሱ.shየ TCP ግንኙነት ለመመስረት እድሉን የሚጠብቅ። ሆኖም LocalStack 502 Bad Gateway ስህተት ሊጥል ይችላል። በተጨማሪም, ብዙ አገልግሎቶችን ያካትታል, እና ከመካከላቸው አንዱ ዝግጁ ከሆነ, ይህ ስለሌሎቹ ምንም አይናገርም.

ዉሳኔከሁለቱም SQS እና SNS 200 ምላሽ የሚጠብቁ LocalStack አቅርቦት ስክሪፕቶች።

ትይዩ ተግባር ግጭቶች

በርካታ ሙከራዎች በተመሳሳይ Docker አስተናጋጅ ላይ በአንድ ጊዜ ሊሄዱ ይችላሉ፣ ስለዚህ የመያዣ እና የአውታረ መረብ ስሞች ልዩ መሆን አለባቸው። በተጨማሪም ፣ ከተለያዩ ተመሳሳይ አገልግሎት ቅርንጫፎች የሚመጡ ሙከራዎች በተመሳሳይ ጊዜ ሊሠሩ ይችላሉ ፣ ስለሆነም በእያንዳንዱ የጽሑፍ ፋይል ውስጥ ስማቸውን መፃፍ ብቻ በቂ አይደለም።

ዉሳኔስክሪፕቱ የCOMPOSE_PROJECT_NAME ተለዋዋጭ ወደ ልዩ እሴት ያዘጋጃል።

የዊንዶውስ ባህሪያት

በዊንዶውስ ላይ Docker ን ስጠቀም ልጠቁማቸው የሚፈልጓቸው ብዙ ነገሮች አሉ, ምክንያቱም እነዚህ ልምዶች ስህተቶች ለምን እንደሚከሰቱ ለመረዳት አስፈላጊ ናቸው.

  1. በእቃ መያዣ ውስጥ ያሉ የሼል ስክሪፕቶች የሊኑክስ መስመር መጨረሻዎች ሊኖራቸው ይገባል።
    የሼል CR ምልክት የአገባብ ስህተት ነው። ጉዳዩ ይህ መሆኑን ከስህተት መልዕክቱ መለየት ከባድ ነው። በዊንዶውስ ላይ እንደዚህ ያሉ ስክሪፕቶችን ሲያርትዑ ትክክለኛ የጽሑፍ አርታኢ ያስፈልግዎታል። በተጨማሪም, የስሪት መቆጣጠሪያ ስርዓቱ በትክክል መዋቀር አለበት.

git የሚዋቀረው በዚህ መንገድ ነው፡-

git config core.autocrlf input

  1. Git-bash መደበኛ የሊኑክስ ማህደሮችን ይኮርጃል እና የ exe ፋይልን (docker.exeን ጨምሮ) ሲደውሉ ፍፁም የሊኑክስ መንገዶችን በዊንዶውስ መንገዶች ይተካል። ነገር ግን, ይህ በአካባቢው ማሽን (ወይም በእቃ መያዣ ውስጥ ባሉ መንገዶች) ላይ ላሉ መንገዶች ትርጉም አይሰጥም. ይህ ባህሪ ሊሰናከል አይችልም።

ዉሳኔ: በመንገዱ መጀመሪያ ላይ ተጨማሪ ፍንጣቂ ይጨምሩ: // ቢን ከ / ቢን ይልቅ. ሊኑክስ እንደዚህ አይነት መንገዶችን ይገነዘባል; ለእሱ, በርካታ መቁረጫዎች ከአንድ ጋር ተመሳሳይ ናቸው. ግን git-bash እንደዚህ አይነት መንገዶችን አይገነዘብም እና እነሱን ለመለወጥ አይሞክርም.

የምዝግብ ማስታወሻ ውፅዓት

ሙከራዎችን በምሮጥበት ጊዜ፣ ከሁለቱም የኒውማን ምዝግብ ማስታወሻዎች እና እየተሞከረ ያለው አገልግሎት ማየት እፈልጋለሁ። የእነዚህ ምዝግብ ማስታወሻዎች ክስተቶች እርስ በርስ የተያያዙ በመሆናቸው በአንድ ኮንሶል ውስጥ ማዋሃድ ከሁለት የተለያዩ ፋይሎች የበለጠ ምቹ ነው. ኒውማን በ በኩል ይጀምራል ዶከር-አቀናብር ሩጫ, እና ስለዚህ የእሱ ውፅዓት በኮንሶል ውስጥ ያበቃል. የሚቀረው የአገልግሎቱ ውጤትም ወደዚያ መሄዱን ማረጋገጥ ነው።

የመጀመሪያው መፍትሔ ማድረግ ነበር dock-compose up ባንዲራ የለም። -dነገር ግን የቅርፊቱን አቅም በመጠቀም ይህን ሂደት ወደ ዳራ ይላኩ፡

docker-compose up <service> &

ይህ ምዝግብ ማስታወሻዎችን ከዶከር ወደ የሶስተኛ ወገን አገልግሎት ለመላክ አስፈላጊ እስኪሆን ድረስ ሠርቷል። dock-compose up ምዝግብ ማስታወሻዎችን ወደ ኮንሶሉ ማውጣት አቁሟል። ሆኖም ቡድኑ ሰርቷል። ዳይኪንግ ተያይዟል.

ዉሳኔ:

docker attach --no-stdin ${COMPOSE_PROJECT_NAME}_<сервис>_1 &

በሙከራ ድግግሞሽ ጊዜ መለያ ግጭት

ፈተናዎች በበርካታ ድግግሞሽ ይከናወናሉ. የመረጃ ቋቱ አልተጸዳም። በመረጃ ቋቱ ውስጥ ያሉ መዝገቦች ልዩ መታወቂያዎች አሏቸው። በጥያቄዎች ውስጥ የተወሰኑ መታወቂያዎችን ከጻፍን, በሁለተኛው ድግግሞሽ ላይ ግጭት እናገኛለን.

እሱን ለማስወገድ መታወቂያዎቹ ልዩ መሆን አለባቸው ወይም በሙከራው የተፈጠሩ ሁሉም ነገሮች መሰረዝ አለባቸው። አንዳንድ ነገሮች በመመዘኛዎች ምክንያት ሊሰረዙ አይችሉም።

ዉሳኔፖስትማን ስክሪፕቶችን በመጠቀም GUIDዎችን ያመነጫል።

var uuid = require('uuid');
var myid = uuid.v4();
pm.environment.set('myUUID', myid);

ከዚያ ምልክቱን በጥያቄው ውስጥ ይጠቀሙ {{myUUID}}, በተለዋዋጭ ዋጋ የሚተካው.

በLocalStack በኩል ትብብር

እየተሞከረ ያለው አገልግሎት ለ SQS ወረፋ ካነበበ ወይም ከፃፈ፣ ይህንን ለማረጋገጥ ፈተናው ራሱ ከዚህ ወረፋ ጋር መስራት አለበት።

ዉሳኔከፖስትማን ወደ LocalStack የሚቀርቡ ጥያቄዎች።

የAWS አገልግሎቶች ኤፒአይ ተመዝግቧል፣ ይህም ያለ ኤስዲኬ መጠይቆች እንዲደረጉ ያስችላል።

አንድ አገልግሎት ወረፋ ላይ ከጻፈ, ከዚያም እናነባለን እና የመልእክቱን ይዘት እንፈትሻለን.

አገልግሎቱ ወደ SNS መልዕክቶችን ከላከ፣ በዝግጅት ደረጃ LocalStack እንዲሁ ወረፋ ይፈጥራል እና ለዚህ የኤስኤንኤስ ርዕስ ይመዝገቡ። ከዚያ ሁሉም ነገር ከላይ በተገለፀው ላይ ይወርዳል.

አገልግሎቱ ከወረፋው መልእክት ማንበብ ከፈለገ በቀደመው የፈተና ደረጃ ይህንን መልእክት ወደ ወረፋው እንጽፋለን።

በሙከራ ላይ ካለው ማይክሮ አገልግሎት የሚመጡ የኤችቲቲፒ ጥያቄዎችን በመሞከር ላይ

አንዳንድ አገልግሎቶች በኤችቲቲፒ ላይ ከAWS ሌላ ይሰራሉ፣ እና አንዳንድ የAWS ባህሪያት በLocalStack ውስጥ አይተገበሩም።

ዉሳኔ: በእነዚህ አጋጣሚዎች ሊረዳ ይችላል ሞክሰርቨርበ ውስጥ ዝግጁ የሆነ ምስል ያለው Docker ማዕከል. ለእነሱ የሚጠበቁ ጥያቄዎች እና ምላሾች በኤችቲቲፒ ጥያቄ ተዋቅረዋል። ኤፒአይ ተዘግቧል፣ ስለዚህ ከፖስታ ቤት ጥያቄ እንጠይቃለን።

የOAuth ማረጋገጫ እና ፍቃድን በመሞከር ላይ

OAuth እና እንጠቀማለን። JSON የድር ቶከኖች (JWT). ፈተናው በአገር ውስጥ ልንሰራው የምንችለው የOAuth አቅራቢን ይፈልጋል።

በአገልግሎቱ እና በOAuth አቅራቢው መካከል ያለው ሁሉም መስተጋብር ወደ ሁለት ጥያቄዎች ይወርዳል፡ በመጀመሪያ ውቅሩ ይጠየቃል። /. በደንብ የሚታወቅ / ክፍት-ውቅር, እና ከዚያ የአደባባይ ቁልፉ (JWKS) በአድራሻው ላይ ከውቅሩ ይጠየቃል. ይህ ሁሉ የማይንቀሳቀስ ይዘት ነው።

ዉሳኔየእኛ የሙከራ OAuth አቅራቢ የማይንቀሳቀስ የይዘት አገልጋይ እና በላዩ ላይ ሁለት ፋይሎች ነው። ማስመሰያው አንድ ጊዜ የተፈጠረ እና ለጂት ቁርጠኛ ነው።

የSignalR ሙከራ ባህሪዎች

ፖስትማን ከዌብሶኬቶች ጋር አይሰራም። SignalR ን ለመሞከር ልዩ መሣሪያ ተፈጥሯል።

የSignalR ደንበኛ ከአሳሽ በላይ ሊሆን ይችላል። በ NET Core ስር የደንበኛ ቤተ-መጽሐፍት አለ። ደንበኛው, በ NET Core ውስጥ የተፃፈው, ግንኙነትን ይመሰርታል, ተረጋግጧል እና የተወሰነ ተከታታይ መልዕክቶችን ይጠብቃል. ያልተጠበቀ መልእክት ከደረሰ ወይም ግንኙነቱ ከጠፋ ደንበኛው በ 1 ኮድ ይወጣል. የመጨረሻው የተጠበቀው መልእክት ከደረሰ, ደንበኛው በ 0 ኮድ ይወጣል.

ኒውማን ከደንበኛው ጋር በአንድ ጊዜ ይሰራል. መልእክቶች ለሚፈልጉት ሁሉ መድረሳቸውን ለማረጋገጥ ብዙ ደንበኞች ተጀምረዋል።

ለቀጣይ ውህደት በ Docker ውስጥ የማይክሮ አገልግሎቶችን በራስ ሰር መሞከር

ብዙ ደንበኞችን ለማሄድ አማራጩን ይጠቀሙ --መጠን በዶከር-አጻጻፍ ትዕዛዝ መስመር ላይ.

ከመሮጥዎ በፊት የፖስታ ሰው ስክሪፕት ሁሉም ደንበኞች ግንኙነቶችን እስኪፈጥሩ ይጠብቃል።
ግንኙነትን የመጠበቅን ችግር አስቀድሞ አጋጥሞናል። ግን አገልጋዮች ነበሩ እና ደንበኛው እዚህ አለ። የተለየ አካሄድ ያስፈልጋል።

ዉሳኔ: በመያዣው ውስጥ ያለው ደንበኛ ዘዴውን ይጠቀማል HealthCheckስለ ሁኔታው ​​በአስተናጋጁ ላይ ያለውን ስክሪፕት ለማሳወቅ። ግንኙነቱ እንደተፈጠረ ደንበኛው በአንድ የተወሰነ መንገድ ላይ ፋይል ይፈጥራል፣ ጤና አረጋግጥ ይበሉ። በዶክተር ፋይል ውስጥ ያለው የHealthCheck ስክሪፕት ይህን ይመስላል።

HEALTHCHECK --interval=3s CMD if [ ! -e /healthcheck ]; then false; fi

ቡድን ዶከር መፈተሽ የመያዣውን መደበኛ ሁኔታ፣ የጤና ሁኔታ እና የመውጫ ኮድ ያሳያል።

ኒውማን ከጨረሰ በኋላ ስክሪፕቱ ከደንበኛው ጋር ያሉት ሁሉም ኮንቴይነሮች በኮድ 0 መቋረጣቸውን ያረጋግጣል።

ደስታ አለ።

ከላይ የተገለጹትን ችግሮች ካሸነፍን በኋላ የተረጋጋ የሩጫ ፈተናዎች ነበሩን። በሙከራዎች ውስጥ፣ እያንዳንዱ አገልግሎት ከዳታቤዝ እና Amazon LocalStack ጋር በመገናኘት እንደ አንድ ክፍል ይሰራል።

እነዚህ ሙከራዎች ከ30+ በላይ የሆኑ የገንቢዎች ቡድንን ከ10+ ማይክሮ ሰርቪስ ውስብስብ መስተጋብር ጋር በተደጋጋሚ ከተሰማራ መተግበሪያ ውስጥ ካሉ ስህተቶች ይጠብቃሉ።

ምንጭ: hab.com

አስተያየት ያክሉ