JSON-RPC? REST-и душворро гиред

JSON-RPC? REST-и душворро гиред

Ман боварӣ дорам, ки сарлавҳа вокуниши солимро ба вуҷуд овард - "хайр, боз оғоз шуд ..." Аммо иҷозат диҳед, ки диққати шуморо дар тӯли 5-10 дақиқа ҷалб кунам ва ман кӯшиш мекунам интизориҳои шуморо ноумед накунам.

Сохтори мақола чунин хоҳад буд: як изҳороти қолабӣ гирифта шуда, табиати пайдоиши ин қолаб ошкор карда мешавад. Умедворам, ки ин ба шумо имкон медиҳад, ки ба интихоби парадигмаи мубодилаи маълумот дар лоиҳаҳои худ аз як нуқтаи нав назар кунед.

Барои фаҳмидани он ки RPC чист, ман пешниҳод мекунам, ки стандартро баррасӣ кунам JSON-RPC 2.0. Бо REST возеҳ нест. Ва набояд бошад. Ҳар чизе ки шумо бояд дар бораи REST донед - он аз он фарқ намекунад HTTP.

Дархостҳои RPC тезтар ва самараноктаранд, зеро онҳо ба шумо имкон медиҳанд, ки дархостҳои дастаҷамъиро пешниҳод кунед.

Гап дар он аст, ки дар RPC шумо метавонед дар як дархост якбора якчанд расмиётро даъват кунед. Масалан, корбар эҷод кунед, ба ӯ аватар илова кунед ва дар ҳамон дархост ба ӯ ба баъзе мавзӯъҳо обуна шавед. Танҳо як дархост ва чӣ қадар фоида!

Дар ҳақиқат, агар шумо танҳо як гиреҳи пушти сар дошта бошед, он бо дархости партия тезтар ба назар мерасад. Зеро се дархости REST барои барқарор кардани пайвастҳо аз як гиреҳ се маротиба бештар захираҳоро талаб мекунад.

JSON-RPC? REST-и душворро гиред

Дар хотир доред, ки дархости аввал дар ҳолати REST бояд ID-и корбарро баргардонад, то дархостҳои минбаъда иҷро шаванд. Ин хам ба натичаи умумй таъсири манфй мерасонад.

Аммо чунин инфрасохторҳоро танҳо дар қарорҳои дохилӣ ва Enterprise пайдо кардан мумкин аст. Ҳамчун чораи охирин, дар лоиҳаҳои хурди WEB. Аммо қарорҳои мукаммали WEB ва ҳатто онҳое, ки HighLoad номида мешаванд, арзиш надоранд. Инфрасохтори онҳо бояд ба меъёрҳои мавҷудият ва сарбории баланд ҷавобгӯ бошад. Ва тасвир тағйир меёбад.

JSON-RPC? REST-и душворро гиред

Каналҳои фаъолияти инфрасохторӣ дар як сенария бо ранги сабз ишора карда шудаанд. Аҳамият диҳед, ки RPC ҳоло чӣ гуна рафтор мекунад. Дархост инфрасохторро танҳо дар як поя аз мувозинат то пуштибон истифода мебарад. Дар ҳоле, ки REST ҳанӯз дар дархости аввал аз даст медиҳад, он вақти гумшударо бо истифода аз тамоми инфрасохтор ҷуброн мекунад.

Ба сценария на ду дархости бойшавӣ, балки, гӯем, панҷ ё даҳ... ва ба саволи «ҳоло кй пирӯз мешавад?» -ро ворид кардан кифоя аст. норавшан мегардад.

Ман таклиф мекунам, ки ба проблема боз хам васеътар назар андозем. Диаграмма нишон медиҳад, ки чӣ гуна каналҳои инфрасохтор истифода мешаванд, аммо инфрасохтор бо каналҳо маҳдуд нест. Як ҷузъи муҳими инфрасохтори баландбор кэшҳо мебошанд. Акнун биёед як навъ артефакти корбарро гирем. Батакрор. Биёед 32 маротиба бигӯем.

JSON-RPC? REST-и душворро гиред

