Fn کی بنیاد پر ہمارا اپنا سرور لیس بنانا

Fn کی بنیاد پر ہمارا اپنا سرور لیس بنانا

سرور لیس کمپیوٹنگ کلاؤڈ کمپیوٹنگ میں سب سے نمایاں رجحانات میں سے ایک ہے۔ بنیادی آپریٹنگ اصول یہ ہے کہ بنیادی ڈھانچہ DevOps کی فکر نہیں ہے، بلکہ سروس فراہم کرنے والے کی ہے۔ وسائل کی پیمائش خود بخود لوڈ کے لیے ایڈجسٹ ہو جاتی ہے اور اس میں تبدیلی کی شرح زیادہ ہوتی ہے۔

ایک اور عام خصوصیت کوڈ کو کم سے کم کرنے اور فوکس کرنے کا رجحان ہے، یہی وجہ ہے کہ سرور لیس کمپیوٹنگ کو بعض اوقات فنکشن بطور سروس (FaaS) کہا جاتا ہے۔

تاریخی طور پر، AWS Lambda کے ساتھ FaaS کی پیشکش کرنے والا پہلا کلاؤڈ فراہم کنندہ Amazon تھا، اس لیے یہ نام رکھا گیا۔ دوسرے کلاؤڈ سروس فراہم کرنے والے بھی اسی طرح کی پیشکش کرتے ہیں:

  • گوگل سے کلاؤڈ فنکشنز
  • مائیکروسافٹ سے Azure افعال

یہ تمام کمپنیاں سرور لیس کمپیوٹنگ، آٹو اسکیلنگ فراہم کرتی ہیں، اور صرف وہی ادائیگی کرتی ہیں جو آپ اصل میں استعمال کرتے ہیں، لیکن وہ صارفین کو ان کی ملکیتی مصنوعات میں بند کر دیتے ہیں۔ تاہم، سرور لیس کمپیوٹنگ کے لیے مفت اور اوپن سورس متبادل موجود ہیں۔ قابل توجہ ہے:

  • پلیٹ فارم اپاچی اوپن وِسکIBM کی طرف سے ایک انکیوبیٹر میں تیار کیا گیا،
  • موسم بہار کے کلاؤڈ کے افعال، کافی حد تک بھرپور اسپرنگ فریم ورک ماحولیاتی نظام کے حصے کے طور پر، جسے AWS Lambda، Azure Functions اور OpenWhisk کے لیے ایک اگواڑے کے طور پر بھی استعمال کیا جا سکتا ہے،
  • پروجیکٹ ایف این، اوریکل کے ذریعہ تعاون یافتہ۔

یہ سب بادلوں سے مکمل طور پر آزاد ہیں، یعنی وہ کسی بھی کلاؤڈ میں انسٹال ہو سکتے ہیں، بشمول آپ کے اپنے، پبلک یا پرائیویٹ، اور یقیناً Exoscale میں۔

Fn پروجیکٹ کیسے کام کرتا ہے۔

Fn مکمل طور پر Docker پر مبنی ہے، دو اہم اجزاء پر مشتمل ہے:

  • CLI پروگرام Fn انفراسٹرکچر کے تمام پہلوؤں کو منظم کرنے کے لیے ڈیزائن کیا گیا ہے، اور Fn سرور کے ساتھ تعامل کرتا ہے،
  • Fn سرور بذات خود ایک باقاعدہ ایپلیکیشن ہے جسے ڈوکر کنٹینر میں پیک کیا جاتا ہے۔

Fn میں تعینات فنکشنز بھی علیحدہ کنٹینرز میں انجام پاتے ہیں، جو آپ کو بہت سی پروگرامنگ زبانوں کو سپورٹ کرنے کی اجازت دیتا ہے، مثال کے طور پر... Clojure!

فنکشن آرگومنٹس کو معیاری ان پٹ (STDIN) میں منتقل کیا جاتا ہے، نتائج معیاری آؤٹ پٹ (STDOUT) پر لکھے جاتے ہیں۔ اگر دلائل یا واپسی کی قدریں سادہ اقدار نہیں ہیں (جیسے JSON آبجیکٹ)، تو انہیں فنکشن ڈیولپمنٹ کٹ (FDK) کی شکل میں خود Fn کی طرف سے فراہم کردہ تجریدی پرت کا استعمال کرتے ہوئے تبدیل کیا جا سکتا ہے۔

