"አዲስ ኢፒክስ". ዝሆኑን ከፊል እንበላለን

"አዲስ ኢፒክስ". ዝሆኑን ከፊል እንበላለን

በዚህ ጽሑፍ ውስጥ ጨዋታውን "Epics" ለማዳበር የስራ አካባቢን አዘጋጃለሁ, እና ጨዋታውን እራሱን በ OpenFaaS ውስጥ ለመጠቀም ተስማሚ የሆኑትን ክፍሎች እሰብራለሁ. ሁሉንም ማጭበርበሮችን በሊኑክስ ላይ አደርጋለሁ፣ VirtualBoxን በመጠቀም Kubernetes ሚኒኩቤ ውስጥ አሰማራለሁ። የእኔ የስራ ማሽን 2 ፕሮሰሰር ኮር እና 12 ጊባ ራም አለው፤ እኔ ኤስኤስዲ እንደ ሲስተም ዲስክ እጠቀማለሁ። ዴቢያን 8ን እንደ ዋና የልማት ስርዓቴ እጠቀማለሁ፣ emacs፣ sudo፣git እና virtualbox ጥቅሎች ተጭነዋል፣ሌላው ሁሉ የሚጫነው ከ GitHub እና ከሌሎች ምንጮች በማውረድ ነው። በሌላ መልኩ ካልተገለጸ በስተቀር እነዚህን መተግበሪያዎች በ / usr/local/bin ውስጥ እንጭናቸዋለን። እንጀምር!

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

Go ን በመጫን ላይ

ከኦፊሴላዊው ድር ጣቢያ መመሪያዎችን እንከተላለን-

$ curl -L0 https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz -o go.tar.gz
$ sudo tar -C /usr/local -xzf go.tar.gz
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile

ተግባራዊነትን ማረጋገጥ፡

$ mkdir -p ~/go/src/hello && cd ~/go/src/hello
$ echo 'package main

import "fmt"

func main() {
fmt.Printf("hello, worldn")
}' > hello.go
$ go build
$ ./hello
hello, world

faas-cli በመጫን ላይ

ከኦፊሴላዊው ድር ጣቢያ መመሪያዎችን እንከተላለን-

$ curl -sSL https://cli.openfaas.com | sudo -E sh
x86_64
Downloading package https://github.com/openfaas/faas-cli/releases/download/0.11.3/faas-cli as /tmp/faas-cli
Download complete.

Running with sufficient permissions to attempt to move faas-cli to /usr/local/bin
New version of faas-cli installed to /usr/local/bin
Creating alias 'faas' for 'faas-cli'.
  ___                   _____           ____
 / _  _ __   ___ _ __ |  ___|_ _  __ _/ ___|
