Fn ላይ በመመስረት የራሳችንን አገልጋይ አልባ መገንባት

Fn ላይ በመመስረት የራሳችንን አገልጋይ አልባ መገንባት

አገልጋይ አልባ ስሌት በደመና ስሌት ውስጥ በጣም ታዋቂ ከሆኑ አዝማሚያዎች አንዱ ነው። መሠረታዊው የአሠራር መርህ መሠረተ ልማት የዴቭኦፕስ ጉዳይ ሳይሆን የአገልግሎት ሰጪው ጉዳይ ነው። የመርጃ ልኬት በራስ-ሰር ለመጫን ያስተካክላል እና ከፍተኛ ለውጥ አለው።

ሌላው የተለመደ ባህሪ ኮድን የመቀነስ እና የማተኮር ዝንባሌ ነው, ለዚህም ነው አገልጋይ-አልባ ኮምፒውተር አንዳንድ ጊዜ ተግባር እንደ አገልግሎት (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 የማድረስ መርህ

አገልጋይ አልባ ተግባራትን የአካባቢ መጫን እና መሞከር

በአካባቢው ማሽን ላይ 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ን በመጠቀም ቨርቹዋል ማሽን በፍጥነት እንጫን። እስካሁን ካላዋቀሩት መጠቀም ይችላሉ። ፈጣን ጅምር መመሪያችን. ይህ ምርታማነትዎን የበለጠ የሚጨምር አሪፍ መሳሪያ ነው። በደህንነት ቡድን ውስጥ ወደብ 8080 ለመክፈት ደንብ ማዋቀር እንደሚያስፈልግዎ አይርሱ! የሚከተሉት ትዕዛዞች የእኛን ተግባራት ለማስተናገድ ዝግጁ የሆነ ንፁህ ቨርቹዋል ማሽን ያስጀምራሉ፡

$ 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 ላይ በመመስረት የራሳችንን አገልጋይ አልባ መገንባት
ተግባር የህይወት ዑደት በFn-Based Serverless Computing

በራስዎ አቅም አገልጋይ አልባ ስሌት ጥቅሞች

አገልጋይ አልባ ማስላት በጣም ውስብስብ ከሆኑ አፕሊኬሽኖች ወይም ማይክሮ ሰርቪስ ጋር መስተጋብር የሚፈጥሩ ነፃ የመተግበሪያ ክፍሎችን በፍጥነት ለመተግበር ምቹ መፍትሄ ነው።

ይህ ብዙውን ጊዜ በተመረጠው ሻጭ ውስጥ የመቆለፍ ድብቅ ወጪ ነው, ይህም እንደ ልዩ የአጠቃቀም ሁኔታ እና መጠን, ለወደፊቱ ከፍተኛ ወጪን እና ተለዋዋጭነትን ይቀንሳል.

ባለብዙ ደመና እና ድቅል ደመና አርክቴክቸር በዚህ ጉዳይ ላይ ይሠቃያሉ፣ ምክንያቱም በቀላሉ አገልጋይ አልባ ኮምፒውቲንግን ለመጠቀም በሚፈልጉበት ሁኔታ ውስጥ እራስዎን ማግኘት ይችላሉ ፣ ግን በድርጅት ፖሊሲዎች ምክንያት ይህ የማይቻል ሊሆን ይችላል።

Fn ለመጠቀም በጣም ቀላል ነው እና ከሞላ ጎደል ተመሳሳይ የሆነ የFaaS በይነገጽን በትንሽ ወጪ ማቅረብ ይችላል። ማንኛውንም የሻጭ መቆለፊያን ያስወግዳል እና በአገር ውስጥ ወይም በመረጡት ምቹ የሆነ የደመና መፍትሄ አቅራቢ ውስጥ ሊጫን ይችላል። የፕሮግራም ቋንቋ የመምረጥ ነፃነትም አለ።

ይህ መጣጥፍ የFn መሰረታዊ ነገሮችን ብቻ ነው የሚሸፍነው ነገር ግን የእራስዎን የስራ ጊዜ መፍጠር በጣም ቀላል ነው፣ እና አጠቃላይ አርክቴክቸር የFn ሎድ ሚዛንን በመጠቀም ወይም Fn ን ለጥበቃ ከፕሮክሲ ጀርባ በማስቀመጥ በስፋት ሊሰማራ ይችላል።

ምንጭ: hab.com

አስተያየት ያክሉ