JSON-RPC? E hoʻomaha maʻalahi

JSON-RPC? E hoʻomaha maʻalahi

Manaʻo wau ua hoʻomaka ka poʻomanaʻo i kahi hopena olakino - "maikaʻi, ua hoʻomaka hou ..." Akā e ʻae iaʻu e hopu i kou nānā no 5-10 mau minuke, a e hoʻāʻo wau ʻaʻole e hōʻino i kāu mau manaʻo.

ʻO ke ʻano o ka ʻatikala penei: lawe ʻia kahi ʻōlelo stereotypical a hōʻike ʻia ke "ʻano" o ka puka ʻana o kēia stereotype. Manaʻo wau e ʻae kēia iā ʻoe e nānā i ke koho o ka hoʻololi ʻikepili paradigm i kāu mau papahana mai kahi kihi hou.

I mea e maopopo ai i ke ʻano o ka RPC, manaʻo wau e noʻonoʻo i ka maʻamau JSON-RPC 2.0. Me REST ʻaʻohe akaka. A ʻaʻole pono. ʻO nā mea āpau e pono ai ʻoe e ʻike e pili ana iā REST - ʻaʻole hiki ke ʻike ʻia mai HTTP.

ʻOi aku ka wikiwiki a ʻoi aku ka maikaʻi o nā noi RPC no ka mea e ʻae lākou iā ʻoe e hana i nā noi batch.

ʻO ka manaʻo ma RPC hiki iā ʻoe ke kāhea i nā kaʻina hana i ka manawa hoʻokahi i hoʻokahi noi. No ka laʻana, hana i kahi mea hoʻohana, hoʻohui i kahi avatar iā ia a, ma ka noi like, kau inoa iā ia i kekahi mau kumuhana. Hoʻokahi wale nō noi, a pehea ka nui o ka pōmaikaʻi!

ʻOiaʻiʻo, inā loaʻa iā ʻoe hoʻokahi node backend, ʻoi aku ka wikiwiki me kahi noi puʻupuʻu. No ka mea, ʻekolu mau noi REST e koi i ʻekolu manawa hou aku i nā kumu waiwai mai hoʻokahi node e hoʻokumu i nā pilina.

JSON-RPC? E hoʻomaha maʻalahi

E hoʻomaopopo i ka noi mua ma ka hihia o REST pono e hoʻihoʻi i ka ID mea hoʻohana i mea e hana ʻia ai nā noi ma hope. ʻO ia ka hopena maikaʻi ʻole i ka hopena holoʻokoʻa.

Akā hiki ke ʻike ʻia ia mau ʻōnaehana i loko o nā hoʻonā hale a me Enterprise. Ma keʻano he hopena hope loa, ma nā papahana WEB liʻiliʻi. Akā ʻaʻole pono ke kūkulu ʻana i nā hoʻonā WEB piha, a me nā mea i kapa ʻia ʻo HighLoad. Pono kā lākou ʻoihana e hoʻokō i nā koina o ka loaʻa kiʻekiʻe a me ka ukana. A ke loli nei ke kiʻi.

JSON-RPC? E hoʻomaha maʻalahi

Hōʻailona ʻia nā ala hana hoʻonaʻauao ma lalo o ke ʻano like me ka ʻōmaʻomaʻo. E nānā i ke ʻano o ka RPC i kēia manawa. Hoʻohana ka noi i ka ʻōnaehana ma ka wāwae hoʻokahi wale nō mai ka mea kaulike a i ka hope. ʻOiai e nalowale ana ʻo REST i ka noi mua, hoʻopau ia i ka manawa nalowale me ka hoʻohana ʻana i ka ʻōnaehana holoʻokoʻa.

Ua lawa ke komo ʻana i ka palapala ʻaʻole ʻelua noi no ka hoʻonui ʻana, akā, e ʻōlelo, ʻelima a ʻumi paha ... a me ka pane i ka nīnau "ʻo wai ka lanakila i kēia manawa?" lilo i maopopo ole.

Manaʻo wau e nānā ākea i ka pilikia. Hōʻike ke kiʻikuhi i ke ʻano o ka hoʻohana ʻia ʻana o nā kaila ʻoihana, akā ʻaʻole i kaupalena ʻia nā ʻōnaehana i nā kahawai. ʻO kahi ʻāpana koʻikoʻi o kahi ʻoihana kiʻekiʻe he mau huna huna. E kiʻi kāua i kekahi ʻano mea hana mea hoʻohana. Hoʻomau pinepine. E ʻōlelo kākou he 32 manawa.

