Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

Kini o le fi ipa mu iru ile-iṣẹ nla bii Lamoda, pẹlu ilana ṣiṣanwọle ati awọn dosinni ti awọn iṣẹ isọpọ, lati yi ọna rẹ pada ni pataki? Iwuri le yatọ patapata: lati isofin si ifẹ lati ṣe idanwo atorunwa ninu gbogbo awọn olupilẹṣẹ.

Ṣugbọn eyi ko tumọ si pe o ko le gbẹkẹle awọn anfani afikun. Sergey Zaika yoo sọ fun ọ kini gangan ti o le ṣẹgun ti o ba ṣe imuse API ti o dari awọn iṣẹlẹ lori Kafka (diẹ diẹ). Dajudaju yoo tun jẹ ọrọ nipa awọn iyaworan nla ati awọn iwadii ti o nifẹ - idanwo naa ko le ṣe laisi wọn.

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

AlAIgBA: Nkan yii da lori awọn ohun elo lati ipade ti Sergey waye ni Oṣu kọkanla ọdun 2018 lori HighLoad ++. Iriri igbesi aye Lamoda ti ṣiṣẹ pẹlu Kafka ṣe ifamọra awọn olutẹtisi ko kere ju awọn ijabọ miiran lọ lori iṣeto naa. A ro pe eyi jẹ apẹẹrẹ ti o dara julọ ti otitọ pe o le ati pe o yẹ ki o wa awọn eniyan ti o nifẹ nigbagbogbo, ati awọn oluṣeto ti HighLoad ++ yoo tẹsiwaju lati gbiyanju lati ṣẹda bugbamu ti o tọ si eyi.

Nipa ilana naa

Lamoda jẹ pẹpẹ e-commerce nla kan ti o ni ile-iṣẹ olubasọrọ tirẹ, iṣẹ ifijiṣẹ (ati ọpọlọpọ awọn alafaramo), ile-iṣere fọto kan, ile itaja nla kan, ati pe gbogbo eyi n ṣiṣẹ lori sọfitiwia tirẹ. Awọn dosinni ti awọn ọna isanwo lo wa, awọn alabaṣiṣẹpọ b2b ti o le lo diẹ ninu tabi gbogbo awọn iṣẹ wọnyi ti wọn fẹ lati mọ alaye ti ode-ọjọ lori awọn ọja wọn. Ni afikun, Lamoda nṣiṣẹ ni awọn orilẹ-ede mẹta lẹgbẹẹ Russian Federation ati pe ohun gbogbo yatọ diẹ nibẹ. Ni apapọ, o ṣee ṣe diẹ sii ju awọn ọna ọgọrun lọ lati tunto aṣẹ tuntun kan, eyiti o gbọdọ ṣiṣẹ ni ọna tirẹ. Gbogbo eyi n ṣiṣẹ pẹlu iranlọwọ ti awọn dosinni ti awọn iṣẹ ti o sọrọ nigbakan ni awọn ọna ti kii ṣe kedere. Eto aringbungbun tun wa ti ojuse akọkọ jẹ awọn ipo aṣẹ. A n pe ni BOB, Mo ṣiṣẹ pẹlu rẹ.

Ọpa agbapada pẹlu awọn iṣẹlẹ-iwakọ API

Ọrọ awọn iṣẹlẹ-iwakọ jẹ gige pupọ; diẹ siwaju a yoo ṣalaye ni alaye diẹ sii kini itumọ nipasẹ eyi. Emi yoo bẹrẹ pẹlu ọrọ-ọrọ ninu eyiti a pinnu lati gbiyanju awọn iṣẹlẹ-ìṣó API ona ni Kafka.

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

Ninu ile itaja eyikeyi, ni afikun si awọn aṣẹ fun eyiti awọn alabara sanwo, awọn akoko wa nigbati ile itaja nilo lati da owo pada nitori ọja naa ko baamu alabara. Eyi jẹ ilana kukuru kukuru: a ṣalaye alaye naa, ti o ba jẹ dandan, ati gbe owo naa.

Ṣugbọn ipadabọ naa di idiju diẹ sii nitori awọn iyipada ninu ofin, ati pe a ni lati ṣe imuse microservice lọtọ fun rẹ.

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

Iwuri wa:

  1. Ofin FZ-54 - ni kukuru, ofin nilo ijabọ si ọfiisi owo-ori nipa gbogbo iṣowo owo, jẹ ipadabọ tabi iwe-ẹri, laarin SLA kukuru kukuru ti iṣẹju diẹ. A, gẹgẹbi ile-iṣẹ iṣowo e-commerce, ṣe ọpọlọpọ awọn iṣẹ ṣiṣe. Ni imọ-ẹrọ, eyi tumọ si ojuse tuntun (ati nitorinaa iṣẹ tuntun) ati awọn ilọsiwaju ni gbogbo awọn eto ti o kan.
  2. BOB pipin jẹ iṣẹ akanṣe inu ti ile-iṣẹ lati ṣe iranlọwọ BOB lati nọmba nla ti awọn ojuse ti kii ṣe pataki ati dinku idiju gbogbogbo rẹ.

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

Aworan yi fihan awọn ọna ṣiṣe Lamoda akọkọ. Bayi ọpọlọpọ ninu wọn jẹ diẹ sii a constellation ti 5-10 microservices ni ayika kan sunki monolith. Wọn ti dagba laiyara, ṣugbọn a n gbiyanju lati jẹ ki wọn kere, nitori gbigbe awọn ajẹkù ti a yan ni aarin jẹ ẹru - a ko le gba laaye lati ṣubu. A fi agbara mu lati ṣe ifipamọ gbogbo awọn paṣipaarọ (awọn itọka) ati ki o ṣe akiyesi otitọ pe eyikeyi ninu wọn le yipada lati ko si.

BOB tun ni ọpọlọpọ awọn paṣipaarọ: awọn ọna isanwo, awọn ọna ṣiṣe ifijiṣẹ, awọn eto iwifunni, ati bẹbẹ lọ.

BOB ni imọ-ẹrọ jẹ:

  • ~ 150k awọn ila ti koodu + ~ 100k awọn ila ti awọn idanwo;
  • php7.2 + Zend 1 & Symfony irinše 3;
  • > 100 APIs & ~ 50 ti o njade lo awọn akojọpọ;
  • Awọn orilẹ-ede 4 pẹlu ọgbọn iṣowo tiwọn.

Gbigbe BOB jẹ gbowolori ati irora, iye koodu ati awọn iṣoro ti o yanju jẹ pe ko si ẹnikan ti o le fi gbogbo rẹ sinu ori wọn. Ni gbogbogbo, awọn idi pupọ lo wa lati jẹ ki o rọrun.

Ilana pada

Ni ibẹrẹ, awọn ọna ṣiṣe meji ni ipa ninu ilana: BOB ati Isanwo. Bayi meji diẹ han:

  • Iṣẹ Fiscalization, eyiti yoo ṣe abojuto awọn iṣoro pẹlu inawo ati ibaraẹnisọrọ pẹlu awọn iṣẹ ita.
  • Ọpa agbapada, eyiti o ni irọrun ni awọn paṣipaaro tuntun ki o ma ba fi BOB naa kun.

Bayi ilana naa dabi eyi:

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

  1. BOB gba ibeere kan fun agbapada.
  2. BOB sọrọ nipa Ọpa Agbapada yii.
  3. Ọpa Agbapada naa sọ fun Isanwo: “Pada owo naa pada.”
  4. Owo sisan pada owo.
  5. Ọpa agbapada ati BOB mu awọn ipo ṣiṣẹpọ pẹlu ara wọn, nitori bayi wọn mejeeji nilo rẹ. A ko ti ṣetan lati yipada patapata si Ọpa Agbapada, nitori BOB ni UI kan, awọn ijabọ fun ṣiṣe iṣiro, ati ni gbogbogbo ọpọlọpọ data ti ko le gbe ni irọrun. O ni lati joko lori awọn ijoko meji.
  6. Ibeere fun inawo inawo lọ kuro.

Bi abajade, a ṣe iru ọkọ akero iṣẹlẹ kan lori Kafka - ọkọ akero iṣẹlẹ, eyiti ohun gbogbo bẹrẹ. Hurray, ni bayi a ni aaye ikuna kan (ẹgan).

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

Aleebu ati awọn konsi jẹ lẹwa kedere. A ṣe ọkọ akero kan, eyiti o tumọ si pe ni bayi gbogbo awọn iṣẹ da lori rẹ. Eyi ṣe irọrun apẹrẹ, ṣugbọn ṣafihan aaye kan ti ikuna sinu eto naa. Kafka yoo jamba, ilana yoo da.

Ohun ti o jẹ ẹya iṣẹlẹ-ìṣó API

Idahun ti o dara si ibeere yii wa ninu ijabọ nipasẹ Martin Fowler (GOTO 2017) "Ọpọlọpọ Awọn Itumọ ti Iṣẹlẹ-Iwakọ Iṣẹlẹ".

Ni ṣoki ohun ti a ṣe:

  1. Pari gbogbo awọn paṣipaarọ asynchronous nipasẹ ipamọ iṣẹlẹ. Dipo ki o sọ fun gbogbo alabara ti o nifẹ nipa iyipada ipo lori nẹtiwọọki, a kọ iṣẹlẹ kan nipa iyipada ipo si ibi ipamọ aarin, ati awọn alabara ti o nifẹ si koko ka ohun gbogbo ti o han lati ibẹ.
  2. Iṣẹlẹ ninu ọran yii jẹ iwifunni (iwifunni) pe ohun kan ti yipada ni ibikan. Fun apẹẹrẹ, ipo aṣẹ ti yipada. Olumulo ti o nifẹ si diẹ ninu awọn data ti o tẹle iyipada ipo ti ko si ninu iwifunni le wa ipo rẹ funrararẹ.
  3. Aṣayan ti o pọju jẹ wiwa iṣẹlẹ ni kikun, ipinle gbigbe, ninu eyiti iṣẹlẹ ti o ni gbogbo alaye pataki fun sisẹ: ibi ti o ti wa ati ipo wo ni o lọ, bawo ni data ṣe yipada gangan, bbl Ibeere nikan ni o ṣeeṣe ati iye alaye ti o le mu lati fipamọ.

Gẹgẹbi apakan ti ifilọlẹ Ọpa Agbapada, a lo aṣayan kẹta. Ṣiṣẹda iṣẹlẹ ti o rọrun yii niwọn igba ti ko si iwulo lati jade alaye alaye, pẹlu o yọkuro oju iṣẹlẹ nibiti iṣẹlẹ tuntun kọọkan ṣe ipilẹṣẹ ti nwaye ti n ṣalaye awọn ibeere lati ọdọ awọn alabara.

Agbapada Irinṣẹ Service ko kojọpọ, ki Kafka nibẹ ni diẹ ẹ sii ti a lenu ti awọn pen ju kan tianillati. Emi ko ro pe ti iṣẹ agbapada naa ba di iṣẹ akanṣe giga, iṣowo yoo dun.

Async paṣipaarọ AS WA

Fun awọn paṣipaarọ asynchronous, ẹka PHP nigbagbogbo nlo RabbitMQ. A gba data naa fun ibeere naa, fi sii sinu isinyi, ati alabara ti iṣẹ kanna ka ati firanṣẹ (tabi ko firanṣẹ). Fun API funrararẹ, Lamoda lo Swagger ni itara. A ṣe apẹrẹ API kan, ṣe apejuwe rẹ ni Swagger, ati ṣe ipilẹṣẹ alabara ati koodu olupin. A tun lo JSON RPC 2.0 ti o ni ilọsiwaju diẹ.

Ni diẹ ninu awọn ọkọ akero ESB ti wa ni lilo, diẹ ninu n gbe lori activeMQ, ṣugbọn, ni gbogbogbo, RabbitMQ - boṣewa.

Async paṣipaarọ TO BE

Nigbati o ba n ṣe apẹrẹ paṣipaarọ nipasẹ awọn iṣẹlẹ-ọkọ ayọkẹlẹ, a le ṣe itopase afiwe. Bakanna a ṣe apejuwe paṣipaarọ data ojo iwaju nipasẹ awọn apejuwe eto iṣẹlẹ. Ọna kika yaml, a ni lati ṣe iran koodu funrararẹ, olupilẹṣẹ ṣẹda awọn DTO ni ibamu si sipesifikesonu ati kọ awọn alabara ati awọn olupin lati ṣiṣẹ pẹlu wọn. Iran lọ si awọn ede meji - golang ati php. Eyi ṣe iranlọwọ lati jẹ ki awọn ile-ikawe wa ni ibamu. A ko kọ monomono ni golang, idi niyi ti o fi ni orukọ gogi.

Iṣẹlẹ-orisun lori Kafka jẹ ohun aṣoju. Ojutu wa lati ẹya ile-iṣẹ akọkọ ti Kafka Confluent, o wa nakadi, ojutu kan lati ọdọ awọn arakunrin agbegbe wa Zalando. Tiwa iwuri lati bẹrẹ pẹlu fanila Kafka - Eyi tumọ si fifi ojutu silẹ ni ọfẹ titi ti a fi pinnu nipari boya a yoo lo nibi gbogbo, ati tun fi aaye ara wa silẹ fun ọgbọn ati awọn ilọsiwaju: a fẹ atilẹyin fun wa JSON RPC 2.0, awọn olupilẹṣẹ fun awọn ede meji ati jẹ ki a wo kini ohun miiran.

O jẹ ohun iyalẹnu pe paapaa ninu iru ọran idunnu, nigbati iṣowo ti o jọra ni aijọju, Zalando, eyiti o ṣe iru ojutu kan ni aijọju, a ko le lo o ni imunadoko.

Apẹrẹ ayaworan ni ifilọlẹ jẹ atẹle yii: a ka taara lati Kafka, ṣugbọn kọ nipasẹ awọn iṣẹlẹ-ọkọ ayọkẹlẹ nikan. Pupọ wa ti o ṣetan fun kika ni Kafka: awọn alagbata, awọn iwọntunwọnsi, ati pe o jẹ diẹ sii tabi kere si ṣetan fun iwọn petele, Mo fẹ lati tọju eyi. A fẹ lati pari gbigbasilẹ nipasẹ ọkan Gateway aka Events-akero, ati nibi ni idi.

Awọn iṣẹlẹ-akero

Tabi akero iṣẹlẹ. Eyi jẹ ẹnu-ọna http laisi ipinlẹ, eyiti o gba ọpọlọpọ awọn ipa pataki:

  • Producing afọwọsi - a ṣayẹwo pe awọn iṣẹlẹ pade awọn pato wa.
  • Eto titunto si iṣẹlẹ, eyini ni, eyi ni akọkọ ati eto nikan ni ile-iṣẹ ti o dahun ibeere ti awọn iṣẹlẹ wo pẹlu awọn ẹya ti a kà pe o wulo. Ifọwọsi nirọrun kan awọn iru data ati awọn nọmba lati pato akoonu ni muna.
  • Hash iṣẹ fun sharding - eto ifiranṣẹ Kafka jẹ iye bọtini-iye ati lilo hash ti bọtini o ṣe iṣiro ibiti o ti fi sii.

Kí nìdí

A n ṣiṣẹ ni ile-iṣẹ nla kan pẹlu ilana imudara. Idi ti yi ohunkohun? Eyi jẹ adanwo, ati pe a nireti lati ni ọpọlọpọ awọn anfani.

1: n+1 paarọ (ọkan si ọpọlọpọ)

Kafka jẹ ki o rọrun pupọ lati sopọ awọn alabara tuntun si API.

Jẹ ki a sọ pe o ni itọsọna kan ti o nilo lati tọju imudojuiwọn ni awọn ọna ṣiṣe pupọ ni ẹẹkan (ati ni diẹ ninu awọn tuntun). Ni iṣaaju, a ṣẹda lapapo kan ti o ṣe imuse ṣeto-API, ati pe eto titunto si ti ni ifitonileti ti awọn adirẹsi olumulo. Bayi eto titunto si firanṣẹ awọn imudojuiwọn si koko-ọrọ naa, ati pe gbogbo eniyan ti o nifẹ si ka. Eto tuntun ti han - a forukọsilẹ fun koko-ọrọ naa. Bẹẹni, tun lapapo, ṣugbọn rọrun.

Ninu ọran ti agbapada-ọpa, eyiti o jẹ nkan ti BOB, o rọrun fun wa lati jẹ ki wọn muuṣiṣẹpọ nipasẹ Kafka. Isanwo sọ pe a ti da owo naa pada: BOB, RT rii nipa eyi, yi awọn ipo wọn pada, Iṣẹ Fiscalization rii nipa eyi o si ṣe ayẹwo kan.

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

A ni awọn ero lati ṣẹda Iṣẹ Iwifunni ti iṣọkan ti yoo sọ fun alabara nipa awọn iroyin nipa aṣẹ/pada rẹ. Bayi ojuse yii ti tan laarin awọn eto. Yoo to fun wa lati kọ Iṣẹ Awọn iwifunni lati gba alaye ti o yẹ lati Kafka ati dahun si (ki o si mu awọn iwifunni wọnyi ṣiṣẹ ni awọn eto miiran). Ko si awọn iyipada taara taara yoo nilo.

Ṣiṣẹ data

Alaye laarin awọn eto di sihin - laibikita kini “ile-iṣẹ itajesile” ti o ni ati laibikita bawo ni ẹhin ẹhin rẹ ṣe pọ si. Lamoda ni Ẹka atupale Data ti o gba data lati awọn ọna ṣiṣe ati fi sii sinu fọọmu atunlo, mejeeji fun iṣowo ati fun awọn eto oye. Kafka gba ọ laaye lati yara fun wọn ni data pupọ ati jẹ ki alaye yẹn ṣan titi di oni.

Àkọọlẹ ìmúdàgbà

Awọn ifiranṣẹ ko parẹ lẹhin kika, bi ninu RabbitMQ. Nigbati iṣẹlẹ kan ba ni alaye to fun sisẹ, a ni itan-akọọlẹ ti awọn ayipada aipẹ si nkan naa, ati, ti o ba fẹ, agbara lati lo awọn ayipada wọnyi.

Akoko ibi-itọju ti iwe ẹda ẹda da lori kikankikan kikọ si koko yii; Kafka gba ọ laaye lati ṣeto awọn opin ni irọrun lori akoko ibi ipamọ ati iwọn data. Fun awọn koko-ọrọ aladanla, o ṣe pataki pe gbogbo awọn alabara ni akoko lati ka alaye naa ṣaaju ki o to parẹ, paapaa ninu ọran ailagbara igba kukuru. Nigbagbogbo o ṣee ṣe lati tọju data fun sipo ti awọn ọjọ, eyi ti o jẹ ohun to fun support.

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

Nigbamii ti, atunṣe diẹ ti iwe-ipamọ, fun awọn ti ko ni imọran pẹlu Kafka (aworan naa tun wa lati inu iwe)

AMQP ni awọn ila: a kọ awọn ifiranṣẹ si isinyi fun olumulo. Ni deede, isinyi kan ni ilọsiwaju nipasẹ eto kan pẹlu ọgbọn iṣowo kanna. Ti o ba nilo lati fi to ọ leti awọn ọna ṣiṣe pupọ, o le kọ ohun elo naa lati kọwe si awọn ila pupọ tabi tunto paṣipaarọ pẹlu ẹrọ fanout, eyiti o ṣe ẹda ara wọn funrararẹ.

Kafka ni iru abstraction koko koko, ninu eyiti o kọ awọn ifiranṣẹ, ṣugbọn wọn ko parẹ lẹhin kika. Nipa aiyipada, nigbati o ba sopọ si Kafka, o gba gbogbo awọn ifiranṣẹ ati pe o ni aṣayan lati fipamọ ni ibiti o ti lọ kuro. Iyẹn ni, o ka lẹsẹsẹ, o le ma samisi ifiranṣẹ bi kika, ṣugbọn fi id pamọ lati eyiti o le tẹsiwaju kika. Id ti o yanju ni a pe ni aiṣedeede, ati pe ẹrọ naa jẹ aiṣedeede.

Gegebi bi, o yatọ si kannaa le wa ni muse. Fun apẹẹrẹ, a ni BOB ni awọn iṣẹlẹ 4 fun awọn orilẹ-ede oriṣiriṣi - Lamoda wa ni Russia, Kazakhstan, Ukraine, Belarus. Niwọn igba ti wọn ti gbe lọ lọtọ, wọn ni awọn atunto oriṣiriṣi oriṣiriṣi ati ọgbọn iṣowo tiwọn. A tọka si ninu ifiranṣẹ orilẹ-ede wo ni o tọka si. Olumulo BOB kọọkan ni orilẹ-ede kọọkan n ka pẹlu ẹgbẹId ọtọtọ, ati pe ti ifiranṣẹ naa ko ba kan wọn, wọn fo, i.e. lẹsẹkẹsẹ ṣe aiṣedeede +1. Ti koko-ọrọ kanna ba ka nipasẹ Iṣẹ Isanwo wa, lẹhinna o ṣe bẹ pẹlu ẹgbẹ ọtọtọ, ati nitorinaa awọn aiṣedeede ko ni ikorita.

Awọn ibeere iṣẹlẹ:

  • Ipari data. Emi yoo fẹ ki iṣẹlẹ naa ni data ti o to ki o le ṣe ilọsiwaju.

  • Òtítọ́. A ṣe aṣoju si Awọn iṣẹlẹ-ọkọ ayọkẹlẹ idaniloju pe iṣẹlẹ naa wa ni ibamu ati pe o le ṣe ilana rẹ.
  • Ilana naa ṣe pataki. Ninu ọran ti ipadabọ, a fi agbara mu lati ṣiṣẹ pẹlu itan-akọọlẹ. Pẹlu awọn iwifunni, aṣẹ ko ṣe pataki, ti wọn ba jẹ awọn iwifunni isokan, imeeli yoo jẹ kanna laibikita iru aṣẹ wo ni akọkọ ti de. Ninu ọran ti agbapada, ilana ti o han gbangba wa; ti a ba yi aṣẹ pada, awọn imukuro yoo dide, agbapada naa kii yoo ṣẹda tabi ṣiṣẹ - a yoo pari ni ipo ti o yatọ.
  • Iduroṣinṣin. A ni ile itaja kan, ati ni bayi a ṣẹda awọn iṣẹlẹ dipo API kan. A nilo ọna kan lati ṣe atagba alaye ni iyara ati olowo poku nipa awọn iṣẹlẹ tuntun ati awọn iyipada si awọn ti o wa tẹlẹ si awọn iṣẹ wa. Eyi jẹ aṣeyọri nipasẹ sipesifikesonu ti o wọpọ ni ibi ipamọ git lọtọ ati awọn olupilẹṣẹ koodu. Nitorinaa, awọn alabara ati awọn olupin ni awọn iṣẹ oriṣiriṣi ti wa ni ipoidojuko.

Kafka ni Lamoda

A ni awọn fifi sori ẹrọ Kafka mẹta:

  1. Awọn akọọlẹ;
  2. R&D;
  3. Awọn iṣẹlẹ-akero.

Loni a n sọrọ nikan nipa aaye ti o kẹhin. Ni awọn iṣẹlẹ-ọkọ akero, a ko ni awọn fifi sori ẹrọ ti o tobi pupọ - awọn alagbata 3 (awọn olupin) ati awọn akọle 27 nikan. Gẹgẹbi ofin, koko-ọrọ kan jẹ ilana kan. Ṣugbọn eyi jẹ aaye arekereke, ati pe a yoo fi ọwọ kan bayi.

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

Loke ni aworan rps. Ilana awọn agbapada ti samisi pẹlu laini turquoise kan (bẹẹni, ọkan lori ipo X), ati laini Pink jẹ ilana imudojuiwọn akoonu.

Katalogi Lamoda ni awọn miliọnu awọn ọja, ati pe data naa ti ni imudojuiwọn ni gbogbo igba. Diẹ ninu awọn ikojọpọ jade ti aṣa, awọn tuntun ni a tu silẹ lati rọpo wọn, ati awọn awoṣe tuntun n han nigbagbogbo ninu iwe akọọlẹ. A gbiyanju lati ṣe asọtẹlẹ kini yoo jẹ ohun ti o nifẹ si awọn alabara wa ni ọla, nitorinaa a ra awọn nkan tuntun nigbagbogbo, ya aworan wọn ki o ṣe imudojuiwọn apoti ifihan.

Awọn oke Pink jẹ awọn imudojuiwọn ọja, iyẹn ni, awọn iyipada ninu awọn ọja. O le rii pe awọn eniyan mu awọn aworan, mu awọn aworan, ati lẹhinna lẹẹkansi! - kojọpọ idii ti awọn iṣẹlẹ.

Lamoda Events lo igba

A lo faaji ti a ṣe fun awọn iṣẹ wọnyi:

  • Pada ipo ipasẹ: ipe-si-igbese ati ipasẹ ipo lati gbogbo awọn eto ti o kan. Owo sisan, awọn ipo, inawo, awọn iwifunni. Nibi a ṣe idanwo ọna naa, ṣe awọn irinṣẹ, kojọ gbogbo awọn idun, kọ iwe ati sọ fun awọn ẹlẹgbẹ wa bi a ṣe le lo.
  • Nmu awọn kaadi ọja dojuiwọn: iṣeto ni, meta-data, abuda. Eto kan ka (eyiti o ṣe afihan), ati ọpọlọpọ kikọ.
  • Imeeli, Titari ati sms: aṣẹ ti gba, aṣẹ ti de, ipadabọ ti gba, ati bẹbẹ lọ, ọpọlọpọ wọn wa.
  • Iṣura, isọdọtun ile ise - imudojuiwọn pipo ti awọn ohun kan, o kan awọn nọmba: dide ni ile ise, pada. O jẹ dandan pe gbogbo awọn ọna ṣiṣe ti o ni nkan ṣe pẹlu awọn ẹru ifiṣura ṣiṣẹ pẹlu data lọwọlọwọ julọ. Lọwọlọwọ, eto imudojuiwọn ọja jẹ eka pupọ; Kafka yoo jẹ ki o rọrun.
  • Iṣiro data (Ẹka R&D), awọn irinṣẹ ML, awọn itupalẹ, awọn iṣiro. A fẹ alaye lati wa ni sihin - Kafka dara fun eyi.

Bayi apakan ti o nifẹ diẹ sii nipa awọn bumps nla ati awọn iwadii ti o nifẹ ti o ti waye ni oṣu mẹfa sẹhin.

Awọn iṣoro apẹrẹ

Jẹ ki a sọ pe a fẹ ṣe ohun titun kan - fun apẹẹrẹ, gbe gbogbo ilana ifijiṣẹ lọ si Kafka. Bayi apakan ti ilana ti wa ni imuse ni Ilana Ilana ni BOB. Awoṣe ipo kan wa lẹhin gbigbe aṣẹ si iṣẹ ifijiṣẹ, gbigbe si ile itaja agbedemeji, ati bẹbẹ lọ. Odidi monolith wa, paapaa meji, pẹlu opo API ti a ṣe igbẹhin si ifijiṣẹ. Wọn mọ pupọ diẹ sii nipa ifijiṣẹ.

Awọn wọnyi dabi awọn agbegbe ti o jọra, ṣugbọn Ilana Ilana ni BOB ati Eto Sowo ni awọn ipo oriṣiriṣi. Fun apẹẹrẹ, diẹ ninu awọn iṣẹ oluranse ko firanṣẹ awọn ipo agbedemeji, ṣugbọn awọn ti o kẹhin nikan: “fifiranṣẹ” tabi “padanu”. Awọn miiran, ni ilodi si, ṣe ijabọ ni awọn alaye nla nipa gbigbe awọn ẹru. Gbogbo eniyan ni awọn ofin afọwọsi ti ara wọn: fun diẹ ninu awọn, imeeli naa wulo, eyiti o tumọ si pe yoo ṣe ilana; fun awọn miiran ko wulo, ṣugbọn aṣẹ naa yoo tun ṣe ilana nitori nọmba foonu kan wa fun olubasọrọ, ẹnikan yoo sọ pe iru aṣẹ bẹẹ kii yoo ni ilọsiwaju rara.

ṣiṣan data

Ninu ọran ti Kafka, ibeere ti siseto ṣiṣan data dide. Iṣẹ yii pẹlu yiyan ilana ti o da lori awọn aaye pupọ; jẹ ki a lọ nipasẹ gbogbo wọn.

Ninu koko kan tabi ni awọn oriṣiriṣi?

A ni ohun iṣẹlẹ sipesifikesonu. Ni BOB a kọ pe iru ati iru aṣẹ bẹẹ nilo lati fi jiṣẹ, ati tọkasi: nọmba aṣẹ, akopọ rẹ, diẹ ninu awọn SKU ati awọn koodu igi, ati bẹbẹ lọ. Nigbati awọn ẹru ba de ile-ipamọ, ifijiṣẹ yoo ni anfani lati gba awọn ipo, awọn akoko akoko ati ohun gbogbo ti o nilo. Ṣugbọn lẹhinna a fẹ lati gba awọn imudojuiwọn lori data yii ni BOB. A ni ilana iyipada ti gbigba data lati ifijiṣẹ. Ṣe iṣẹlẹ kanna ni eyi? Tabi eyi jẹ paṣipaarọ lọtọ ti o yẹ koko-ọrọ tirẹ?

