"نئی مہاکاوی"۔ ہم ہاتھی کو حصوں میں کھاتے ہیں۔

"نئی مہاکاوی"۔ ہم ہاتھی کو حصوں میں کھاتے ہیں۔

اس آرٹیکل میں، میں گیم "Epics" کو تیار کرنے کے لیے ایک کام کرنے کا ماحول قائم کروں گا، اور OpenFaaS میں استعمال کے لیے موزوں حصوں میں خود گیم کو بھی توڑ دوں گا۔ میں لینکس پر تمام ہیرا پھیری کروں گا، میں VirtualBox کا استعمال کرتے ہوئے منی کیوب میں Kubernetes تعینات کروں گا۔ میری ورک مشین میں 2 پروسیسر کور اور 12 جی بی ریم ہے؛ میں سسٹم ڈسک کے بطور ایس ایس ڈی استعمال کرتا ہوں۔ میں debian 8 کو اپنے مین ڈیولپمنٹ سسٹم کے طور پر استعمال کروں گا، جس میں emacs، sudo، git اور virtualbox پیکیجز انسٹال ہوں گے، باقی سب کچھ GitHub اور دیگر ذرائع سے ڈاؤن لوڈ کرکے انسٹال کیا جائے گا۔ ہم ان ایپلی کیشنز کو /usr/local/bin میں انسٹال کریں گے جب تک کہ دوسری صورت میں وضاحت نہ کی جائے۔ آو شروع کریں!

کام کرنے کے ماحول کی تیاری

گو انسٹال ہو رہا ہے۔

ہم سرکاری ویب سائٹ سے ہدایات پر عمل کرتے ہیں:

$ 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

مزید برآں، آپ bash-completion کو فعال کر سکتے ہیں:

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

Kubernetes کو انسٹال اور کنفیگر کرنا

ترقی کے لیے، minikube کافی ہے، لہذا اسے انسٹال کریں اور /usr/local/bin میں کیوبلیٹ، اور ایپلی کیشنز کو انسٹال کرنے کے لیے ہیلم انسٹال کریں:

$ 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 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 دبائیں۔

ایماکس ترتیب دینا

اصول میں، سب کچھ پہلے سے ہی کے مطابق ترتیب دیا گیا تھا یہ مضمونلہذا میں تفصیل میں نہیں جاؤں گا۔

کھیل کو افعال میں توڑنا

فنکشنز کے ساتھ تعامل HTTP پروٹوکول کے ذریعے کیا جاتا ہے، JWT کے ذریعے مختلف فنکشنز کے درمیان اینڈ ٹو اینڈ تصدیق فراہم کی جاتی ہے۔ Mongodb کا استعمال ٹوکنز کے ساتھ ساتھ گیم اسٹیٹ، پلیئر ڈیٹا، تمام گیمز کی چالوں کی ترتیب اور دیگر معلومات کو ذخیرہ کرنے کے لیے کیا جاتا ہے۔ آئیے سب سے زیادہ دلچسپ خصوصیات پر گہری نظر ڈالیں۔

رجسٹریشن

اس فنکشن کا ان پٹ گیم عرفی نام اور پاس ورڈ کے ساتھ JSON ہے۔ جب اس فنکشن کو کال کیا جاتا ہے، تو یہ چیک کیا جاتا ہے کہ یہ عرف ڈیٹا بیس میں نہیں ہے؛ اگر چیک کامیاب ہو جاتا ہے، تو عرف اور پاس ورڈ ہیش ڈیٹا بیس میں داخل کر دیا جاتا ہے۔ گیم میں فعال طور پر حصہ لینے کے لیے رجسٹریشن ضروری ہے۔

ان پٹ

فنکشن ان پٹ ایک گیم عرفی نام اور پاس ورڈ کے ساتھ JSON ہے؛ اگر ڈیٹا بیس میں کوئی عرفی نام موجود ہے اور ڈیٹا بیس میں پہلے محفوظ کردہ پاس ورڈ کی کامیابی کے ساتھ تصدیق ہو جاتی ہے، تو JWT واپس کر دیا جاتا ہے، جسے دوسرے فنکشنز کو پاس کرنا ضروری ہے جب وہ بلایا ڈیٹا بیس میں مختلف سروس ریکارڈز بھی داخل کیے جاتے ہیں، مثال کے طور پر، آخری لاگ ان کا وقت، وغیرہ۔

گیمز کی فہرست دیکھیں

کوئی بھی غیر مجاز صارف فعال گیمز کے علاوہ تمام گیمز کی فہرست کی درخواست کر سکتا ہے۔ ایک بااختیار صارف فعال گیمز کی فہرست بھی دیکھتا ہے۔ فنکشن کا نتیجہ JSON ہے جس میں گیمز کی فہرستیں (گیم ID، انسانی پڑھنے کے قابل نام، وغیرہ) شامل ہیں۔

کھیل کی تخلیق

