Fn جي بنياد تي اسان جي پنهنجي سرور جي بغير تعمير ڪريو
بي سرور ڪمپيوٽنگ ڪلائوڊ ڪمپيوٽنگ ۾ سڀ کان وڌيڪ نمايان رجحانات مان هڪ آهي. بنيادي آپريٽنگ اصول اهو آهي ته انفراسٽرڪچر DevOps جي ڳڻتي ناهي، پر خدمت فراهم ڪندڙ جي. وسيلن جي اسڪيلنگ خودڪار طريقي سان لوڊ ڪرڻ لاء ترتيب ڏئي ٿي ۽ تبديلي جي اعلي شرح آھي.
هڪ ٻي عام خصوصيت آهي گھٽ ۾ گھٽ ڪرڻ ۽ فوڪس ڪوڊ ڪرڻ جو رجحان، اهو ئي سبب آهي ته سرور کان سواءِ ڪمپيوٽنگ کي ڪڏهن ڪڏهن فنڪشن سڏيو ويندو آهي خدمت (FaaS).
تاريخي طور تي، AWS Lambda سان FaaS کي پيش ڪرڻ لاء پهريون ڪڪر فراهم ڪندڙ Amazon هو، تنهنڪري نالو. ٻيا بادل سروس فراهم ڪندڙ پڻ پيش ڪن ٿا ساڳيون شيون:
گوگل کان ڪلائوڊ فنڪشن
Microsoft کان Azure فنڪشن
اهي سڀئي ڪمپنيون مهيا ڪن ٿيون سرور بي ترتيب ڪمپيوٽنگ، آٽو اسڪيلنگ، ۽ صرف ان لاءِ ادا ڪريو جيڪي توهان اصل ۾ استعمال ڪندا آهيو، پر اهي گراهڪن کي انهن جي ملڪيت جي پيداوار ۾ بند ڪن ٿيون. تنهن هوندي، سرور کان سواء ڪمپيوٽنگ لاء مفت ۽ اوپن سورس متبادل آهن. اهو قابل ذڪر آهي:
اسپرنگ ڪلائوڊ افعال, هڪ ڪافي امير اسپرنگ فريم ورڪ ايڪو سسٽم جي حصي جي طور تي، جنهن کي AWS Lambda، Azure Functions ۽ OpenWhisk لاءِ به استعمال ڪري سگهجي ٿو،
Fn ۾ مقرر ڪيل فنڪشن پڻ الڳ ڪنٽينرز ۾ جاري ڪيا ويا آهن، جيڪي توهان کي ڪيترن ئي پروگرامنگ ٻولين کي سپورٽ ڪرڻ جي اجازت ڏين ٿا، مثال طور... Clojure!
فنڪشنل دليلن کي معياري ان پٽ (STDIN) ڏانهن منتقل ڪيو ويو آهي، نتيجا معياري آئوٽ (STDOUT) ڏانهن لکيل آهن. جيڪڏهن دليل يا واپسي جا قدر سادو قدر نه هوندا آهن (جهڙوڪ JSON اعتراض)، انهن کي تبديل ڪري سگهجي ٿو هڪ تجزياتي پرت استعمال ڪندي جيڪو Fn پاران مهيا ڪيل آهي هڪ فنڪشن ڊولپمينٽ کٽ (FDK) جي صورت ۾.
سهولت لاءِ، ٽيمپليٽس جا بلٽ ان سيٽ پيش ڪيا ويا آهن ته جيئن مختلف ٻولين جي وسيع فهرست ۽ انهن جي ورزن (Go، جاوا جا مختلف ورجن، پٿون وغيره) ۾ FaaS جي ترتيب کي آسان بڻائي سگهجي.
هڪ FaaS ٺاهڻ آسان آهي هن آريگرام تي عمل ڪندي:
Fn CLI استعمال ڪندي فنڪشن کي ترتيب ڏيڻ: Fn لاءِ ايپليڪيشن ڪنفيگريشن فائل ٺاهي وئي آهي چونڊيل ٽيمپليٽ جي بنياد تي.
اسان پنهنجي فنڪشن کي رول آئوٽ ڪريون ٿا، ٻيهر استعمال ڪندي CLI Fn: ڪنٽينر جي تصوير هڪ مخصوص مخزن ۾ رکيل آهي، جنهن کان پوءِ سرور کي هن تصوير جي موجودگي ۽ جڳهه جي اطلاع ڏني ويندي آهي.
Fn کي افعال پهچائڻ جو اصول
مقامي تنصيب ۽ سرور جي ڪم جي جاچ
اچو ته مقامي مشين تي Fn انسٽال ڪرڻ شروع ڪريون. پهريون، Docker انسٽال ٿيل آهي، جيئن Fn طرفان گهربل هجي. فرض ڪيو ته اسان ڊيبين / Ubuntu تي آهيون:
اسان ھاڻي شروعاتي طور تي 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
$ 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 سرور پورٽ 8080 تي ان جي افعال کي ظاهر ڪري ٿو ۽ فنڪشن URL نموني سان ملندو آهي t/app/function، پر مڪمل طور تي نه. ايڇ ٽي ٽي پي ذريعي، هڪ فنڪشن کي سڌو نه سڏيو ويندو آهي، پر هڪ نام نهاد ٽرگر ذريعي، جيڪو، ان جي نالي جي مطابق، "شروع ٿئي ٿو" فنڪشن ڪال. محرڪن ۾ وضاحت ڪئي وئي آهي `func.yml پروجيڪٽ:
$ 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 سرور ساڳيءَ طرح جيئن اڳ ۾ ئي مقامي مشين تي ڪيو ويو ھو، سرور شروع ڪريو:
Fn فنڪشن حاصل ڪرڻ لاء تيار آهي! ريموٽ سرور ڏانهن افعال جي ٽارگيٽيڊ منتقلي لاءِ، اسان ڪمانڊ استعمال ڪنداسين deploy مقامي ڪمپيوٽر مان پرچم کي ختم ڪندي --local.
اضافي طور تي، Fn توهان کي Fn سرور ۽ Docker رجسٽري جي جڳھ جي وضاحت ڪرڻ جي ضرورت آهي. انهن اختيارن کي ماحولياتي متغير ذريعي مقرر ڪري سگهجي ٿو FN_API_URL и FN_REGISTRY ترتيب سان، پر هڪ وڌيڪ آسان طريقو پڻ پيش ڪري ٿو آساني سان ترتيب ڏيڻ ۽ ترتيب ڏيڻ جي ترتيب کي منظم ڪرڻ لاءِ.
Fn جي اصطلاحن ۾، ترتيب ڏيڻ جي ترتيب کي سڏيو ويندو آهي context. هيٺ ڏنل حڪم ان حوالي سان ٺاهيندو:
$ 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 .
توهان جي پنهنجي ظرفيت تي بي سرور ڪمپيوٽنگ جا فائدا
بي سرور ڪمپيوٽنگ هڪ ايپليڪيشن جي آزاد حصن کي جلدي لاڳو ڪرڻ لاءِ هڪ آسان حل آهي جيڪو وڌيڪ پيچيده ايپليڪيشنن يا مائڪرو سروسز سان لهه وچڙ ۾ اچي ٿو.
اهو اڪثر ڪري چونڊيل وينڊر کي لاڪ ڪرڻ جي پوشیدہ قيمت جي ڪري هوندو آهي، جيڪو، مخصوص استعمال جي صورت ۽ حجم تي منحصر ڪري ٿو، مستقبل ۾ اعلي قيمتون ۽ گهٽ لچڪدار ٿي سگهي ٿو.
ملٽي ڪلائوڊ ۽ هائبرڊ ڪلائوڊ آرڪيٽيڪچرز به ان صورت ۾ متاثر ٿين ٿا، ڇو ته توهان آساني سان پاڻ کي اهڙي صورتحال ۾ ڳولي سگهو ٿا جتي توهان سرور کان سواءِ ڪمپيوٽنگ استعمال ڪرڻ چاهيندا، پر ڪارپوريٽ پاليسين جي ڪري اهو ممڪن نه ٿي سگهي.
Fn استعمال ڪرڻ بلڪل آسان آهي ۽ تقريباً ساڳيو FaaS انٽرفيس مهيا ڪري سگهي ٿو، ٿوري مٿي سان. اهو ڪنهن به وينڊر لاڪ ان کي ختم ڪري ٿو ۽ مقامي طور تي يا توهان جي پسند جي ڪنهن به آسان ڪلائوڊ حل فراهم ڪندڙ ۾ انسٽال ڪري سگهجي ٿو. پروگرامنگ ٻولي چونڊڻ ۾ پڻ آزادي آهي.
هي آرٽيڪل صرف Fn جي بنيادي ڳالهين کي ڍڪي ٿو، پر توهان جو پنهنجو رن ٽائم ٺاهڻ بلڪل سادو آهي، ۽ مجموعي فن تعمير کي وڌيڪ وسيع طور تي استعمال ڪري سگهجي ٿو Fn لوڊ بيلنس استعمال ڪندي، يا Fn کي حفاظت لاءِ پراکسي جي پويان رکڻ سان.