JSON-RPC? E hoʻomaha maʻalahi

E ʻike i ka hoʻomaikaʻi nui ʻana o ka ʻōnaehana RPC e hoʻokō i nā koi o ka ukana kiʻekiʻe. ʻO ka mea, hoʻohana ʻo REST i ka mana piha o ka protocol HTTP, ʻaʻole like me RPC. Ma ke kiʻikuhi ma luna, ua ʻike ʻia kēia mana ma o ke ʻano noi - GET.

ʻO nā ala HTTP, ma waena o nā mea ʻē aʻe, he mau hoʻolālā caching. Hiki iā ʻoe ke loaʻa iā lākou ma ka palapala ma HTTP. No RPC, hoʻohana ʻia nā noi POST, ʻaʻole i manaʻo ʻia he idempotent, ʻo ia hoʻi, hiki ke hoʻihoʻi hou i nā noi POST like i nā hopena like ʻole (no ka laʻana, ma hope o ka hoʻouna ʻia ʻana o kēlā me kēia manaʻo, e ʻike ʻia kahi kope o kēia manaʻo) (kumu).

No laila, ʻaʻole hiki iā RPC ke hoʻohana pono i nā huna huna. Ke alakaʻi nei kēia i ka pono e "hoʻokomo" i nā cache lako polokalamu. Hōʻike ke kiʻikuhi iā Redis i kēia hana. ʻO ka cache lako polokalamu, ʻo ia hoʻi, koi i ka mea hoʻomohala e hoʻohui i kahi papa o ke code a me nā loli ʻike ʻia i ka hale hoʻolālā.

E helu kāua i ka nui o nā noi REST a me RPC "hanau" i loko o ka ʻoihana e noʻonoʻo ʻia nei?

Nā noi
inbox
i hope
i ka DBMS
i ka huna huna (Redis)
TOTAL

koena
1 / 32 *
1
1
0
3 / 35

Ka RPC
32
32
1
31
96

[*] i ka hihia maikaʻi loa (inā hoʻohana ʻia ka hūnā kūloko) 1 noi (hoʻokahi!), i ka hihia ʻoi loa 32 mau noi komo.

Ke hoʻohālikelike ʻia i ka papahana mua, ʻokoʻa ka ʻokoʻa. I kēia manawa ua maopopo ka pōmaikaʻi o REST. Akā, manaʻo wau ʻaʻole e kū ma laila. Loaʻa i ka ʻenehana kūkulu ʻia kahi CDN. Hoʻopau pinepine ia i ka pilikia o ke kūʻē ʻana i nā hoʻouka kaua DDoS a me DoS. Loaʻa iā mākou:

JSON-RPC? E hoʻomaha maʻalahi

ʻO kēia kahi e pōʻino loa ai nā mea no RPC. ʻAʻole hiki iā RPC ke hāʻawi i ka hana i kahi CDN. Hiki iā mākou ke hilinaʻi wale i nā ʻōnaehana e pale aku i nā hoʻouka kaua.

Hiki paha ke hoʻopau ma ʻaneʻi? A eia hou, aole. ʻO nā ala HTTP, e like me ka mea i ʻōlelo ʻia ma luna nei, loaʻa i kā lākou "magic". A ʻaʻole me ke kumu ʻole i hoʻohana nui ʻia ke ʻano GET ma ka Pūnaewele. E hoʻomaopopo i hiki i kēia ala ke komo i kahi ʻāpana o ka ʻike, hiki iā ia ke hoʻonohonoho i nā kūlana e hiki ai i nā mea hoʻomohala ke wehewehe ma mua o ka hoʻoili ʻia ʻana o ka mana i kāu code, a pēlā aku. ʻAe kēia mau mea iā ʻoe e hana i nā ʻōnaehana maʻalahi a hiki ke mālama i nā kahe nui o nā noi. Akā ma RPC kēia ʻano ... ʻaʻole mālama ʻia.

No laila, no ke aha e ʻoi aku ka wikiwiki o nā noi batch (RPC)? ʻO wau iho, manaʻo wau ʻaʻole hiki i ka hapa nui o nā papahana ke kiʻekiʻe o ka hoʻomohala kahi e hiki ai iā REST ke hōʻike i kona ikaika. Eia kekahi, ma nā papahana liʻiliʻi, ʻoi aku kona makemake e hōʻike i kona mau nāwaliwali.