Бубинед, ки чӣ гуна инфрасохтори RPC барои қонеъ кардани талаботи бори баланд ба таври назаррас беҳтар шудааст. Гап дар он аст, ки REST бар хилофи RPC қудрати пурраи протоколи HTTP-ро истифода мебарад. Дар диаграммаи боло, ин қудрат тавассути усули дархост - GET амалӣ карда мешавад.

Усулҳои HTTP, дар байни чизҳои дигар, стратегияҳои кэш доранд. Шумо метавонед онҳоро дар ҳуҷҷатҳо дар зер пайдо кунед HTTP. Барои RPC дархостҳои POST истифода мешаванд, ки идемпотент ҳисобида намешаванд, яъне такрори такрории ҳамон дархостҳои POST метавонад натиҷаҳои гуногунро баргардонад (масалан, пас аз фиристодани ҳар як шарҳ нусхаи дигари ин шарҳ пайдо мешавад) (манбаъ).

Дар натиҷа, RPC наметавонад кэшҳои инфрасохторро самаранок истифода барад. Ин ба зарурати "ворид кардани" кэшҳои нармафзор оварда мерасонад. Диаграмма Редисро дар ин нақш нишон медиҳад. Кэши нармафзор, дар навбати худ, аз таҳиякунанда талаб мекунад, ки як қабати иловагии код ва тағироти назаррасро дар меъморӣ илова кунад.

Биёед ҳоло ҳисоб кунем, ки чанд дархости REST ва RPC дар инфрасохтори баррасишаванда "таваллуд" кардаанд?

Пурсишҳо
паёмдони
ба пуштибонӣ
ба DBMS
ба кэши нарм (Redis)
Дар маҷмӯъ

РЕТ
1 / 32 *
1
1
0
3 / 35

CPR
32
32
1
31
96

[*] дар беҳтарин ҳолат (агар кэши маҳаллӣ истифода шавад) 1 дархост (як!), дар бадтарин ҳолат 32 дархости воридотӣ.

Дар муқоиса бо схемаи аввал, фарқият назаррас аст. Акнун фоидаи REST равшан мешавад. Аммо ман тавсия медиҳам, ки дар он ҷо бас нашавед. Инфрасохтори таҳияшуда CDN-ро дар бар мегирад. Аксар вақт он инчунин масъалаи муқовимат ба ҳамлаҳои DDoS ва DoS -ро ҳал мекунад. Мо ба даст меорем:

JSON-RPC? REST-и душворро гиред

Дар ин ҷо корҳо барои RPC хеле бад мешаванд. RPC танҳо қодир нест, ки сарбории корро ба CDN вогузор кунад. Мо метавонем танҳо ба системаҳо барои муқобила бо ҳамлаҳо такя кунем.

Оё дар ин ҷо хотима додан мумкин аст? Ва боз, не. Усулҳои HTTP, тавре ки дар боло зикр шуд, "ҷодугарӣ" -и худро доранд. Ва бесабаб нест, ки усули GET дар Интернет васеъ истифода мешавад. Аҳамият диҳед, ки ин усул қодир ба дастрасӣ ба як порчаи мундариҷа аст, қодир аст шартҳоеро муқаррар кунад, ки унсурҳои инфрасохтор пеш аз интиқоли назорат ба коди шумо шарҳ диҳанд ва ғайра. Ҳамаи ин ба шумо имкон медиҳад, ки инфрасохторҳои фасеҳ ва идорашаванда эҷод кунед, ки ҷараёни воқеан зиёди дархостҳоро иҷро карда метавонанд. Аммо дар RPC ин усул... сарфи назар карда мешавад.

Пас чаро афсонае аст, ки дархостҳои дастаҷамъӣ (RPC) ин қадар устувортаранд? Шахсан ба ман чунин менамояд, ки аксари лоиҳаҳо танҳо ба сатҳи рушд намерасанд, ки REST тавоноии худро нишон диҳад. Гузашта аз ин, дар лоиҳаҳои хурд, ӯ бештар омода аст, ки заифии худро нишон диҳад.

Интихоби REST ё RPC интихоби ихтиёрии шахс дар лоиҳа нест. Ин интихоб бояд ба талаботи лоиҳа ҷавобгӯ бошад. Агар лоиҳа қодир бошад, ки ҳама чизро аз REST берун кунад ва он воқеан ба он ниёз дорад, пас REST интихоби олӣ хоҳад буд.

Аммо агар, барои ба даст овардани тамоми бартариҳои REST, ба шумо лозим аст, ки мутахассисони devops барои лоиҳа барои зуд васеъ кардани инфрасохтор, маъмурон барои идоракунии инфрасохтор, меъморро барои тарҳрезии тамоми қабатҳои хидмати WEB... ва лоиҳа киро кунед. , дар як вакт се куттй маргарин мефурушад... Ман бо РПК мемондам, зеро... ин протокол бештар фоидаовар аст. Он дониши амиқро дар бораи чӣ гуна кор кардани кэшҳо ва инфрасохтор талаб намекунад, балки таҳиякунандаро ба зангҳои оддӣ ва фаҳмо ба расмиёти лозима равона мекунад. Тиҷорат хушбахт хоҳад буд.

Дархостҳои RPC боэътимодтаранд, зеро онҳо метавонанд дархостҳои партияро дар як транзаксия иҷро кунанд

Ин моликияти RPC бартарии муайян аст, зеро Нигоҳ доштани пойгоҳи додаҳо осон аст. Аммо бо REST он торафт мураккабтар мешавад. Дархостҳо метавонанд ба гиреҳҳои гуногуни пуштибонӣ номувофиқ ворид шаванд.

Ин «камбуди»-и REST як паҳлӯи бартарии он аст, ки дар боло тавсиф шудааст - қобилияти истифодаи самараноки тамоми захираҳои инфрасохтор. Агар инфрасохтор суст тарҳрезӣ шуда бошад ва ҳатто бештар аз он, агар меъмории лоиҳа ва махсусан пойгоҳи додаҳо суст тарҳрезӣ шуда бошад, пас ин дар ҳақиқат як дарди бузург аст.

Аммо оё дархостҳои гурӯҳӣ ҳамон қадар боэътимоданд? Биёед як парвандаро дида бароем: мо корбарро эҷод мекунем, профили ӯро бо баъзе тавсифҳо ғанӣ мегардонем ва ба ӯ бо сирри бақайдгирӣ SMS мефиристем. Онхое. се занг дар як дархости партия.

JSON-RPC? REST-и душворро гиред

Биёед ба диаграмма назар андозем. Он инфрасохтори дорои унсурҳои дастрасии баландро пешниҳод мекунад. Ду канали мустақили алоқа бо шлюзи SMS мавҷуд аст. Аммо... мо чиро мебинем? Ҳангоми фиристодани SMS хатогии 503 пайдо мешавад - хидмат муваққатан дастнорас аст. Зеро Ирсоли SMS дар як дархости бастабандӣ баста мешавад, пас тамоми дархост бояд баргардонида шавад. Амалҳо дар DBMS бекор карда мешаванд. Муштарӣ хатогиро қабул мекунад.

Кӯшиши навбатӣ лотерея аст. Ё дархост ба ҳамон гиреҳ такрор мешавад ва боз хато бармегардонад, ё шумо бахти шумо хоҳад буд ва он иҷро мешавад. Аммо чизи асосй он аст, ки акаллан як бор инфрасохтори мо бефоида кор кардааст. Боре буд, вале фоидае набуд.

Хуб, биёед тасаввур кунем, ки мо худамонро сахт (!) карда, дар бораи вариант фикр кардем, ки дархостро қисман бомуваффақият иҷро кардан мумкин аст. Ва мо кӯшиш мекунем, ки боқимондаро пас аз чанд фосилаи вақт боз анҷом диҳем (Кадомаш? Оё фронт тасмим мегирад?). Аммо лотерея бетағйир монд. Дархост барои ирсоли SMS 50/50 имкони дубора ноком шудан дорад.

Розӣ шавед, аз ҷониби муштарӣ, хидмат он қадар боэътимод ба назар намерасад, ки мо мехоҳем... дар бораи REST чӣ гуфтан мумкин аст?

JSON-RPC? REST-и душворро гиред

REST боз ҷодугарии HTTP-ро истифода мебарад, аммо ҳоло бо рамзҳои ҷавоб. Вақте ки хатогии 503 дар шлюзи SMS рух медиҳад, пуштибон ин хаторо ба мувозинат пахш мекунад. Мувозинат ин хаторо қабул мекунад ва бидуни қатъ кардани робита бо муштарӣ дархостро ба гиреҳи дигар мефиристад, ки дархостро бомуваффақият коркард мекунад. Онхое. муштарӣ натиҷаи интизорравандаро ба даст меорад ва инфрасохтор унвони баланди "дастраси баланд" -ро тасдиқ мекунад. Истифодабаранда хушбахт аст.

Ва боз ин ҳама нест. Мувозинат танҳо рамзи ҷавобии 503-ро нагирифт. Ҳангоми посух додан, мувофиқи стандарт, тавсия дода мешавад, ки ин кодро бо сарлавҳаи "Бозсозӣ-Баъд" пешниҳод кунед. Сарлавҳа ба мувозинат равшан мекунад, ки он набояд ба ин гиреҳ дар ин масир дар муддати муайян халал расонад. Ва дархостҳои навбатии ирсоли SMS мустақиман ба гиреҳе фиристода мешаванд, ки бо шлюзи SMS мушкилот надорад.

Тавре ки мо мебинем, эътимоднокии JSON-RPC аз ҳад зиёд арзёбӣ мешавад. Воқеан, ташкили мувофиқат дар базаи маълумот осонтар аст. Аммо қурбонӣ, дар ин ҳолат, эътимоднокии система дар маҷмӯъ хоҳад буд.

Хулоса асосан ба хулосаи қаблӣ монанд аст. Вақте ки инфрасохтор оддӣ аст, возеҳи JSON-RPC бешубҳа як плюс аст. Агар лоиҳа дастрасии баландро бо сарбории баланд дар бар гирад, REST як ҳалли дурусттар, ҳарчанд мураккабтар ба назар мерасад.

Ҳадди вуруд ба REST пасттар аст

Ман фикр мекунам, ки таҳлили дар боло овардашуда, стереотипҳои муқарраршударо дар бораи RPC барҳам дода, ба таври возеҳ нишон дод, ки ҳадди вуруд ба REST бешубҳа аз RPC баландтар аст. Ин ба зарурати фаҳмиши амиқ дар бораи чӣ гуна кор кардани HTTP, инчунин зарурати доштани дониши кофӣ дар бораи унсурҳои мавҷудаи инфрасохтор, ки метавонанд ва бояд дар лоиҳаҳои WEB истифода шаванд, вобаста аст.

Пас, чаро бисёриҳо фикр мекунанд, ки REST соддатар мешавад? Фикри шахсии ман ин аст, ки ин соддагии намоён аз REST пайдо мешавад. Онхое. REST протокол нест, балки консепсия аст... REST стандарт надорад, баъзе роҳнамоҳо вуҷуд доранд... REST аз HTTP мураккабтар нест. Озодии зоњир ва анархия «санъаткорони озод»-ро ба худ мекашад.

Албатта, REST аз HTTP мураккабтар нест. Аммо худи HTTP як протоколи хуб тарҳрезишудаест, ки арзиши худро дар тӯли даҳсолаҳо собит кардааст. Агар фаҳмиши амиқи худи HTTP мавҷуд набошад, REST-ро доварӣ кардан мумкин нест.

Аммо дар бораи RPC - шумо метавонед. Барои гирифтани тавсифи он кифоя аст. Пас ба шумо лозим аст беақл JSON-RPC? Ё ин ҳанӯз ҳам мушкили REST аст? Шумо қарор медиҳед.

Ман самимона умедворам, ки вақти шуморо беҳуда сарф накардаам.

Манбаъ: will.com

Илова Эзоҳ