Fn جي بنياد تي اسان جي پنهنجي سرور جي بغير تعمير ڪريو

Fn جي بنياد تي اسان جي پنهنجي سرور جي بغير تعمير ڪريو

بي سرور ڪمپيوٽنگ ڪلائوڊ ڪمپيوٽنگ ۾ سڀ کان وڌيڪ نمايان رجحانات مان هڪ آهي. بنيادي آپريٽنگ اصول اهو آهي ته انفراسٽرڪچر DevOps جي ڳڻتي ناهي، پر خدمت فراهم ڪندڙ جي. وسيلن جي اسڪيلنگ خودڪار طريقي سان لوڊ ڪرڻ لاء ترتيب ڏئي ٿي ۽ تبديلي جي اعلي شرح آھي.

هڪ ٻي عام خصوصيت آهي گھٽ ۾ گھٽ ڪرڻ ۽ فوڪس ڪوڊ ڪرڻ جو رجحان، اهو ئي سبب آهي ته سرور کان سواءِ ڪمپيوٽنگ کي ڪڏهن ڪڏهن فنڪشن سڏيو ويندو آهي خدمت (FaaS).

تاريخي طور تي، AWS Lambda سان FaaS کي پيش ڪرڻ لاء پهريون ڪڪر فراهم ڪندڙ Amazon هو، تنهنڪري نالو. ٻيا بادل سروس فراهم ڪندڙ پڻ پيش ڪن ٿا ساڳيون شيون:

  • گوگل کان ڪلائوڊ فنڪشن
  • Microsoft کان Azure فنڪشن

اهي سڀئي ڪمپنيون مهيا ڪن ٿيون سرور بي ترتيب ڪمپيوٽنگ، آٽو اسڪيلنگ، ۽ صرف ان لاءِ ادا ڪريو جيڪي توهان اصل ۾ استعمال ڪندا آهيو، پر اهي گراهڪن کي انهن جي ملڪيت جي پيداوار ۾ بند ڪن ٿيون. تنهن هوندي، سرور کان سواء ڪمپيوٽنگ لاء مفت ۽ اوپن سورس متبادل آهن. اهو قابل ذڪر آهي:

  • پليٽ فارم Apache OpenWhiskIBM پاران هڪ انڪيوبيٽر ۾ ترقي ڪئي وئي،
  • اسپرنگ ڪلائوڊ افعال, هڪ ڪافي امير اسپرنگ فريم ورڪ ايڪو سسٽم جي حصي جي طور تي، جنهن کي AWS Lambda، Azure Functions ۽ OpenWhisk لاءِ به استعمال ڪري سگهجي ٿو،
  • پروجيڪٽ Fn، Oracle جي حمايت ڪئي.

اهي سڀئي بادلن کان مڪمل طور تي آزاد آهن، اهو آهي، اهي ڪنهن به بادل ۾ نصب ٿي سگهن ٿا، بشمول توهان جي پنهنجي، عوامي يا نجي، ۽ يقينا Exoscale ۾.

Fn پروجيڪٽ ڪيئن ڪم ڪري ٿو

Fn مڪمل طور تي Docker تي ٻڌل آهي، ٻن مکيه حصن تي مشتمل آهي:

  • CLI پروگرام Fn انفراسٽرڪچر جي سڀني پهلوئن کي منظم ڪرڻ لاءِ ٺهيل آهي، ۽ Fn سرور سان رابطو ڪري ٿو،
  • Fn سرور پاڻ هڪ باقاعده ايپليڪيشن آهي جيڪو ڊاکر ڪنٽينر ۾ پيڪيج ٿيل آهي.

Fn ۾ مقرر ڪيل فنڪشن پڻ الڳ ڪنٽينرز ۾ جاري ڪيا ويا آهن، جيڪي توهان کي ڪيترن ئي پروگرامنگ ٻولين کي سپورٽ ڪرڻ جي اجازت ڏين ٿا، مثال طور... Clojure!

فنڪشنل دليلن کي معياري ان پٽ (STDIN) ڏانهن منتقل ڪيو ويو آهي، نتيجا معياري آئوٽ (STDOUT) ڏانهن لکيل آهن. جيڪڏهن دليل يا واپسي جا قدر سادو قدر نه هوندا آهن (جهڙوڪ JSON اعتراض)، انهن کي تبديل ڪري سگهجي ٿو هڪ تجزياتي پرت استعمال ڪندي جيڪو Fn پاران مهيا ڪيل آهي هڪ فنڪشن ڊولپمينٽ کٽ (FDK) جي صورت ۾.

سهولت لاءِ، ٽيمپليٽس جا بلٽ ان سيٽ پيش ڪيا ويا آهن ته جيئن مختلف ٻولين جي وسيع فهرست ۽ انهن جي ورزن (Go، جاوا جا مختلف ورجن، پٿون وغيره) ۾ FaaS جي ترتيب کي آسان بڻائي سگهجي.