ʻO ka koho ʻana o REST a i ʻole RPC, ʻaʻole ia he koho i koho ʻia e kekahi kanaka ma kahi papahana. Pono kēia koho e kūpono i nā koi o ka papahana. Inā hiki i kahi papahana ke ʻomi i nā mea āpau i hiki iā ia mai REST, a pono maoli ia, a laila he koho maikaʻi loa ʻo REST.

Akā inā, no ka loaʻa ʻana o nā pono āpau o REST, pono ʻoe e hoʻolimalima i nā devops loea no ka papahana e hoʻonui wikiwiki i ka ʻoihana, nā luna hoʻokele e hoʻokele i ka ʻoihana, kahi mea hoʻolālā e hoʻolālā i nā papa āpau o ka lawelawe WEB ... a me ka papahana. , i ka manawa like, kūʻai aku i ʻekolu ʻeke margarine i ka lā ... E hoʻomau wau me RPC, no ka mea ... ʻoi aku ka pono o kēia protocol. ʻAʻole ia e koi i ka ʻike hohonu e pili ana i ka hana ʻana o nā cache a me nā ʻōnaehana, akā e kālele ana ka mea hoʻomohala i nā kelepona maʻalahi a hoʻomaopopo i nā kaʻina hana e pono ai. E hauʻoli ka ʻoihana.

ʻOi aku ka hilinaʻi o nā noi RPC no ka mea hiki iā lākou ke hoʻokō i nā noi batch i loko o kahi kālepa hoʻokahi

ʻO kēia waiwai o RPC kahi pono kūpono, no ka mea He mea maʻalahi ka mālama ʻana i ka waihona. Akā me REST e lilo ana i mea paʻakikī. Hiki ʻole mai nā noi i nā node hope ʻokoʻa.

ʻO kēia "pōʻino" o REST ka ʻaoʻao ʻē aʻe o kona pono i hōʻike ʻia ma luna - ka hiki ke hoʻohana pono i nā kumuwaiwai āpau. Inā maikaʻi ʻole ka hoʻolālā ʻana o ka ʻōnaehana, a ʻoi aku ka maikaʻi inā hoʻolālā maikaʻi ʻia ka hoʻolālā ʻana o ka papahana a me ka waihona waihona, a laila he ʻeha nui kēia.

Akā, ʻoi aku ka hilinaʻi o nā noi pūʻulu e like me ko lākou ʻike? E nānā i kahi hihia: hana mākou i kahi mea hoʻohana, hoʻonui i kāna ʻaoʻao me kekahi wehewehe a hoʻouna iā ia i kahi SMS me kahi huna e hoʻopau i ka hoʻopaʻa inoa. ʻO kēlā mau mea. ʻekolu kelepona i hoʻokahi pūʻulu noi.

JSON-RPC? E hoʻomaha maʻalahi

E nana kakou i ke kii. Hāʻawi ia i kahi ʻōnaehana me nā mea hiki ke loaʻa kiʻekiʻe. ʻElua mau ala kamaʻilio kūʻokoʻa me nā puka SMS. Akā ... he aha kā mākou e ʻike ai? Ke hoʻouna ʻana i kahi SMS, loaʻa kahi hewa 503 - ʻaʻole loaʻa ka lawelawe no ka manawa pōkole. No ka mea Hoʻopili ʻia ka hoʻouna ʻana o SMS i kahi noi pūʻulu, a laila pono e ʻōwili ʻia ke noi holoʻokoʻa. Hoʻopau ʻia nā hana ma ka DBMS. Loaʻa ka mea kūʻai i kahi hewa.

ʻO ka hoʻāʻo hou aʻe ʻo ka hailona. A i ʻole e paʻi hou ka noi i ka node like a hoʻihoʻi hou i kahi hewa, a i ʻole e laki ʻoe a e hoʻokō ʻia. Akā ʻo ka mea nui ʻo ia ma ka liʻiliʻi i ka manawa i hana hewa ʻole kā mākou ʻoihana. He ukana, ʻaʻohe waiwai.

ʻAe, e noʻonoʻo mākou ua hoʻoikaika mākou iā mākou iho (!) A noʻonoʻo i ke koho inā hiki ke hoʻopau ʻia ka noi. A e ho'āʻo mākou e hoʻopau hou i ke koena ma hope o kekahi manawa (ʻO wai? Hoʻoholo ka mua?). Akā, ua mau ka hailona. ʻO ka noi e hoʻouna i ka SMS he 50/50 ka manawa e hāʻule hou.

ʻAe, mai ka ʻaoʻao o ka mea kūʻai aku, ʻaʻole i hilinaʻi ʻia ka lawelawe e like me kā mākou makemake ... pehea e pili ana iā REST?

JSON-RPC? E hoʻomaha maʻalahi

Hoʻohana hou ʻo REST i ka hana kilokilo o HTTP, akā i kēia manawa me nā code pane. Ke loaʻa kahi hewa 503 ma ka puka SMS, hoʻolaha ka hope i kēia hewa i ka mea kaulike. Loaʻa ka mea kaulike i kēia hewa a me ka uhaki ʻole i ka pilina me ka mea kūʻai aku, hoʻouna i ka noi i kahi node ʻē aʻe, e hoʻokō pono ana i ka noi. ʻO kēlā mau mea. loaʻa i ka mea kūʻai aku ka hopena i manaʻo ʻia, a ua hōʻoia ka ʻōnaehana i kona poʻo inoa kiʻekiʻe ʻo "hiki ke loaʻa". Hauʻoli ka mea hoʻohana.

A eia hou ʻaʻole ʻo ia wale nō. ʻAʻole i loaʻa wale i ka mea kaulike kahi helu pane o 503. I ka pane ʻana, e like me ka maʻamau, pono e hāʻawi i kēia code me ke poʻo "Retry-After". Hoʻomaopopo ke poʻo i ka mea kaulike ʻaʻole pono e hoʻopilikia i kēia node ma kēia ala no kahi manawa i ʻōlelo ʻia. A e hoʻouna pololei ʻia nā noi hou e hoʻouna i ka SMS i kahi node ʻaʻohe pilikia me ka puka SMS.

E like me kā mākou e ʻike ai, ʻoi aku ka nui o ka hilinaʻi o JSON-RPC. ʻOiaʻiʻo, ʻoi aku ka maʻalahi o ka hoʻonohonoho paʻa ʻana i ka waihona. Akā ʻo ka mōhai, ma kēia hihia, ʻo ia ka hilinaʻi o ka ʻōnaehana holoʻokoʻa.

Ua like ka hopena me ka mea mua. Ke maʻalahi ka ʻōnaehana, ʻoi aku ka ʻike o JSON-RPC. Inā pili ka papahana i ka loaʻa kiʻekiʻe me kahi haʻahaʻa kiʻekiʻe, ʻike ʻia ʻo REST i kahi hoʻonā pololei, ʻoiai ʻoi aku ka paʻakikī.

He haʻahaʻa ka paepae komo i REST

Manaʻo wau ʻo ka loiloi ma luna, e hōʻole ana i nā stereotypes i hoʻokumu ʻia e pili ana i ka RPC, ua hōʻike maopopo ʻia ʻo ka paepae no ke komo ʻana i REST ʻoi aku ka kiʻekiʻe ma mua o ka RPC. Ma muli o ka pono o ka ʻike hohonu i ke ʻano o ka hana ʻana o HTTP, a me ka pono e loaʻa ka ʻike kūpono e pili ana i nā mea ʻenehana i loaʻa i hiki ke hoʻohana ʻia i nā papahana WEB.

No laila, no ke aha i manaʻo ai ka poʻe he maʻalahi ka REST? ʻO koʻu manaʻo pilikino ʻo kēia ʻike maʻalahi mai ka REST e hōʻike iā lākou iho. ʻO kēlā mau mea. ʻAʻole ʻo REST kahi protocol akā he manaʻo ... ʻaʻohe kūlana maʻamau, aia kekahi mau alakaʻi ... ʻaʻole paʻakikī ʻo REST ma mua o HTTP. ʻIke ʻia ke kūʻokoʻa a me ka anarchy i nā "mea hana kiʻi manuahi".

ʻOiaʻiʻo, ʻaʻole paʻakikī ʻo REST ma mua o HTTP. Akā ʻo HTTP ponoʻī kahi protocol i hoʻolālā maikaʻi ʻia i hōʻoia i kona waiwai i nā makahiki he mau makahiki. Inā ʻaʻohe ʻike hohonu o HTTP ponoʻī, a laila ʻaʻole hiki ke hoʻokolokolo ʻia ʻo REST.

Akā e pili ana iā RPC - hiki iā ʻoe. Ua lawa ka lawe ʻana i kāna kikoʻī. No laila pono ʻoe hupo JSON-RPC? A i ʻole he mea paʻakikī paha ia REST? Hoʻoholo ʻoe.

Ke lana nei koʻu manaʻo ʻaʻole au i hoʻopau i kou manawa.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka