paint-brush
የGitHubን ሚስጥራዊ ንድፍ ማውጣት—በቀን በሚሊዮን የሚቆጠሩ ግብይቶችን እንዴት ማስተናገድ እንደሚቻል@oleksiijko
375 ንባቦች
375 ንባቦች

የGitHubን ሚስጥራዊ ንድፍ ማውጣት—በቀን በሚሊዮን የሚቆጠሩ ግብይቶችን እንዴት ማስተናገድ እንደሚቻል

Oleksii Bondar6m2025/03/02
Read on Terminal Reader

በጣም ረጅም፤ ማንበብ

GitHub በየቀኑ በሚሊዮን የሚቆጠሩ ግብይቶችን የሚያስኬድ በጣም ሊሰፋ የሚችል የተከፋፈለ ስርዓት ነው። ከፍተኛ አፈፃፀም እና አስተማማኝነትን ለማረጋገጥ በጠንካራ ስልተ ቀመሮች እና ስነ-ህንፃዎች ላይ የተመሰረተ ነው. ይህ መጣጥፍ GitHub እጅግ በጣም ብዙ ውሂብን እንደሚያስኬድ እና የፋይል ለውጦችን በብቃት ለመከታተል የተለያዩ ስልተ ቀመሮችን እንዴት እንደሚጠቀም ይዳስሳል።
featured image - የGitHubን ሚስጥራዊ ንድፍ ማውጣት—በቀን በሚሊዮን የሚቆጠሩ ግብይቶችን እንዴት ማስተናገድ እንደሚቻል
Oleksii Bondar HackerNoon profile picture
0-item
1-item

GitHub ማከማቻዎችን ለማስተናገድ ከመድረክ በላይ ነው - በየቀኑ በሚሊዮኖች የሚቆጠሩ ግብይቶችን የሚያስኬድ በከፍተኛ ደረጃ ሊሰፋ የሚችል የተከፋፈለ ስርዓት ነው። የጂት ግፊት ጥያቄዎችን ከማስተናገድ ጀምሮ የፋይል ልዩነቶችን በብቃት እስከ ማስላት ድረስ፣ GitHub ከፍተኛ አፈጻጸም እና አስተማማኝነትን ለማረጋገጥ በጠንካራ ስልተ ቀመሮች እና አርክቴክቸር ላይ ይተማመናል።


ይህ መጣጥፍ GitHub እጅግ በጣም ብዙ ውሂብን እንደሚያስኬድ፣ በሚሊዮኖች የሚቆጠሩ ግብይቶችን እንዴት እንደሚያስተናግድ እና የፋይል ለውጦችን በብቃት ለመከታተል የተለያዩ ስልተ ቀመሮችን እንደሚጠቀም ይዳስሳል። ጽሑፉ በስሪት ቁጥጥር ስርዓቶች ውስጥ ጥቅም ላይ የሚውሉ የዋና ስልተ ቀመሮችን ዝርዝር የጃቫስክሪፕት አተገባበርንም ያካትታል።


1. የትልቅ ደረጃ ስሪት ቁጥጥር ስርዓቶች ተግዳሮቶች.

ዘመናዊ የስሪት ቁጥጥር ስርዓቶች በርካታ ቁልፍ ተግዳሮቶችን መቋቋም አለባቸው፡-


  • በቀን በሚሊዮኖች የሚቆጠሩ ግብይቶችን በማስኬድ ላይ፣ ግዴታዎችን፣ ውህደትን እና የመሳብ ጥያቄዎችን ጨምሮ።
  • ለስሪት ክትትል እና ውህደት ወሳኝ በሆነው በፋይሎች መካከል ያለውን ልዩነት በብቃት ማስላት።
  • የማጠራቀሚያ እና የማስኬጃ ኃይልን ማስፋፋት፣ ፈጣን ምላሽ ጊዜዎችን በዓለም ዙሪያ ላሉ ገንቢዎች ማረጋገጥ።


እነዚህ መርሆዎች ለ GitHub ብቻ አይደሉም። ተመሳሳይ አርክቴክቸር እና ስልተ ቀመሮች በ GitLab፣ Bitbucket እና ሌሎች የስሪት ቁጥጥርን በሚዛኑ መድረኮች ውስጥ ጥቅም ላይ ይውላሉ።



2. GitHub የፋይል ልዩነቶችን እንዴት ያሰላል (ልዩ ስልተ ቀመር በጃቫስክሪፕት)

