የካሳንድራ ወደ ኩበርኔትስ ፍልሰት፡ ባህሪያት እና መፍትሄዎች

የካሳንድራ ወደ ኩበርኔትስ ፍልሰት፡ ባህሪያት እና መፍትሄዎች

የ Apache Cassandra ዳታቤዝ እና በኩበርኔትስ ላይ በተመሰረተ መሠረተ ልማት ውስጥ የማስኬድ አስፈላጊነትን በየጊዜው ያጋጥመናል። በዚህ ጽሁፍ ካሳንድራን ወደ K8s ለመሸጋገር አስፈላጊ የሆኑትን ደረጃዎች፣ መመዘኛዎች እና ነባር መፍትሄዎች (የኦፕሬተሮች አጠቃላይ እይታን ጨምሮ) ራዕያችንን እናካፍላለን።

"ሴትን መግዛት የሚችል ሁሉ መንግስትንም መግዛት ይችላል"

ካሳንድራ ማን ነው? ያለ አንድ የውድቀት ነጥብ ከፍተኛ መገኘቱን እያረጋገጠ ከፍተኛ መጠን ያለው መረጃን ለማስተዳደር የተነደፈ የተከፋፈለ የማከማቻ ስርዓት ነው። ፕሮጀክቱ ረጅም መግቢያ አያስፈልገውም፣ ስለዚህ በአንድ የተወሰነ መጣጥፍ አውድ ውስጥ ጠቃሚ የሆኑትን የካሳንድራ ዋና ዋና ባህሪያትን ብቻ እሰጣለሁ፡-

  • ካሳንድራ የተፃፈው በጃቫ ነው።
  • የካሳንድራ ቶፖሎጂ በርካታ ደረጃዎችን ያጠቃልላል።
    • መስቀለኛ መንገድ - አንድ የተዘረጋ ካሳንድራ ምሳሌ;
    • ራክ በአንዳንድ ባህሪያት የተዋሃደ የካሳንድራ አጋጣሚዎች ቡድን ነው, በተመሳሳይ የውሂብ ማእከል ውስጥ ይገኛል;
    • ዳታሴንተር - በአንድ የመረጃ ማእከል ውስጥ የሚገኙ ሁሉም የካሳንድራ አጋጣሚዎች ስብስብ;
    • ክላስተር የሁሉም የመረጃ ማዕከሎች ስብስብ ነው።
  • ካሳንድራ መስቀለኛ መንገድን ለመለየት የአይፒ አድራሻን ይጠቀማል።
  • የጽሑፍ እና የማንበብ ስራዎችን ለማፋጠን ካሳንድራ አንዳንድ መረጃዎችን በ RAM ውስጥ ያከማቻል።

አሁን - ወደ ኩበርኔትስ ወደ ትክክለኛው አቅም ይሂዱ።

ለማስተላለፍ የቼክ ዝርዝር

ስለ ካሳንድራ ወደ ኩበርኔትስ ፍልሰት ስንናገር በእንቅስቃሴው ለማስተዳደር የበለጠ አመቺ እንደሚሆን ተስፋ እናደርጋለን። ለዚህ ምን ይፈለጋል, በዚህ ላይ ምን ይረዳል?

1. የውሂብ ማከማቻ

ቀደም ሲል እንደተብራራው ካሳንዳ የመረጃውን ክፍል በ RAM - in ውስጥ ያከማቻል የማይታወስ. ነገር ግን በዲስክ ላይ የተቀመጠው የውሂብ ሌላ ክፍል አለ - በቅጹ ውስጥ SSTable. አንድ አካል ወደዚህ ውሂብ ታክሏል። ምዝግብ ማስታወሻ - የሁሉም ግብይቶች መዝገቦች ፣ እነሱም በዲስክ ውስጥ ይቀመጣሉ።

የካሳንድራ ወደ ኩበርኔትስ ፍልሰት፡ ባህሪያት እና መፍትሄዎች
በካሳንድራ ውስጥ የግብይት ንድፍ ይፃፉ

በKubernetes ውስጥ፣ ውሂብ ለማከማቸት PersistentVolumeን መጠቀም እንችላለን። ለተረጋገጡ ስልቶች ምስጋና ይግባውና በ Kubernetes ውስጥ ከመረጃ ጋር መስራት በየዓመቱ ቀላል እየሆነ መጥቷል።

የካሳንድራ ወደ ኩበርኔትስ ፍልሰት፡ ባህሪያት እና መፍትሄዎች
ለእያንዳንዱ የካሳንድራ ፖድ የራሳችንን ቋሚ ድምጽ እንመድባለን።

ካስንድራ ራሱ የውሂብ ማባዛትን እንደሚያመለክት እና ለዚህም አብሮ የተሰሩ ስልቶችን እንደሚያቀርብ ልብ ሊባል ይገባል። ስለዚህ፣ ካሳንድራ ክላስተር ከበርካታ የአንጓዎች ብዛት እየገነቡ ከሆነ፣ ለመረጃ ማከማቻ እንደ Ceph ወይም GlusterFS ያሉ የተከፋፈሉ ስርዓቶችን መጠቀም አያስፈልግም። በዚህ አጋጣሚ መረጃን በመጠቀም በአስተናጋጅ ዲስክ ላይ ማከማቸት ምክንያታዊ ይሆናል አካባቢያዊ ቋሚ ዲስኮች ወይም መጫን hostPath.

ሌላው ጥያቄ ለእያንዳንዱ የባህሪ ቅርንጫፍ ለገንቢዎች የተለየ አካባቢ መፍጠር ከፈለጉ ነው። በዚህ አጋጣሚ ትክክለኛው አቀራረብ አንድ የካሳንድራ መስቀለኛ መንገድን ከፍ ማድረግ እና ውሂቡን በተከፋፈለ ማከማቻ ውስጥ ማከማቸት ነው, ማለትም. የተጠቀሱት Ceph እና GlusterFS የእርስዎ አማራጮች ይሆናሉ። ከዚያ ገንቢው ከ Kuberntes ክላስተር ኖዶች ውስጥ አንዱ ቢጠፋም የሙከራ ውሂብ እንደማያጣ እርግጠኛ ይሆናል.

2. ክትትል

በ Kubernetes ውስጥ ክትትልን ለመተግበር የማይወዳደር ምርጫ ፕሮሜቲየስ ነው። (ስለዚህ ጉዳይ በዝርዝር ተነጋገርን ተዛማጅ ዘገባ). ካሳንድራ ለፕሮሜቲየስ ሜትሪክስ ላኪዎች እንዴት እየሰራ ነው? እና፣ ለግራፋና ከተዛማጅ ዳሽቦርድ ጋር ይበልጥ አስፈላጊ የሆነው ምንድን ነው?

የካሳንድራ ወደ ኩበርኔትስ ፍልሰት፡ ባህሪያት እና መፍትሄዎች
በግራፋና ለካሳንድራ የግራፎች ገጽታ ምሳሌ

ሁለት ላኪዎች ብቻ አሉ፡- jmx_ ላኪ и ካሳንድራ_ላኪ.

የመጀመሪያውን ለራሳችን የመረጥነው፡-

  1. JMX ላኪ እያደገ እና እያደገ ሲሆን ካሳንድራ ላኪ ግን በቂ የማህበረሰብ ድጋፍ ማግኘት አልቻለም። ካሳንድራ ላኪ አሁንም አብዛኞቹን የካሳንድራ ስሪቶችን አይደግፍም።
  2. ባንዲራ በመጨመር እንደ ጃቫጀንት ማሄድ ይችላሉ። -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. ለእሱ አንድ አለ በቂ ዳሽቦርድከካሳንድራ ላኪ ጋር ተኳሃኝ ያልሆነ።

3. የኩበርኔትስ ፕሪሚየርስ መምረጥ

ከላይ ባለው የካሳንድራ ክላስተር መዋቅር መሰረት፣ እዚያ የተገለፀውን ሁሉ ወደ ኩበርኔትስ የቃላት አቆጣጠር ለመተርጎም እንሞክር፡-

  • ካሳንድራ ኖድ → ፖድ
  • ካሳንድራ ራክ → StatefulSet
  • ካሳንድራ ዳታሴንተር → ገንዳ ከ StatefulSets
  • ካሳንድራ ክላስተር → ???

መላውን የካሳንድራ ክላስተር በአንድ ጊዜ ለማስተዳደር አንዳንድ ተጨማሪ አካላት ጠፍተዋል። ነገር ግን አንድ ነገር ከሌለ ልንፈጥረው እንችላለን! ኩበርኔትስ ለዚህ ዓላማ የራሱን ሀብቶች የሚገልጽ ዘዴ አለው - ብጁ ምንጭ ፍቺዎች.

የካሳንድራ ወደ ኩበርኔትስ ፍልሰት፡ ባህሪያት እና መፍትሄዎች
ለምዝግብ ማስታወሻዎች እና ማንቂያዎች ተጨማሪ መገልገያዎችን ማወጅ

ግን ብጁ ሪሶርስ ራሱ ምንም ማለት አይደለም: ከሁሉም በኋላ, ያስፈልገዋል መቆጣጠሪያ. እርዳታ መጠየቅ ሊኖርብዎ ይችላል። Kubernetes ኦፕሬተር...

4. የፖዳዎች መለየት

ከላይ ባለው አንቀጽ አንድ የካሳንድራ መስቀለኛ መንገድ በኩበርኔትስ አንድ ፖድ እኩል እንደሚሆን ተስማምተናል። ነገር ግን የፖዳዎች አይፒ አድራሻዎች በእያንዳንዱ ጊዜ ይለያያሉ. እና በካዛንድራ ውስጥ የመስቀለኛ መንገድ መለያው በአይፒ አድራሻው ላይ የተመሰረተ ነው ... እያንዳንዱ ፖድ ከተወገደ በኋላ የካሳንድራ ክላስተር አዲስ መስቀለኛ መንገድ ይጨምራል።

አንድ ብቻ ሳይሆን መውጫ መንገድ አለ፡-

  1. መዝገቦችን በአስተናጋጅ ለዪዎች (ዩአይዲዎች ልዩ የካሳንድራ አጋጣሚዎችን የሚለዩ) ወይም በአይፒ አድራሻዎች ልናስቀምጥ እና ሁሉንም በአንዳንድ መዋቅሮች/ጠረጴዛዎች ውስጥ ማከማቸት እንችላለን። ዘዴው ሁለት ዋና ጉዳቶች አሉት-
    • ሁለት አንጓዎች በአንድ ጊዜ ከወደቁ የዘር ሁኔታ የመከሰት አደጋ. ከተነሳ በኋላ፣ ካሳንድራ ኖዶች በተመሳሳይ ጊዜ የአይፒ አድራሻን ከጠረጴዛው ላይ ይጠይቃሉ እና ለተመሳሳዩ መገልገያ ይወዳደራሉ።
    • የካሳንድራ ኖድ ውሂቡ ከጠፋ፣ ከአሁን በኋላ ለይተን ማወቅ አንችልም።
  2. ሁለተኛው መፍትሔ እንደ ትንሽ ጠለፋ ይመስላል፣ ግን ቢሆንም፡ ለእያንዳንዱ የካሳንድራ መስቀለኛ መንገድ ከClusterIP ጋር አገልግሎት መፍጠር እንችላለን። የዚህ ትግበራ ችግሮች፡-
    • በካሳንድራ ክላስተር ውስጥ ብዙ ኖዶች ካሉ ብዙ አገልግሎቶችን መፍጠር አለብን።
    • የClusterIP ባህሪው የሚተገበረው በiptables በኩል ነው። የካሳንድራ ክላስተር ብዙ (1000... ወይም 100?) አንጓዎች ካሉት ይህ ችግር ሊሆን ይችላል። ቢሆንም በአይፒቪኤስ ላይ የተመሠረተ ማመጣጠን ይህንን ችግር መፍታት ይችላል.
  3. ሶስተኛው መፍትሄ ቅንብሩን በማንቃት ለካሳንድራ ኖዶች ኔትወርክን መጠቀም ነው hostNetwork: true. ይህ ዘዴ የተወሰኑ ገደቦችን ያስገድዳል-
    • ክፍሎችን ለመተካት. አዲሱ መስቀለኛ መንገድ ከቀዳሚው ጋር አንድ አይነት የአይፒ አድራሻ ሊኖረው ይገባል (እንደ AWS ፣ GCP ባሉ ደመናዎች ውስጥ ይህ ለማድረግ የማይቻል ነው)።
    • የክላስተር ኖዶች ኔትወርክን በመጠቀም ለኔትወርክ ግብዓቶች መወዳደር እንጀምራለን። ስለዚህ፣ ከአንድ በላይ ፖድ ከካሳንድራ ጋር በአንድ ክላስተር መስቀለኛ መንገድ ላይ ማስቀመጥ ችግር ይፈጥራል።

5. ምትኬዎች

የአንድ የካሳንድራ ኖድ ውሂብ ሙሉ ስሪት በጊዜ መርሐግብር ላይ ማስቀመጥ እንፈልጋለን። Kubernetes በመጠቀም ምቹ ባህሪን ያቀርባል CronJobእዚህ ግን ካሳንድራ እራሷ በመንኮራኩራችን ላይ ንግግር አድርጋለች።

ካሳንድራ አንዳንድ መረጃዎችን በማህደረ ትውስታ ውስጥ እንደሚያከማች ላስታውስህ። ሙሉ ምትኬ ለመስራት፣ ከማህደረ ትውስታ መረጃ ያስፈልግዎታል (የማስታወሻ ዕቃዎችወደ ዲስክ ይሂዱ (SSTables). በዚህ ጊዜ የካሳንድራ መስቀለኛ መንገድ ግንኙነቶችን መቀበል ያቆማል, ከጥቅሉ ውስጥ ሙሉ በሙሉ ይዘጋል.

ከዚህ በኋላ ምትኬው ይወገዳል (ቅጽበተ-ፎቶእና መርሃግብሩ ተቀምጧል (ቁልፍ ቦታ). እና ከዚያ ምትኬ ብቻ ምንም ነገር አይሰጠንም-የካሳንድራ መስቀለኛ መንገድ ተጠያቂ የሆነውን የውሂብ መለያዎችን ማስቀመጥ አለብን - እነዚህ ልዩ ምልክቶች ናቸው።

የካሳንድራ ወደ ኩበርኔትስ ፍልሰት፡ ባህሪያት እና መፍትሄዎች
የካሳንድራ ኖዶች ኃላፊነት ያለባቸውን መረጃዎች ለመለየት የቶከኖች ስርጭት

በኩበርኔትስ ውስጥ የካሳንድራ ምትኬን ከGoogle ለመውሰድ ምሳሌ ስክሪፕት በ ላይ ይገኛል። ይህ አገናኝ. ስክሪፕቱ ከግምት ውስጥ የማይገባበት ብቸኛው ነጥብ ቅጽበተ-ፎቶውን ከማንሳትዎ በፊት መረጃን ወደ መስቀለኛ መንገድ እንደገና ማስጀመር ነው። ያም ማለት መጠባበቂያው የሚከናወነው አሁን ላለው ሁኔታ ሳይሆን ለክፍለ ግዛት ትንሽ ቀደም ብሎ ነው. ነገር ግን ይህ መስቀለኛ መንገድን ከስራ ላይ ላለመውሰድ ይረዳል, ይህም በጣም ምክንያታዊ ይመስላል.

set -eu

if [[ -z "$1" ]]; then
  info "Please provide a keyspace"
  exit 1
fi

KEYSPACE="$1"

result=$(nodetool snapshot "${KEYSPACE}")

if [[ $? -ne 0 ]]; then
  echo "Error while making snapshot"
  exit 1
fi

timestamp=$(echo "$result" | awk '/Snapshot directory: / { print $3 }')

mkdir -p /tmp/backup

for path in $(find "/var/lib/cassandra/data/${KEYSPACE}" -name $timestamp); do
  table=$(echo "${path}" | awk -F "[/-]" '{print $7}')
  mkdir /tmp/backup/$table
  mv $path /tmp/backup/$table
done


tar -zcf /tmp/backup.tar.gz -C /tmp/backup .

nodetool clearsnapshot "${KEYSPACE}"

ከአንድ ካሳንድራ ኖድ ምትኬን ለመውሰድ የባሽ ስክሪፕት ምሳሌ

ለካሳንድራ ዝግጁ መፍትሄዎች በኩበርኔትስ

በአሁኑ ጊዜ ካሳንድራ በኩበርኔትስ ውስጥ ለማሰማራት ምን ጥቅም ላይ ይውላል እና ከእነዚህ ውስጥ ከተሰጡት መስፈርቶች መካከል የትኛው የተሻለ ነው?

1. በStatefulSet ወይም Helm ገበታዎች ላይ የተመሠረቱ መፍትሄዎች

የካሳንድራ ክላስተር ለማሄድ የ StatefulSets መሰረታዊ ተግባራትን መጠቀም ጥሩ አማራጭ ነው። የ Helm chart እና Go አብነቶችን በመጠቀም ካሳንድራን ለማሰማራት ለተጠቃሚው ተለዋዋጭ በይነገጽ ማቅረብ ይችላሉ።

ይሄ አብዛኛውን ጊዜ በጥሩ ሁኔታ ይሰራል...ያልተጠበቀ ነገር እስኪፈጠር ለምሳሌ የመስቀለኛ ክፍል አለመሳካት። መደበኛ የ Kubernetes መሳሪያዎች በቀላሉ ከላይ የተገለጹትን ሁሉንም ባህሪያት ግምት ውስጥ ማስገባት አይችሉም. በተጨማሪም፣ ይህ አካሄድ ለተወሳሰቡ አጠቃቀሞች ምን ያህል ሊራዘም እንደሚችል በጣም የተገደበ ነው፡ የመስቀለኛ መንገድ መተካት፣ ምትኬ፣ መልሶ ማግኛ፣ ክትትል፣ ወዘተ.

ተወካዮች፡-

ሁለቱም ገበታዎች እኩል ጥሩ ናቸው, ነገር ግን ከላይ ለተገለጹት ችግሮች ተገዢ ናቸው.

2. በኩበርኔትስ ኦፕሬተር ላይ የተመሰረቱ መፍትሄዎች

እንደነዚህ ያሉት አማራጮች የበለጠ አስደሳች ናቸው ምክንያቱም ክላስተርን ለማስተዳደር ሰፊ እድሎችን ይሰጣሉ ። የካሳንድራ ኦፕሬተርን ለመንደፍ፣ ልክ እንደሌላው ማንኛውም የውሂብ ጎታ፣ ጥሩ ስርዓተ-ጥለት እንደ Sidecar <-> ተቆጣጣሪ <-> ሲአርዲ፡ ይመስላል።

የካሳንድራ ወደ ኩበርኔትስ ፍልሰት፡ ባህሪያት እና መፍትሄዎች
በጥሩ ሁኔታ በተዘጋጀ የካሳንድራ ኦፕሬተር ውስጥ የመስቀለኛ መንገድ አስተዳደር እቅድ

ነባር ኦፕሬተሮችን እንይ።

1. ካሳንድራ-ኦፕሬተር ከ instaclustr

  • የፊልሙ
  • ዝግጁነት: አልፋ
  • ፈቃድ: Apache 2.0
  • በጃቫ ውስጥ ተተግብሯል

ይህ በእርግጥ በጣም ተስፋ ሰጭ እና የሚተዳደር ካሳንድራ ማሰማራትን ከሚያቀርብ ኩባንያ የተገኘ ፕሮጀክት ነው። ከላይ እንደተገለፀው በ HTTP በኩል ትዕዛዞችን የሚቀበል የጎን መኪና መያዣ ይጠቀማል. በጃቫ የተፃፈ፣ አንዳንድ ጊዜ የደንበኛ-ሂድ ቤተ-መጽሐፍት የላቀ ተግባር ይጎድለዋል። እንዲሁም ኦፕሬተሩ ለአንድ ዳታሴንተር የተለያዩ ራኮችን አይደግፍም።

ነገር ግን ኦፕሬተሩ ለክትትል ድጋፍ፣ CRD በመጠቀም ከፍተኛ ደረጃ የክላስተር አስተዳደር እና ሌላው ቀርቶ ምትኬ ለመስራት የሚያስችል ሰነዶች ያሉ ጥቅሞች አሉት።

2. ናቪጌተር ከጄትስታክ

  • የፊልሙ
  • ዝግጁነት: አልፋ
  • ፈቃድ: Apache 2.0
  • ውስጥ ተተግብሯል: Golang

DB-as-a-አገልግሎትን ለማሰማራት የተነደፈ መግለጫ። በአሁኑ ጊዜ ሁለት የውሂብ ጎታዎችን ይደግፋል፡ Elasticsearch እና ካሳንድራ። በRBAC በኩል እንደ የውሂብ ጎታ መዳረሻ ቁጥጥር ያሉ እንደዚህ ያሉ አስደሳች መፍትሄዎች አሉት (ለዚህም የራሱ የተለየ ናቪጌተር-አፒሰርቨር አለው)። በቅርበት ለመመልከት ጠቃሚ የሆነ አስደሳች ፕሮጀክት, ነገር ግን የመጨረሻው ቁርጠኝነት ከአንድ አመት ተኩል በፊት ተካሂዷል, ይህም እምቅ ችሎታውን በግልጽ ይቀንሳል.

3. ካሳንድራ-ኦፕሬተር በ vgkowski

  • የፊልሙ
  • ዝግጁነት: አልፋ
  • ፈቃድ: Apache 2.0
  • ውስጥ ተተግብሯል: Golang

ወደ ማከማቻው የመጨረሻው ቁርጠኝነት ከአንድ አመት በፊት ስለነበረ "በቁም ነገር" አድርገው አላሰቡትም. የኦፕሬተር ልማት ተትቷል፡ የቅርብ ጊዜው የ Kubernetes ስሪት እንደ ድጋፍ ሪፖርት የተደረገው 1.9 ነው።

4. ካሳንድራ-ኦፕሬተር በሮክ

  • የፊልሙ
  • ዝግጁነት: አልፋ
  • ፈቃድ: Apache 2.0
  • ውስጥ ተተግብሯል: Golang

ልማቱ በምንፈልገው ፍጥነት የማይሄድ ኦፕሬተር። ለክላስተር አስተዳደር በሚገባ የታሰበበት የሲአርዲ መዋቅር አለው፣ አገልግሎትን ከClusterIP (ተመሳሳይ "ጠለፋ") በመጠቀም አንጓዎችን የመለየት ችግርን ይፈታል ... ግን ያ ለአሁኑ ብቻ ነው። በአሁኑ ጊዜ ከሳጥኑ ውስጥ ምንም ክትትል ወይም ምትኬ የለም (በነገራችን ላይ እኛ ለክትትል ነን እራሳችንን ወስደዋል). የሚገርመው ነጥብ ይህን ኦፕሬተር በመጠቀም ScyllaDB ን ማሰማራት ይችላሉ።

ማሳሰቢያ፡- ይህንን ኦፕሬተር በትንሽ ማሻሻያ በአንድ ፕሮጀክታችን ውስጥ ተጠቅመንበታል። በጠቅላላው የሥራ ጊዜ (~ 4 ወራት ሥራ) በኦፕሬተሩ ሥራ ውስጥ ምንም ችግሮች አልተስተዋሉም.

5. CassKop ከብርቱካን

  • የፊልሙ
  • ዝግጁነት: አልፋ
  • ፈቃድ: Apache 2.0
  • ውስጥ ተተግብሯል: Golang

በዝርዝሩ ላይ ትንሹ ኦፕሬተር፡ የመጀመሪያው ቁርጠኝነት የተደረገው በሜይ 23፣ 2019 ነው። ቀድሞውኑ አሁን በጦር ጦሩ ውስጥ ከዝርዝራችን ውስጥ ብዙ ቁጥር ያላቸው ባህሪያት አሉት, ተጨማሪ ዝርዝሮች በፕሮጀክቱ ማከማቻ ውስጥ ይገኛሉ. ኦፕሬተሩ የተገነባው በታዋቂው ኦፕሬተር-sdk ላይ ነው. ከሳጥኑ ውጭ ክትትልን ይደግፋል። ከሌሎች ኦፕሬተሮች ዋናው ልዩነት አጠቃቀሙ ነው የ CassKop ተሰኪ፣ በፓይዘን የተተገበረ እና በካሳንድራ ኖዶች መካከል ለመገናኛ ጥቅም ላይ ይውላል።

ግኝቶች

ካሳንድራን ወደ ኩበርኔትስ ለማጓጓዝ የአቀራረብ ብዛት እና ሊሆኑ የሚችሉ አማራጮች ለራሱ ይናገራል፡ ርዕሱ ተፈላጊ ነው።

በዚህ ደረጃ, ከላይ የተጠቀሱትን ማናቸውንም በራስዎ አደጋ እና አደጋ መሞከር ይችላሉ-ከገንቢዎች ውስጥ አንዳቸውም 100% የመፍትሄቸውን የምርት አካባቢ ዋስትና አይሰጡም. ግን ቀድሞውኑ ፣ ብዙ ምርቶች በእድገት ወንበሮች ውስጥ ለመጠቀም ለመሞከር ተስፋ ሰጭ ይመስላሉ ።

ወደፊት ይህች ሴት በመርከቡ ላይ የምትገኝ ይመስለኛል!

PS

በብሎጋችን ላይ ያንብቡ፡-

ምንጭ: hab.com

አስተያየት ያክሉ