| | | | '_  / _  '_ | |_ / _` |/ _` ___ 
| |_| | |_) |  __/ | | |  _| (_| | (_| |___) |
 ___/| .__/ ___|_| |_|_|  __,_|__,_|____/
      |_|

CLI:
 commit:  73004c23e5a4d3fdb7352f953247473477477a64
 version: 0.11.3

በተጨማሪም፣ ባሽ ማጠናቀቅን ማንቃት ይችላሉ፡-

faas-cli completion --shell bash | sudo tee /etc/bash_completion.d/faas-cli

Kubernetes ን መጫን እና ማዋቀር

ለልማት ሚኒኩቤ በቂ ነው፣ስለዚህ ይጫኑት እና በ/usr/local/bin ውስጥ kubelet ጫን እና አፕሊኬሽኖችን ለመጫን ሄልምን ጫን።

$ curl https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -o minikube && chmod +x minikube && sudo mv minikube /usr/local/bin/
$ curl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl -o kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
$ curl https://get.helm.sh/helm-v3.0.2-linux-amd64.tar.gz | tar -xzvf - linux-amd64/helm --strip-components=1; sudo mv helm /usr/local/bin

ሚኒኩቤ አስጀምር፡

$ minikube start
  minikube v1.6.2 on Debian 8.11
  Automatically selected the 'virtualbox' driver (alternates: [])
  Downloading VM boot image ...
    > minikube-v1.6.0.iso.sha256: 65 B / 65 B [--------------] 100.00% ? p/s 0s
    > minikube-v1.6.0.iso: 150.93 MiB / 150.93 MiB [-] 100.00% 5.67 MiB p/s 27s
  Creating virtualbox VM (CPUs=2, Memory=8192MB, Disk=20000MB) ...
  Preparing Kubernetes v1.17.0 on Docker '19.03.5' ...
  Downloading kubeadm v1.17.0
  Downloading kubelet v1.17.0
  Pulling images ...
  Launching Kubernetes ...  Waiting for cluster to come online ...
  Done! kubectl is now configured to use "minikube"

እንፈትሻለን

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-6955765f44-knlcb           1/1     Running   0          29m
kube-system   coredns-6955765f44-t9cpn           1/1     Running   0          29m
kube-system   etcd-minikube                      1/1     Running   0          28m
kube-system   kube-addon-manager-minikube        1/1     Running   0          28m
kube-system   kube-apiserver-minikube            1/1     Running   0          28m
kube-system   kube-controller-manager-minikube   1/1     Running   0          28m
kube-system   kube-proxy-hv2wc                   1/1     Running   0          29m
kube-system   kube-scheduler-minikube            1/1     Running   0          28m
kube-system   storage-provisioner                1/1     Running   1          29m

OpenFaaS ን በመጫን ላይ

ገንቢዎቹ ከዚህ ጋር ለመስራት 2 የስም ቦታዎችን እንዲፈጥሩ ይመክራሉ፡-

$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created

ለሄልም ማከማቻ አክል፡

$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" has been added to your repositories

ገበታው ከመጫኑ በፊት የይለፍ ቃል የማዘጋጀት ችሎታ አለው፣ እንጠቀምበት እና የመዳረሻ ውሂቡን እንደ k8s ሚስጥር እናስቀምጥ

$ PASSWORD=verysecurerandompasswordstring
$ kubectl -n openfaas create secret generic basic-auth --from-literal=basic-auth-user=admin --from-literal=basic-auth-password="$PASSWORD"
secret/basic-auth created

እናሰማራ፡-

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "openfaas" chart repository
Update Complete.  Happy Helming!
$ helm upgrade openfaas --install openfaas/openfaas --namespace openfaas --set functionNamespace=openfaas-fn --set generateBasicAuth=false
Release "openfaas" does not exist. Installing it now.
NAME: openfaas
LAST DEPLOYED: Fri Dec 25 10:28:22 2019
NAMESPACE: openfaas
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
To verify that openfaas has started, run:

  kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"

ከተወሰነ ጊዜ በኋላ፣ የታቀደውን ትዕዛዝ እናስኬዳለን፡-

$ kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
alertmanager        1/1     1            1           114s
basic-auth-plugin   1/1     1            1           114s
faas-idler          1/1     1            1           114s
gateway             1/1     1            1           114s
nats                1/1     1            1           114s
prometheus          1/1     1            1           114s
queue-worker        1/1     1            1           114s

ተግባራዊነትን ማረጋገጥ፡

$ kubectl rollout status -n openfaas deploy/gateway
deployment "gateway" successfully rolled out
$ kubectl port-forward -n openfaas svc/gateway 8080:8080 &
[1] 6985
Forwarding from 127.0.0.1:8080 -> 8080
$ echo -n $PASSWORD | faas-cli login --username admin --password-stdin
Calling the OpenFaaS server to validate the credentials...
Handling connection for 8080
WARNING! Communication is not secure, please consider using HTTPS. Letsencrypt.org offers free SSL/TLS certificates.
credentials saved for admin http://127.0.0.1:8080
$ faas-cli list
Function                        Invocations     Replicas

Mongodb በመጫን ላይ

ሁሉንም ነገር እንጭናለን-helm በመጠቀም:

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" has been added to your repositories
$ helm install stable/mongodb --generate-name
NAME: mongodb-1577466908
LAST DEPLOYED: Fri Dec 25 11:15:11 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **

MongoDB can be accessed via port 27017 on the following DNS name from within your cluster:

    mongodb-1577466908.default.svc.cluster.local

To get the root password run:

    export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)

To connect to your database run the following command:

    kubectl run --namespace default mongodb-1577466908-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host mongodb-1577466908 --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD

To connect to your database from outside the cluster execute the following commands:

    kubectl port-forward --namespace default svc/mongodb-1577466908 27017:27017 &
    mongo --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD

እንፈትሻለን

kubectl run --namespace default mongodb-1577466908-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host mongodb-1577466908 --authenticationDatabase admin -u root -p $(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
If you don't see a command prompt, try pressing enter.

> db.version();
4.0.14

ከመያዣው ለመውጣት ctrl+D ይጫኑ።

emacs በማዘጋጀት ላይ

በመርህ ደረጃ, ሁሉም ነገር አስቀድሞ የተዋቀረ ነው ይህ ጽሑፍ, ስለዚህ በዝርዝር ውስጥ አልገባም.

ጨዋታውን ወደ ተግባራት መከፋፈል

ከተግባሮች ጋር መስተጋብር የሚከናወነው በ http ፕሮቶኮል በኩል ነው, በተለያዩ ተግባራት መካከል ከጫፍ እስከ ጫፍ ማረጋገጥ በJWT ይሰጣል. Mongodb ቶከኖችን፣ እንዲሁም የጨዋታ ሁኔታን፣ የተጫዋች ውሂብን፣ የሁሉም ጨዋታዎችን እንቅስቃሴዎች እና ሌሎች መረጃዎችን ለማከማቸት ያገለግላል። በጣም አስደሳች የሆኑትን ባህሪያት ጠለቅ ብለን እንመርምር.

መመዝገብ

የዚህ ተግባር ግብአት JSON ከጨዋታው ቅጽል ስም እና የይለፍ ቃል ጋር ነው። ይህ ተግባር ሲጠራ ይህ ተለዋጭ ስም በመረጃ ቋቱ ውስጥ አለመኖሩን ይጣራል፤ ቼኩ የተሳካ ከሆነ ተለዋጭ ስም እና የይለፍ ቃል ሃሽ ወደ ዳታቤዝ ይገባል። በጨዋታው ውስጥ በንቃት ለመሳተፍ መመዝገብ ያስፈልጋል።

ግቤት

የተግባር ግብአቱ JSON ከጨዋታ ቅጽል ስም እና የይለፍ ቃል ጋር ነው፡ በመረጃ ቋቱ ውስጥ ቅጽል ስም ካለ እና የይለፍ ቃሉ በተሳካ ሁኔታ ከዚህ ቀደም በዳታቤዝ ውስጥ በተቀመጠው ከተረጋገጠ JWT ተመልሶ ሲሄድ ወደ ሌሎች ተግባራት መተላለፍ አለበት። ተብሎ ይጠራል. የተለያዩ የአገልግሎት መዝገቦች እንዲሁ በመረጃ ቋቱ ውስጥ ገብተዋል ፣ ለምሳሌ ፣ በመጨረሻ የመግቢያ ጊዜ ፣ ​​ወዘተ.

የጨዋታዎች ዝርዝር ይመልከቱ

ማንኛውም ያልተፈቀደ ተጠቃሚ ንቁ ከሆኑ በስተቀር የሁሉም ጨዋታዎች ዝርዝር መጠየቅ ይችላል። ስልጣን ያለው ተጠቃሚ እንዲሁ የንቁ ጨዋታዎችን ዝርዝር ይመለከታል። የተግባሩ ውጤት JSON የጨዋታ ዝርዝሮችን (የጨዋታ መታወቂያ፣ ሰው ሊነበብ የሚችል ስም፣ ወዘተ) የያዘ ነው።

የጨዋታ ፈጠራ

ተግባሩ ከተፈቀደላቸው ተጠቃሚዎች ጋር ብቻ ነው የሚሰራው፤ በመግቢያው ላይ ከፍተኛው የተጫዋቾች ብዛት ተቀባይነት አለው እንዲሁም የጨዋታ መለኪያዎች (ለምሳሌ በዚህ ጨዋታ ውስጥ የትኞቹ ቁምፊዎች እንደሚሰሩ ፣ ከፍተኛው የተጫዋቾች ብዛት ወዘተ)። የጨዋታው የተለየ መለኪያ ለመቀላቀል የይለፍ ቃል መኖሩ ነው, ይህም ይፋዊ ያልሆኑ ጨዋታዎችን እንዲፈጥሩ ያስችልዎታል. በነባሪ፣ ይፋዊ ጨዋታ ተፈጥሯል። የተግባሩ ውጤት JSON ነው, እሱም የፍጥረት ስኬት መስክ, ልዩ የጨዋታ መለያ እና ሌሎች መለኪያዎችን ይዟል.

ጨዋታ መቀላቀል

ተግባሩ የሚሠራው ከተፈቀዱ ተጠቃሚዎች ጋር ብቻ ነው፣ ግብአቱ የጨዋታ መታወቂያው እና የይለፍ ቃሉ ነው፣ ይህ ይፋዊ ያልሆነ ጨዋታ ከሆነ ውጤቱ JSON ከጨዋታ መለኪያዎች ጋር ነው። ጨዋታውን የተቀላቀለው ስልጣን ያለው ተጠቃሚ እና የጨዋታው ፈጣሪ ከዚህ በኋላ የጨዋታ ተሳታፊዎች ይባላሉ።

የጨዋታ ክስተቶችን በመመልከት ላይ

ማንኛውም ያልተፈቀደ ተጠቃሚ ለቦዘኑ ጨዋታዎች የክስተቶችን ዝርዝር ሊጠይቅ ይችላል፣ እና ስልጣን ያለው ተጠቃሚ ለማንኛውም ገቢር ጨዋታ የክስተቶች ዝርዝር ሊቀበል ይችላል። ለተግባሩ ተጨማሪ መለኪያ ተጠቃሚው አስቀድሞ ያለው የክስተት ቁጥር ሊሆን ይችላል። በዚህ አጋጣሚ፣ በኋላ የተከሰቱት ክስተቶች ብቻ በዝርዝሩ ውስጥ ይመለሳሉ። ይህንን ተግባር በየጊዜው በማስጀመር ስልጣን ያለው ተጠቃሚ በጨዋታው ውስጥ ምን እየተከሰተ እንዳለ ይመለከታል። ይህ ተግባር ተጠቃሚው የጨዋታውን ክስተት መላኪያ ተግባር በመጠቀም ምላሽ የሚሰጠውን የእርምጃ ጥያቄ ይመልሳል።

የጨዋታ ክስተት በመላክ ላይ

ተግባሩ የሚሠራው ለጨዋታ ተሳታፊዎች ብቻ ነው፡ ጨዋታውን መጀመር፣ እንቅስቃሴ ማድረግ፣ ድምጽ መስጠት፣ በጨዋታ ክስተቶች ዝርዝር ውስጥ የሚታየውን የጽሑፍ መልእክት መፃፍ፣ ወዘተ.
ጨዋታውን የፈጠረው ስልጣን ያለው ተጠቃሚ እራሳቸውን ጨምሮ በጨዋታው ውስጥ ላሉ ተሳታፊዎች ሁሉ ሚናዎችን ማከፋፈል ይጀምራል፣ ተመሳሳይ ተግባር በመጠቀም ሚናቸውን ማረጋገጥ አለባቸው። ሁሉም ሚናዎች ከተረጋገጡ በኋላ ጨዋታው በራስ-ሰር ወደ ማታ ሁነታ ይቀየራል።

የጨዋታ ስታቲስቲክስ

ተግባሩ የሚሠራው ለጨዋታ ተሳታፊዎች ብቻ ነው፤ የጨዋታውን ሁኔታ፣ የተጫዋቾች ዝርዝር እና ቁጥር (ቅጽል ስሞች)፣ ሚናዎች እና ደረጃቸውን (የተንቀሳቀሱ ወይም ያልተደረጉ) እንዲሁም ሌሎች መረጃዎችን ያሳያል። ልክ እንደ ቀድሞው ተግባር, ሁሉም ነገር የሚሠራው ለጨዋታ ተሳታፊዎች ብቻ ነው.

በየጊዜው የተጀመሩ ተግባራት

ጨዋታውን በሚፈጥርበት ጊዜ ጨዋታው ለተወሰነ ጊዜ ካልተጀመረ ግልጽ ተግባሩን በመጠቀም ከገባሪ ጨዋታዎች ዝርዝር ውስጥ በራስ-ሰር ይወገዳል።

ሌላው ወቅታዊ ተግባር የጨዋታ ሁነታን ከሌሊት ወደ ቀን እና ወደ ኋላ ተመልሶ ይህ በየተራ ጊዜ ላልሆኑ ጨዋታዎች (ለምሳሌ ለጨዋታ ክስተት ምላሽ መስጠት ያለበት ተጫዋች በሆነ ምክንያት መፍትሄውን አልላከውም) ).

ማስታወቂያ

  • መግቢያ
  • የልማት አካባቢን ማዘጋጀት, ተግባሩን ወደ ተግባራት መከፋፈል
  • የኋላ ሥራ
  • የፊት ለፊት ስራ
  • CICD ማዋቀር, ሙከራ ማደራጀት
  • የሙከራ ጨዋታ ክፍለ ጊዜ ጀምር
  • ውጤቶች

ምንጭ: hab.com

አስተያየት ያክሉ