هڪ FaaS ٺاهڻ آسان آهي هن آريگرام تي عمل ڪندي:

  • Fn CLI استعمال ڪندي فنڪشن کي ترتيب ڏيڻ: Fn لاءِ ايپليڪيشن ڪنفيگريشن فائل ٺاهي وئي آهي چونڊيل ٽيمپليٽ جي بنياد تي.
  • اسان پنهنجي فنڪشن کي رول آئوٽ ڪريون ٿا، ٻيهر استعمال ڪندي CLI Fn: ڪنٽينر جي تصوير هڪ مخصوص مخزن ۾ رکيل آهي، جنهن کان پوءِ سرور کي هن تصوير جي موجودگي ۽ جڳهه جي اطلاع ڏني ويندي آهي.

Fn جي بنياد تي اسان جي پنهنجي سرور جي بغير تعمير ڪريو
Fn کي افعال پهچائڻ جو اصول

مقامي تنصيب ۽ سرور جي ڪم جي جاچ

اچو ته مقامي مشين تي Fn انسٽال ڪرڻ شروع ڪريون. پهريون، Docker انسٽال ٿيل آهي، جيئن Fn طرفان گهربل هجي. فرض ڪيو ته اسان ڊيبين / 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

جيڪڏهن توهان او ايس ايڪس تي آهيو هومبرو انسٽال ٿيل، توهان ٻئي طريقي سان وڃي سگهو ٿا:

$ 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 ڪنٽينر آهي، تنهن ڪري، شروع ٿيڻ کان پوء، اهو ٿيندو ۽ تصوير کي 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

جئين توهان ڪمانڊ آئوٽ مان ڏسي سگهو ٿا، هڪ نئين ڊاکر ڪنٽينر تصوير ٺاهي وئي آهي جنهن ۾ اسان جي فنڪشن شامل آهي. فنڪشن سڏڻ لاءِ تيار آهي، ۽ اسان وٽ ان لاءِ ٻه طريقا آهن:

  • 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، پر مڪمل طور تي نه. ايڇ ٽي ٽي پي ذريعي، هڪ فنڪشن کي سڌو نه سڏيو ويندو آهي، پر هڪ نام نهاد ٽرگر ذريعي، جيڪو، ان جي نالي جي مطابق، "شروع ٿئي ٿو" فنڪشن ڪال. محرڪن ۾ وضاحت ڪئي وئي آهي `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 سرور ۽ Docker رجسٽري جي جڳھ جي وضاحت ڪرڻ جي ضرورت آهي. انهن اختيارن کي ماحولياتي متغير ذريعي مقرر ڪري سگهجي ٿو 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 اڪائونٽ استعمال ڪندي (منهنجي صورت ۾ - 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 ڪمپيوٽنگ ۾ فنڪشن لائف سائيڪل

توهان جي پنهنجي ظرفيت تي بي سرور ڪمپيوٽنگ جا فائدا

بي سرور ڪمپيوٽنگ هڪ ايپليڪيشن جي آزاد حصن کي جلدي لاڳو ڪرڻ لاءِ هڪ آسان حل آهي جيڪو وڌيڪ پيچيده ايپليڪيشنن يا مائڪرو سروسز سان لهه وچڙ ۾ اچي ٿو.

اهو اڪثر ڪري چونڊيل وينڊر کي لاڪ ڪرڻ جي پوشیدہ قيمت جي ڪري هوندو آهي، جيڪو، مخصوص استعمال جي صورت ۽ حجم تي منحصر ڪري ٿو، مستقبل ۾ اعلي قيمتون ۽ گهٽ لچڪدار ٿي سگهي ٿو.

ملٽي ڪلائوڊ ۽ هائبرڊ ڪلائوڊ آرڪيٽيڪچرز به ان صورت ۾ متاثر ٿين ٿا، ڇو ته توهان آساني سان پاڻ کي اهڙي صورتحال ۾ ڳولي سگهو ٿا جتي توهان سرور کان سواءِ ڪمپيوٽنگ استعمال ڪرڻ چاهيندا، پر ڪارپوريٽ پاليسين جي ڪري اهو ممڪن نه ٿي سگهي.

Fn استعمال ڪرڻ بلڪل آسان آهي ۽ تقريباً ساڳيو FaaS انٽرفيس مهيا ڪري سگهي ٿو، ٿوري مٿي سان. اهو ڪنهن به وينڊر لاڪ ان کي ختم ڪري ٿو ۽ مقامي طور تي يا توهان جي پسند جي ڪنهن به آسان ڪلائوڊ حل فراهم ڪندڙ ۾ انسٽال ڪري سگهجي ٿو. پروگرامنگ ٻولي چونڊڻ ۾ پڻ آزادي آهي.

هي آرٽيڪل صرف Fn جي بنيادي ڳالهين کي ڍڪي ٿو، پر توهان جو پنهنجو رن ٽائم ٺاهڻ بلڪل سادو آهي، ۽ مجموعي فن تعمير کي وڌيڪ وسيع طور تي استعمال ڪري سگهجي ٿو Fn لوڊ بيلنس استعمال ڪندي، يا Fn کي حفاظت لاءِ پراکسي جي پويان رکڻ سان.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو