JSON-RPC? Siv dag REST

JSON-RPC? Siv dag REST

Kuv paub tseeb tias cov ntawv xov xwm ua rau muaj kev noj qab haus huv - "zoo, nws tau pib dua ..." Tab sis cia kuv ntes koj lub siab rau 5-10 feeb, thiab kuv yuav sim tsis txhob poob siab rau koj qhov kev cia siab.

Cov qauv ntawm tsab xov xwm yuav yog raws li nram no: ib tug stereotypical nqe lus raug coj mus rau thiab lub "qhov" ntawm qhov tshwm sim ntawm no stereotype tau tshwm sim. Kuv vam tias qhov no yuav tso cai rau koj los saib cov kev xaiv ntawm cov ntaub ntawv sib pauv hloov pauv hauv koj cov haujlwm los ntawm lub kaum ntse ntse tshiab.

Yuav kom paub meej txog dab tsi RPC yog, kuv thov kom xav txog tus qauv JSON-RPC 2.0. Nrog REST tsis muaj qhov tseeb. Thiab nws yuav tsum tsis txhob yuav. Txhua yam koj yuav tsum paub txog REST - nws yog indistinguishable los ntawm HTTP.

Kev thov RPC sai dua thiab ua haujlwm tau zoo dua vim tias lawv tso cai rau koj los ua batch thov.

Lub ntsiab lus yog tias hauv RPC koj tuaj yeem hu rau ntau cov txheej txheem ib zaug hauv ib qho kev thov. Piv txwv li, tsim ib tus neeg siv, ntxiv tus avatar rau nws thiab, hauv tib qhov kev thov, sau npe rau nws rau qee cov ntsiab lus. Tsuas yog ib qho kev thov, thiab muaj txiaj ntsig npaum li cas!

Tseeb, yog tias koj tsuas muaj ib qho backend node, nws yuav zoo li sai dua nrog kev thov batch. Vim tias peb qhov kev thov REST yuav xav tau peb zaug ntxiv cov peev txheej los ntawm ib qho los tsim kev sib txuas.

JSON-RPC? Siv dag REST

Nco ntsoov tias thawj qhov kev thov nyob rau hauv rooj plaub ntawm REST yuav tsum xa rov qab tus neeg siv ID txhawm rau ua kom tau txais kev thov tom ntej. Uas tseem cuam tshuam rau tag nrho cov txiaj ntsig.

Tab sis xws li infrastructures tsuas yog muaj nyob rau hauv lub tsev daws teeb meem thiab Enterprise. Raws li qhov chaw kawg, hauv WEB cov haujlwm me me. Tab sis cov kev daws teeb meem WEB tag nrho, thiab txawm tias hu ua HighLoad, tsis tsim nyog tsim. Lawv cov infrastructure yuav tsum ua kom tau raws li cov txheej txheem ntawm kev muaj thiab thauj khoom. Thiab daim duab hloov pauv.

JSON-RPC? Siv dag REST

Infrastructure kev ua ub no channel nyob rau hauv tib yam scenario yog cim nyob rau hauv ntsuab. Daim ntawv ceeb toom yuav ua li cas RPC coj tam sim no. Qhov kev thov siv cov txheej txheem ntawm tsuas yog ib ceg los ntawm qhov sib npaug mus rau qhov backend. Thaum REST tseem poob hauv thawj qhov kev thov, nws ua rau lub sijhawm poob siv tag nrho cov txheej txheem.

Nws yog txaus kom nkag mus rau hauv tsab ntawv tsis yog ob qhov kev thov kom muaj txiaj ntsig, tab sis, hais, tsib lossis kaum ... thiab cov lus teb rau lo lus nug "leej twg yeej tam sim no?" ua tsis meej.

Kuv thov kom ua tib zoo saib qhov teeb meem. Daim duab qhia tau hais tias yuav siv cov kev tsim kho vaj tse li cas, tab sis kev tsim kho vaj tse tsis txwv rau cov channel. Ib qho tseem ceeb ntawm cov khoom siv thauj khoom hnyav yog caches. Cia peb tam sim no tau txais qee yam ntawm cov neeg siv khoom kos duab. Rov ua dua. Wb hais 32 zaus.

JSON-RPC? Siv dag REST

Saib yuav ua li cas RPC infrastructure tau txhim kho tau zoo kom ua tau raws li qhov xav tau ntawm kev thauj khoom siab. Qhov tshaj plaws yog tias REST siv tag nrho lub zog ntawm HTTP raws tu qauv, tsis zoo li RPC. Hauv daim duab saum toj no, lub hwj chim no tau pom los ntawm txoj kev thov - GET.

HTTP txoj kev, ntawm lwm yam, muaj cov tswv yim caching. Koj tuaj yeem pom lawv hauv cov ntaub ntawv ntawm HTTP. Rau RPC, POST thov raug siv, uas tsis suav tias yog qhov tsis txaus ntseeg, uas yog, rov ua dua ntawm tib qhov kev thov POST tuaj yeem rov qab tau cov txiaj ntsig sib txawv (piv txwv li, tom qab txhua nqe lus xa tawm, lwm daim ntawv ntawm cov lus no yuav tshwm sim) (qhov chaw).

Yog li ntawd, RPC tsis tuaj yeem siv cov cuab yeej cuab tam caches zoo. Qhov no ua rau qhov xav tau "ntshuam" software caches. Daim duab qhia Redis hauv lub luag haujlwm no. Lub software cache, nyob rau hauv lem, xav kom tus tsim tawm ntxiv ib txheej ntxiv ntawm cov cai thiab cov kev hloov pauv pom hauv architecture.

Tam sim no cia peb suav pes tsawg qhov kev thov REST thiab RPC "muab yug" rau hauv cov txheej txheem hauv kev txiav txim siab?

Thov
Inbox
rau backend
rau DBMS
rau soft cache (redis)
Tag nrho

SO
1 / 32 *
1
1
0
3 / 35

RPC
32
32
1
31
96

[*] nyob rau hauv qhov zoo tshaj plaws (yog tias siv cov cache hauv zos) 1 thov (ib qho!), qhov phem tshaj 32 qhov kev thov tuaj.

Piv nrog rau thawj lub tswv yim, qhov sib txawv yog qhov txawv. Tam sim no qhov txiaj ntsig ntawm REST tau pom meej. Tab sis kuv xav kom tsis txhob tso tseg. Cov txheej txheem tsim kho suav nrog CDN. Feem ntau nws kuj daws qhov teeb meem ntawm kev tawm tsam DDoS thiab DoS tawm tsam. Peb tau txais:

JSON-RPC? Siv dag REST

Qhov no yog qhov uas tej yam phem heev rau RPC. RPC tsuas yog tsis muaj peev xwm xa cov haujlwm ua haujlwm rau CDN. Peb tsuas tuaj yeem tso siab rau cov tshuab los tawm tsam kev tawm tsam.

Puas muaj peev xwm xaus ntawm no? Thiab dua, tsis muaj. HTTP txoj kev, raws li tau hais los saum no, muaj lawv tus kheej "khawv koob". Thiab nws tsis yog vim li cas GET txoj kev siv dav hauv Is Taws Nem. Nco ntsoov tias txoj kev no tuaj yeem nkag mus rau ib qho ntawm cov ntsiab lus, tuaj yeem teeb tsa cov txheej txheem uas cov ntsiab lus tuaj yeem txhais tau ua ntej kev tswj hwm raug xa mus rau koj cov cai, thiab lwm yam. Tag nrho cov no tso cai rau koj los tsim cov kev hloov pauv tau yooj yim, tswj tau yooj yim uas tuaj yeem daws cov kev thov loj heev. Tab sis hauv RPC txoj kev no ... tsis quav ntsej.

Yog li yog vim li cas cov lus dab neeg hais tias batch thov (RPC) sai dua? Tus kheej, nws zoo li kuv tias feem ntau cov haujlwm tsuas yog tsis mus txog theem ntawm kev txhim kho qhov twg REST tuaj yeem qhia nws lub zog. Ntxiv mus, nyob rau hauv tej yaam num me, nws txaus siab los qhia nws qhov tsis muaj zog.

Kev xaiv ntawm REST lossis RPC tsis yog qhov kev xaiv ntawm ib tus neeg hauv ib qhov project. Qhov kev xaiv no yuav tsum ua tau raws li qhov yuav tsum tau ua ntawm qhov project. Yog tias ib qhov project tuaj yeem nyem txhua yam nws tuaj yeem tawm ntawm REST, thiab nws xav tau tiag tiag, ces REST yuav yog qhov kev xaiv zoo heev.

Tab sis yog tias, txhawm rau kom tau txais tag nrho cov txiaj ntsig ntawm REST, koj yuav tsum ntiav cov kws tshaj lij devops rau qhov project kom nrawm nrawm cov txheej txheem, cov thawj coj tswj hwm kev tsim kho vaj tse, tus kws tsim vaj tsev tsim txhua txheej ntawm WEB kev pabcuam ... thiab qhov project. , tib lub sijhawm, muag peb pob khoom ntawm margarine ib hnub ... Kuv yuav lo nrog RPC, vim ... raws tu qauv no yog utilitarian ntau. Nws yuav tsis xav tau kev paub tob txog li cas caches thiab infrastructure ua haujlwm, tab sis yuav tsom rau tus tsim tawm ntawm kev hu xov tooj yooj yim thiab nkag siab rau cov txheej txheem nws xav tau. Kev lag luam yuav zoo siab.

Kev thov RPC muaj kev ntseeg siab dua vim tias lawv tuaj yeem ua tiav cov lus thov hauv ib qho kev sib pauv

Cov cuab yeej ntawm RPC no yog qhov txiaj ntsig zoo, vim Nws yog ib qho yooj yim kom khaws cov ntaub ntawv sib xws. Tab sis nrog REST nws tau txais ntau thiab nyuaj. Cov lus thov tuaj yeem tuaj yeem tsis sib xws rau qhov sib txawv backend nodes.

Qhov "qhov tsis zoo" ntawm REST yog qhov ntxeev ntawm nws qhov txiaj ntsig tau piav qhia saum toj no - muaj peev xwm siv tau tag nrho cov peev txheej hauv vaj tse. Yog tias cov txheej txheem tsim tsis zoo, thiab ntau dua yog tias cov qauv tsim ntawm qhov project thiab cov ntaub ntawv tshwj xeeb yog tsim tsis zoo, ces qhov no yog qhov mob loj heev.

Tab sis puas yog batch thov kom ntseeg tau raws li lawv zoo li? Cia peb saib ib rooj plaub: peb tsim ib tus neeg siv, txhawb nws qhov profile nrog qee qhov kev piav qhia thiab xa nws SMS nrog daim ntawv zais cia kom ua tiav kev sau npe. Cov. peb hu hauv ib daim ntawv thov.

JSON-RPC? Siv dag REST

Cia peb saib daim duab. Nws nthuav tawm ib qho kev tsim kho vaj tse nrog cov khoom muaj ntau. Muaj ob txoj kev sib txuas lus ywj pheej nrog SMS rooj vag. Tab sis ... peb pom dab tsi? Thaum xa SMS, qhov yuam kev 503 tshwm sim - qhov kev pabcuam tsis muaj nyob rau ib ntus. Vim Kev xa SMS tau ntim rau hauv ib daim ntawv thov, tom qab ntawd tag nrho qhov kev thov yuav tsum tau muab rov qab. Kev ua hauv DBMS raug tso tseg. Tus neeg siv khoom tau txais qhov yuam kev.

Qhov kev sim tom ntej yog rho npe. Txawm hais tias qhov kev thov yuav ntaus tib lub node dua thiab rov qab ua yuam kev, lossis koj yuav muaj hmoo thiab nws yuav raug tua. Tab sis qhov tseem ceeb tshaj plaws yog tias tsawg kawg ib zaug peb cov kev tsim kho vaj tse twb ua haujlwm tsis muaj nuj nqis. Muaj kev thauj khoom, tab sis tsis muaj txiaj ntsig.

Okay, cia peb xav txog tias peb tau strained peb tus kheej (!) thiab xav los ntawm kev xaiv thaum qhov kev thov tuaj yeem ua tiav ib nrab ua tiav. Thiab peb yuav sim ua kom tiav qhov seem ntxiv tom qab qee lub sij hawm luv luv (Qhov twg? Ua ntej txiav txim siab?). Tab sis qhov rho npe tseem zoo li qub. Qhov kev thov xa SMS muaj 50/50 lub sijhawm ua tsis tau dua.

Pom zoo, los ntawm cov neeg siv khoom, kev pabcuam tsis zoo li kev ntseeg siab raws li peb xav tau ... li cas txog REST?

JSON-RPC? Siv dag REST

REST siv cov khawv koob ntawm HTTP dua, tab sis tam sim no nrog cov lus teb. Thaum qhov yuam kev 503 tshwm sim ntawm SMS lub rooj vag, lub backend tshaj tawm qhov yuam kev no mus rau qhov sib npaug. Tus balancer tau txais qhov kev ua yuam kev no thiab tsis ua txhaum kev sib txuas nrog tus neeg siv khoom, xa qhov kev thov mus rau lwm qhov, uas ua tiav cov txheej txheem thov. Cov. tus neeg siv khoom tau txais cov txiaj ntsig xav tau, thiab cov cuab yeej tsim kho tau lees paub nws lub npe siab ntawm "zoo heev". Tus neeg siv zoo siab.

Thiab dua qhov ntawd tsis yog tag nrho. Tus ntsuas ntsuas tsis tau txais cov lus teb ntawm 503 xwb. Thaum teb, raws li tus qauv, nws raug nquahu kom muab cov cai no nrog rau "Retry-After" header. Lub header ua kom pom tseeb rau tus balancer tias nws tsis tsim nyog cuam tshuam qhov node ntawm txoj kev no rau lub sijhawm teev tseg. Thiab cov kev thov tom ntej kom xa SMS yuav raug xa ncaj qha mus rau ib qho uas tsis muaj teeb meem nrog lub rooj vag SMS.

Raws li peb tuaj yeem pom, qhov kev ntseeg siab ntawm JSON-RPC yog overrated. Qhov tseeb, nws yooj yim dua los npaj kev sib xws hauv cov ntaub ntawv. Tab sis qhov kev txi, nyob rau hauv cov ntaub ntawv no, yuav muaj kev ntseeg siab ntawm lub system tag nrho.

Qhov kev txiav txim siab zoo ib yam li yav dhau los. Thaum cov txheej txheem yooj yim, qhov pom tseeb ntawm JSON-RPC yog qhov ntxiv. Yog tias qhov project cuam tshuam nrog kev muaj peev xwm siab nrog kev thauj khoom siab, REST zoo li qhov tseeb dua, txawm tias nyuaj dua, kev daws teeb meem.

Kev nkag mus rau REST yog qis dua

Kuv xav tias qhov kev ntsuam xyuas saum toj no, debunking cov qauv tsim los ntawm RPC, qhia meej meej tias qhov pib nkag mus rau REST yog qhov tsis txaus ntseeg siab dua rau hauv RPC. Qhov no yog vim qhov xav tau kom nkag siab tob txog qhov HTTP ua haujlwm li cas, nrog rau qhov xav tau kom muaj kev paub txaus txog cov txheej txheem uas twb muaj lawm uas tuaj yeem siv tau thiab yuav tsum tau siv hauv WEB cov haujlwm.

Yog li vim li cas ntau tus neeg xav tias REST yuav yooj yim dua? Kuv tus kheej lub tswv yim yog tias qhov pom tseeb qhov yooj yim no los ntawm REST manifests lawv tus kheej. Cov. REST tsis yog ib txoj cai tab sis ib lub tswv yim... REST tsis muaj tus qauv, muaj qee cov lus qhia... REST tsis nyuaj dua HTTP. Pom meej kev ywj pheej thiab anarchy nyiam "free artists".

Tau kawg, REST tsis yog qhov nyuaj tshaj li HTTP. Tab sis HTTP nws tus kheej yog tus qauv tsim zoo uas tau ua pov thawj nws muaj nqis ntau xyoo lawm. Yog tias tsis muaj kev nkag siab tob txog HTTP nws tus kheej, ces REST tsis tuaj yeem txiav txim.

Tab sis hais txog RPC - koj tuaj yeem ua tau. Nws yog txaus coj nws specification. Yog li koj xav tau ruam JSON-RPC? Los yog nws tseem dag REST? Koj txiav txim siab.

Kuv vam tias kuv tsis tau nkim koj lub sijhawm.

Tau qhov twg los: www.hab.com

Ntxiv ib saib