فنکشن صرف مجاز صارفین کے ساتھ کام کرتا ہے؛ کھلاڑیوں کی زیادہ سے زیادہ تعداد ان پٹ پر قبول کی جاتی ہے، ساتھ ہی گیم کے پیرامیٹرز (مثال کے طور پر، اس گیم میں کن کرداروں کو چالو کرنا ہے، کھلاڑیوں کی زیادہ سے زیادہ تعداد وغیرہ)۔ گیم کا ایک الگ پیرامیٹر شامل ہونے کے لیے پاس ورڈ کی موجودگی ہے، جو آپ کو غیر عوامی گیمز بنانے کی اجازت دیتا ہے۔ پہلے سے طے شدہ طور پر، ایک عوامی کھیل بنتا ہے۔ فنکشن کا نتیجہ JSON ہے، جس میں تخلیق کی کامیابی کا میدان، ایک منفرد گیم شناخت کنندہ، اور دیگر پیرامیٹرز شامل ہیں۔

کھیل میں شامل ہونا

فنکشن صرف مجاز صارفین کے ساتھ کام کرتا ہے، ان پٹ گیم آئی ڈی اور اس کا پاس ورڈ ہے، اگر یہ غیر عوامی گیم ہے، تو آؤٹ پٹ گیم پیرامیٹرز کے ساتھ JSON ہے۔ گیم میں شامل ہونے والے مجاز صارف کے ساتھ ساتھ گیم کے تخلیق کار کو اس کے بعد گیم کے شرکاء کہا جاتا ہے۔

کھیل کے واقعات دیکھنا

کوئی بھی غیر مجاز صارف غیر فعال گیمز کے لیے ایونٹس کی فہرست کی درخواست کر سکتا ہے، اور ایک مجاز صارف کسی بھی فعال گیم کے لیے ایونٹس کی فہرست حاصل کر سکتا ہے۔ فنکشن کا ایک اضافی پیرامیٹر ایونٹ نمبر ہوسکتا ہے جو صارف کے پاس پہلے سے موجود ہے۔ اس صورت میں، فہرست میں صرف وہی واقعات لوٹائے جائیں گے جو بعد میں پیش آئے۔ وقتاً فوقتاً اس فنکشن کو شروع کرنے سے، ایک مجاز صارف دیکھتا ہے کہ گیم میں کیا ہو رہا ہے۔ یہ فنکشن ایک کارروائی کی درخواست بھی واپس کرتا ہے، جسے صارف گیم کے ایونٹ ڈسپیچ فنکشن کا استعمال کرتے ہوئے جواب دے سکتا ہے۔

گیم ایونٹ بھیج رہا ہے۔

فنکشن صرف گیم کے شرکاء کے لیے کام کرتا ہے: گیم شروع کرنا، حرکت کرنا، ووٹ دینا، ایک ٹیکسٹ میسج لکھنا جو گیم ایونٹس کی فہرست میں ظاہر ہوتا ہے، وغیرہ۔
گیم بنانے والا مجاز صارف گیم میں اپنے سمیت تمام شرکاء کو رولز تقسیم کرنا شروع کر دیتا ہے، انہیں اسی فنکشن کا استعمال کرتے ہوئے اپنے کردار کی تصدیق کرنی ہوگی۔ ایک بار جب تمام کرداروں کی تصدیق ہو جاتی ہے، گیم خود بخود نائٹ موڈ میں بدل جاتا ہے۔

کھیل کے اعدادوشمار

فنکشن صرف گیم کے شرکاء کے لیے کام کرتا ہے؛ یہ گیم کی حالت، کھلاڑیوں کی فہرست اور تعداد (عرفی نام)، کردار اور ان کی حیثیت (منتقل یا نہیں) کے ساتھ ساتھ دیگر معلومات بھی دکھاتا ہے۔ پچھلے فنکشن کی طرح، سب کچھ صرف گیم کے شرکاء کے لیے کام کرتا ہے۔

وقتاً فوقتاً شروع کیے گئے افعال

اگر گیم بناتے وقت مخصوص وقت کے لیے گیم لانچ نہیں کی گئی ہے، تو کلیئر فنکشن کا استعمال کرتے ہوئے اسے فعال گیمز کی فہرست سے خود بخود ہٹا دیا جائے گا۔

ایک اور متواتر کام گیم موڈ کو رات سے دن اور پیچھے کی طرف تبدیل کرنا ہے جن کے لیے موڑ کے دوران ایسا نہیں ہوا تھا (مثال کے طور پر، ایک کھلاڑی جسے گیم ایونٹ پر ردعمل ظاہر کرنے کی ضرورت ہوتی ہے، اس نے کسی وجہ سے اپنا حل نہیں بھیجا۔ )۔

اعلان

  • تعارف
  • ترقیاتی ماحول کو ترتیب دینا، کام کو افعال میں تقسیم کرنا
  • بیک اینڈ کام
  • فرنٹ اینڈ کام
  • CICD ترتیب دینا، جانچ کا اہتمام کرنا
  • ٹرائل گیم سیشن شروع کریں۔
  • کے نتائج

ماخذ: www.habr.com

نیا تبصرہ شامل کریں