ProHoster > Blog > Rianachd > Eisimpleir de thagradh air a stiùireadh le tachartas stèidhichte air lìn-lìn ann an stòradh stuth S3 Mail.ru Cloud Solutions
Eisimpleir de thagradh air a stiùireadh le tachartas stèidhichte air lìn-lìn ann an stòradh stuth S3 Mail.ru Cloud Solutions
Bidh ailtireachd air a stiùireadh le tachartas a’ meudachadh èifeachdas cosgais nan goireasan a thathar a’ cleachdadh leis nach eil iad gan cleachdadh ach aig an àm a tha feum orra. Tha mòran roghainnean ann air mar a chuireas tu seo an gnìomh agus gun a bhith a’ cruthachadh aonadan sgòthan a bharrachd mar thagraidhean luchd-obrach. Agus an-diugh cha bhith mi a’ bruidhinn mu dheidhinn FaaS, ach mu dheidhinn greimean-lìn. Seallaidh mi eisimpleir oideachaidh de bhith a’ làimhseachadh thachartasan a’ cleachdadh greimichean-lìn airson stòradh stuthan.
Beagan fhaclan mu stòradh stuthan agus brògan-lìn. Leigidh stòradh nithean leat dàta sam bith a stòradh san sgòth ann an cruth nithean, ruigsinneach tro S3 no API eile (a rèir buileachaidh) tro HTTP/HTTPS. Mar as trice is e fios air ais HTTP àbhaisteach a th’ ann an lìn-lìn. Mar as trice bidh iad air am piobrachadh le tachartas, leithid còd ga phutadh gu stòr no beachd a bhith air a phostadh air blog. Nuair a thachras tachartas, bidh an làrach tùsail a’ cur iarrtas HTTP chun URL a chaidh a shònrachadh airson a’ bhileag-lìn. Mar thoradh air an sin, faodaidh tu tachartasan a chuir air aon làrach gus gnìomhan a bhrosnachadh air làrach eile (wiki). Ma tha an làrach stòr na stòradh stuthan, bidh tachartasan ag atharrachadh na th’ ann.
Eisimpleirean de chùisean sìmplidh nuair a dh'fhaodar fèin-ghluasad mar sin a chleachdadh:
A’ cruthachadh lethbhric de gach nì ann an stòradh neòil eile. Feumar lethbhric a chruthachadh air an itealan nuair a thèid faidhlichean a chur ris no atharrachadh.
Cruthachadh fèin-ghluasadach de shreath de mhion-dhealbhan de fhaidhlichean grafaigeach, a’ cur comharran-uisge ri dealbhan, agus atharrachaidhean ìomhaigh eile.
Fios mu thighinn sgrìobhainnean ùra (mar eisimpleir, bidh seirbheis cunntasachd sgaoilte a’ luchdachadh suas aithisgean chun sgòth, agus bidh sgrùdadh ionmhais a’ faighinn fios mu aithisgean ùra, gan sgrùdadh agus gan sgrùdadh).
Tha cùisean a tha beagan nas iom-fhillte a’ toirt a-steach, mar eisimpleir, a bhith a’ gineadh iarrtas gu Kubernetes, a chruthaicheas pod leis na soithichean riatanach, a bheir seachad crìochan gnìomh dha, agus às deidh giollachd a ’tuiteam às a chèile.
Mar eisimpleir, nì sinn caochladh de ghnìomh 1, nuair a thèid atharrachaidhean ann am bucaid stòraidh stuth Mail.ru Cloud Solutions (MCS) a shioncronachadh ann an stòradh stuth AWS a’ cleachdadh webhooks. Ann an cùis làn luchdaichte, bu chòir obair asyncronach a thoirt seachad le bhith a’ clàradh sreapan-lìn ann an ciudha, ach airson an obair trèanaidh nì sinn am buileachadh às aonais seo.
Sgeama obrach
Tha am protocol eadar-obrachaidh air a mhìneachadh gu mionaideach ann an Leabhar-iùil airson lìn S3 air MCS. Tha na feartan a leanas anns an sgeama obrach:
Seirbheis foillseachaidh, a tha air taobh stòraidh S3 agus a 'foillseachadh iarrtasan HTTP nuair a thèid an webnhook a phiobrachadh.
Webook a 'faighinn frithealaiche, a bhios ag èisteachd ri iarrtasan bhon t-seirbheis foillseachaidh HTTP agus a 'dèanamh gnìomhan iomchaidh. Faodar am frithealaiche a sgrìobhadh ann an cànan sam bith; san eisimpleir againn, sgrìobhaidh sinn am frithealaiche ann an Go.
Is e feart sònraichte de bhuileachadh webooks ann an API S3 clàradh an fhrithealaiche faighinn lìn air an t-seirbheis foillseachaidh. Gu sònraichte, feumaidh an t-seirbheisiche a tha a’ faighinn greim-lìn dearbhadh an fho-sgrìobhaidh airson teachdaireachdan bhon t-seirbheis foillseachaidh (ann am buileachadh greimean-lìn eile, mar as trice chan eil feum air fo-sgrìobhadh a dhearbhadh).
Mar sin, feumaidh an t-seirbheisiche faighinn taic-lìn taic a thoirt do dhà phrìomh obair:
freagairt ri iarrtas na seirbheis foillseachaidh airson clàradh a dhearbhadh,
pròiseas tachartasan a tha a’ tighinn a-steach.
A’ stàladh frithealaiche faighinn leabhar-lìn
Gus am frithealaiche faighinn greim-lìn a ruith, feumaidh tu frithealaiche Linux. San artaigil seo, mar eisimpleir, bidh sinn a’ cleachdadh eisimpleir brìgheil a bhios sinn a’ cleachdadh air MCS.
Stàlaich sinn am bathar-bog riatanach agus cuir air bhog am frithealaiche faighinn webook.
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) ...
Clone am pasgan leis an fhrithealaiche faighinn greim-lìn:
ubuntu@ubuntu-basic-1-2-10gb:~$ cd s3-webhook/
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ sudo ./s3-webhook -port 80
Clàraich a-steach don t-seirbheis foillseachaidh
Faodaidh tu an t-seirbheisiche faighinn leabhar-lìn agad a chlàradh tron API no eadar-aghaidh lìn. Airson sìmplidh, clàraichidh sinn tron eadar-aghaidh lìn:
Rach don bhucaid airson am bi sinn a’ rèiteachadh lìn-lìn agus cliog air an gèar:
Rach gu taba Webhooks agus cliog air Add:
Lìon a-steach na raointean:
ID - ainm a 'bhoc-lìn.
Tachartas - dè na tachartasan a thèid a chraoladh. Tha sinn air tar-chur a h-uile tachartas a thachras nuair a bhios sinn ag obair le faidhlichean (cur ris agus cuir às).
URL - clàr-lìn a' faighinn seòladh an fhrithealaiche.
Is e sìoltachan a th’ ann an ro-leasachan / iar-leasachan sìoltachain a leigeas leat greimean-lìn a ghineadh a-mhàin airson nithean aig a bheil ainmean a rèir riaghailtean sònraichte. Mar eisimpleir, gus am bi an lìnig a' piobrachadh dìreach faidhlichean leis an leudachadh .png, cuir a-steach Iar-leasachan sìoltachain feumaidh tu “png” a sgrìobhadh.
An-dràsta, chan eil ach puirt 80 agus 443 a’ faighinn taic airson faighinn chun t-seirbheisiche faighinn greim-lìn.
Cliogaidh sinn Cuir dubhan ris agus chì sinn na leanas:
Hook air a chur ris.
Tha am frithealaiche a tha a’ faighinn greim-lìn a’ sealltainn anns na logaichean aige adhartas pròiseas clàraidh nan dubhan:
Ping () - slighe a tha a’ freagairt tro URL / ping, am buileachadh as sìmplidh de probe beòthalachd.
Webhook () - prìomh shlighe, URL / inneal-làimhe:
a’ dearbhadh clàradh air an t-seirbheis foillseachaidh (rachaibh gu gnìomh Dearbhadh Fo-sgrìobhaidh),
pròiseasan lìn a’ tighinn a-steach (gnìomh Gorecords).
Tha gnìomhan HmacSha256 agus HmacSha256hex nan cur an gnìomh de na h-algorithms crioptachaidh HMAC-SHA256 agus HMAC-SHA256 le toradh mar shreath de àireamhan hexadecimal airson an ainm-sgrìobhte obrachadh a-mach.
Is e prìomh dhleastanas a 'phrìomh obair, a' pròiseasadh crìochan loidhne-àithne agus a 'clàradh luchd-làimhseachaidh URL.
Paramadairean loidhne-àithne ris an do ghabh am frithealaiche:
-port am port air an èist am frithealaiche.
-address - seòladh IP ris am bi am frithealaiche ag èisteachd.
-script na phrògram taobh a-muigh ris an canar airson gach dubhan a thig a-steach.
Bheir sinn sùil nas mionaidiche air cuid de na gnìomhan:
//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)
}
}
Bidh an gnìomh seo a’ dearbhadh a bheil iarrtas airson clàradh a dhearbhadh no duilleag-lìn air ruighinn. Mar a leanas bho sgrìobhainnean, ma thèid clàradh a dhearbhadh, gheibhear an structar Json a leanas anns an iarrtas Post:
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»
}
A rèir sin, a rèir an iarrtais, feumaidh tu tuigsinn mar a làimhsicheas tu an dàta. Thagh mi an inntrig mar thaisbeanair "Type":"SubscriptionConfirmation", leis gu bheil e an làthair san iarrtas dearbhaidh ballrachd agus nach eil e an làthair anns a’ bhileag-lìn. Stèidhichte air làthaireachd / neo-làthaireachd an inntrig seo san iarrtas POST, thèid tuilleadh buileachadh a’ phrògraim an dàrna cuid chun ghnìomh SubscriptionConfirmation, no ann an gnìomh GotRecords.
Cha bheachdaich sinn gu mionaideach air gnìomh Dearbhadh Fo-sgrìobhaidh; tha e air a bhuileachadh a rèir nam prionnsapalan a tha air am mìneachadh ann an sgrìobhainnean. Chì thu an còd tùsail airson a’ ghnìomh seo aig tasgaidhean pròiseact git.
Bidh an gnìomh GotRecords a’ parsadh iarrtas a tha a’ tighinn a-steach agus airson gach nì Clàr gairmidh sgriobt taobh a-muigh (leis an deach an t-ainm a thoirt seachad ann am paramadair -script) leis na paramadairean:
ainm bucaid
iuchair nì
gnìomh:
copy - ma tha san iarrtas tùsail EventName = ObjectCreated | PutObject | PutObjectCopy
delete - ma tha san iarrtas tùsail EventName = ObjectRemove | Sguab às Object
Mar sin, ma ruigeas dubhan le iarrtas Post, mar a chaidh a mhìneachadh àrd-ìre, agus am paramadair -script = script.sh an uairsin canar an sgriobt mar a leanas:
script.sh bucketA some-file-to-bucket copy
Bu chòir a thuigsinn nach e fuasgladh toraidh iomlan a th’ anns an t-seirbheisiche faighinn lìn seo, ach eisimpleir nas sìmplidhe de bhuileachadh a dh’ fhaodadh a bhith ann.
Eisimpleir de dh'obair
Sioncronaich sinn na faidhlichean bhon phrìomh bhucaid ann am MCS chun bhucaid cùl-taic ann an AWS. Canar myfiles-ash ris a’ phrìomh bhucaid, is e myfiles-backup a chanar ris an fhear cùl-taic (tha rèiteachadh bucaid ann an AWS taobh a-muigh farsaingeachd an artaigil seo). Mar sin, nuair a thèid faidhle a chuir anns a’ phrìomh bhucaid, bu chòir an leth-bhreac aige nochdadh sa chùl-taic, agus nuair a thèid a dhubhadh às bhon phrìomh fhear, bu chòir a dhubhadh às anns a’ chùl-taic.
Obraichidh sinn le bucaidean a’ cleachdadh goireas awscli, a tha co-chosmhail ri gach cuid stòradh neòil MCS agus stòradh neòil 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) ...
Feuch an cuir sinn air dòigh cothrom air an 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]:
Feuch an rèitich sinn ruigsinneachd gu API AWS S3:
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]:
Feuch an dèan sinn sgrùdadh air na slighean a-steach:
Gu AWS:
ubuntu@ubuntu-basic-1-2-10gb:~$ aws s3 ls --profile aws
2020-07-06 08:44:11 myfiles-backup
Airson MCS, nuair a bhios tu a’ ruith an àithne feumaidh tu —endpoint-url a chur ris:
Chì sinn mar a tha e ag obair. Troimhe MCS eadar-aghaidh lìn cuir am faidhle test.txt ris a’ bhucaid myfiles-ash. Tha logaichean a’ chonsail a’ sealltainn gun deach iarrtas a chur chun an fhrithealaiche lìn:
2020/07/06 09:43:08 [POST] incoming HTTP request from
95.163.216.92:56612
download: s3://myfiles-ash/test.txt to ../../../tmp/myfiles-ash/test.txt
upload: ../../../tmp/myfiles-ash/test.txt to
s3://myfiles-backup/test.txt
Feuch an dèan sinn sgrùdadh air susbaint a’ bhucaid cùl-taic myfiles ann an AWS:
A-nis, tron eadar-aghaidh lìn, sguabaidh sinn às am faidhle bhon bhucaid myfiles-ash.
Logaichean frithealaiche:
2020/07/06 09:44:46 [POST] incoming HTTP request from
95.163.216.92:58224
delete: s3://myfiles-backup/test.txt
Susbaint a’ bhucaid:
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ aws s3 --profile aws ls
myfiles-backup
ubuntu@ubuntu-basic-1-2-10gb:~$
Tha am faidhle air a sguabadh às, tha an duilgheadas air a rèiteachadh.
Co-dhùnadh agus ToDo
Tha a h-uile còd a chleachdar san artaigil seo anns an ionad-tasgaidh agam. Tha eisimpleirean ann cuideachd de sgriobtaichean agus eisimpleirean de chunntadh ainmean-sgrìobhte airson clàradh lìn-bhog.
Chan eil anns a’ chòd seo ach eisimpleir air mar as urrainn dhut greimichean-lìn S3 a chleachdadh nad ghnìomhachd. Mar a thuirt mi aig an toiseach, ma tha thu an dùil a leithid de fhrithealaiche a chleachdadh ann an cinneasachadh, feumaidh tu co-dhiù ath-sgrìobhadh a dhèanamh air an fhrithealaiche airson obair asyncronach: clàraich lìn-lìn a tha a’ tighinn a-steach ann an ciudha (RabbitMQ no NATS), agus às an sin rannsaich iad agus giullachd iad. le iarrtasan luchd-obrach. Rud eile, nuair a ruigeas tu greimean-lìn gu mòr, is dòcha gun tig thu tarsainn air gainnead ghoireasan frithealaiche gus gnìomhan a choileanadh. Tha làthaireachd ciudhaichean a 'toirt cothrom dhut an t-seirbheisiche agus an luchd-obrach a sgaoileadh, a bharrachd air a bhith a' fuasgladh dhuilgheadasan le gnìomhan ath-aithris gun fhios nach obraich iad. Tha e ciallach cuideachd an logadh atharrachadh gu fear nas mionaidiche agus nas àbhaisteach.