Fn ఆధారంగా మా స్వంత సర్వర్‌లెస్‌ను రూపొందించడం

Fn ఆధారంగా మా స్వంత సర్వర్‌లెస్‌ను రూపొందించడం

సర్వర్‌లెస్ కంప్యూటింగ్ క్లౌడ్ కంప్యూటింగ్‌లో అత్యంత ప్రముఖమైన ట్రెండ్‌లలో ఒకటి. ప్రాథమిక నిర్వహణ సూత్రం ఏమిటంటే, మౌలిక సదుపాయాలు DevOps యొక్క ఆందోళన కాదు, కానీ సర్వీస్ ప్రొవైడర్. రిసోర్స్ స్కేలింగ్ స్వయంచాలకంగా లోడ్ చేయడానికి సర్దుబాటు చేస్తుంది మరియు అధిక మార్పు రేటును కలిగి ఉంటుంది.

మరొక సాధారణ లక్షణం ఏమిటంటే, కోడ్‌ను కనిష్టీకరించడం మరియు ఫోకస్ చేసే ధోరణి, అందుకే సర్వర్‌లెస్ కంప్యూటింగ్‌ను కొన్నిసార్లు ఫంక్షన్‌గా సేవ (FaaS) అని పిలుస్తారు.

చారిత్రాత్మకంగా, AWS లాంబ్డాతో FaaSని అందించిన మొదటి క్లౌడ్ ప్రొవైడర్ అమెజాన్, అందుకే పేరు వచ్చింది. ఇతర క్లౌడ్ సర్వీస్ ప్రొవైడర్లు కూడా ఇలాంటి వాటిని అందిస్తారు:

  • Google నుండి క్లౌడ్ విధులు
  • Microsoft నుండి Azure విధులు

ఈ కంపెనీలన్నీ సర్వర్‌లెస్ కంప్యూటింగ్, ఆటో-స్కేలింగ్‌ను అందిస్తాయి మరియు మీరు నిజంగా ఉపయోగించే వాటికి మాత్రమే చెల్లిస్తాయి, అయితే అవి కస్టమర్‌లను తమ యాజమాన్య ఉత్పత్తిలోకి లాక్ చేస్తాయి. అయితే, సర్వర్‌లెస్ కంప్యూటింగ్ కోసం ఉచిత మరియు ఓపెన్ సోర్స్ ప్రత్యామ్నాయాలు ఉన్నాయి. ఇది గమనించదగినది:

అవన్నీ మేఘాల నుండి పూర్తిగా స్వతంత్రంగా ఉంటాయి, అంటే, అవి మీ స్వంత, పబ్లిక్ లేదా ప్రైవేట్‌తో సహా ఏదైనా క్లౌడ్‌లో ఇన్‌స్టాల్ చేయబడతాయి మరియు ఎక్సోస్కేల్‌లో ఉంటాయి.

Fn ప్రాజెక్ట్ ఎలా పనిచేస్తుంది

Fn పూర్తిగా డాకర్‌పై ఆధారపడింది, రెండు ప్రధాన భాగాలను కలిగి ఉంటుంది:

  • CLI ప్రోగ్రామ్ Fn ఇన్‌ఫ్రాస్ట్రక్చర్ యొక్క అన్ని అంశాలను నిర్వహించడానికి రూపొందించబడింది మరియు Fn సర్వర్‌తో పరస్పర చర్య చేస్తుంది,
  • Fn సర్వర్ అనేది డాకర్ కంటైనర్‌లో ప్యాక్ చేయబడిన సాధారణ అప్లికేషన్.

Fnలో అమలు చేయబడిన విధులు ప్రత్యేక కంటైనర్లలో కూడా అమలు చేయబడతాయి, ఇది చాలా ప్రోగ్రామింగ్ భాషలకు మద్దతు ఇవ్వడానికి మిమ్మల్ని అనుమతిస్తుంది, ఉదాహరణకు... Clojure!

ఫంక్షన్ ఆర్గ్యుమెంట్‌లు స్టాండర్డ్ ఇన్‌పుట్ (STDIN)కి పంపబడతాయి, ఫలితాలు ప్రామాణిక అవుట్‌పుట్ (STDOUT)కి వ్రాయబడతాయి. ఆర్గ్యుమెంట్‌లు లేదా రిటర్న్ విలువలు సాధారణ విలువలు కానట్లయితే (JSON ఆబ్జెక్ట్ వంటివి), ఫంక్షన్ డెవలప్‌మెంట్ కిట్ (FDK) రూపంలో Fn అందించిన అబ్‌స్ట్రాక్షన్ లేయర్‌ని ఉపయోగించి వాటిని మార్చవచ్చు.

సౌలభ్యం కోసం, వివిధ భాషలు మరియు వాటి సంస్కరణల (గో, జావా యొక్క వివిధ వెర్షన్లు, పైథాన్ మొదలైనవి) విస్తృతమైన జాబితాలో FaaS యొక్క విస్తరణను సులభతరం చేయడానికి అంతర్నిర్మిత టెంప్లేట్‌లు అందించబడతాయి.

ఈ రేఖాచిత్రాన్ని అనుసరించడం ద్వారా FaaSని సృష్టించడం సులభం:

  • Fn CLIని ఉపయోగించి ఫంక్షన్‌ని అమలు చేయడం: ఎంచుకున్న టెంప్లేట్ ఆధారంగా Fn కోసం అప్లికేషన్ కాన్ఫిగరేషన్ ఫైల్ సృష్టించబడుతుంది.
  • మేము మళ్ళీ CLI Fnని ఉపయోగించి మా స్వంత ఫంక్షన్‌ను రూపొందించాము: కంటైనర్ చిత్రం ఒక నిర్దిష్ట రిపోజిటరీలో ఉంచబడుతుంది, దాని తర్వాత ఈ చిత్రం యొక్క ఉనికి మరియు స్థానం గురించి సర్వర్‌కు తెలియజేయబడుతుంది.

Fn ఆధారంగా మా స్వంత సర్వర్‌లెస్‌ను రూపొందించడం
Fnకి ఫంక్షన్‌లను అందించే సూత్రం

సర్వర్‌లెస్ ఫంక్షన్‌ల స్థానిక ఇన్‌స్టాలేషన్ మరియు టెస్టింగ్

లోకల్ మెషీన్‌లో Fn ఇన్‌స్టాల్ చేయడం ప్రారంభిద్దాం. ముందుగా, Fn ద్వారా అవసరమైన విధంగా డాకర్ ఇన్‌స్టాల్ చేయబడింది. మేము డెబియన్/ఉబుంటులో ఉన్నామని ఊహిస్తే:

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

లేదా మీ సిస్టమ్ ప్రకారం ప్యాకేజీ మేనేజర్/డాకర్ బిల్డ్‌ని ఉపయోగించండి. అప్పుడు మీరు Fn CLIని ఇన్‌స్టాల్ చేయడానికి నేరుగా వెళ్లవచ్చు. ఉదాహరణకు, కర్ల్ ఉపయోగించి:

$ 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 సర్వర్ డాకర్ కంటైనర్, కాబట్టి, ప్రారంభించిన తర్వాత, అది వెళ్లి డాకర్ రిజిస్ట్రీ నుండి చిత్రాన్ని తీసుకుంటుంది.

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

స్థానిక మెషీన్‌లో ఇప్పటికే చేసిన విధంగానే డాకర్ మరియు ఎఫ్ఎన్ సర్వర్‌ను ఇన్‌స్టాల్ చేయండి, సర్వర్‌ను ప్రారంభించండి:

$ 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 ఫీచర్ డెలివరీ ఎంచుకున్న డాకర్‌హబ్ ఖాతాను ఉపయోగించి డాకర్ చిత్రాలను డౌన్‌లోడ్ చేస్తుంది (నా విషయంలో - 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-ఆధారిత సర్వర్‌లెస్ కంప్యూటింగ్‌లో ఫంక్షన్ లైఫ్‌సైకిల్

మీ స్వంత సామర్థ్యంతో సర్వర్‌లెస్ కంప్యూటింగ్ యొక్క ప్రయోజనాలు

సర్వర్‌లెస్ కంప్యూటింగ్ అనేది మరింత సంక్లిష్టమైన అప్లికేషన్‌లు లేదా మైక్రోసర్వీస్‌లతో పరస్పర చర్య చేసే అప్లికేషన్ యొక్క స్వతంత్ర భాగాలను త్వరగా అమలు చేయడానికి అనుకూలమైన పరిష్కారం.

ఇది తరచుగా ఎంచుకున్న విక్రేతకు లాక్ చేయడానికి దాచిన ఖర్చు కారణంగా ఉంటుంది, ఇది నిర్దిష్ట వినియోగ సందర్భం మరియు వాల్యూమ్‌పై ఆధారపడి, భవిష్యత్తులో అధిక ఖర్చులు మరియు తగ్గిన వశ్యతకు దారితీస్తుంది.

ఈ సందర్భంలో మల్టీ-క్లౌడ్ మరియు హైబ్రిడ్ క్లౌడ్ ఆర్కిటెక్చర్‌లు కూడా బాధపడతాయి, ఎందుకంటే మీరు సర్వర్‌లెస్ కంప్యూటింగ్‌ని ఉపయోగించాలనుకునే పరిస్థితిలో మిమ్మల్ని మీరు సులభంగా కనుగొనవచ్చు, కానీ కార్పొరేట్ విధానాల కారణంగా అది సాధ్యం కాకపోవచ్చు.

Fn ఉపయోగించడానికి చాలా సులభం మరియు తక్కువ ఓవర్‌హెడ్‌తో దాదాపు అదే FaaS ఇంటర్‌ఫేస్‌ను అందించగలదు. ఇది ఏదైనా విక్రేత లాక్-ఇన్‌ను తొలగిస్తుంది మరియు స్థానికంగా లేదా మీకు నచ్చిన ఏదైనా అనుకూలమైన క్లౌడ్ సొల్యూషన్ ప్రొవైడర్‌లో ఇన్‌స్టాల్ చేయవచ్చు. ప్రోగ్రామింగ్ లాంగ్వేజ్ ఎంచుకోవడంలో కూడా స్వేచ్ఛ ఉంది.

ఈ కథనం Fn యొక్క ప్రాథమికాలను మాత్రమే కవర్ చేస్తుంది, కానీ మీ స్వంత రన్‌టైమ్‌ను సృష్టించడం చాలా సులభం, మరియు మొత్తం నిర్మాణాన్ని Fn లోడ్ బ్యాలెన్సర్‌ని ఉపయోగించి లేదా రక్షణ కోసం ప్రాక్సీ వెనుక Fnని ఉంచడం ద్వారా మరింత విస్తృతంగా అమలు చేయవచ్చు.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి