واقعن تي مبني فن تعمير استعمال ٿيل وسيلن جي قيمت جي ڪارڪردگي کي وڌائي ٿو ڇاڪاڻ ته اهي صرف ان وقت استعمال ڪيا ويندا آهن جڏهن انهن جي ضرورت هجي. هتي ڪيترائي آپشن آهن ته ڪيئن هن کي لاڳو ڪجي ۽ ڪم ڪندڙ ايپليڪيشنن جي طور تي اضافي بادل ادارن کي نه ٺاهيو وڃي. ۽ اڄ مان FaaS بابت نه، پر ويب هڪس بابت ڳالهائيندس. مان ڏيکاريندس هڪ سبق آموز مثال ايونٽس کي سنڀالڻ جو استعمال ڪندي آبجیکٹ اسٽوريج ويب هوڪس.
اعتراض جي اسٽوريج ۽ ويب هڪس بابت ڪجھ لفظ. آبجیکٹ اسٽوريج توهان کي ڪلائوڊ ۾ ڪنهن به ڊيٽا کي ذخيرو ڪرڻ جي اجازت ڏئي ٿو شيون جي صورت ۾، رسائي جي ذريعي S3 يا ٻي API (انحصار تي عملدرآمد) ذريعي HTTP/HTTPS ذريعي. Webhooks عام طور تي ڪسٽم HTTP ڪال بيڪس آهن. اهي عام طور تي هڪ واقعي جي ذريعي شروع ڪيا ويا آهن، جهڙوڪ ڪوڊ هڪ مخزن ڏانهن ڌڪيو پيو وڃي يا هڪ تبصرو بلاگ تي پوسٽ ڪيو پيو وڃي. جڏهن ڪو واقعو ٿئي ٿو، اصل سائيٽ ويب هِڪ لاءِ مخصوص ڪيل URL ڏانهن HTTP درخواست موڪلي ٿي. نتيجي طور، توهان هڪ سائيٽ تي واقعا ٺاهي سگهو ٿا ٻئي تي ڪارناما شروع ڪري ٿو (رڪن). ان صورت ۾ جتي ماخذ سائيٽ هڪ اعتراض اسٽوريج آهي، واقعا ان جي مواد ۾ تبديلين جي طور تي ڪم ڪن ٿا.
سادي ڪيسن جا مثال جڏهن اهڙي خودڪار طريقي سان استعمال ڪري سگهجي ٿي:
ٻئي ڪلائوڊ اسٽوريج ۾ سڀني شين جون ڪاپيون ٺاهڻ. جڏهن به فائلون شامل ڪيون وڃن يا تبديل ڪيون وڃن ته ڪاپيون اڏام تي پيدا ٿيڻ گهرجن.
گرافڪ فائلن جي تمبنيلز جي هڪ سيريز جي خودڪار تخليق، فوٽوز ۾ واٽر مارڪ شامل ڪرڻ، ۽ ٻيون تصويري تبديليون.
نون دستاويزن جي آمد بابت نوٽيفڪيشن (مثال طور، ورهايل اڪائونٽنگ سروس ڪلائوڊ تي رپورٽون اپلوڊ ڪري ٿي، ۽ مالي نگراني نون رپورٽن بابت نوٽيفڪيشن حاصل ڪري ٿي، انهن کي چيڪ ۽ تجزيو ڪري ٿو).
ٿورڙي وڌيڪ پيچيده ڪيس شامل آهن، مثال طور، Kubernetes ڏانهن هڪ درخواست پيدا ڪرڻ، جيڪو ضروري ڪنٽينرز سان هڪ پوڊ ٺاهي ٿو، ٽاسڪ پيرا ميٽرز کي پاس ڪري ٿو، ۽ پروسيسنگ کان پوء ڪنٽينر کي ختم ڪري ٿو.
مثال طور، اسين ٽاسڪ 1 جو هڪ قسم ٺاهينداسين، جڏهن Mail.ru Cloud Solutions (MCS) آبجیکٹ اسٽوريج بڪيٽ ۾ تبديليون AWS آبجیکٹ اسٽوريج ۾ ويب هِڪ استعمال ڪندي هم وقت ڪيون وينديون آهن. حقيقي لوڊ ٿيل صورت ۾، هڪ قطار ۾ ويب هڪس کي رجسٽر ڪندي غير مطابقت وارو ڪم مهيا ڪيو وڃي، پر تربيتي ڪم لاءِ اسان ان جي بغير عمل درآمد ڪنداسين.
ڪم جو منصوبو
رابطي جي پروٽوڪول ۾ تفصيل سان بيان ڪيو ويو آهي MCS تي S3 ويب هِڪ لاءِ گائيڊ. ڪم جي منصوبي هيٺ ڏنل عناصر تي مشتمل آهي:
اشاعت جي خدمت، جيڪو S3 اسٽوريج پاسي تي آهي ۽ HTTP درخواستن کي شايع ڪري ٿو جڏهن webnhook کي شروع ڪيو ويندو آهي.
Webhook وصول ڪندڙ سرور، جيڪو HTTP پبلشنگ سروس کان درخواستون ٻڌي ٿو ۽ مناسب ڪارناما انجام ڏئي ٿو. سرور ڪنهن به ٻولي ۾ لکي سگهجي ٿو؛ اسان جي مثال ۾، اسين سرور کي گو ۾ لکنداسين.
S3 API ۾ ويب هِڪ لاڳو ڪرڻ جي هڪ خاص خصوصيت پبلشنگ سروس تي ويب هِڪ وصول ڪندڙ سرور جي رجسٽريشن آهي. خاص طور تي، ويب هِڪ وصول ڪندڙ سرور کي پبلشنگ سروس مان پيغامن جي سبسڪرپشن جي تصديق ڪرڻ گهرجي (ٻين ويب هِڪ لاڳو ڪرڻ ۾، رڪنيت جي تصديق عام طور تي گهربل ناهي).
انهي جي مطابق، ويب هڪ وصول ڪندڙ سرور کي ٻن مکيه عملن جي حمايت ڪرڻ گهرجي:
پبلشنگ سروس جي درخواست جو جواب ڏيو رجسٽريشن جي تصديق ڪرڻ لاءِ،
ايندڙ واقعن تي عمل ڪريو.
انسٽال ڪرڻ هڪ ويب هک وصول ڪندڙ سرور
ويب هِڪ وصول ڪندڙ سرور کي هلائڻ لاءِ، توهان کي لينڪس سرور جي ضرورت آهي. هن آرٽيڪل ۾، مثال طور، اسان هڪ مجازي مثال استعمال ڪندا آهيون جيڪو اسان MCS تي ترتيب ڏيون ٿا.
ubuntu@ubuntu-basic-1-2-10gb:~$ sudo apt-get install git
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
bc dns-root-data dnsmasq-base ebtables landscape-common liblxc-common
liblxc1 libuv1 lxcfs lxd lxd-client python3-attr python3-automat
python3-click python3-constantly python3-hyperlink
python3-incremental python3-pam python3-pyasn1-modules
python3-service-identity python3-twisted python3-twisted-bin
python3-zope.interface uidmap xdelta3
Use 'sudo apt autoremove' to remove them.
Suggested packages:
git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui
gitk gitweb git-cvs git-mediawiki git-svn
The following NEW packages will be installed:
git
0 upgraded, 1 newly installed, 0 to remove and 46 not upgraded.
Need to get 3915 kB of archives.
After this operation, 32.3 MB of additional disk space will be used.
Get:1 http://MS1.clouds.archive.ubuntu.com/ubuntu bionic-updates/main
amd64 git amd64 1:2.17.1-1ubuntu0.7 [3915 kB]
Fetched 3915 kB in 1s (5639 kB/s)
Selecting previously unselected package git.
(Reading database ... 53932 files and directories currently installed.)
Preparing to unpack .../git_1%3a2.17.1-1ubuntu0.7_amd64.deb ...
Unpacking git (1:2.17.1-1ubuntu0.7) ...
Setting up git (1:2.17.1-1ubuntu0.7) ...
ان بالٽ ڏانھن وڃو جنھن لاءِ اسان ويب ھوڪ ترتيب ڏينداسين ۽ گيئر تي ڪلڪ ڪريو:
ويب هوڪس ٽيب ڏانھن وڃو ۽ شامل ڪريو تي ڪلڪ ڪريو:
فيلڊ ۾ ڀريو:
ID - ويب جو نالو.
واقعو - جيڪي واقعا منتقل ڪرڻ لاء. اسان سڀني واقعن جي ٽرانسميشن کي مقرر ڪيو آهي جيڪي واقع ٿين ٿيون جڏهن فائلن سان ڪم ڪندي (شامل ڪرڻ ۽ حذف ڪرڻ).
URL - ويب ھوڪ سرور ايڊريس وصول ڪري ٿو.
Filter prefix/ suffix هڪ فلٽر آهي جيڪو توهان کي صرف انهن شين لاءِ ويب هوڪ ٺاهڻ جي اجازت ڏئي ٿو جن جا نالا ڪجهه ضابطن سان ملن ٿا. مثال طور، ويب هِڪ لاءِ صرف فائلن کي ٽرگر ڪرڻ لاءِ .png ايڪسٽينشن سان، ۾ فلٽر لافڪس توهان کي "png" لکڻ جي ضرورت آهي.
في الحال، صرف بندرگاهن 80 ۽ 443 ويب هک حاصل ڪرڻ واري سرور تائين رسائي حاصل ڪرڻ لاءِ سپورٽ آهن.
Ping() - ھڪڙو رستو جيڪو URL/ping ذريعي جواب ڏئي ٿو، ھڪڙي زندگي جي تحقيقات جو آسان ترين عمل.
Webhook() - مکيه رستو، URL/webhook handler:
پبلشنگ سروس تي رجسٽريشن جي تصديق ڪري ٿي (سبسڪرپشن جي تصديق واري فنڪشن ڏانهن وڃو)،
پروسيسنگ انڪمنگ ويب هِڪ (گوريڪرڊس فنڪشن).
فنڪشن HmacSha256 ۽ HmacSha256hex آهن HMAC-SHA256 ۽ HMAC-SHA256 انڪرپشن الگورٿمز جا عمل درآمد سان گڏ هيڪساڊيڪل نمبرن جي اسٽرنگ جي طور تي دستخط جي حساب سان.
main مکيه فنڪشن آهي، ڪمانڊ لائن پيٽرولر کي پروسيس ڪري ٿو ۽ URL هينڊلر رجسٽر ڪري ٿو.
سرور طرفان قبول ڪيل ڪمانڊ لائن پيٽرولر:
-port اهو بندرگاهه آهي جنهن تي سرور ٻڌندو.
-address - IP پتو جيڪو سرور ٻڌندو.
اسڪرپٽ هڪ خارجي پروگرام آهي جنهن کي هر ايندڙ ٿلهو لاء سڏيو ويندو آهي.
اچو ته ڪجهه ڪمن تي هڪ ويجهي نظر رکون:
//Webhook
func Webhook(w http.ResponseWriter, req *http.Request) {
// Read body
body, err := ioutil.ReadAll(req.Body)
defer req.Body.Close()
if err != nil {
http.Error(w, err.Error(), 500)
return
}
// log request
log.Printf("[%s] incoming HTTP request from %sn", req.Method, req.RemoteAddr)
// check if we got subscription confirmation request
if strings.Contains(string(body),
""Type":"SubscriptionConfirmation"") {
SubscriptionConfirmation(w, req, body)
} else {
GotRecords(w, req, body)
}
}
هي فنڪشن اهو طئي ڪري ٿو ته ڇا رجسٽريشن جي تصديق ڪرڻ جي درخواست يا ويب هڪ اچي چڪو آهي. جيئن هيٺ ڏنل کان دستاويز، جيڪڏهن رجسٽريشن جي تصديق ڪئي وئي آهي، هيٺ ڏنل Json جوڙجڪ پوسٽ جي درخواست ۾ ملي ٿي:
POST http://test.com HTTP/1.1
x-amz-sns-messages-type: SubscriptionConfirmation
content-type: application/json
{
"Timestamp":"2019-12-26T19:29:12+03:00",
"Type":"SubscriptionConfirmation",
"Message":"You have chosen to subscribe to the topic $topic. To confirm the subscription you need to response with calculated signature",
"TopicArn":"mcs2883541269|bucketA|s3:ObjectCreated:Put",
"SignatureVersion":1,
"Token":«RPE5UuG94rGgBH6kHXN9FUPugFxj1hs2aUQc99btJp3E49tA»
}
مطابق، درخواست تي منحصر ڪري، توهان کي سمجهڻ جي ضرورت آهي ته ڊيٽا کي ڪيئن پروسيس ڪجي. مون داخلا کي اشاري طور چونڊيو "Type":"SubscriptionConfirmation", ڇاڪاڻ ته اهو موجود آهي رڪنيت جي تصديق جي درخواست ۾ ۽ موجود ناهي ويب هِڪ ۾. پوسٽ درخواست ۾ هن داخلا جي موجودگي / غير موجودگي جي بنياد تي، پروگرام جي وڌيڪ عمل يا ته فنڪشن ڏانهن ويندي آهي SubscriptionConfirmation، يا فنڪشن ۾ GotRecords.
اسان تفصيل سان رڪنيت جي تصديق واري فنڪشن تي غور نه ڪنداسين؛ اهو لاڳو ڪيو ويو آهي اصولن جي مطابق مقرر ڪيل اصولن جي مطابق دستاويز. توھان ھن فنڪشن لاء ماخذ ڪوڊ ڏسي سگھو ٿا پروجيڪٽ git repositories.
GotRecords فنڪشن ايندڙ ايندڙ درخواست کي پارس ڪري ٿو ۽ هر رڪارڊ اعتراض لاءِ هڪ خارجي اسڪرپٽ (جنهن جو نالو -اسڪرپٽ پيراميٽر ۾ منظور ڪيو ويو هو) کي پيرا ميٽرن سان سڏي ٿو:
اهڙيء طرح، جيڪڏهن هڪ ٿلهو پوسٽ جي درخواست سان اچي ٿو، جيئن بيان ڪيو ويو آهي اعلي، ۽ پيراميٽر -script=script.sh پوءِ اسڪرپٽ کي هن ريت سڏيو ويندو:
script.sh bucketA some-file-to-bucket copy
اهو سمجهڻ گهرجي ته هي ويب هوڪ حاصل ڪرڻ وارو سرور هڪ مڪمل پيداوار حل نه آهي، پر هڪ ممڪن عمل جو هڪ آسان مثال آهي.
ڪم جو مثال
اچو ته فائلن کي MCS ۾ مکيه بالٽ کان AWS ۾ بيڪ اپ بالٽ تائين هم وقت سازي ڪريون. مکيه بالٽ کي myfiles-ash سڏيو ويندو آهي، بيڪ اپ هڪ سڏيو ويندو آهي myfiles-backup (AWS ۾ بالٽ جي ترتيب هن مضمون جي دائري کان ٻاهر آهي). ان مطابق، جڏهن ڪا فائل مکيه بالٽ ۾ رکيل آهي، ان جي ڪاپي بيڪ اپ ۾ ظاهر ٿيڻ گهرجي، ۽ جڏهن اهو مکيه مان حذف ڪيو وڃي، ان کي بيڪ اپ ۾ ختم ڪيو وڃي.
اسان awscli يوٽيليٽي استعمال ڪندي بالٽ سان ڪم ڪنداسين، جيڪو MCS ڪلائوڊ اسٽوريج ۽ AWS ڪلائوڊ اسٽوريج ٻنهي سان مطابقت رکي ٿو.
ubuntu@ubuntu-basic-1-2-10gb:~$ sudo apt-get install awscli
Reading package lists... Done
Building dependency tree
Reading state information... Done
After this operation, 34.4 MB of additional disk space will be used.
Unpacking awscli (1.14.44-1ubuntu1) ...
Setting up awscli (1.14.44-1ubuntu1) ...
اچو ته S3 MCS API تائين رسائي کي ترتيب ڏيو:
ubuntu@ubuntu-basic-1-2-10gb:~$ aws configure --profile mcs
AWS Access Key ID [None]: hdywEPtuuJTExxxxxxxxxxxxxx
AWS Secret Access Key [None]: hDz3SgxKwXoxxxxxxxxxxxxxxxxxx
Default region name [None]:
Default output format [None]:
اچو ته AWS S3 API تائين رسائي کي ترتيب ڏيو:
ubuntu@ubuntu-basic-1-2-10gb:~$ aws configure --profile aws
AWS Access Key ID [None]: AKIAJXXXXXXXXXXXX
AWS Secret Access Key [None]: dfuerphOLQwu0CreP5Z8l5fuXXXXXXXXXXXXXXXX
Default region name [None]:
Default output format [None]:
اچو ته رسائي چيڪ ڪريو:
AWS ڏانهن:
ubuntu@ubuntu-basic-1-2-10gb:~$ aws s3 ls --profile aws
2020-07-06 08:44:11 myfiles-backup
MCS لاءِ، جڏهن ڪمانڊ هلائي رهيا آهيو توهان کي شامل ڪرڻ جي ضرورت آهي -endpoint-url: