ሌላው የተለመደ ባህሪ ኮድን የመቀነስ እና የማተኮር ዝንባሌ ነው, ለዚህም ነው አገልጋይ-አልባ ኮምፒውተር አንዳንድ ጊዜ ተግባር እንደ አገልግሎት (FaaS) ተብሎ የሚጠራው.
በታሪክ፣ FaaSን በAWS Lambda ያቀረበው የመጀመሪያው የደመና አቅራቢ አማዞን ነበር፣ ስለዚህም ስሙ። ሌሎች የደመና አገልግሎት አቅራቢዎችም ተመሳሳይ አገልግሎት ይሰጣሉ፡-
- የክላውድ ተግባራት ከGoogle
- Azure ተግባራት ከማይክሮሶፍት
እነዚህ ሁሉ ኩባንያዎች አገልጋይ አልባ ኮምፒዩቲንግ፣ ራስ-ማስኬድ ይሰጣሉ፣ እና እርስዎ በትክክል ለሚጠቀሙት ብቻ ይከፍላሉ፣ ነገር ግን ደንበኞቻቸውን ወደ ባለቤትነት ምርታቸው ይቆልፋሉ። ሆኖም፣ አገልጋይ-አልባ ኮምፒውቲንግ ነፃ እና ክፍት ምንጭ አማራጮች አሉ። ልብ ሊባል የሚገባው፡-
- መድረክ
Apache OpenWhisk በ IBM ኢንኩቤተር የተሰራ፣ የፀደይ ክላውድ ተግባራት , ልክ እንደ የበለጸገ የፀደይ መዋቅር ስነ-ምህዳር አካል፣ እንዲሁም ለAWS Lambda፣ Azure Functions እና OpenWhisk እንደ ፊት ለፊት ሊያገለግል ይችላል።ፕሮጀክት Fn ፣ በ Oracle የተደገፈ።
ሁሉም ከደመናዎች ሙሉ በሙሉ ነፃ ናቸው, ማለትም, በማንኛውም ደመና ውስጥ ሊጫኑ ይችላሉ, የራስዎን, ይፋዊ ወይም የግል, እና በእርግጥ በ Exoscale ውስጥ.
የ Fn ፕሮጀክት እንዴት እንደሚሰራ
Fn ሙሉ በሙሉ በ Docker ላይ የተመሰረተ ነው, ሁለት ዋና ዋና ክፍሎችን ያቀፈ ነው.
- ሁሉንም የ Fn መሠረተ ልማት ጉዳዮችን ለማስተዳደር የተነደፈ የ CLI ፕሮግራም እና ከ Fn አገልጋይ ጋር መስተጋብር ይፈጥራል ፣
- የ Fn አገልጋይ ራሱ በ Docker ኮንቴይነር ውስጥ የታሸገ መደበኛ መተግበሪያ ነው።
በ Fn ውስጥ የተዘረጉት ተግባራት በተለየ ኮንቴይነሮች ውስጥ ይከናወናሉ, ይህም ብዙ የፕሮግራም ቋንቋዎችን ለመደገፍ ያስችልዎታል, ለምሳሌ ... ክሎጁር!
የተግባር ነጋሪ እሴቶች ወደ መደበኛ ግብአት (STDIN) ተላልፈዋል፣ ውጤቶቹ ወደ መደበኛ ውፅዓት (STDOUT) ይፃፋሉ። ነጋሪዎቹ ወይም የመመለሻ እሴቶቹ ቀላል ካልሆኑ (እንደ JSON ነገር) በFn እራሱ በተግባራዊ ልማት ኪት (FDK) መልክ የቀረበ የአብስትራክሽን ንብርብር በመጠቀም ሊለወጡ ይችላሉ።
ለምቾት ሲባል FaaSን በተለያዩ ቋንቋዎች እና ስሪቶቻቸው (Go ፣ የተለያዩ የጃቫ ፣ ፓይዘን ፣ ወዘተ ስሪቶች) ውስጥ ለማሰማራት ለማመቻቸት አብሮ የተሰሩ የአብነት ስብስቦች ቀርበዋል ።
ይህንን ንድፍ በመከተል FaaS መፍጠር ቀላል ነው፡-
- Fn CLI ን በመጠቀም ተግባሩን ማሰማራት፡ ለ Fn የመተግበሪያ ውቅር ፋይል በተመረጠው አብነት መሰረት ይፈጠራል።
- የራሳችንን ተግባር እንደገና እንጠቀማለን CLI Fn: የመያዣው ምስል በተወሰነ ማከማቻ ውስጥ ይቀመጣል, ከዚያ በኋላ አገልጋዩ የዚህን ምስል መኖር እና አቀማመጥ ያሳውቃል.
ተግባራትን ወደ Fn የማድረስ መርህ
አገልጋይ አልባ ተግባራትን የአካባቢ መጫን እና መሞከር
በአካባቢው ማሽን ላይ Fn ን መጫን እንጀምር. በመጀመሪያ, Docker በ Fn እንደሚፈለገው ተጭኗል. በዴቢያን/ኡቡንቱ ላይ እንዳለን በማሰብ፡-
$ sudo apt-get update
$ sudo apt-get install docker.io
ወይም በስርዓትዎ መሰረት የጥቅል አስተዳዳሪ/Docker ግንባታ ይጠቀሙ። ከዚያ በቀጥታ ወደ Fn CLI ን መጫን ይችላሉ. ለምሳሌ፣ curl በመጠቀም፡-
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
Homebrew ከተጫነ በOSX ላይ ከሆኑ በሌላ መንገድ መሄድ ይችላሉ፡-
$ brew install fn
==> Downloading https://homebrew.bintray.com/bottles/fn-0.5.8.high_sierra.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/b1/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb
######################################################################## 100.0%
==> Pouring fn-0.5.8.high_sierra.bottle.tar.gz
/usr/local/Cellar/fn/0.5.8: 5 files, 16.7MB
አሁን CLI ን በመጠቀም ተግባራችንን ለመጀመር ዝግጁ ነን። ለቀላልነት፣ እንደ መስቀለኛ መንገድ ያለ አብሮ የተሰራ የማስጀመሪያ አካባቢን እንጠቀማለን።
$ fn init --runtime node --trigger http hellonode
Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.
አዲስ ማውጫ ይፈጠራል። hellonode
የFn ተግባራችንን በአንዳንድ መሰረታዊ የውቅር ፋይሎች የበለጠ ለማሳደግ። አዲስ በተፈጠረው ማውጫ ውስጥ፣ የመረጡትን ቋንቋ ወይም የሩጫ ጊዜን በመከተል መተግበሪያዎን መፍጠር ይችላሉ።
# Каталог с node выглядит так:
hellonode
├── func.js
├── func.yaml
└── package.json
# Свежеустановленное окружение Java11 такое:
hellojava11
├── func.yaml
├── pom.xml
└── src
├── main
│ └── java
│ └── com
│ └── example
│ └── fn
│ └── HelloFunction.java
└── test
└── java
└── com
└── example
└── fn
└── HelloFunctionTest.java
Fn የመጀመሪያውን የፕሮጀክት መዋቅር ይፈጥራል, ፋይል ይፈጥራል func.yaml
, ለ Fn አስፈላጊ ቅንብሮችን የያዘ እና በመረጡት ቋንቋ ውስጥ የኮዱን አብነት ያዘጋጃል.
በመስቀለኛ ሩጫ ጊዜ፣ ይህ ማለት፡-
$ cat hellonode/func.js
const fdk=require('@fnproject/fdk');
fdk.handle(function(input){
let name = 'World';
if (input.name) {
name = input.name;
}
return {'message': 'Hello ' + name}
})
አሁን ሁሉም ነገር እንዴት እንደሚሰራ ለማየት ተግባራችንን በፍጥነት እንፈትሻለን።
በመጀመሪያ የ Fn አገልጋይን እንጀምራለን. ቀደም ሲል እንደተገለፀው የ Fn አገልጋይ የዶከር ኮንቴይነር ነው ፣ ስለሆነም ከተጀመረ በኋላ ሄዶ ምስሉን ከ Docker መዝገብ ይወስዳል።
$ fn start -d # запускаем локальный сервер в фоне
Unable to find image 'fnproject/fnserver:latest' locally
latest: Pulling from fnproject/fnserver
ff3a5c916c92: Pull complete
1a649ea86bca: Pull complete
ce35f4d5f86a: Pull complete
...
Status: Downloaded newer image for fnproject/fnserver:latest
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5
ተግባራችንን ለማስኬድ, "መለቀቅ" አለበት. ይህ ይጠይቃል имя приложения
በFn ውስጥ ሁሉም አፕሊኬሽኖች ለተዛማጅ ተግባራት የስም ቦታ መጠቀስ አለባቸው።
Fn CLI ፋይሉን ይፈልጋል func.yaml
ተግባሩን ለማዋቀር ጥቅም ላይ የሚውለው አሁን ባለው ማውጫ ውስጥ. ስለዚህ በመጀመሪያ ወደ እኛ ማውጫ መሄድ ያስፈልግዎታል hellonode
.
$ cd hellonode
$ fn deploy --app fnexo --local # выкатываем функцию локально, имя приложения - fnexo.
# параметр local не заливает образ в удаленный реестр,
# запуская его напрямую
Deploying hellonode to app: fnexo
Bumped to version 0.0.2
Building image nfrankel/hellonode:0.0.3 .
Updating function hellonode using image nfrankel/hellonode:0.0.3...
Successfully created app: fnexo
Successfully created function: hellonode with nfrankel/hellonode:0.0.3
Successfully created trigger: hellonode-trigger
ከትዕዛዙ ውፅዓት ማየት እንደምትችለው፣ ተግባራችንን የያዘ አዲስ Docker መያዣ ምስል ተፈጥሯል። ተግባሩ ለመጠራት ዝግጁ ነው፣ እና እሱን ለማድረግ ሁለት መንገዶች አሉን-
- የ Fn ትዕዛዝን በመጠቀም
invoke
- በቀጥታ በኩል በመደወል
http
ግጥሚያ invoke
በFn በቀላሉ በኤችቲቲፒ በኩል ለፈተናዎች ስራን ይመስላል፣ ይህም ለፈጣን ሙከራ ምቹ ነው።
$ fn invoke fnexo hellonode # вызываем функцию hellonode приложения fnexo
{"message":"Hello World"}
አንድን ተግባር በቀጥታ ለመጥራት፣ ሙሉውን URL ማወቅ አለቦት፡-
$ curl http://localhost:8080/t/fnexo/hellonode-trigger
{"message":"Hello World"}
የFn አገልጋይ በፖርት 8080 ላይ ያለውን ተግባር ያጋልጣል እና የተግባር ዩአርኤል ከስርዓተ ጥለት ጋር የሚዛመድ ይመስላል t/app/function
, ግን ሙሉ በሙሉ አይደለም. በኤችቲቲፒ በኩል አንድ ተግባር በቀጥታ አይጠራም ፣ ግን ቀስቅሴ ተብሎ በሚጠራው ፣ በስሙ መሠረት ፣ የተግባር ጥሪውን “ይጀመራል”። ቀስቅሴዎች የተገለጹት በ `func.yml
ፕሮጀክት
schema_version: 20180708
name: hellonode
version: 0.0.3
runtime: node
entrypoint: node func.js
format: json
triggers:
- name: hellonode-trigger
type: http
source: /hellonode-trigger # URL триггера
ቀስቅሴውን ከተግባሩ ስም ጋር ለማዛመድ መቀየር እንችላለን፣ ይህ ሁሉንም ነገር ያቃልላል፡
triggers:
- name: hellonode-trigger
type: http
source: /hellonode # совпадает с именем функции
ከዚያ የተግባር ማቅረቢያውን እንደገና እናስኬዳለን እና ከአዲስ ቀስቅሴ እንጠራዋለን፡-
$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode
{"message":"Hello World"}
ሁሉም ነገር እየሰራ ነው! ወደ ሙሉ-ሙከራዎች ለመሄድ እና የእኛን FaaS በአገልጋዩ ላይ ለማተም ጊዜው አሁን ነው!
በራስዎ መሠረተ ልማት ላይ አገልጋይ አልባ የተግባር አገልግሎቶችን መጫን
Exoscale CLIን በመጠቀም ቨርቹዋል ማሽን በፍጥነት እንጫን። እስካሁን ካላዋቀሩት መጠቀም ይችላሉ።
$ exo firewall create fn-securitygroup
$ exo firewall add fn-securitygroup ssh --my-ip
$ exo firewall add fn-securitygroup -p tcp -P 8080-8080 -c 0.0.0.0/0
$ exo vm create fn-server -s fn-securitygroup
ከዚያ ወደ ቨርቹዋል ማሽን ssh እና የርቀት Fn አገልጋይን መጫን ይችላሉ፡
$ exo ssh fn-server
The authenticity of host '185.19.30.175 (185.19.30.175)' can't be established.
ECDSA key fingerprint is SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '185.19.30.175' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)
ከዚያ Docker እና Fn አገልጋዩን በአከባቢው ማሽን ላይ እንደተደረገው በተመሳሳይ መንገድ ይጫኑ ፣ አገልጋዩን ያስጀምሩት
$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo systemctl start docker
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
$ sudo fn start
...
______
/ ____/___
/ /_ / __
/ __/ / / / /
/_/ /_/ /_/
v0.3.643
Fn ተግባራትን ለመቀበል ዝግጁ ነው! የታለመ ተግባራትን ወደ የርቀት አገልጋይ ለማስተላለፍ ትዕዛዙን እንጠቀማለን። deploy
ባንዲራውን በመተው ከአካባቢው ኮምፒተር --local
.
በተጨማሪም Fn የ Fn አገልጋይ እና የዶከር መመዝገቢያ ቦታን እንዲገልጹ ይጠይቃል. እነዚህ አማራጮች በአካባቢ ተለዋዋጮች ሊዘጋጁ ይችላሉ። FN_API_URL
и FN_REGISTRY
እንደቅደም ተከተላቸው፣ ነገር ግን ለማሰማራት ውቅረቶችን መፍጠር እና ማስተዳደርን በቀላሉ ለማስተዳደር የበለጠ ምቹ መንገድን ይሰጣል።
በFn ውል፣ የማሰማራት ውቅር ይባላል context
. የሚከተለው ትዕዛዝ አውድ ይፈጥራል፡-
$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankel
ያሉትን አውዶች እንደዚህ ማየት ትችላለህ፡-
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
እና ልክ እንደዚህ ወደተፈጠረው አውድ ቀይር፡-
$ fn use context exoscale
Now using context: exoscale
ከዚህ በኋላ፣ የFn ባህሪ ማቅረቡ የተመረጠውን DockerHub መለያ በመጠቀም Docker ምስሎችን ያወርዳል (በእኔ ሁኔታ - nfrankel
), እና ከዚያ የርቀት አገልጋዩን ያሳውቁ (በዚህ ምሳሌ - http://185.19.30.175:8080
) የእርስዎን ተግባር ስለያዘው የቅርብ ጊዜ ምስል ቦታ እና ሥሪት።
$ fn deploy --app fnexo . # выполняется на локальной машине из каталога hellonode
Deploying function at: /.
Deploying hellonode to app: fnexo
Bumped to version 0.0.5
Building image nfrankel/hellonode:0.0.5 .
በመጨረሻም፡-
$ curl http://185.19.30.175:8080/t/fnexo/hellonode
{"message":"Hello World"}
ተግባር የህይወት ዑደት በFn-Based Serverless Computing
በራስዎ አቅም አገልጋይ አልባ ስሌት ጥቅሞች
አገልጋይ አልባ ማስላት በጣም ውስብስብ ከሆኑ አፕሊኬሽኖች ወይም ማይክሮ ሰርቪስ ጋር መስተጋብር የሚፈጥሩ ነፃ የመተግበሪያ ክፍሎችን በፍጥነት ለመተግበር ምቹ መፍትሄ ነው።
ይህ ብዙውን ጊዜ በተመረጠው ሻጭ ውስጥ የመቆለፍ ድብቅ ወጪ ነው, ይህም እንደ ልዩ የአጠቃቀም ሁኔታ እና መጠን, ለወደፊቱ ከፍተኛ ወጪን እና ተለዋዋጭነትን ይቀንሳል.
ባለብዙ ደመና እና ድቅል ደመና አርክቴክቸር በዚህ ጉዳይ ላይ ይሠቃያሉ፣ ምክንያቱም በቀላሉ አገልጋይ አልባ ኮምፒውቲንግን ለመጠቀም በሚፈልጉበት ሁኔታ ውስጥ እራስዎን ማግኘት ይችላሉ ፣ ግን በድርጅት ፖሊሲዎች ምክንያት ይህ የማይቻል ሊሆን ይችላል።
Fn ለመጠቀም በጣም ቀላል ነው እና ከሞላ ጎደል ተመሳሳይ የሆነ የFaaS በይነገጽን በትንሽ ወጪ ማቅረብ ይችላል። ማንኛውንም የሻጭ መቆለፊያን ያስወግዳል እና በአገር ውስጥ ወይም በመረጡት ምቹ የሆነ የደመና መፍትሄ አቅራቢ ውስጥ ሊጫን ይችላል። የፕሮግራም ቋንቋ የመምረጥ ነፃነትም አለ።
ይህ መጣጥፍ የFn መሰረታዊ ነገሮችን ብቻ ነው የሚሸፍነው ነገር ግን የእራስዎን የስራ ጊዜ መፍጠር በጣም ቀላል ነው፣ እና አጠቃላይ አርክቴክቸር የFn ሎድ ሚዛንን በመጠቀም ወይም Fn ን ለጥበቃ ከፕሮክሲ ጀርባ በማስቀመጥ በስፋት ሊሰማራ ይችላል።
ምንጭ: hab.com