በፋይል ውስጥ ለውጦችን በሚከታተልበት ጊዜ GitHub (እና ጂት ራሱ) የፋይሉን አንድ ስሪት ወደ ሌላ ለመለወጥ የሚያስፈልጉትን አነስተኛ የአርትዖቶች ብዛት ለማስላት የተለያዩ ስልተ ቀመሮችን ይጠቀማል። ለዚህ በስፋት ጥቅም ላይ የዋለው የማየርስ ዲፍ አልጎሪዝም ነው።

2.1. የማየርስ አልጎሪዝም እንዴት እንደሚሰራ።

የማየርስ ስልተ ቀመር አንዱን ፋይል ወደ ሌላ ለመለወጥ የሚያስፈልገውን አጭር የማስገባት እና የማጥፋት ቅደም ተከተል ያገኛል። በአርትዖት ርቀቶችን (መ) በመድገም እና በአርትዖት ግራፉ ውስጥ በ "ዲያግናልስ" ላይ ሊደረጉ የሚችሉ ለውጦችን በማስላት ይሰራል።


2.2. ጃቫ ስክሪፕት የማየርስ አልጎሪዝም ትግበራ።


 /** * Computes the minimum edit distance between two arrays using Myers' Diff Algorithm. * @param {Array} a - The original array (eg, characters of a file) * @param {Array} b - The modified array * @returns {number} The minimum number of edit operations required */ function myersDiff(a, b) { const N = a.length; const M = b.length; const maxD = N + M; let v = { 1: 0 }; for (let d = 0; d <= maxD; d++) { for (let k = -d; k <= d; k += 2) { let x; if (k === -d || (k !== d && (v[k - 1] || 0) < (v[k + 1] || 0))) { x = v[k + 1] || 0; } else { x = (v[k - 1] || 0) + 1; } let y = x - k; while (x < N && y < M && a[x] === b[y]) { x++; y++; } v[k] = x; if (x >= N && y >= M) { return d; } } } return maxD; } // Example usage: const oldVersion = Array.from("Hello World"); const newVersion = Array.from("Hello GitHub World"); const operations = myersDiff(oldVersion, newVersion); console.log(`Minimum number of edits: ${operations}`);


የኮዱ መከፋፈል፡-


  • ማስጀመር፡ አልጎሪዝም ለእያንዳንዱ ሰያፍ ከፍተኛውን x እሴቶችን በአርትዖት ግራፍ ላይ ለማከማቸት ድርድር v ይጀምራል።

  • ሊሆኑ የሚችሉ የአርትዖት ርቀቶችን ይመልከቱ (መ)፡ እያንዳንዱን በተቻለ የአርትዖት ብዛት ይደግማል።

  • ጥሩውን መንገድ ማስላት፡- ማስገባት ወይም መሰረዝን በ v[k] እሴቶች ላይ በመመስረት ይወስናል።

  • “ስግብግብ ግጥሚያ” ደረጃ፡ ቁምፊዎች እስኪዛመዱ ድረስ በሰያፍ አቅጣጫ ይንቀሳቀሳል፣ ይህም አላስፈላጊ ስራዎችን ይቀንሳል።


3. የ GitHub የግብይት ሂደት አርክቴክቸር።

በሚሊዮን የሚቆጠሩ ግብይቶችን ለማስተናገድ GitHub ባለ ብዙ ሽፋን አርክቴክቸርን ይጠቀማል። የተለመደው ግብይት እንዴት እንደሚፈስ እነሆ፡-


  1. ጥያቄውን በመቀበል ላይ፡ API እና Webhooks ግብይቶችን ይቀበላሉ (git push፣ git pull፣ ወዘተ)።
  2. ጥያቄውን ወረፋ ማድረግ፡ ግብይቶች ለትይዩ ሂደት በተከፋፈለ ወረፋ (ሬዲስ/ካፍካ) ውስጥ ይቀመጣሉ።
  3. በማይክሮ ሰርቪስ ውስጥ በመስራት ላይ፡ የወሰኑ አገልግሎቶች መረጃ ጠቋሚ፣ ዲፍ ስሌት እና የስታቲስቲክስ ዝመናዎችን ይይዛሉ።
  4. ማከማቻን በማዘመን ላይ፡ ውጤቶቹ ለዳታቤዝ (SQL/NoSQL) ቁርጠኛ ናቸው እና በፍጥነት ለመድረስ የተሸጎጡ ናቸው።