O ṣeese, wọn yoo jọra pupọ, ati idanwo lati ṣe koko-ọrọ kan ko ni ipilẹ, nitori koko-ọrọ ọtọtọ tumọ si awọn alabara lọtọ, awọn atunto lọtọ, iran ti o yatọ ti gbogbo eyi. Ṣugbọn kii ṣe otitọ kan.

Aaye tuntun tabi iṣẹlẹ tuntun?

Ṣugbọn ti o ba lo awọn iṣẹlẹ kanna, lẹhinna iṣoro miiran dide. Fun apẹẹrẹ, kii ṣe gbogbo awọn ọna ṣiṣe ifijiṣẹ le ṣe ipilẹṣẹ iru DTO ti BOB le ṣe. A fi id naa ranṣẹ si wọn, ṣugbọn wọn ko fipamọ nitori wọn ko nilo rẹ, ati lati oju-ọna ti bẹrẹ ilana-ọkọ akero, aaye yii nilo.

Ti a ba ṣafihan ofin kan fun ọkọ akero iṣẹlẹ ti aaye yii nilo, lẹhinna a fi agbara mu lati ṣeto awọn ofin afọwọsi afikun ni BOB tabi ni oluṣakoso iṣẹlẹ ibẹrẹ. Ifọwọsi bẹrẹ lati tan kaakiri iṣẹ naa - eyi ko rọrun pupọ.

Iṣoro miiran ni idanwo si idagbasoke ti o pọ si. A sọ fun wa pe ohun kan nilo lati ṣafikun si iṣẹlẹ naa, ati boya, ti a ba ronu nipa rẹ, o yẹ ki o jẹ iṣẹlẹ ti o yatọ. Ṣugbọn ninu ero wa, iṣẹlẹ lọtọ jẹ koko-ọrọ lọtọ. Koko-ọrọ lọtọ ni gbogbo ilana ti Mo ṣalaye loke. Olugbese naa ni idanwo lati ṣafikun aaye miiran nirọrun si ero JSON ki o tun ṣe.

Ninu ọran ti awọn agbapada, a de si iṣẹlẹ ti awọn iṣẹlẹ ni idaji ọdun kan. A ni iṣẹlẹ-meta kan ti a pe ni imudojuiwọn agbapada, eyiti o ni aaye iru kan ti n ṣapejuwe kini imudojuiwọn yii jẹ gaan. Nitori eyi, a ni awọn iyipada “iyanu” pẹlu awọn olufọwọsi ti o sọ fun wa bi a ṣe le fọwọsi iṣẹlẹ yii pẹlu iru yii.

Ti ikede iṣẹlẹ

Lati fọwọsi awọn ifiranṣẹ ni Kafka o le lo Avro, ṣugbọn o jẹ dandan lati dubulẹ lẹsẹkẹsẹ lori rẹ ati lo Confluent. Ninu ọran wa, a ni lati ṣọra pẹlu ikede. Kii yoo ṣee ṣe nigbagbogbo lati tun ka awọn ifiranṣẹ lati inu akọọlẹ ẹda nitori awoṣe naa ni “osi”. Ni ipilẹ, o wa lati kọ awọn ẹya ki awoṣe naa jẹ ibaramu sẹhin: fun apẹẹrẹ, jẹ ki aaye kan jẹ iyan fun igba diẹ. Ti awọn iyatọ ba lagbara ju, a bẹrẹ kikọ sinu koko tuntun kan, ati gbe awọn alabara lọ nigbati wọn pari kika atijọ.

Ẹri kika aṣẹ ti awọn ipin

Awọn koko inu Kafka ti pin si awọn ipin. Eyi kii ṣe pataki pupọ lakoko ti a n ṣe apẹrẹ awọn nkan ati awọn paṣipaarọ, ṣugbọn o ṣe pataki nigbati o ba pinnu bi o ṣe le jẹ ati iwọn rẹ.

Ninu ọran deede, o kọ koko kan ni Kafka. Nipa aiyipada, ipin kan ti lo, ati gbogbo awọn ifiranṣẹ ti o wa ninu koko yii lọ si. Ati pe alabara nitorinaa ka awọn ifiranṣẹ wọnyi lẹsẹsẹ. Jẹ ká sọ bayi a nilo lati faagun awọn eto ki awọn ifiranṣẹ ti wa ni ka nipa meji ti o yatọ awọn onibara. Ti, fun apẹẹrẹ, o nfi SMS ranṣẹ, lẹhinna o le sọ fun Kafka lati ṣe ipin afikun, ati Kafka yoo bẹrẹ lati pin awọn ifiranṣẹ si awọn ẹya meji - idaji nibi, idaji nibi.

Bawo ni Kafka ṣe pin wọn? Ifiranṣẹ kọọkan ni ara kan (ninu eyiti a fipamọ JSON) ati bọtini kan. O le so iṣẹ hash pọ mọ bọtini yii, eyiti yoo pinnu iru ipin ti ifiranṣẹ naa yoo lọ si.

Ninu ọran wa pẹlu awọn agbapada, eyi jẹ pataki, ti a ba gba awọn ipin meji, lẹhinna o wa ni anfani pe alabara ti o jọra yoo ṣe ilana iṣẹlẹ keji ṣaaju akọkọ ati pe wahala yoo wa. Iṣẹ hash ṣe idaniloju pe awọn ifiranṣẹ pẹlu bọtini kanna pari ni ipin kanna.

Awọn iṣẹlẹ vs ase

Eyi jẹ iṣoro miiran ti a koju. Iṣẹlẹ jẹ iṣẹlẹ kan: a sọ pe ohun kan ṣẹlẹ ni ibikan (nkankan_ti o ṣẹlẹ), fun apẹẹrẹ, ohun kan ti fagile tabi agbapada waye. Ti ẹnikan ba tẹtisi awọn iṣẹlẹ wọnyi, lẹhinna ni ibamu si “ohun ti o fagile,” nkan ti agbapada yoo ṣẹda, ati pe “agbapada waye” yoo kọ ni ibikan ninu awọn iṣeto.

Ṣugbọn nigbagbogbo, nigbati o ba ṣe apẹrẹ awọn iṣẹlẹ, iwọ ko fẹ lati kọ wọn lasan - o gbẹkẹle otitọ pe ẹnikan yoo ka wọn. Idanwo giga wa lati kọ kii ṣe nkan_ti o ṣẹlẹ (ohun_canceled, refund_refunded), ṣugbọn nkankan_should_be_done. Fun apẹẹrẹ, ohun kan ti šetan lati da pada.

Ni ọna kan, o daba bi a ṣe le lo iṣẹlẹ naa. Ni apa keji, o dun pupọ kere si bi orukọ iṣẹlẹ deede. Yato si, ko jina lati ibi si aṣẹ ṣiṣe_something. Ṣugbọn o ko ni iṣeduro pe ẹnikan ka iṣẹlẹ yii; ati pe ti o ba ka, lẹhinna o ka ni aṣeyọri; ati pe ti o ba ka ni aṣeyọri, lẹhinna o ṣe nkan, ati pe nkan kan ṣaṣeyọri. Ni akoko ti iṣẹlẹ ba di nkan ṣe_something, esi yoo jẹ dandan, ati pe iṣoro ni.

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

Ni paṣipaarọ asynchronous ni RabbitMQ, nigbati o ba ka ifiranṣẹ, lọ si http, o ni idahun - o kere ju pe a ti gba ifiranṣẹ naa. Nigba ti o ba kọ si Kafka, nibẹ ni a ifiranṣẹ ti o kowe si Kafka, ṣugbọn o ko ba mọ ohunkohun nipa bi o ti ni ilọsiwaju.

Nitorinaa, ninu ọran wa, a ni lati ṣafihan iṣẹlẹ esi kan ati ṣeto ibojuwo pe ti ọpọlọpọ awọn iṣẹlẹ ba firanṣẹ, lẹhin iru ati iru akoko nọmba kanna ti awọn iṣẹlẹ idahun yẹ ki o de. Ti eyi ko ba ṣẹlẹ, lẹhinna ohun kan dabi pe o ti jẹ aṣiṣe. Fun apẹẹrẹ, ti a ba fi iṣẹlẹ “item_ready_to_refund” ranṣẹ, a nireti pe yoo ṣẹda agbapada, owo naa yoo pada si alabara, ati iṣẹlẹ “money_refunded” yoo ranṣẹ si wa. Ṣugbọn eyi ko daju, nitorinaa a nilo abojuto.

Nuances

Iṣoro ti o han gbangba wa: ti o ba ka lati koko kan lẹsẹsẹ, ati pe o ni diẹ ninu ifiranṣẹ buburu, alabara yoo ṣubu, iwọ kii yoo lọ siwaju. O nilo da gbogbo awọn onibara, ṣe aiṣedeede siwaju lati tẹsiwaju kika.

A mọ nipa rẹ, a ka lori rẹ, ati sibẹsibẹ o ṣẹlẹ. Ati pe eyi ṣẹlẹ nitori iṣẹlẹ naa wulo lati oju-ọna ti awọn iṣẹlẹ-ọkọ akero, iṣẹlẹ naa wulo lati oju-ọna ti olutọpa ohun elo, ṣugbọn ko wulo lati oju wiwo ti PostgreSQL, nitori ninu eto wa MySQL. pẹlu UNSIGNED INT eto naa ni PostgreSQL kan pẹlu INT. Iwọn rẹ jẹ kekere diẹ, ati pe Id ko baamu. Symfony kú pẹlu ohun sile. A, nitorinaa, mu imukuro nitori a gbarale rẹ, ati pe a yoo ṣe aiṣedeede yii, ṣugbọn ṣaaju iyẹn a fẹ lati pọ si counter iṣoro naa, nitori pe ifiranṣẹ naa ti ni ilọsiwaju laisi aṣeyọri. Awọn counter ni ise agbese yi tun wa ninu awọn database, ati Symfony ti tẹlẹ ni pipade ibaraẹnisọrọ pẹlu awọn database, ati awọn keji sile pa gbogbo ilana lai a anfani lati a ṣe aiṣedeede.

Iṣẹ naa dubulẹ fun igba diẹ - da, pẹlu Kafka eyi kii ṣe buburu, nitori awọn ifiranṣẹ naa wa. Nigbati iṣẹ ba tun pada, o le pari kika wọn. O ni itunu.

Kafka ni agbara lati ṣeto aiṣedeede lainidii nipasẹ ohun elo irinṣẹ. Ṣugbọn lati ṣe eyi, o nilo lati da gbogbo awọn onibara duro - ninu ọran wa, mura itusilẹ lọtọ ninu eyiti kii yoo jẹ awọn alabara, awọn atunṣiṣẹ. Lẹhinna ni Kafka o le yi aiṣedeede pada nipasẹ irinṣẹ irinṣẹ, ati pe ifiranṣẹ naa yoo kọja.

Iyatọ miiran - iwe atunwi vs rdkafka.so - ni ibatan si awọn pato ti ise agbese wa. A lo PHP, ati ni PHP, gẹgẹbi ofin, gbogbo awọn ile-ikawe ṣe ibasọrọ pẹlu Kafka nipasẹ ibi ipamọ rdkafka.so, ati lẹhinna o wa diẹ ninu awọn ohun-ọṣọ. Boya iwọnyi jẹ awọn iṣoro ti ara ẹni, ṣugbọn o wa jade pe kiki kika apakan ohun ti a ti ka tẹlẹ ko rọrun. Ni gbogbogbo, awọn iṣoro sọfitiwia wa.

