Fn මත පදනම්ව අපගේම serverless ගොඩනැගීම

Fn මත පදනම්ව අපගේම serverless ගොඩනැගීම

සර්වර් රහිත පරිගණනය Cloud computing හි වඩාත් කැපී පෙනෙන ප්‍රවණතාවයකි. මූලික මෙහෙයුම් මූලධර්මය නම් යටිතල පහසුකම් DevOps හි සැලකිල්ලක් නොව සේවා සපයන්නාගේ සැලකිල්ලයි. සම්පත් පරිමාණය ස්වයංක්‍රීයව පැටවීමට සීරුමාරු වන අතර ඉහළ වෙනස්වීම් අනුපාතයක් ඇත.

තවත් පොදු ලක්‍ෂණයක් වන්නේ කේතය අවම කිරීමට සහ නාභිගත කිරීමට ඇති ප්‍රවණතාවයයි, එම නිසා සේවාදායක රහිත පරිගණනය සමහර විට සේවාවක් ලෙස (FaaS) ලෙස හැඳින්වේ.

ඓතිහාසික වශයෙන්, AWS Lambda සමඟ FaaS පිරිනැමූ පළමු වලාකුළු සපයන්නා ඇමේසන් වන අතර, එම නිසා නම ලැබුණි. අනෙකුත් වලාකුළු සේවා සපයන්නන් ද සමාන ඒවා ලබා දෙයි:

  • Google වෙතින් Cloud Functions
  • Microsoft වෙතින් Azure කාර්යයන්

මෙම සමාගම් සියල්ලම සේවාදායක රහිත පරිගණකකරණය, ස්වයංක්‍රීය පරිමාණය ලබා දෙන අතර ඔබ සැබවින්ම භාවිතා කරන දේ සඳහා පමණක් ගෙවන නමුත් ඔවුන් පාරිභෝගිකයින් ඔවුන්ගේ හිමිකාර නිෂ්පාදනයට අගුළු දමයි. කෙසේ වෙතත්, serverless computing සඳහා නිදහස් සහ විවෘත මූලාශ්‍ර විකල්ප තිබේ. එය සඳහන් කිරීම වටී:

  • වේදිකාව Apache OpenWhisk, IBM විසින් ඉන්කියුබේටරයක සංවර්ධනය කරන ලදී,
  • වසන්ත වලාකුළු කාර්යයන්, AWS Lambda, Azure Functions සහ OpenWhisk සඳහා මුහුණත ලෙස ද භාවිතා කළ හැකි තරමක් පොහොසත් වසන්ත රාමු පරිසර පද්ධතියක කොටසක් ලෙස,
  • ව්යාපෘතිය Fn, Oracle විසින් සහාය දක්වයි.

ඒවා සියල්ලම වලාකුළු වලින් සම්පූර්ණයෙන්ම ස්වාධීන වේ, එනම්, ඒවා ඔබේම, පොදු හෝ පුද්ගලික ඇතුළුව ඕනෑම වලාකුළක ස්ථාපනය කළ හැකි අතර ඇත්ත වශයෙන්ම Exoscale හි ඇත.

Fn ව්‍යාපෘතිය ක්‍රියාත්මක වන ආකාරය

Fn සම්පූර්ණයෙන්ම Docker මත පදනම් වේ, ප්රධාන සංරචක දෙකකින් සමන්විත වේ:

  • CLI වැඩසටහන Fn යටිතල ව්‍යුහයේ සියලුම අංග කළමනාකරණය කිරීමට නිර්මාණය කර ඇති අතර Fn සේවාදායකය සමඟ අන්තර් ක්‍රියා කරයි,
  • Fn සේවාදායකයම ඩොකර් කන්ටේනරයක ඇසුරුම් කර ඇති සාමාන්‍ය යෙදුමකි.

Fn හි යොදවා ඇති කාර්යයන් වෙනම බහාලුම්වල ද ක්‍රියාත්මක වේ, එමඟින් ඔබට ක්‍රමලේඛන භාෂා රාශියකට සහාය වීමට ඉඩ සලසයි, උදාහරණයක් ලෙස... Clojure!

ක්‍රියාකාරී තර්ක සම්මත ආදානය (STDIN) වෙත යවනු ලැබේ, ප්‍රතිඵල සම්මත ප්‍රතිදානය (STDOUT) වෙත ලියා ඇත. තර්ක හෝ ප්‍රතිලාභ අගයන් සරල අගයන් නොවේ නම් (JSON වස්තුවක් වැනි), ඒවා Fn විසින්ම Function Development Kit (FDK) ආකාරයෙන් සපයන වියුක්ත ස්තරයක් භාවිතයෙන් පරිවර්තනය කළ හැක.

පහසුව සඳහා, විවිධ භාෂා සහ ඒවායේ අනුවාද (Go, Java හි විවිධ අනුවාද, Python, ආදිය) පුළුල් ලැයිස්තුවක FaaS යෙදවීමට පහසුකම් සැලසීම සඳහා සාදන ලද සැකිලි කට්ටල පිරිනමනු ලැබේ.

මෙම රූප සටහන අනුගමනය කිරීමෙන් FaaS නිර්මාණය කිරීම පහසුය:

  • Fn CLI භාවිතයෙන් ශ්‍රිතය යෙදවීම: තෝරාගත් අච්චුව මත පදනම්ව Fn සඳහා යෙදුම් වින්‍යාස ගොනුවක් සාදනු ලැබේ.
  • අපි නැවතත් CLI Fn භාවිතා කරමින් අපගේම කාර්යයක් සකස් කරමු: බහාලුම් රූපය යම් ගබඩාවක තැන්පත් කර ඇති අතර, මෙම රූපයේ පැවැත්ම සහ ස්ථානගත කිරීම පිළිබඳව සේවාදායකයට දැනුම් දෙනු ලැබේ.

Fn මත පදනම්ව අපගේම serverless ගොඩනැගීම
Fn වෙත කාර්යයන් ලබා දීමේ මූලධර්මය

දේශීය ස්ථාපනය සහ සේවාදායක රහිත කාර්යයන් පරීක්ෂා කිරීම

දේශීය යන්ත්‍රයේ Fn ස්ථාපනය කිරීම ආරම්භ කරමු. පළමුව, Fn විසින් අවශ්‍ය පරිදි Docker ස්ථාපනය කර ඇත. අපි Debian/Ubuntu මත යැයි උපකල්පනය කළහොත්:

$ sudo apt-get update
$ sudo apt-get install docker.io

නැතහොත් ඔබේ පද්ධතියට අනුව පැකේජ කළමණාකරු/ඩොකර් ගොඩනැගීමක් භාවිතා කරන්න. එවිට ඔබට 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 භාවිතයෙන් අපගේ කාර්යය ආරම්භ කිරීමට සූදානම්ව සිටිමු. සරල බව සඳහා, අපි Node වැනි ගොඩනඟන ලද දියත් කිරීමේ පරිසරයක් භාවිතා කරන්නෙමු:

$ 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 සඳහා අවශ්‍ය සැකසුම් අඩංගු වන අතර, ඔබ තෝරාගත් භාෂාවෙන් කේතය සඳහා අච්චුව සකසයි.

Node ධාවන කාලය සම්බන්ධයෙන්, මෙයින් අදහස් කරන්නේ:

$ 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 සේවාදායකය ඩොකර් බහාලුමක් වේ, එබැවින්, ආරම්භ කිරීමෙන් පසු, එය ගොස් ඩොකර් රෙජිස්ට්‍රියෙන් රූපය ලබා ගනී.

$ 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

විධාන ප්‍රතිදානයෙන් ඔබට පෙනෙන පරිදි, අපගේ ක්‍රියාකාරිත්වය අඩංගු නව ඩොකර් බහාලුම් රූපයක් නිර්මාණය වේ. ශ්‍රිතය කැඳවීමට සුදානම්, අපට එය කිරීමට ක්‍රම දෙකක් තිබේ:

  • Fn විධානය භාවිතා කරයි invoke
  • හරහා කෙලින්ම ඇමතීම http

අමතන්න invoke Fn හරහා එය හුදෙක් පරීක්ෂණ සඳහා HTTP හරහා වැඩ අනුකරණය කරයි, එය ඉක්මන් පරීක්ෂණ සඳහා පහසු වේ:

$ fn invoke fnexo hellonode      # вызываем функцию hellonode приложения fnexo

{"message":"Hello World"}

ශ්‍රිතයක් කෙලින්ම ඇමතීමට, ඔබ සම්පූර්ණ URL එක දැන සිටිය යුතුය:

$ curl http://localhost:8080/t/fnexo/hellonode-trigger

{"message":"Hello World"}

Fn සේවාදායකය වරාය 8080 මත එහි ක්‍රියාකාරකම් නිරාවරණය කරන අතර URL ශ්‍රිතය රටාවට ගැළපෙන බව පෙනේ. t/app/function, නමුත් සම්පූර්ණයෙන්ම නොවේ. HTTP හරහා, ශ්‍රිතයක් කෙලින්ම කැඳවනු නොලැබේ, නමුත් ඊනියා ප්‍රේරකයක් හරහා, එහි නමට අනුව, ශ්‍රිත ඇමතුම “ආරම්භ කරයි”. ප්‍රේරක අර්ථ දක්වා ඇත `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 මත පදනම්ව අපගේම serverless ගොඩනැගීම
Fn-පාදක සේවාදායක රහිත පරිගණකකරණයේ ක්‍රියාකාරී ජීවන චක්‍රය

ඔබේම හැකියාවෙන් සර්වර් රහිත පරිගණනයේ වාසි

Serverless computing යනු වඩාත් සංකීර්ණ යෙදුම් හෝ ක්ෂුද්‍ර සේවා සමඟ අන්තර්ක්‍රියා කරන යෙදුමක ස්වාධීන කොටස් ඉක්මනින් ක්‍රියාත්මක කිරීම සඳහා පහසු විසඳුමකි.

මෙය බොහෝ විට තෝරාගත් වෙළෙන්දාට අගුලු දැමීමේ සැඟවුණු පිරිවැය නිසා වන අතර, නිශ්චිත භාවිත නඩුව සහ පරිමාව අනුව, අනාගතයේ දී ඉහළ පිරිවැයක් සහ අඩු නම්යතාවයක් ඇති විය හැක.

Multi-Cloud සහ hybrid cloud architectures ද මෙම අවස්ථාවේදී දුක් විඳිති, මන්ද ඔබ සේවාදායකය රහිත පරිගණකකරණය භාවිතා කිරීමට කැමති තත්වයකට පහසුවෙන්ම පත් විය හැකි නමුත් ආයතනික ප්‍රතිපත්ති හේතුවෙන් එය කළ නොහැකි විය හැකිය.

Fn භාවිතා කිරීමට ඉතා පහසු වන අතර කුඩා පොදු කාර්ය සමඟ එකම FaaS අතුරුමුහුණත සැපයිය හැකිය. එය ඕනෑම වෙළෙන්දෙකුගේ අගුලු දැමීම ඉවත් කරන අතර දේශීයව හෝ ඔබ කැමති ඕනෑම පහසු වලාකුළු විසඳුම් සපයන්නෙකු තුළ ස්ථාපනය කළ හැකිය. ක්‍රමලේඛන භාෂාවක් තෝරා ගැනීමේ නිදහස ද ඇත.

මෙම ලිපිය Fn හි මූලික කරුණු පමණක් ආවරණය කරයි, නමුත් ඔබේම ධාවන කාලය නිර්මාණය කිරීම ඉතා සරල වන අතර, සමස්ත ගෘහ නිර්මාණ ශිල්පය Fn load balancer එකක් භාවිතයෙන් හෝ ආරක්ෂාව සඳහා ප්‍රොක්සියක් පිටුපස Fn තැබීමෙන් වඩාත් පුළුල් ලෙස යෙදවිය හැක.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න