ይህ አርክቴክቸር GitHub በብቃት እንዲለካ ያስችለዋል፣ ይህም አንድም አካል ማነቆ እንዳይሆን ያደርጋል


4. ጃቫ ስክሪፕት የ GitHub-እንደ ግብይት ሂደትን መተግበር።

GitHub ከፍተኛ ትራፊክን ለመቆጣጠር ግብይቶችን በተመሳሳይ መልኩ ያካሂዳል። የሚከተለው የጃቫ ስክሪፕት ኮድ ቃል ኪዳኖችን በመጠቀም ትይዩ የግብይቶችን ሂደት ያስመስላል።


 /** * Simulates a transaction in a version control system. */ class Transaction { constructor(id, action, payload) { this.id = id; this.action = action; this.payload = payload; } } /** * Simulates processing a transaction step-by-step. * @param {Transaction} tx - The transaction to process * @returns {Promise<string>} The result of processing */ function processTransaction(tx) { return new Promise((resolve) => { console.log(`Processing transaction ${tx.id}: ${tx.action}`); setTimeout(() => { console.log(`Indexing ${tx.id}...`); setTimeout(() => { console.log(`Computing diff for ${tx.id}...`); setTimeout(() => { console.log(`Updating database for ${tx.id}...`); resolve("success"); }, 100); }, 50); }, 100); }); } /** * Simulates processing multiple transactions in parallel. */ async function processTransactions() { const transactions = [ new Transaction("tx001", "commit", "Modified file A"), new Transaction("tx002", "commit", "Fixed bug in file B"), new Transaction("tx003", "merge", "Merged branches"), ]; const promises = transactions.map(async (tx) => { const result = await processTransaction(tx); console.log(`Transaction ${tx.id} result: ${result}`); }); await Promise.all(promises); console.log("All transactions processed."); } // Run transaction processing processTransactions();


ከዚህ ኮድ ዋና ዋና መንገዶች፡-


  • ያልተመሳሰለ ሂደት፡ ግብይቶች Promise.all ()ን በመጠቀም በትይዩ ይሰራሉ።
  • የደረጃ በደረጃ ማስመሰል፡ እያንዳንዱ ግብይት አንድ አይነት የሂደት ፍሰት ይከተላል—ኢንዴክስ ማድረግ፣ ኮምፒውቲንግ ልዩነቶች እና ማከማቻን ማዘመን።
  • መጠነ-ሰፊነት፡- ተመሳሳይ መርሆዎች እንደ GitHub ባሉ በገሃዱ ዓለም ውስጥ ይተገበራሉ፣ Redis/Kafka ወረፋዎች በጥቃቅን አገልግሎቶች ላይ የስራ ጫናዎችን ለማሰራጨት ይረዳሉ።


5. ማጠቃለያ፡ የ GitHub ሊስተካከል የሚችል የስሪት ቁጥጥር አቀራረብ።

የ GitHub በቀን በሚሊዮን የሚቆጠሩ ግብይቶችን የማስኬድ ችሎታው በሚከተሉት ጥምር ላይ የተመሰረተ ነው፡-


  • የፋይል ለውጦችን በብቃት ለማስላት እንደ Myers' Algorithm ያሉ የተመቻቹ ልዩነት ስልተ ቀመሮች።
  • የሥራ ጫናን ለማመጣጠን የማይክሮ አገልግሎቶችን እና የመልእክት ወረፋዎችን በመጠቀም ሊሰፋ የሚችል የተከፋፈለ አርክቴክቸር።
  • ትይዩ የግብይት ሂደት፣ በከባድ ሸክሞች ውስጥ እንኳን ፈጣን ምላሾችን ማረጋገጥ።


እነዚህ ቴክኒኮች ለ GitHub ብቻ አይደሉም - በ GitLab፣ Bitbucket እና መጠነ ሰፊ የመረጃ ማቀነባበሪያ ስርዓቶች በስፋት ጥቅም ላይ ይውላሉ። እነዚህን መርሆች መረዳት ገንቢዎች ከፍተኛ መጠን ያላቸውን ግብይቶችን ለማስተናገድ ቀልጣፋ እና ሊለኩ የሚችሉ መተግበሪያዎችን እንዲገነቡ ያግዛል።