Pada si awọn pato ti ṣiṣẹ pẹlu awọn ipin, o ti kọ ọtun ninu awọn iwe awọn onibara >= awọn ipin koko. Sugbon mo ti ri jade nipa yi Elo nigbamii ju Emi yoo ti feran. Ti o ba fẹ ṣe iwọn ati ki o ni awọn onibara meji, o nilo o kere ju awọn ipin meji. Iyẹn ni, ti o ba ni ipin kan ninu eyiti awọn ifiranṣẹ 20 ẹgbẹrun ti kojọpọ, ati pe o ṣe ọkan tuntun, nọmba awọn ifiranṣẹ kii yoo dọgba laipẹ. Nitorinaa, lati le ni awọn alabara afiwera meji, o nilo lati koju awọn ipin.

Abojuto

Mo ro pe ọna ti a ṣe atẹle yoo jẹ paapaa kedere kini awọn iṣoro ti o wa ninu ọna ti o wa tẹlẹ.

Fun apẹẹrẹ, a ṣe iṣiro iye awọn ọja ti o wa ninu aaye data ti yipada ipo wọn laipẹ, ati pe, ni ibamu, awọn iṣẹlẹ yẹ ki o waye da lori awọn ayipada wọnyi, ati pe a firanṣẹ nọmba yii si eto ibojuwo wa. Lẹhinna lati Kafka a gba nọmba keji, melo ni awọn iṣẹlẹ ti o gbasilẹ. O han ni, iyatọ laarin awọn nọmba meji wọnyi yẹ ki o ma jẹ odo nigbagbogbo.

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

Ni afikun, o nilo lati ṣe atẹle bawo ni olupilẹṣẹ ṣe n ṣe, boya awọn iṣẹlẹ-ọkọ ayọkẹlẹ gba awọn ifiranṣẹ, ati bii alabara ṣe n ṣe. Fun apẹẹrẹ, ninu awọn shatti ti o wa ni isalẹ, Ọpa Agbapada n ṣe daradara, ṣugbọn BOB ni kedere ni diẹ ninu awọn iṣoro (awọn oke buluu).

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

Mo ti mẹnuba aisun olumulo-ẹgbẹ. Ni aijọju sisọ, eyi ni nọmba awọn ifiranṣẹ ti a ko ka. Ni gbogbogbo, awọn alabara wa ṣiṣẹ ni iyara, nitorinaa aisun jẹ igbagbogbo 0, ṣugbọn nigbami o le jẹ tente oke igba diẹ. Kafka le ṣe eyi lati inu apoti, ṣugbọn o nilo lati ṣeto aarin kan.

Ise agbese kan wa Burukueyi ti yoo fun ọ alaye siwaju sii lori Kafka. O rọrun nlo API-ẹgbẹ olumulo lati fun ipo ti bii ẹgbẹ yii ṣe n ṣe. Ni afikun si O dara ati kuna, ikilọ wa, ati pe o le rii pe awọn alabara rẹ ko le koju iyara ti iṣelọpọ - wọn ko ni akoko lati ṣe atunṣe ohun ti a kọ. Awọn eto jẹ ohun smati ati ki o rọrun lati lo.

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

Eyi ni ohun ti idahun API dabi. Eyi ni ẹgbẹ bob-live-fifa, ipin refund.update.v1, ipo O dara, aisun 0 - aiṣedeede ikẹhin ikẹhin iru ati iru bẹ.

Ni iriri ni idagbasoke iṣẹ Irinṣẹ Agbapada pẹlu API asynchronous lori Kafka

Abojuto imudojuiwọn_at SLA (di) Mo ti mẹnuba tẹlẹ. Fun apẹẹrẹ, ọja naa ti yipada si ipo ti o ti ṣetan fun ipadabọ. A fi Cron sori ẹrọ, eyiti o sọ pe ti o ba jẹ pe ni iṣẹju marun 5 nkan yii ko ti lọ si agbapada (a da owo pada nipasẹ awọn eto isanwo ni iyara), lẹhinna ohunkan pato ti jẹ aṣiṣe, ati pe eyi jẹ pato ọran fun atilẹyin. Nitorinaa, a kan mu Cron, eyiti o ka iru awọn nkan bẹ, ati pe ti wọn ba tobi ju 0, lẹhinna o firanṣẹ itaniji.

Lati ṣe akopọ, lilo awọn iṣẹlẹ jẹ irọrun nigbati:

  • alaye nilo nipasẹ awọn ọna ṣiṣe pupọ;
  • abajade ti processing ko ṣe pataki;
  • awọn iṣẹlẹ kekere tabi awọn iṣẹlẹ kekere wa.

Yoo dabi pe nkan naa ni koko-ọrọ kan pato - asynchronous API lori Kafka, ṣugbọn ni asopọ pẹlu rẹ Emi yoo fẹ lati ṣeduro ọpọlọpọ awọn nkan ni ẹẹkan.
Ni akọkọ, atẹle HighLoad++ a nilo lati duro titi di Oṣu kọkanla; ni Oṣu Kẹrin yoo jẹ ẹya St.
Ni ẹẹkeji, onkọwe iroyin naa, Sergei Zaika, jẹ ọmọ ẹgbẹ ti Igbimọ Eto ti apejọ tuntun wa lori iṣakoso oye. KnowledgeConf. Apero na jẹ ọjọ kan, yoo waye ni Oṣu Kẹrin Ọjọ 26, ṣugbọn eto rẹ le gidigidi.
Ati pe yoo jẹ ni May PHP Russia и RIT++ (pẹlu DevOpsConf to wa) - o tun le daba koko-ọrọ rẹ nibẹ, sọrọ nipa iriri rẹ ki o kerora nipa awọn cones rẹ ti o kun.

orisun: www.habr.com

Fi ọrọìwòye kun