Méadaíonn ailtireacht atá bunaithe ar imeachtaí éifeachtúlacht costais na n-acmhainní a úsáidtear toisc nach n-úsáidtear iad ach amháin nuair a bhíonn gá leo. Tá go leor roghanna ann maidir le conas é seo a chur i bhfeidhm agus gan aonáin scamall breise a chruthú mar iarratais oibrithe. Agus inniu ní labhróidh mé faoi FaaS, ach faoi chuiceanna gréasáin. Taispeánfaidh mé sampla teagaisc de láimhseáil imeachtaí ag baint úsáide as cuaillí gréasáin stórála réad.
Cúpla focal faoi stóráil réad agus cuacha gréasáin. Ligeann stóráil oibiachtaí duit aon sonraí a stóráil sa néal i bhfoirm oibiachtaí, inrochtana trí S3 nó API eile (ag brath ar chur i bhfeidhm) trí HTTP/HTTPS. Go ginearálta is aisghlaonna HTTP saincheaptha iad cuacha gréasáin. Is gnách go spreagtar iad ag imeacht, mar chód á bhrú chuig stór nó nóta tráchta a phostáil ar bhlag. Nuair a tharlaíonn teagmhas, seolann an suíomh tionscnaimh iarratas HTTP chuig an URL atá sonraithe don chuach gréasáin. Mar thoradh air sin, is féidir leat imeachtaí a dhéanamh ar shuíomh amháin gníomhartha a spreagadh ar shuíomh eile (wiki). Sa chás gur stór réad é an láithreán foinse, gníomhaíonn imeachtaí mar athruithe ar a bhfuil ann.
Samplaí de chásanna simplí inar féidir uathoibriú den sórt sin a úsáid:
Cruthú cóipeanna de gach réad i stóráil scamall eile. Ní mór cóipeanna a chruthú ar an eitilt aon uair a chuirtear nó a athraítear comhaid.
Cruthú uathoibríoch de shraith mionsamhlacha de chomhaid ghrafacha, ag cur watermarks le grianghraif, agus modhnuithe íomhá eile.
Fógra faoi theacht na gcáipéisí nua (mar shampla, déanann seirbhís chuntasaíochta dáilte tuarascálacha a uaslódáil chuig an néal, agus faigheann monatóireacht airgeadais fógraí faoi thuarascálacha nua, seiceálacha agus anailís orthu).
Is éard atá i gceist le cásanna beagán níos casta, mar shampla, iarratas a ghiniúint chuig Kubernetes, a chruthaíonn pod leis na coimeádáin riachtanacha, a théann paraiméadair an taisc leis, agus tar éis próiseáil a thiteann an coimeádán.
Mar shampla, déanfaimid malairt de thasc 1, nuair a dhéantar athruithe ar bhuicéad stórála réad Mail.ru Cloud Solutions (MCS) a shioncronú i stóráil réad AWS ag baint úsáide as webooks. I gcás fíor-ualach, ba cheart obair asincrónach a chur ar fáil trí bhótaí gréasáin a chlárú i scuaine, ach le haghaidh an tasc oiliúna déanfaimid an cur i bhfeidhm gan é seo.
Scéim oibre
Déantar cur síos mionsonraithe ar an bprótacal idirghníomhaíochta i Treoir maidir le gréasán S3 ar MCS. Tá na gnéithe seo a leanas sa scéim oibre:
Seirbhís foilsitheoireachta, atá ar thaobh stórála S3 agus a fhoilsíonn iarratais HTTP nuair a spreagtar an webnhook.
Freastalaí glactha cuaille gréasáin, a éisteann le hiarratais ón tseirbhís foilsitheoireachta HTTP agus a dhéanann gníomhartha cuí. Is féidir an freastalaí a scríobh i dteanga ar bith; inár sampla, scríobhfaimid an freastalaí in Go.
Gné speisialta de chur i bhfeidhm cuacha gréasáin san API S3 is ea clárú an fhreastalaí glactha greimeanna gréasáin ar an tseirbhís foilsitheoireachta. Go háirithe, ní mór don fhreastalaí glactha cuaille gréasáin an síntiús do theachtaireachtaí ón tseirbhís foilsitheoireachta a dheimhniú (i bhfeidhmiúcháin eile gréasán, ní gá de ghnáth deimhniú an tsíntiúis).
Dá réir sin, ní mór don fhreastalaí glactha cuaille gréasáin tacú le dhá phríomhoibríocht:
freagra a thabhairt ar iarratas ón tseirbhís foilsitheoireachta clárú a dheimhniú,
imeachtaí ag teacht isteach a phróiseáil.
Freastalaí glactha cuaille gréasáin a shuiteáil
Chun an freastalaí glactha cuaille gréasáin a rith, teastaíonn freastalaí Linux uait. San Airteagal seo, mar shampla, bainimid úsáid as sampla fíorúil a úsáidimid ar MCS.
Déanaimis na bogearraí riachtanacha a shuiteáil agus an freastalaí glactha cuaille gréasáin a sheoladh.
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) ...
Clón an fillteán leis an bhfreastalaí glactha cuaille gréasáin:
ubuntu@ubuntu-basic-1-2-10gb:~$ cd s3-webhook/
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ sudo ./s3-webhook -port 80
Liostáil le seirbhís foilsitheoireachta
Is féidir leat do fhreastalaí glactha cuaille gréasáin a chlárú tríd an API nó an comhéadan gréasáin. Ar mhaithe le simplíocht, cláróimid tríd an gcomhéadan gréasáin:
Téigh go dtí an buicéad a mbeidh muid ag cumrú cuaillí gréasáin dó agus cliceáil ar an bhfearas:
Téigh go dtí an cluaisín Webbhooks agus cliceáil Cuir:
Líon isteach na réimsí:
ID — ainm an chuaille gréasáin.
Imeacht - a imeachtaí a tharchur. Tá tarchur na n-imeachtaí go léir a tharlaíonn nuair a bhíonn muid ag obair le comhaid socraithe againn (ag cur agus scriosadh).
URL - cuaille gréasáin ag fáil seoladh an fhreastalaí.
Is scagaire é réimír/iarmhír an scagaire a ligeann duit cuacha gréasáin a ghiniúint ach amháin le haghaidh rudaí a bhfuil a n-ainmneacha ag teacht le rialacha áirithe. Mar shampla, ionas go spreagfaidh an cuaille gréasáin comhaid leis an síneadh .png amháin, cuir isteach Iarmhír scagaire ní mór duit "png" a scríobh.
Faoi láthair, ní thacaítear ach le calafoirt 80 agus 443 chun rochtain a fháil ar an bhfreastalaí glactha cuaille gréasáin.
A ligean ar cliceáil Cuir hook agus feicfimid na rudaí seo a leanas:
Hook leis.
Taispeánann an freastalaí glactha cuaí gréasáin ina logaí dul chun cinn an phróisis chlárúcháin duán:
a dheimhníonn clárú ar an tseirbhís foilsitheoireachta (téigh chuig an bhfeidhm SubscriptionConfirmation),
próiseálann cuacha gréasáin isteach (feidhm Gorecords).
Feidhmeanna Is éard atá i bhfeidhmeanna HmacSha256 agus HmacSha256hex feidhmiú na n-halgartaim criptithe HMAC-SHA256 agus HMAC-SHA256 le haschur mar shraith d'uimhreacha heicsidheacha chun an síniú a ríomh.
is é an príomhfheidhm an phríomhfheidhm, próiseálann paraiméadair na n-orduithe agus cláraíonn sé láimhseálaithe URL.
Paraiméadair na líne ordaithe a nglacann an freastalaí leo:
-port is ea an port ar a éistfidh an freastalaí.
-address - seoladh IP a éistfidh an freastalaí leis.
Is clár seachtrach é -script a ghlaoitear ar gach duán isteach.
Breathnaímid ar roinnt de na feidhmeanna:
//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)
}
}
Cinneann an fheidhm seo cibé an bhfuil iarratas chun clárú a dheimhniú nó cuaille gréasáin tagtha. Mar a leanas ó doiciméadú, má dheimhnítear clárú, faightear an struchtúr Json seo a leanas san iarratas 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»
}
Dá réir sin, ag brath ar an iarratas, ní mór duit a thuiscint conas na sonraí a phróiseáil. Roghnaigh mé an iontráil mar tháscaire "Type":"SubscriptionConfirmation", ós rud é go bhfuil sé i láthair san iarratas deimhnithe ar shíntiús agus nach bhfuil sé i láthair sa chuach gréasáin. Bunaithe ar láithreacht/neamhláithreacht na hiontrála seo san iarratas POST, téann feidhmiú breise an chláir chuig ceachtar den dá fheidhm SubscriptionConfirmation, nó isteach sa fheidhm GotRecords.
Ní bhreithneofar go mion an fheidhm Deimhnithe Síntiúis; cuirtear i bhfeidhm í de réir na bprionsabal atá leagtha amach i doiciméadú. Is féidir leat an cód foinse don fheidhm seo a fheiceáil ag stórtha git tionscadail.
Déanann an fheidhm GotRecords iarratas isteach a pharsáil agus glaonn script sheachtrach (ar cuireadh a ainm sa pharaiméadar -script) leis na paraiméadair do gach oibiacht Taifeadta:
ainm buicéad
eochair réad
gníomh:
copy - más rud é sa bhuniarratas EventName = ObjectCreated | CuirObject | PutObjectCopy
delete - más rud é sa bhuniarratas EventName = ObjectRemoved | Scrios Object
Mar sin, má thagann duán le hiarratas Post, mar a thuairiscítear thuas, agus an paraiméadar -script=script.sh ansin tabharfar an script mar seo a leanas:
script.sh bucketA some-file-to-bucket copy
Ba cheart a thuiscint nach réiteach táirgeachta iomlán é an freastalaí glactha cuasaí gréasáin seo, ach sampla simplithe de chur i bhfeidhm féideartha.
Sampla den obair
Déanaimis na comhaid a shioncronú ón bpríomhbhuicéad in MCS go dtí an buicéad cúltaca in AWS. Tugtar myfiles-ash ar an bpríomhbhuicéad, tugtar myfiles-backup ar an gceann cúltaca (tá cumraíocht buicéad in AWS thar raon feidhme an ailt seo). Dá réir sin, nuair a chuirtear comhad sa phríomhbhuicéad, ba cheart go mbeadh a chóip le feiceáil sa chúltaca, agus nuair a scriostar é ón bpríomhcheann, ba cheart é a scriosadh sa chúltaca.
Oibreoimid le buicéid ag baint úsáide as an bhfóntas awscli, atá comhoiriúnach le stóráil scamall MCS agus stóráil scamall AWS araon.
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) ...
Déanaimis rochtain ar an S3 MCS API a chumrú:
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]:
Déanaimis rochtain ar an API AWS S3 a chumrú:
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]:
Déanaimis na bealaí isteach a sheiceáil:
Chuig AWS:
ubuntu@ubuntu-basic-1-2-10gb:~$ aws s3 ls --profile aws
2020-07-06 08:44:11 myfiles-backup
Le haghaidh MCS, agus an t-ordú á rith agat ní mór duit —endpoint-url a chur leis:
A ligean ar a fheiceáil conas a oibríonn sé. Tríd Comhéadan Gréasáin MCS cuir an comhad test.txt leis an mbuicéad myfiles-fuinseog. Léiríonn logaí an chonsóil go ndearnadh iarratas chuig an bhfreastalaí gréasá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
Déanaimis seiceáil ar a bhfuil sa bhuicéad cúltaca myfiles in AWS:
Anois, tríd an gcomhéadan gréasáin, scriosfaimid an comhad ón buicéad myfiles-ash.
Logchomhaid an fhreastalaí:
2020/07/06 09:44:46 [POST] incoming HTTP request from
95.163.216.92:58224
delete: s3://myfiles-backup/test.txt
Ábhar an bhuicéid:
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ aws s3 --profile aws ls
myfiles-backup
ubuntu@ubuntu-basic-1-2-10gb:~$
Scriostar an comhad, réitítear an fhadhb.
Conclúid agus TÚ
Tá gach cód a úsáidtear san Airteagal seo i mo stór. Tá samplaí ann freisin de scripteanna agus samplaí de shínithe a chomhaireamh chun cuacha gréasáin a chlárú.
Níl sa chód seo ach sampla de conas is féidir leat cuaillí gréasáin S3 a úsáid i do ghníomhaíochtaí. Mar a dúirt mé ag an tús, má tá sé ar intinn agat freastalaí den sórt sin a úsáid i dtáirgeadh, ní mór duit ar a laghad an freastalaí a athscríobh le haghaidh obair asincrónach: cláraigh sreafaí gréasáin ag teacht isteach i scuaine (RabbitMQ nó NATS), agus as sin iad a pharsáil agus iad a phróiseáil. le hiarratais oibrithe. Seachas sin, nuair a thagann cuacha gréasáin isteach go mór, seans go dtiocfaidh tú ar easpa acmhainní freastalaí chun tascanna a chur i gcrích. Ceadaíonn láithreacht scuainí duit an freastalaí agus na hoibrithe a dháileadh, chomh maith le fadhbanna a réiteach le tascanna athrá i gcás teipeanna. Tá sé inmholta freisin an logáil a athrú go ceann níos mionsonraithe agus níos caighdeánaithe.