አስተማማኝ፣ ከፍተኛ የሚገኝ፣ ሊሰፋ የሚችል የተከፋፈለ ሥርዓት መገንባት የተወሰኑ ቴክኒኮችን፣ መርሆችን እና ቅጦችን ማክበርን ይጠይቃል። የእንደዚህ አይነት ስርዓቶች ንድፍ እጅግ በጣም ብዙ ችግሮችን መፍታትን ያካትታል. በጣም ከተለመዱት እና መሰረታዊ ጉዳዮች መካከል ድርብ የመፃፍ ችግር ነው።
"ድርብ የመጻፍ ችግር" በተከፋፈሉ ስርዓቶች ውስጥ የሚነሳ ፈታኝ ነው, በተለይም ከበርካታ የመረጃ ምንጮች ወይም የውሂብ ጎታዎች ጋር ሲገናኙ ማመሳሰል አለባቸው. እንደ የመረጃ ቋቶች ወይም መሸጎጫዎች ያሉ እንደ የውሂብ አለመመጣጠን፣ ግጭቶች ወይም የአፈጻጸም ማነቆዎች ያሉ ጉዳዮችን ሳያስተዋውቅ የውሂብ ለውጦች በተከታታይ ወደ ተለያዩ የውሂብ ማከማቻዎች መፃፋቸውን የማረጋገጥ ችግርን ይመለከታል።
የማይክሮ ሰርቪስ አርክቴክቸር እና የስርዓተ-ጥለት ዳታቤዝ በአንድ አገልግሎት ብዙ ጥቅሞችን ያስገኝልዎታል፣ ለምሳሌ ገለልተኛ ማሰማራት እና ማመጣጠን፣ የተለዩ ውድቀቶች እና የእድገት ፍጥነት መጨመር። ይሁን እንጂ ኦፕሬሽኖች በበርካታ ማይክሮ ሰርቪስ ውስጥ ለውጦችን ይፈልጋሉ, ይህንን ችግር ለመቅረፍ አስተማማኝ መፍትሄ እንዲያስቡ ያስገድድዎታል.
የእኛ ጎራ የብድር ማመልከቻዎችን መቀበልን፣ መገምገምን እና ከዚያም ለደንበኞች የማሳወቂያ ማንቂያዎችን መላክን የሚያካትት ሁኔታን እንመልከት።
በነጠላ የኃላፊነት መርህ፣ በኮንዌይ ህግ እና በጎራ-ተኮር የንድፍ አቀራረብ መንፈስ፣ ከበርካታ የክስተት-አውሎ ነፋሶች ክፍለ ጊዜዎች በኋላ፣ ሙሉው ጎራ ወደ ሶስት ንዑስ ጎራዎች ተከፍሏል፣ የተወሰኑ የተገደቡ አውዶች ግልጽ የሆኑ ወሰኖች፣ የጎራ ሞዴሎች እና በሁሉም ቦታ የሚገኝ ቋንቋ።
የመጀመሪያው አዲስ የብድር ማመልከቻዎችን በማሳፈር እና በማጠናቀር ላይ ነው. ሁለተኛው ስርዓት እነዚህን አፕሊኬሽኖች ይገመግመዋል እና በቀረበው መረጃ መሰረት ውሳኔዎችን ያደርጋል. ይህ የግምገማ ሂደት፣ KYC/KYB፣ ፀረ-ማጭበርበር እና የክሬዲት ስጋት ፍተሻዎችን ጨምሮ ብዙ ጊዜ የሚወስድ ሲሆን በሺዎች የሚቆጠሩ መተግበሪያዎችን በአንድ ጊዜ የማስተናገድ ችሎታን ይጠይቃል። ስለዚህ፣ ይህ ተግባር ራሱን የቻለ ልኬት እንዲኖር የሚያስችል የራሱ የውሂብ ጎታ ላለው ልዩ ማይክሮ አገልግሎት ተሰጥቷል።
በተጨማሪም እነዚህ ንዑስ ስርዓቶች የሚተዳደሩት በሁለት የተለያዩ ቡድኖች ሲሆን እያንዳንዳቸው የየራሳቸው የመልቀቂያ ዑደቶች፣ የአገልግሎት ደረጃ ስምምነቶች (SLA) እና የመጠን ችሎታ መስፈርቶች አሏቸው።
በመጨረሻ ፣ ለደንበኞች ማንቂያዎችን ለመላክ ልዩ የማሳወቂያ አገልግሎት አለ።
የስርዓቱ ዋና አጠቃቀም ጉዳይ የጠራ መግለጫ እዚህ አለ፡-
በቅድመ-እይታ በጣም ቀላል እና ጥንታዊ ስርዓት ነው፣ ግን የብድር ማመልከቻ አገልግሎቱ የብድር ማመልከቻ ትዕዛዝን እንዴት እንደሚያስኬድ ወደ ውስጥ እንዝለቅ።
ለአገልግሎት መስተጋብር ሁለት መንገዶችን ግምት ውስጥ ማስገባት እንችላለን-
መጀመሪያ-አካባቢያዊ-አስገዳጅ-ከዚያ-አትም- በዚህ አቀራረብ አገልግሎቱ የአካባቢያዊ ዳታቤዝ መረጃን ያሻሽላል (ያደርጋል) እና ከዚያም አንድ ክስተት ወይም መልእክት ለሌሎች አገልግሎቶች ያትማል።
በመጀመሪያ-አትም-ከዚያም-አካባቢ-አስገድድ- በተቃራኒው ይህ ዘዴ በአካባቢያዊ የውሂብ ጎታ ላይ ለውጦችን ከማድረግዎ በፊት አንድ ክስተት ወይም መልእክት ማተምን ያካትታል።
ሁለቱም ዘዴዎች የራሳቸው ድክመቶች አሏቸው እና በተከፋፈሉ ስርዓቶች ውስጥ ለግንኙነት ደህንነቱ የተጠበቀው በከፊል ብቻ ናቸው።
ይህ የመጀመሪያውን አቀራረብ የመተግበር ቅደም ተከተል ንድፍ ነው.
በዚህ ሁኔታ የብድር ማመልከቻ አገልግሎት መጀመሪያ ግብይት የሚፈጽምበት እና ከዚያም ወደ ሌላ ስርዓት ማሳወቂያ ለመላክ የሚሞክርበትን የመጀመሪያ-አካባቢያዊ-ቁርጠኝነት-ከዛ-የህትመት አቀራረብን ይጠቀማል። ነገር ግን፣ ይህ ሂደት ለምሳሌ የአውታረ መረብ ችግሮች ካሉ፣ የግምገማ አገልግሎቱ የማይገኝ ከሆነ ወይም የብድር ማመልከቻ አገልግሎት ከማህደረ ትውስታ ውጪ (OOM) ስህተት ካጋጠመው እና ከተበላሽ ይህ ሂደት ለመሳካት የተጋለጠ ነው። በእንደዚህ ዓይነት ሁኔታዎች, ተጨማሪ እርምጃዎች ካልተተገበሩ, ግምገማው አዲሱን የብድር ማመልከቻ ሳያስታውቅ መልእክቱ ይጠፋል.
እና ሁለተኛው።
በመጀመሪያ - አትም - ከዚያም - አካባቢያዊ - ቃል ኪዳን ሁኔታ ውስጥ የብድር ማመልከቻ አገልግሎት የበለጠ ጉልህ አደጋዎች ይጋፈጣሉ። ስለ አዲስ መተግበሪያ የግምገማ አገልግሎቱን ሊያሳውቅ ይችላል ነገር ግን እንደ የውሂብ ጎታ ችግሮች፣ የማስታወሻ ስህተቶች ወይም የኮድ ስህተቶች ባሉ ችግሮች ምክንያት ይህን ዝመና በአካባቢው ማስቀመጥ አልቻለም። የብድር ክለሳ አገልግሎት ገቢ ማመልከቻዎችን እንዴት እንደሚይዝ ላይ በመመስረት ይህ አቀራረብ በመረጃ ውስጥ ጉልህ አለመግባባቶችን ያስከትላል ፣ ይህም ከባድ ችግሮች ያስከትላል።
ስለዚህ, ክስተቶችን ለውጭ ተጠቃሚዎች ለማተም ጠንካራ ዘዴን የሚያቀርብ መፍትሄ መለየት አለብን. ነገር ግን ወደ ሊሆኑ የሚችሉ መፍትሄዎች ከመመርመራችን በፊት በመጀመሪያ በተከፋፈሉ ስርዓቶች ውስጥ ሊገኙ የሚችሉ የመልእክት አሰጣጥ ዋስትና ዓይነቶችን ማብራራት አለብን።
ልናገኛቸው የምንችላቸው አራት አይነት ዋስትናዎች አሉ።
ምንም ዋስትናዎች የሉም
መልእክቱ ወደ መድረሻው ለመድረሱ ምንም ዋስትና የለም. የመጀመሪያው-አካባቢያዊ-ቁርጠኝነት-ከዚያ-ማተም አካሄድ በትክክል በዚህ ላይ ነው። ሸማቾች አንድ ጊዜ፣ ብዙ ጊዜ፣ ወይም በጭራሽ መልዕክቶችን ሊቀበሉ ይችላሉ።
ቢበዛ አንዴ ማድረስ
ቢበዛ አንድ ጊዜ ማድረስ ማለት መልእክቱ ቢበዛ 1 ጊዜ ወደ መድረሻው ይደርሳል ማለት ነው። የመጀመርያ-አካባቢያዊ-አስገዳጅ-ከዛ-ማተም አካሄድ በዚህ መንገድ እንዲሁም ከዋጋ አንድ ጋር እንደገና በመሞከር ፖሊሲ ሊተገበር ይችላል።
ቢያንስ አንድ ጊዜ ማድረስ ሸማቾች እያንዳንዱን መልእክት ይቀበላሉ እና ያስተናግዳሉ ነገር ግን ከአንድ ጊዜ በላይ ተመሳሳይ መልእክት ሊቀበሉ ይችላሉ።
ልክ አንድ ጊዜ ማድረስ\ በትክክል አንድ ጊዜ ማድረስ ማለት ሸማቹ መልዕክቱን አንድ ጊዜ በብቃት ይቀበላል ማለት ነው።
በቴክኒክ፣ በካፍካ ግብይቶች እና በልዩ አቅም ያለው የአምራች እና ሸማች ትግበራ ማሳካት ይቻላል።
በአብዛኛዎቹ አጋጣሚዎች፣ 'ቢያንስ አንድ ጊዜ' የማድረስ ዋስትናዎች ቢያንስ አንድ ጊዜ መልዕክቶች መድረሳቸውን በማረጋገጥ ብዙ ጉዳዮችን ይፈታል፣ ነገር ግን ሸማቾች ጠንካሮች መሆን አለባቸው። ነገር ግን፣ ከማይቀረው የአውታረ መረብ ብልሽቶች አንፃር፣ የአምራቹ ዋስትና ምንም ይሁን ምን፣ ሁሉም የሸማቾች አመክንዮ የተባዙ መልዕክቶችን ከማስኬድ ለመዳን ጠንከር ያለ መሆን አለበት። ስለዚህ፣ ይህ መስፈርት እውነታውን የሚያንፀባርቅ በመሆኑ ብዙ እንቅፋት አይደለም።
ለዚህ ችግር ብዙ መፍትሄዎች አሉ, እነሱም ጥቅሞች እና ጉዳቶች አሏቸው.
እንደ ዊኪፔዲያ፣ ባለሁለት ደረጃ ቁርጠኝነት (2PC) የተከፋፈለ ግብይቶችን ወጥነት እና አስተማማኝነት ለማረጋገጥ በኮምፒዩተር ሳይንስ እና የውሂብ ጎታ አስተዳደር ስርዓቶች ውስጥ ጥቅም ላይ የሚውል የተሰራጨ የግብይት ፕሮቶኮል ነው። በአንድ ግብይት ውስጥ በርካታ ግብዓቶች (ለምሳሌ፣ ዳታቤዝ) ለመሳተፍ ለሚፈልጉ ሁኔታዎች የተነደፈ ነው፣ እና ሁሉም ግብይቱን እንዲፈጽሙ ወይም ሁሉም እንዲሰረዙ ያረጋግጣል፣ በዚህም የውሂብ ወጥነት እንዲኖረው ያደርጋል። በትክክል የምንፈልገውን ይመስላል፣ ነገር ግን ባለሁለት-ደረጃ ቁርጠኝነት በርካታ ድክመቶች አሉት።
ለማይክሮ ሰርቪስ አርክቴክቸር በጣም ግልፅ የሆነው መፍትሄ ስርዓተ-ጥለት (ወይም አንዳንዴም ፀረ-ስርዓተ-ጥለት) መተግበር ነው - የጋራ ዳታቤዝ። በተለያዩ የመረጃ ቋቶች ውስጥ ባሉ በርካታ ሰንጠረዦች ላይ የግብይት ወጥነት ካስፈለገዎት ይህ አካሄድ በጣም ሊታወቅ የሚችል ነው፣ ለእነዚህ ማይክሮ አገልግሎቶች አንድ የጋራ ዳታቤዝ ብቻ ይጠቀሙ።
የዚህ አሰራር መሰናክሎች አንድን የውድቀት ነጥብ ማስተዋወቅ፣ ገለልተኛ የውሂብ ጎታ መመዘን መከልከል እና ለተወሰኑ መስፈርቶች እና አጠቃቀም ጉዳዮች በጣም ተስማሚ የሆኑ የተለያዩ የውሂብ ጎታ መፍትሄዎችን የመጠቀም ችሎታን መገደብ ያካትታሉ። በተጨማሪም፣ ይህን የመሰለ የተከፋፈለ ግብይት ለመደገፍ በማይክሮ ሰርቪስ ኮድ ቤዝ ላይ ማሻሻያ አስፈላጊ ይሆናል።
የ‹ transportal outbox › አስተማማኝ የመልእክት ስርጭትን ለማረጋገጥ በተከፋፈሉ ስርዓቶች ውስጥ ጥቅም ላይ የሚውል የንድፍ ንድፍ ነው፣ አስተማማኝ የመልእክት መላላኪያ ሲስተሞችም ቢኖሩም። እንደ ኦፕሬሽኑ በራሱ ተመሳሳይ ግብይት ውስጥ ክስተቶችን በተሰየመ 'OutboxEvents' ሠንጠረዥ ውስጥ ማከማቸትን ያካትታል። ይህ አካሄድ ከኤሲአይዲ የግንኙነት ዳታቤዝ ባህሪዎች ጋር በጥሩ ሁኔታ ይጣጣማል። በአንጻሩ፣ ብዙ የNo-SQL ዳታቤዝ የኤሲአይዲ ንብረቶችን ሙሉ በሙሉ አይደግፉም፣ በምትኩ የCAP theorem እና BASE ፍልስፍናን መርሆች መርጠዋል፣ ይህም ከጠንካራ ወጥነት ይልቅ ተገኝነትን እና በመጨረሻም ወጥነትን ያስቀድማል።
የግብይት ገቢ ሳጥን ቢያንስ አንድ ጊዜ ዋስትና ይሰጣል እና በብዙ መንገዶች ሊተገበር ይችላል፡-
የግብይት ምዝግብ ማስታወሻ
የምርጫ አታሚ
የግብይት ምዝግብ ማስታወሻ አቀራረብ አቀራረብ እንደ ሲዲሲ (የውሂብ ቀረጻ ለውጥ) ያሉ የውሂብ ጎታ-ተኮር መፍትሄዎችን መጠቀምን ያመለክታል። የዚህ ዘዴ ዋና ጉዳቶች-
የውሂብ ጎታ ልዩ መፍትሄዎች
በሲዲሲ አተገባበር ልዩ ምክንያት መዘግየት ጨምሯል።
ሌላው ዘዴ የውጪ ሳጥን ሠንጠረዥን በድምጽ መስጫ ሳጥን መጫንን የሚያመቻች የምርጫ አታሚ ነው። የዚህ አቀራረብ ቀዳሚ መሰናክል ከፍተኛ ወጪን ሊያስከትል የሚችል የውሂብ ጎታ ጭነት መጨመር ነው. በተጨማሪም፣ ሁሉም የNo-SQL ዳታቤዝ ለተወሰኑ የሰነድ ክፍሎች ቀልጣፋ መጠይቅን አይደግፉም። ሙሉ ሰነዶችን ማውጣት, ስለዚህ, የአፈፃፀም ውድቀትን ሊያስከትል ይችላል.
እንዴት እንደሚሰራ የሚያብራራ ትንሽ ተከታታይ ንድፍ ይኸውና.
የ Transactional Outbox ጥለት ዋናው ፈተና በመረጃ ቋት ACID ንብረቶች ላይ ባለው ጥገኝነት ላይ ነው። በተለመደው የOLTP ዳታቤዝ ውስጥ ቀላል ሊሆን ይችላል ነገር ግን በNoSQL ግዛት ውስጥ ፈተናዎችን ይፈጥራል። ይህንን ለመቅረፍ የጥያቄ ሂደትን ከመጀመር ጀምሮ አባሪ ሎግ (ለምሳሌ ካፍካ) መጠቀም ነው።
የብድር ማመልከቻውን በቀጥታ ከማስኬድ ይልቅ ወዲያውኑ ወደ ውስጣዊ የካፍካ ርዕስ እንልካለን እና ከዚያ 'የተቀበለውን' ውጤት ለደንበኛው እንመልሳለን። ሆኖም ትዕዛዙ አሁንም መከናወን ያለበት የመሆኑ እድሉ ከፍተኛ በመሆኑ ውጤቱን ወዲያውኑ ለደንበኛው ማሳወቅ አንችልም። ይህንን ውሎ አድሮ ወጥነት ለማስተዳደር፣ እንደ ረጅም ድምጽ መስጠት፣ በደንበኛ የተጀመረ የሕዝብ አስተያየት መስጫ፣ ብሩህ አመለካከት ያለው የተጠቃሚ በይነገጽ ማሻሻያ፣ ወይም WebSockets ወይም Server-የተላኩ ክስተቶችን ለማሳወቂያዎች በመጠቀም ቴክኒኮችን ልንጠቀም እንችላለን። ሆኖም፣ ይህ በአጠቃላይ የተለየ ርዕስ ነው፣ ስለዚህ ወደ መጀመሪያው ርዕሰ ጉዳያችን እንመለስ።
መልእክቱን የላክነው በውስጣዊ የካፍካ ርዕስ ላይ ነው። የብድር ማመልከቻ አገልግሎት ይህንን መልእክት - ከደንበኛው የተቀበለውን ተመሳሳይ ትዕዛዝ ይበላዋል እና ማካሄድ ይጀምራል። በመጀመሪያ, አንዳንድ የንግድ ሎጂክ ያስፈጽማል; ይህ አመክንዮ በተሳካ ሁኔታ ከተፈጸመ እና ውጤቱም ከቀጠለ በኋላ ብቻ አዳዲስ መልዕክቶችን በይፋዊ የካፍካ ርዕስ ላይ ያትማል።
እስቲ ጥቂት የውሸት ኮድ እንመልከት።
public async Task HandleAsync(SubmitLoanApplicationCommand command, ...) { //First, process business logic var loanApplication = await _loanApplicationService.HandleCommandAsync(command, ...); //Then, send new events to public Kafka topic producer.Send(new LoanApplicationSubmittedEvent(loanApplication.Id)); //Then, commit offset consumer.Commit(); }
የቢዝነስ አመክንዮ ሂደት ካልተሳካስ? ምንም አትጨነቅ፣ ማካካሻው ገና ስላልተሰራ፣ መልእክቱ እንደገና ይሞከራል።
አዲስ ክስተቶችን ወደ ካፍ መላክ ካልተሳካስ? ምንም አይጨነቁ፣ የንግዱ አመክንዮ ኃይለኛ ስለሆነ፣ የተባዛ የብድር ማመልከቻ አይፈጥርም። ይልቁንስ ለህዝብ የካፍ ርዕስ መልዕክቶችን እንደገና ለመላክ ይሞክራል።
መልእክቶች ወደ ካፍካ ቢላኩ፣ ነገር ግን የማካካሻ ድርጊቱ ካልተሳካስ? ምንም አይጨነቁ፣ የቢዝነስ አመክንዮ አቅም ያለው ስለሆነ፣ የተባዛ የብድር ማመልከቻ አይፈጥርም። ይልቁንስ ለሕዝብ የካፍካ ርዕስ መልእክቶችን ያስተላልፋል እና በዚህ ጊዜ የማካካሻ ድርጊቱ ይሳካል ብሎ ተስፋ ያደርጋል።
የዚህ አሰራር ዋና መሰናክሎች ከአዲሱ የፕሮግራም አወጣጥ ዘይቤ ጋር የተቆራኘውን ተጨማሪ ውስብስብነት ፣ በመጨረሻም ወጥነት (ደንበኛው ወዲያውኑ ውጤቱን ስለማያውቅ) እና ሁሉም የንግድ ሥራ አመክንዮዎች ጠንካራ እንዲሆኑ መሟላት አለባቸው።
የክስተት ምንጭ ምንድን ነው፣ እና እንዴት እዚህ ሊተገበር ይችላል? የክስተት ምንጭ ሁሉንም ለውጦች እንደ ተከታታይ የማይለዋወጡ ክስተቶች በመያዝ የስርዓቱን ሁኔታ ለመቅረጽ የሚያገለግል የሶፍትዌር አርክቴክቸር ንድፍ ነው። እነዚህ ክስተቶች እውነታዎችን ወይም የመንግስት ሽግግሮችን ይወክላሉ እና ለስርዓቱ ወቅታዊ ሁኔታ እንደ ነጠላ የእውነት ምንጭ ሆነው ያገለግላሉ። ስለዚህ፣ በቴክኒካል፣ የክስተት ምንጭ ስርዓትን በመተግበር፣ ሁሉም ዝግጅቶች በ EventStore ውስጥ አሉን፣ እና ይህ EventStore ስለተፈጠረው ነገር እንደ አንድ የእውነት ምንጭ በተጠቃሚዎች ሊጠቀሙበት ይችላሉ። ስለ ማዘዝ ሁሉንም ለውጦች ወይም ስጋቶች ለመከታተል የተለየ የውሂብ ጎታ መፍትሄ አያስፈልግም ፣ ብቸኛው ችግር ከንባብ ጎን መቀመጥ ነው ፣ ምክንያቱም ትክክለኛ የአካል ሁኔታን ለማግኘት ሁሉንም ክስተቶች እንደገና ማጫወት ያስፈልጋል።
በዚህ ጽሑፍ ውስጥ በተከፋፈሉ ስርዓቶች ውስጥ አስተማማኝ የመልእክት ልውውጥን ለመገንባት በርካታ አቀራረቦችን ገምግመናል። ከእነዚህ ባህሪያት ጋር ስርዓቶችን በምንገነባበት ጊዜ ልንመለከታቸው የምንችላቸው በርካታ ምክሮች አሉ
በሚቀጥለው ጊዜ፣ የግብይት ወጪ ሳጥንን የመተግበር የበለጠ ተግባራዊ ምሳሌን እንመለከታለን። ተመልከት
አንተ!