"Epics Newydd". Rydyn ni'n bwyta'r eliffant mewn rhannau
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ Π±ΡΠ΄Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΠ΅Π΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ³ΡΡ Β«ΠΡΠ»ΠΈΠ½ΡΒ», Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½Ρ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΠΉ ΠΈΠ³ΡΡ Π½Π° ΡΠ°ΡΡΠΈ, ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΡΠ΅ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² OpenFaaS. Byddaf yn gwneud yr holl driniaethau ar Linux, byddaf yn defnyddio Kubernetes yn Minikube gan ddefnyddio VirtualBox. Mae gan fy mheiriant gwaith 2 greiddiau prosesydd a 12GB o RAM; rwy'n defnyddio AGC fel disg y system. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ debian 8, Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ emacs, sudo, git ΠΈ virtualbox, Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Ρ ΠΏΡΡΠ΅ΠΌ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ· GitHub ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ². Byddwn yn gosod y cymwysiadau hyn yn/usr/lleol/bin oni nodir yn wahanol. Dewch i ni ddechrau!
Paratoi'r amgylchedd gwaith
Gosod mynd
Rydym yn dilyn y cyfarwyddiadau o'r wefan swyddogol:
Mae'r datblygwyr yn argymell creu 2 le enw i weithio gyda:
$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created
Ychwanegwch ystorfa ar gyfer helm:
$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" has been added to your repositories
Mae gan y siart y gallu i osod cyfrinair cyn ei osod, gadewch i ni ei ddefnyddio ac arbed y data mynediad fel cyfrinach K8S:
$ 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"
Ar Γ΄l peth amser, rydyn ni'n rhedeg y gorchymyn arfaethedig:
$ 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
Gosod MongoDB
Rydym yn gosod popeth gan ddefnyddio llyw:
$ 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
Rydym yn gwirio:
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
Pwyswch Ctrl+D i adael y cynhwysydd.
Sefydlu Emacs
Mewn egwyddor, roedd popeth eisoes wedi'i ffurfweddu yn Γ΄l Mae'r erthygl hon yn, felly wnes i ddim mynd i fanylion.
Torri i lawr y gΓͺm yn swyddogaethau
Gwneir rhyngweithio Γ’ swyddogaethau trwy'r protocol HTTP, darperir dilysiad o'r dechrau i'r diwedd rhwng gwahanol swyddogaethau gan JWT. Defnyddir MongoDB i storio tocynnau, yn ogystal Γ’ Game State, data chwaraewyr, dilyniannau symudiadau pob gΓͺm a gwybodaeth arall. Gadewch i ni edrych yn agosach ar y nodweddion mwyaf diddorol.
Cofrestru
Mewnbwn y swyddogaeth hon yw JSON gyda llysenw a chyfrinair y gΓͺm. Pan elwir y swyddogaeth hon, gwirir nad yw'r alias hwn yn y gronfa ddata; os yw'r gwiriad yn llwyddiannus, caiff yr alias a'r hash cyfrinair eu mewnosod yn y gronfa ddata. Mae angen cofrestru i gymryd rhan weithredol yn y gΓͺm.
Mewnbwn
The function input is JSON with a game nickname and password; if there is an nickname in the database and the password is successfully verified with the one previously saved in the database, a JWT is returned, which must be passed to other functions when they are Galwyd. Mae cofnodion gwasanaeth amrywiol hefyd yn cael eu mewnosod yn y gronfa ddata, er enghraifft, yr amser mewngofnodi diwethaf, ac ati.
Gweld rhestr o gemau
Gall unrhyw ddefnyddiwr heb awdurdod ofyn am restr o'r holl gemau ac eithrio rhai gweithredol. Mae defnyddiwr awdurdodedig hefyd yn gweld rhestr o gemau gweithredol. Canlyniad y swyddogaeth yw JSON sy'n cynnwys rhestrau o gemau (ID gΓͺm, enw dynol-ddarllenadwy, ac ati).
Π€ΡΠ½ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ, Π½Π° Π²Ρ ΠΎΠ΄Π΅ β ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈΠ³ΡΡ ΠΈ Π΅Π΅ ΠΏΠ°ΡΠΎΠ»Ρ, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ΠΏΡΠ±Π»ΠΈΡΠ½Π°Ρ ΠΈΠ³ΡΠ°, Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ β JSON Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΈΠ³ΡΡ. Gelwir y defnyddiwr awdurdodedig a ymunodd Γ’'r gΓͺm, yn ogystal Γ’ chrΓ«wr y gΓͺm, yn gyfranogwyr gΓͺm o hyn ymlaen.
Gwylio Digwyddiadau GΓͺm
Gall unrhyw ddefnyddiwr heb awdurdod ofyn am restr o ddigwyddiadau ar gyfer gemau anactif, a gall defnyddiwr awdurdodedig dderbyn rhestr o ddigwyddiadau ar gyfer unrhyw gΓͺm weithredol. Gall paramedr ychwanegol i'r swyddogaeth fod yn rhif y digwyddiad sydd gan y defnyddiwr eisoes. Yn yr achos hwn, dim ond y digwyddiadau hynny a ddigwyddodd yn ddiweddarach fydd yn cael eu dychwelyd yn y rhestr. Trwy lansio'r swyddogaeth hon o bryd i'w gilydd, mae defnyddiwr awdurdodedig yn gwylio'r hyn sy'n digwydd yn y gΓͺm. Mae'r swyddogaeth hon hefyd yn dychwelyd cais gweithredu, y gall y defnyddiwr ymateb iddo gan ddefnyddio swyddogaeth anfon digwyddiad y gΓͺm.
Anfon Digwyddiad GΓͺm
Mae'r swyddogaeth yn gweithio ar gyfer cyfranogwyr gΓͺm yn unig: mae'n bosibl cychwyn y gΓͺm, symud, pleidleisio, ysgrifennu neges destun sy'n cael ei harddangos yn y rhestr o ddigwyddiadau gΓͺm, ac ati.
ΠΠ²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠΎΠ·Π΄Π°Π²ΡΠΈΠΉ ΠΈΠ³ΡΡ, Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°Π·Π΄Π°ΡΡ ΡΠΎΠ»Π΅ΠΉ Π²ΡΠ΅ΠΌ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ°ΠΌ ΠΈΠ³ΡΡ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ΅Π±Ρ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ ΡΠ²ΠΎΡ ΡΠΎΠ»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Unwaith y bydd yr holl rolau wedi'u cadarnhau, mae'r gΓͺm yn newid yn awtomatig i'r modd nos.
Ystadegau gΓͺm
Π€ΡΠ½ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΠΈΠ³ΡΡ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ³ΡΡ, ΡΠΏΠΈΡΠΎΠΊ ΠΈ ΡΠΈΡΠ»ΠΎ ΠΈΠ³ΡΠΎΠΊΠΎΠ² (ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ), ΡΠΎΠ»ΠΈ ΠΈ ΠΈΡ ΡΡΠ°ΡΡΡ (ΡΠ΄Π΅Π»Π°Π½ Ρ ΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π΅Ρ), Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΡΠ³ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Yn yr un modd Γ’'r swyddogaeth flaenorol, mae popeth yn gweithio ar gyfer cyfranogwyr gemau yn unig.
Swyddogaethau a lansiwyd o bryd i'w gilydd
Os nad yw'r gΓͺm wedi'i lansio ers peth amser a nodir wrth greu'r gΓͺm, bydd yn cael ei thynnu'n awtomatig o'r rhestr o gemau gweithredol gan ddefnyddio'r swyddogaeth glir.
Another periodic task is the forced switching of the game mode from night to day and back for games for which this did not happen during the turn (for example, a player who needs to react to a game event did not send his solution for some reason ).