سہولت کے لیے، ٹیمپلیٹس کے بلٹ ان سیٹ پیش کیے جاتے ہیں تاکہ مختلف زبانوں اور ان کے ورژنز (گو، جاوا کے مختلف ورژن، ازگر وغیرہ) کی ایک وسیع فہرست میں FaaS کی تعیناتی کو آسان بنایا جا سکے۔

اس خاکہ پر عمل کرکے FaaS بنانا آسان ہے:

  • Fn CLI کا استعمال کرتے ہوئے فنکشن کی تعیناتی: Fn کے لیے ایک ایپلیکیشن کنفیگریشن فائل منتخب ٹیمپلیٹ کی بنیاد پر بنائی جاتی ہے۔
  • ہم دوبارہ CLI Fn کا استعمال کرتے ہوئے اپنے فنکشن کو رول آؤٹ کرتے ہیں: کنٹینر کی تصویر کو ایک مخصوص ریپوزٹری میں رکھا جاتا ہے، جس کے بعد سرور کو اس تصویر کے وجود اور جگہ کے بارے میں مطلع کیا جاتا ہے۔

Fn کی بنیاد پر ہمارا اپنا سرور لیس بنانا
Fn کو افعال کی فراہمی کا اصول

مقامی تنصیب اور سرور لیس افعال کی جانچ

آئیے مقامی مشین پر Fn انسٹال کرنا شروع کریں۔ سب سے پہلے، Docker Fn کی ضرورت کے مطابق انسٹال ہوتا ہے۔ فرض کریں کہ ہم 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

اگر آپ ہومبریو انسٹال کے ساتھ 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 کنٹینر ہے، لہذا، شروع ہونے کے بعد، یہ 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، لیکن مکمل طور پر نہیں۔ 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 سرور اور 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 اکاؤنٹ کا استعمال کرتے ہوئے 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 پر مبنی سرور لیس کمپیوٹنگ میں فنکشن لائف سائیکل

آپ کی اپنی صلاحیت پر سرور لیس کمپیوٹنگ کے فوائد

سرور لیس کمپیوٹنگ کسی ایپلی کیشن کے آزاد حصوں کو تیزی سے نافذ کرنے کے لیے ایک آسان حل ہے جو زیادہ پیچیدہ ایپلی کیشنز یا مائیکرو سروسز کے ساتھ تعامل کرتے ہیں۔

یہ اکثر منتخب وینڈر کو لاک ان کرنے کی پوشیدہ لاگت کی وجہ سے ہوتا ہے، جو کہ استعمال کے مخصوص کیس اور حجم پر منحصر ہے، مستقبل میں زیادہ لاگت اور لچک کو کم کر سکتا ہے۔

اس معاملے میں ملٹی کلاؤڈ اور ہائبرڈ کلاؤڈ آرکیٹیکچرز بھی متاثر ہوتے ہیں، کیونکہ آپ آسانی سے اپنے آپ کو ایسی صورت حال میں پا سکتے ہیں جہاں آپ سرور لیس کمپیوٹنگ استعمال کرنا چاہیں گے، لیکن کارپوریٹ پالیسیوں کی وجہ سے یہ ممکن نہیں ہو سکتا۔

Fn استعمال کرنے میں کافی آسان ہے اور تھوڑا سا اوور ہیڈ کے ساتھ تقریباً ایک جیسا ہی FaaS انٹرفیس فراہم کر سکتا ہے۔ یہ کسی بھی وینڈر لاک ان کو ختم کرتا ہے اور اسے مقامی طور پر یا آپ کی پسند کے کسی بھی آسان کلاؤڈ حل فراہم کنندہ میں انسٹال کیا جا سکتا ہے۔ پروگرامنگ زبان کے انتخاب میں بھی آزادی ہے۔

یہ مضمون صرف Fn کی بنیادی باتوں کا احاطہ کرتا ہے، لیکن آپ کا اپنا رن ٹائم بنانا کافی آسان ہے، اور مجموعی فن تعمیر کو Fn لوڈ بیلنسر کا استعمال کرتے ہوئے، یا Fn کو تحفظ کے لیے پراکسی کے پیچھے رکھ کر زیادہ وسیع پیمانے پر تعینات کیا جا سکتا ہے۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں