"Epik Anyar". Kita mangan gajah ing bagean

"Epik Anyar". Kita mangan gajah ing bagean

Ing artikel iki, aku bakal nyiyapake lingkungan kerja kanggo ngembangake game "Epics", lan uga bakal ngilangi game kasebut dadi bagean sing cocog kanggo digunakake ing OpenFaaS. Aku bakal nindakake kabeh manipulasi ing Linux, Aku bakal masang Kubernetes ing minikube nggunakake VirtualBox. Mesin kerjaku duwe 2 inti prosesor lan 12GB RAM; Aku nggunakake SSD minangka disk sistem. Aku bakal nggunakake debian 8 minangka sistem pangembangan utama, kanthi emacs, sudo, git lan paket virtualbox diinstal, kabeh liyane bakal diinstal kanthi ngundhuh saka GitHub lan sumber liyane. Kita bakal nginstal aplikasi kasebut ing /usr/local/bin kajaba wis ditemtokake. Ayo dadi miwiti!

Nyiapake lingkungan kerja

Nginstal Go

Kita tindakake pandhuan saka situs resmi:

$ 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

Fungsi mriksa:

$ 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

Nginstal faas-cli

Kita tindakake pandhuan saka situs resmi:

$ 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

Kajaba iku, sampeyan bisa ngaktifake bash-completion:

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

Nginstal lan Konfigurasi Kubernetes

Kanggo pangembangan, minikube wis cukup, mula instal lan kubelet ing /usr/local/bin, lan instal helm kanggo nginstal aplikasi:

$ 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

Bukak minikube:

$ 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"

Priksa:

$ 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

Nginstal OpenFaaS

Pangembang nyaranake nggawe 2 ruang jeneng kanggo digarap:

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

Tambah repositori kanggo helm:

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

Bagan kasebut nduweni kemampuan kanggo nyetel sandhi sadurunge instalasi, ayo gunakake lan simpen data akses minangka rahasia 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

Ayo nyebarake:

$ 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"

Sawise sawetara wektu, kita mbukak printah sing diusulake:

$ 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

Fungsi mriksa:

$ 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

Nginstal Mongodb

Kita nginstal kabeh nggunakake 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

Priksa:

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

Pencet ctrl + D kanggo metu saka wadhah.

Nyetel emacs

Ing asas, kabeh wis diatur miturut artikel iki, dadi aku ora bakal rinci.

Breaking mudhun game menyang fungsi

Interaksi karo fungsi ditindakake liwat protokol http, otentikasi end-to-end antarane fungsi sing beda diwenehake dening JWT. Mongodb digunakake kanggo nyimpen token, uga negara game, data pamuter, urutan gerakane kabeh game lan informasi liyane. Ayo goleki kanthi luwih rinci babagan fitur sing paling menarik.

Register

Input fungsi iki yaiku JSON kanthi julukan lan sandhi game. Nalika fungsi kasebut diarani, dipriksa manawa alias iki ora ana ing basis data; yen mriksa sukses, hash alias lan sandhi dilebokake ing basis data. Registration dibutuhake kanggo melu aktif ing game.

entri

Input fungsi yaiku JSON kanthi julukan lan sandhi game; yen ana julukan ing basis data lan sandhi kasebut kasil diverifikasi karo sing sadurunge disimpen ing basis data, JWT bakal bali, sing kudu ditransfer menyang fungsi liyane nalika lagi diarani. Macem-macem cathetan layanan uga dilebokake ing database, contone, wektu mlebu pungkasan, lsp.

Ndeleng dhaptar game

Sembarang pangguna sing ora sah bisa njaluk dhaptar kabeh game kajaba sing aktif. Pangguna sing sah uga ndeleng dhaptar game sing aktif. Asil fungsi kasebut yaiku JSON sing ngemot dhaptar game (ID game, jeneng sing bisa diwaca manungsa, lsp).

Nggawe game

Fungsi kasebut mung dianggo karo pangguna sing sah; jumlah maksimal pemain sing ditampa ing input, uga paramèter game (contone, karakter sing bakal diaktifake ing game iki, jumlah pemain maksimal, lsp). Parameter kapisah saka game kasebut yaiku anané sandhi kanggo gabung, sing ngidini sampeyan nggawe game non-umum. Kanthi gawan, game umum digawe. Asil fungsi kasebut yaiku JSON, sing ngemot lapangan sukses nggawe, pengenal game unik, lan paramèter liyane.

Gabung ing game

Fungsi kasebut mung dianggo karo pangguna sing sah, input yaiku ID game lan sandhi, yen iki game non-umum, output JSON karo paramèter game. Pangguna sah sing gabung karo game kasebut, uga sing nggawe game kasebut, banjur diarani peserta game.

Ndeleng acara game

Sembarang pangguna sing ora sah bisa njaluk dhaptar acara kanggo game sing ora aktif, lan pangguna sing sah bisa nampa dhaptar acara kanggo game sing aktif. Parameter tambahan kanggo fungsi kasebut bisa dadi nomer acara sing wis ana pangguna. Ing kasus iki, mung acara sing kedadeyan mengko bakal bali ing dhaptar. Kanthi ngluncurake fungsi iki kanthi periodik, pangguna sing sah nonton apa sing kedadeyan ing game kasebut. Fungsi iki uga ngasilake panjalukan tumindak, sing pangguna bisa nanggapi nggunakake fungsi kiriman acara game.

Ngirim acara game

Fungsi mung dianggo kanggo peserta game: iku bisa kanggo miwiti game, nggawe pamindhahan, milih, nulis pesen teks sing ditampilake ing dhaftar acara game, etc.
Pangguna sah sing nggawe game wiwit nyebarake peran kanggo kabeh peserta ing game, kalebu awake dhewe, kudu konfirmasi peran nggunakake fungsi sing padha. Sawise kabeh peran dikonfirmasi, game kanthi otomatis ngalih menyang mode wengi.

Statistik game

Fungsi kasebut mung dianggo kanggo peserta game; nuduhake kahanan game, dhaptar lan nomer pemain (julukan), peran lan status (pindhah digawe utawa ora), uga informasi liyane. Minangka karo fungsi sadurungΓ©, kabeh mung dianggo kanggo peserta game.

Fungsi sing diluncurake kanthi periodik

Yen game durung dibukak kanggo sawetara wektu tartamtu nalika nggawe game, iku bakal kanthi otomatis dibusak saka dhaftar game aktif nggunakake fungsi cetha.

Tugas periodik liyane yaiku ngoper mode game saka wengi nganti awan lan bali kanggo game sing ora kedadeyan sajrone giliran (contone, pemain sing kudu nanggepi acara game ora ngirim solusi kanggo sawetara alasan. ).

Pengumuman

  • Pambuka
  • Nyetel lingkungan pangembangan, ngrusak tugas dadi fungsi
  • Kerja backend
  • Kerja frontend
  • Nggawe CICD, ngatur testing
  • Miwiti sesi game nyoba
  • Hasil

Source: www.habr.com

Add a comment