Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Ke eng e ka qobellang k'hamphani e kholo joalo ka Lamoda, e nang le ts'ebetso e lokiselitsoeng le lits'ebeletso tse ngata tse hokahaneng, ho fetola mokhoa oa eona haholo? Khothatso e ka fapana ka ho felletseng: ho tloha ho molao ho isa takatsong ea ho etsa liteko tse hlahang ho baetsi bohle ba mananeo.

Empa sena ha se bolele hore u ke ke ua itšetleha ka melemo e eketsehileng. Sergey Zaika o tla u joetsa hore na u ka hlola eng haeba u sebelisa API e tsamaisoang ke liketsahalo ho Kafka (fewal). Ho tla boela ho buuoe ka lithunya tse kholo le lintho tse khahlang tse sibollotsoeng - liteko li ke ke tsa etsa ntle le tsona.

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Boitlhotlhollo: Sengoloa sena se ipapisitse le lisebelisoa tse tsoang kopanong eo Sergey a ileng a e tšoara ka Pulungoana 2018 ho HighLoad++. Phihlelo ea Lamoda ea ho sebetsa le Kafka e ile ea hohela bamameli ho feta litlaleho tse ling tsa kemiso. Re nahana hore ona ke mohlala o motle oa taba ea hore u ka fumana batho ba nang le maikutlo a tšoanang kamehla, 'me bahlophisi ba HighLoad ++ ba tla tsoela pele ho leka ho theha moea o loketseng sena.

Mabapi le ts'ebetso

Lamoda ke sethala se seholo sa e-commerce se nang le setsi sa sona sa ho ikopanya, lits'ebeletso tsa lits'ebeletso (le mekhatlo e mengata e amanang le eona), studio ea lifoto, ntlo e kholo ea polokelo, 'me sena sohle se sebetsa ka software ea sona. Ho na le mekhoa e mengata ea ho lefa, balekane ba b2b ba ka sebelisang tse ling kapa litšebeletso tsena kaofela 'me ba batla ho tseba lintlha tsa morao-rao ka lihlahisoa tsa bona. Ho phaella moo, Lamoda e sebetsa linaheng tse tharo ntle le Russia Federation 'me ntho e' ngoe le e 'ngoe e fapane hanyane moo. Ka kakaretso, mohlomong ho na le litsela tse fetang lekholo tsa ho lokisa taelo e ncha, e lokelang ho sebetsoa ka tsela ea eona. Sena sohle se sebetsa ka thuso ea litšebeletso tse ngata tseo ka linako tse ling li buisanang ka litsela tse sa bonahaleng. Hape ho na le tsamaiso e bohareng eo boikarabelo ba eona bo ka sehloohong e leng li-status tsa taelo. Re mmitsa BOB, ke sebetsa le yena.

Sesebelisoa sa Puseletso se nang le API e tsamaisoang ke liketsahalo

Lentsoe-lentsoe le tsamaisoang ke liketsahalo le hlakisitsoe haholo; ho ea pele re tla hlalosa ka botlalo se boleloang ke sena. Ke tla qala ka moelelo oo re nkileng qeto ea ho leka mokhoa oa API o tsamaisoang ke liketsahalo Kafka.

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Lebenkeleng leha e le lefe, ntle le litaelo tseo bareki ba li lefang, ho na le linako tseo ho hlokahalang hore lebenkele le khutlisetse chelete hobane sehlahisoa se ne se sa lumellane le moreki. Ena ke ts'ebetso e batlang e le khuts'oane: re hlakisa tlhahisoleseling, ha ho hlokahala, ebe re fetisetsa chelete.

Empa ho khutla ho ile ha rarahana le ho feta ka lebaka la liphetoho tsa melao, mme re ile ra tlameha ho kenya ts'ebetsong microservice e arohaneng bakeng sa eona.

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Sepheo sa rona:

  1. Molao oa FZ-54 - ka bokhuts'oane, molao o hloka hore ho tlalehoe ofising ea lekhetho mabapi le tšebetso e 'ngoe le e 'ngoe ea lichelete, ebang ke ho khutlisa kapa rasiti, ka nako e khuts'oane ea SLA ea metsotso e seng mekae. Rona, joalo ka k'hamphani ea e-commerce, re etsa mesebetsi e mengata haholo. Ka botekgeniki, sena se bolela boikarabello bo bocha (ka hona ts'ebeletso e ncha) le ntlafatso lits'ebetsong tsohle tse amehang.
  2. BOB e arohane ke morero oa ka hare oa k'hamphani ho imolla BOB ho tloha palo e kholo ea boikarabelo bo se nang motheo le ho fokotsa ho rarahana ha eona ka kakaretso.

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Setšoantšo sena se bontša mekhoa ea mantlha ea Lamoda. Hona joale boholo ba bona ba feta sehlopha sa linaleli sa 5-10 microservices ho pota monolith e ntseng e fokotseha. Li ntse li hōla butle-butle, empa re leka ho li etsa tse nyenyane, hobane ho tsamaisa sekhechana se khethiloeng bohareng ho tšosa - re ke ke ra lumella hore se oe. Re tlameha ho boloka liphapanyetsano tsohle (metsu) mme re nahane ka taba ea hore leha e le efe ea tsona e ka fetoha e sa fumaneheng.

BOB e boetse e na le phapanyetsano e ngata haholo: lits'ebetso tsa ho patala, lits'ebetso tsa phano, lits'ebetso tsa tsebiso, jj.

Ka botekgeniki BOB ke:

  • ~ 150k mela ea khoutu + ~ 100k mela ea liteko;
  • php7.2 + Zend 1 & Symfony Likarolo tsa 3;
  • > 100 APIs & ~ 50 ho kopanngoa ho tsoa;
  • Linaha tse 4 tse nang le mabaka a tsona a khoebo.

Ho tsamaisa BOB ho theko e boima ebile ho bohloko, palo ea khoutu le mathata ao e a rarollang ke hore ha ho motho ea ka e kenyang lihloohong tsa bona. Ka kakaretso, ho na le mabaka a mangata a ho e nolofatsa.

Ts'ebetso ea ho khutlisa

Qalong, litsamaiso tse peli li ameha ts'ebetsong: BOB le Tefo. Joale ho hlaha tse ling tse peli:

  • Tšebeletso ea Fiscalization, e tla sebetsana le mathata a lichelete le puisano le litšebeletso tsa kantle.
  • Sesebelisoa sa Puseletso, se nang le phapanyetsano e ncha feela e le hore se se ke sa kenya BOB.

Joale mokhoa ona o shebahala tjena:

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

  1. BOB e fumana kopo ea ho khutlisetsoa chelete.
  2. BOB e bua ka Sesebelisoa sena sa Puseletso.
  3. The Refund Tool e bolella Payment: "Khutlisetsa chelete."
  4. Tefo e khutlisa chelete.
  5. Sesebelisoa sa Puseletso le BOB li hokahanya maemo le tse ling, hobane hajoale li hloka ka bobeli. Ha re e-s'o itokisetse ho fetolela ka ho feletseng ho Sesebelisoa sa Puseletso, kaha BOB e na le UI, litlaleho tsa litlaleho, 'me ka kakaretso boitsebiso bo bongata bo ke keng ba fetisoa habonolo. U tlameha ho lula litulong tse peli.
  6. Kopo ea lichelete e ea fela.

Ka lebaka leo, re ile ra etsa mofuta oa bese ea ketsahalo Kafka - ketsahalo-bese, moo tsohle li qalileng. Hurray, joale re na le ntlha e le 'ngoe ea ho hloleha (ho phoqa).

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Melemo le boiketlo li hlakile haholo. Re ile ra etsa bese, ho bolelang hore joale litšebeletso tsohle li itšetlehile ka eona. Sena se nolofatsa moralo, empa se hlahisa ntlha e le 'ngoe ea ho hloleha ho sistimi. Kafka e tla senyeha, ts'ebetso e tla emisa.

API e tsamaisoang ke liketsahalo ke eng

Karabo e ntle ea potso ena e tlalehong ea Martin Fowler (GOTO 2017) "Meelelo e Mengata ea Mehaho e Tsamaisang Ke ketsahalo".

Ka bokhutšoanyane seo re se entseng:

  1. Qetella lipuisano tsohle tsa asynchronous ka polokelo ea liketsahalo. Ho e-na le ho tsebisa moreki e mong le e mong ea thahasellang ka phetoho ea maemo holim'a marang-rang, re ngola ketsahalo e mabapi le phetoho ea maemo ho polokelo e bohareng, 'me bareki ba thahasellang sehlooho ba bala ntho e' ngoe le e 'ngoe e hlahang ho tloha moo.
  2. Ketsahalo ena tabeng ena ke tsebiso (tsebiso) hore ho na le ntho e fetohileng kae-kae. Ka mohlala, boemo ba taelo bo fetohile. Moreki ea nang le thahasello ho data e 'ngoe e tsamaeang le phetoho ea maemo e sa kenyelletsoeng tsebisong a ka fumana boemo ba eona ka boeena.
  3. Khetho e kholo ke ho fumana liketsahalo tse felletseng, phetiso ya mmuso, ketsahalong eo e nang le boitsebiso bohle bo hlokahalang bakeng sa ts'ebetso: e tsoa hokae le hore na e ile ea ea boemong bofe, hore na data e fetohile joang, joalo-joalo Potso e le 'ngoe feela ke ho khoneha le palo ea boitsebiso boo u ka bo khonang ho bo boloka.

E le karolo ea ho qala ha Sesebelisoa sa Puseletso, re sebelisitse khetho ea boraro. Ts'ebetso ena e nolofalitsoeng ea ketsahalo kaha ho ne ho sa hlokahale hore ho ntšoe lintlha tse qaqileng, hape e felisitse boemo boo ketsahalo e 'ngoe le e 'ngoe e ncha e hlahisang likopo tse ngata tse hlakisang ho tsoa ho bareki.

Puseletso Tool Service e sa kenngoeng, kahoo Kafka ho na le tatso e ngata ea pene ho feta tlhokahalo. Ha ke nahane hore haeba tšebeletso ea puseletso e fetoha morero o boima haholo, khoebo e ne e tla thaba.

Async phapanyetsano AS IS

Bakeng sa phapanyetsano ea asynchronous, lefapha la PHP hangata le sebelisa RabbitMQ. Re bokelletse lintlha tsa kopo, ra li beha moleng, 'me moreki oa ts'ebeletso e ts'oanang a li bala a ba a li romela (kapa ha a ka a li romela). Bakeng sa API ka boeona, Lamoda e sebelisa Swagger ka mafolofolo. Re theha API, re e hlalosa ka Swagger, 'me re hlahisa bareki le khoutu ea seva. Re boetse re sebelisa JSON RPC 2.0 e ntlafalitsoeng hanyane.

Libakeng tse ling ho sebelisoa libese tsa ESB, tse ling li phela ho activeMQ, empa, ka kakaretso, RabbitMQ - e tloaelehileng.

Async phapanyetsano HO BE

Ha u rala phapanyetsano ka liketsahalo-bese, papiso e ka saloa morao. Ka mokhoa o ts'oanang re hlalosa phapanyetsano ea data nakong e tlang ka litlhaloso tsa sebopeho sa ketsahalo. Sebopeho sa yaml, re ne re tlameha ho iketsetsa khoutu ka borona, jenereithara e theha li-DTO ho latela litlhaloso le ho ruta bareki le li-server ho sebetsa le tsona. Moloko o kena lipuong tse peli - golang le php. Sena se thusa ho boloka lilaebrari li tsitsitse. Jenereithara e ngotsoe ka golang, ke kahoo e fumaneng lebitso la gogi.

Ho fumana liketsahalo ho Kafka ke ntho e tloaelehileng. Ho na le tharollo ho tsoa ho mofuta oa mantlha oa khoebo oa Kafka Confluent, o teng nakadi, tharollo e tsoang ho barab'abo rona ba Zalando. Tsa rona tšusumetso ea ho qala ka vanilla Kafka - sena se bolela ho tlohela tharollo e lokolohile ho fihlela qetellong re etsa qeto ea hore na re tla e sebelisa kae kapa kae, hape re iphumanele sebaka sa ho laola le ho ntlafatsa: re batla tšehetso bakeng sa rona. JSON RPC 2.0, lijenereithara tsa lipuo tse peli 'me re bone hore na ke eng hape.

Hoa makatsa hore ebe le maemong a monate joalo, ha ho na le khoebo e batlang e tšoana, Zalando, e entseng tharollo e batlang e tšoana, re ke ke ra e sebelisa ka nepo.

Mokhoa oa ho aha ha o qala o tjena: re bala ka kotloloho ho tsoa Kafka, empa re ngola feela ka liketsahalo-bese. Ho na le lintho tse ngata tse lokiselitsoeng ho baloa Kafka: li-broker, li-balancers, 'me e se e loketse ho pharalla, ke ne ke batla ho boloka sena. Re ne re batla ho phethela ho rekota ka bese e le 'ngoe ea Gateway aka Events, ke ka lebaka lena.

Liketsahalo-bese

Kapa bese ea ketsahalo. Ena ke tsela e se nang moeli ea http, e nkang likarolo tse 'maloa tsa bohlokoa:

  • Ho Hlahisa Tiiso - re hlahloba hore na liketsahalo li kopana le litlhaloso tsa rona.
  • Sistimi e kholo ea ketsahalo, ke hore, ena ke eona tsamaiso e ka sehloohong le e le 'ngoe feela k'hamphaning e arabang potso ea hore na ke liketsahalo life tseo mehaho e nkoang e nepahetse. Netefatso e kenyelletsa feela mefuta ea data le li-ennum ho hlakisa litaba hantle.
  • Mosebetsi oa Hash bakeng sa sharding - sebopeho sa molaetsa oa Kafka ke bohlokoa-boleng 'me ho sebelisa hash ea senotlolo ho baloa hore na u ka e beha hokae.

Ke hobane'ng ha

Re sebetsa k'hamphaning e kholo e nang le ts'ebetso e hlophisitsoeng. Hobaneng ho fetola letho? Ena ke teko, ’me re lebeletse ho kotula melemo e ’maloa.

1:n+1 phapanyetsano (e le 'ngoe ho isa ho tse ngata)

Kafka e etsa hore ho be bonolo haholo ho hokahanya bareki ba bacha ho API.

Ha re re u na le bukana eo u hlokang ho e boloka e le morao-rao litsamaisong tse 'maloa ka nako e le ngoe (le ho tse ling tse ncha). Nakong e fetileng, re ile ra qapa bongata bo ileng ba kenya ts'ebetsong set-API, 'me tsamaiso e kholo e ile ea tsebisoa ka liaterese tsa bareki. Hona joale tsamaiso e kholo e romela lintlafatso sehloohong, 'me e mong le e mong ea thahasellang oa e bala. Ho hlahile sistimi e ncha - re e ngoletse bakeng sa sehlooho. E, hape li-bundle, empa li bonolo haholoanyane.

Tabeng ea puseletso-sesebelisoa, e leng sengoathoana sa BOB, ho loketse hore re li boloke li lumellana ka Kafka. Tefo e re chelete e khutlisitsoe: BOB, RT e fumane ka sena, e fetotse maemo a bona, Tšebeletso ea Fiscalization e fumane ka sena mme e ntša cheke.

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Re na le merero ea ho theha Ts'ebeletso e kopaneng ea Litsebiso e tla tsebisa moreki ka litaba tse mabapi le odara ea hae/ho khutla. Joale boikarabello bona bo phatlalalitsoe lipakeng tsa litsamaiso. Ho tla lekane hore re rute Ts'ebeletso ea Litsebiso ho tšoara tlhahisoleseling e nepahetseng ho tsoa Kafka le ho e arabela (le ho tima litsebiso tsena lits'ebetsong tse ling). Ha ho na phapanyetsano e ncha e tobileng e tla hlokeha.

E tsamaisoa ke data

Tlhahisoleseding lipakeng tsa litsamaiso e ba pepeneneng - ho sa tsotelehe "khoebo ea mali" eo ​​u nang le eona, ho sa tsotelehe hore na u salletse morao hakae. Lamoda e na le lefapha la Data Analytics le bokellang lintlha ho tsoa lits'ebetsong ebe li li kenya ka mokhoa o ka sebelisoang hape, bakeng sa khoebo le lits'ebetso tse bohlale. Kafka eu lumella hore u ba fe boitsebiso bo bongata ka potlako 'me u boloke boitsebiso boo bo ntse bo phalla ho fihlela joale.

Replication log

Melaetsa ha e nyamele ka mor'a hore e baloe, joalo ka RabbitMQ. Ha ketsahalo e na le tlhaiso-leseling e lekaneng bakeng sa ts'ebetso, re na le nalane ea liphetoho tsa morao-rao ho ntho, 'me, haeba ho hlokahala, bokhoni ba ho sebelisa liphetoho tsena.

Nako ea polokelo ea tlaleho ea ho pheta-pheta e itšetlehile ka matla a ho ngolla sehlooho sena; Kafka e u lumella ho beha meeli ea nako ea polokelo le bophahamo ba data habonolo. Bakeng sa lihlooho tse matla, ke habohlokoa hore bareki bohle ba be le nako ea ho bala boitsebiso pele bo nyamela, esita le tabeng ea ho se sebetse ha nako e khutšoanyane. Hangata hoa khoneha ho boloka data bakeng sa diyuniti tsa matsatsi, e lekaneng bakeng sa tšehetso.

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Ka mor'a moo, tlhaloso e nyenyane ea litokomane, bakeng sa ba sa tsebeng Kafka (setšoantšo le sona se tsoa litokomaneng)

AMQP e na le mela: re ngolla moreki melaetsa e eang moleng. Ka tloaelo, mokoloko o le mong o sebetsoa ke sistimi e le 'ngoe e nang le mohopolo o tšoanang oa khoebo. Haeba o hloka ho tsebisa litsamaiso tse 'maloa, o ka ruta sesebelisoa ho ngolla mela e mengata kapa ho lokisa phapanyetsano ka mochini oa fanout, o li kopanyang.

Kafka e na le tlhaloso e tšoanang sehlooho, eo u ngolang melaetsa ho eona, empa ha e nyamele ka mor'a ho bala. Ka mokhoa o ikhethileng, ha o hokela Kafka, o fumana melaetsa eohle mme o na le khetho ea ho boloka moo o tlohetseng teng. Ka mantsoe a mang, u bala ka tatellano, u kanna oa se tšoae hore molaetsa o baliloe, empa boloka id eo u ka tsoelang pele ho bala ho eona. Id eo u lutseng ho eona e bitsoa offset, 'me mochine o sebetsa.

Ka hona, logic e fapaneng e ka sebelisoa. Ka mohlala, re na le BOB maemong a 4 bakeng sa linaha tse fapaneng - Lamoda e Russia, Kazakhstan, Ukraine, Belarus. Kaha li arotsoe ka thoko, li na le li-configs tse fapaneng hanyane le mohopolo oa tsona oa khoebo. Re bontša molaetseng hore e bua ka naha efe. Moreki e mong le e mong oa BOB naheng ka 'ngoe o bala le sehlopha se fapaneng sa Id, 'me haeba molaetsa o sa sebetse ho bona, oa o tlola, ke hore. hang-hang e etsa offset +1. Haeba sehlooho se ts'oanang se baloa ke Tšebeletso ea rona ea Tefo, joale e etsa joalo ka sehlopha se arohaneng, kahoo li-offsets ha li kopane.

Litlhoko tsa ketsahalo:

  • Ho phethahala ha data. Ke kopa hore ketsahalo ena e be le data e lekaneng hore e tsebe ho sebetsoa.

  • Botšepehi. Re abela Liketsahalo-bese ho netefatsa hore ketsahalo e ts'oana le hore e ka e sebetsa.
  • Taelo ke ea bohlokoa. Tabeng ea ho khutla, re qobelloa ho sebetsa le histori. Ka litsebiso, taelo ha e bohlokoa, haeba e le litsebiso tse tšoanang, imeile e tla tšoana ho sa tsotellehe hore na ke taelo efe e fihlileng pele. Tabeng ea puseletso, ho na le ts'ebetso e hlakileng; haeba re fetola taelo, mekhelo e tla hlaha, puseletso e ke ke ea etsoa kapa ea sebetsoa - re tla qetella re le maemong a fapaneng.
  • Ho lumellana. Re na le lebenkele, 'me joale re theha liketsahalo sebakeng sa API. Re hloka mokhoa oa ho fetisetsa tlhahisoleseling kapele le ka theko e tlase mabapi le liketsahalo tse ncha le liphetoho ho tse seng li ntse li le teng litšebeletsong tsa rona. Sena se finyelloa ka tlhaloso e tloaelehileng sebakeng se arohaneng sa git le lijenereithara tsa khoutu. Ka hona, bareki le li-server litšebeletsong tse fapaneng lia hokahanngoa.

Kafka e Lamoda

Re na le lisebelisoa tse tharo tsa Kafka:

  1. Lifate;
  2. R&D;
  3. Liketsahalo-bese.

Kajeno re bua feela ka ntlha ea ho qetela. Liketsahalong tsa libese, ha re na lisebelisoa tse kholo haholo - barekisi ba 3 (li-server) le lihlooho tse 27 feela. E le molao, sehlooho se le seng ke ts'ebetso e le 'ngoe. Empa ena ke ntlha e poteletseng, 'me re tla e ama hona joale.

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Ka holimo ke graph ea rps. Ts'ebetso ea ho khutlisa chelete e tšoailoe ka mohala oa turquoise (e, o ho axis ea X), 'me mola o pinki ke ts'ebetso ea ntlafatso ea litaba.

Lethathamo la Lamoda le na le lihlahisoa tse limilione, 'me datha e lula e ntlafatsoa ka linako tsohle. Lipokello tse ling li tsoa fesheneng, ho lokolloa tse ncha ho li nkela sebaka, 'me mefuta e mecha e lula e hlaha lethathamong la libuka. Re leka ho bolela esale pele se tla khahla bareki ba rona hosane, kahoo re lula re reka lintho tse ncha, re li nka lifoto le ho nchafatsa mokotla oa ponts'o.

Litlhōrō tse pinki ke lintlafatso tsa lihlahisoa, ke hore, liphetoho lihlahisoa. Ho ka bonoa hore bahlankana ba ile ba nka litšoantšo, ba nka litšoantšo, 'me hape! - e kentse pakete ea liketsahalo.

Liketsahalo tsa Lamoda li sebelisa linyeoe

Re sebelisa meralo e hahiloeng bakeng sa ts'ebetso e latelang:

  • Khutlisetsa boemo: pitso-ho nka khato le ho latela maemo ho tsoa ho litsamaiso tsohle tse amehang. Tefo, maemo, fiscalization, litsebiso. Mona re ile ra leka mokhoa ona, ra etsa lisebelisoa, ra bokella likokoana-hloko tsohle, ra ngola litokomane mme ra bolella basebetsi-'moho le rona hore na re li sebelise joang.
  • Ho nchafatsa likarete tsa sehlahisoa: tlhophiso, meta-data, litšobotsi. Sistimi e le 'ngoe e bala (e bonts'ang), le ho ngola tse' maloa.
  • E-mail, push le sms: taelo e bokelitsoe, taelo e fihlile, ho khutlisetsoa ho amoheloa, joalo-joalo, ho na le tse ngata.
  • Stock, nchafatso ea polokelo - ntlafatso ea lintho tse ngata, linomoro feela: ho fihla ntlong ea polokelo, ho khutla. Hoa hlokahala hore litsamaiso tsohle tse amanang le ho boloka thepa li sebetse ka data ea hajoale. Hajoale, sistimi ea ntlafatso ea stock e rarahane haholo; Kafka e tla e nolofatsa.
  • Boitsebiso ba Lintlha (Lefapha la R&D), lisebelisoa tsa ML, analytics, lipalo. Re batla hore tlhahisoleseling e be pepeneneng - Kafka e loketse sena hantle.

Hona joale karolo e khahlisang haholoanyane mabapi le maqhutsu a maholo le litšibollo tse khahlisang tse etsahetseng likhoeling tse tšeletseng tse fetileng.

Mathata a moralo

Ha re re re batla ho etsa ntho e ncha - mohlala, fetisetsa ts'ebetso eohle ea ho fana ka thepa ho Kafka. Hona joale karolo ea ts'ebetso e kenngoa ho Order Processing ho BOB. Ho na le mohlala oa boemo ka mor'a ho fetisetsoa ha taelo ho tšebeletso ea ho fana ka thepa, ho fallela ntlong ea polokelo e bohareng, joalo-joalo. Ho na le monolith e felletseng, esita le tse peli, hammoho le sehlopha sa li-API tse ikemiselitseng ho tsamaisa. Ba tseba haholo ka ho pepa.

Tsena li bonahala e le libaka tse ts'oanang, empa Tsamaiso ea Taelo ho BOB le Sisteme ea Shipping e na le maemo a fapaneng. Mohlala, lits'ebeletso tse ling tsa li-courier ha li romele li-status tsa mahareng, empa li romella feela tsa ho qetela: "lohiloe" kapa "lahlehile". Ba bang, ho fapana le hoo, ba tlaleha ka ho qaqileng haholo ka motsamao oa thepa. E mong le e mong o na le melao ea hae ea ho netefatsa: ho ba bang, imeile e nepahetse, e bolelang hore e tla sebetsoa; ho ba bang ha e sebetse, empa taelo e ntse e tla sebetsoa hobane ho na le nomoro ea mohala ea ho ikopanya, 'me motho o tla re taelo e joalo e ke ke ea sebetsoa ho hang.

Phallo ea data

Tabeng ea Kafka, potso ea ho hlophisa phallo ea data e hlaha. Mosebetsi ona o kenyelletsa ho khetha leano le ipapisitseng le lintlha tse 'maloa; ha re feteng ho tsona kaofela.

Sehloohong se le seng kapa ho tse fapaneng?

Re na le litlhaloso tsa ketsahalo. Ho BOB re ngola hore taelo e joalo le e joalo e lokela ho fanoa, 'me e bontše: nomoro ea taelo, sebopeho sa eona, li-SKU tse ling le li-bar codes, joalo-joalo. Ha thepa e fihla sebakeng sa polokelo, thepa e tla khona ho fumana li-status, litempe tsa linako le tsohle tse hlokahalang. Empa joale re batla ho fumana lintlafatso mabapi le data ena ho BOB. Re na le mokhoa o fapaneng oa ho amohela data ho tsoa ho thomello. Na ee ke ketsahalo e tšoanang? Kapa na ke phapanyetsano e fapaneng e lokeloang ke sehlooho sa eona?

Ho ka etsahala hore ebe li tla tšoana haholo, 'me teko ea ho etsa sehlooho se le seng ha e na motheo, hobane sehlooho se arohaneng se bolela bareki ba arohaneng, li-configs tse arohaneng, moloko o fapaneng oa sena sohle. Empa eseng nnete.

Sebaka se secha kapa ketsahalo e ncha?

Empa haeba u sebelisa liketsahalo tse tšoanang, joale bothata bo bong bo hlaha. Ka mohlala, hase mekhoa eohle ea ho fana ka thepa e ka hlahisang mofuta oa DTO oo BOB e ka o hlahisang. Re ba romella id, empa ha ba e boloke hobane ha ba e hloke, 'me ho ea ka pono ea ho qala ts'ebetso ea libese, lebala lena lea hlokahala.

Haeba re hlahisa molao bakeng sa ketsahalo-bese hore tšimo ena e hlokeha, joale re qobelloa ho beha melao e eketsehileng ea ho netefatsa ho BOB kapa ho mohlokomeli oa ketsahalo ea ho qala. Ho netefatsa ho qala ho hasana ho pholletsa le ts'ebeletso - sena ha se bonolo haholo.

Bothata bo bong ke teko ea ho ntlafatsa tsoelo-pele. Re bolelloa hore ho na le ntho e lokelang ho kenyelletsoa ketsahalong eo, 'me mohlomong, haeba re nahana ka eona, e ka be e bile ketsahalo e fapaneng. Empa morerong oa rona, ketsahalo e arohaneng ke sehlooho se arohaneng. Sehlooho se arohaneng ke ts'ebetso eohle eo ke e hlalositseng ka holimo. Moqapi o lekeha ho kenyelletsa tšimo e 'ngoe ho schema ea JSON le ho e nchafatsa.

Tabeng ea ho khutlisa chelete, re fihlile ketsahalong ea liketsahalo ka halofo ea selemo. Re bile le ketsahalo e le 'ngoe e bitsoang refund update, e neng e na le mofuta oa mofuta o hlalosang hore na ntlafatso ena e ne e le eng. Ka lebaka la sena, re ne re e-na le li-switches tse "hlollang" tse nang le li-validators tse ileng tsa re bolella mokhoa oa ho netefatsa ketsahalo ena ka mofuta ona.

Phetolelo ea ketsahalo

Ho netefatsa melaetsa ho Kafka u ka e sebelisa la euro, empa ho ne ho hlokahala ho robala hang-hang le ho sebelisa Confluent. Tabeng ea rona, re tlameha ho ba hlokolosi ka phetolelo. Ha se kamehla ho ka khonehang ho bala hape melaetsa e tsoang lethathamong la likopi hobane mohlala o "tlohile". Ha e le hantle, ho bonahala eka ho aha liphetolelo e le hore mohlala o lumellane le morao: mohlala, etsa hore tšimo e be khetho ea nakoana. Haeba liphapang li le matla haholo, re qala ho ngola sehloohong se secha, 'me re fetisetsa bareki ha ba qeta ho bala ea khale.

Taelo e netefalitsoeng ea ho bala ea likarolo

Lihlooho ka hare ho Kafka li arotsoe ka likaroloana. Sena ha se bohlokoa haholo ha re ntse re rala mekhatlo le phapanyetsano, empa ho bohlokoa ha re etsa qeto ea ho e sebelisa le ho e phahamisa.

Boemong bo tloaelehileng, u ngola sehlooho se le seng Kafka. Ka ho sa feleng, ho sebelisoa karolo e le 'ngoe, 'me melaetsa eohle e sehloohong sena e ea ho eona. 'Me ka lebaka leo moreki o bala melaetsa ena ka tatellano. Ha re re joale re hloka ho atolosa tsamaiso e le hore melaetsa e baloe ke bareki ba babeli ba fapaneng. Haeba, ka mohlala, u romela SMS, joale u ka bolella Kafka ho etsa karohano e eketsehileng, 'me Kafka e tla qala ho arola melaetsa ka likarolo tse peli - halofo mona, halofo mona.

Kafka e ba arola joang? Molaetsa o mong le o mong o na le 'mele (oo re bolokang JSON) le senotlolo. U ka hokela mosebetsi oa hash ho senotlolo sena, se tla khetholla hore na molaetsa o tla kena ho karolo efe.

Tabeng ea rona ka puseletso, sena ke sa bohlokoa, haeba re nka likarolo tse peli, joale ho na le monyetla oa hore moreki ea tšoanang o tla sebetsana le ketsahalo ea bobeli pele ho ea pele mme ho tla ba le mathata. Mosebetsi oa hash o tiisa hore melaetsa e nang le senotlolo se tšoanang e qetella e le karohano e tšoanang.

Liketsahalo khahlano le litaelo

Bona ke bothata bo bong boo re kopaneng le bona. Ketsahalo ke ketsahalo e itseng: re re ho na le ntho e etsahetseng kae-kae (ho hong_ho etsahetse), mohlala, ntho e ile ea hlakoloa kapa puseletso e etsahetse. Haeba motho a mamela liketsahalo tsena, joale ho ea ka "ntho e hlakotsoe," mokhatlo oa puseletso o tla thehoa, 'me "puseletso e etsahetse" e tla ngoloa kae-kae ho li-setups.

Empa hangata, ha u theha liketsahalo, ha u batle ho li ngola lefeela - u itšetlehile ka taba ea hore motho o tla li bala. Ho na le moleko o moholo oa ho ngola eseng ntho_e etsahetseng (item_canceled, refund_refunded), empa something_should_be_done. Ka mohlala, ntho e se e loketse ho khutlisoa.

Ka lehlakoreng le leng, e fana ka maikutlo a hore na ketsahalo eo e tla sebelisoa joang. Ka lehlakoreng le leng, e utloahala e le tlase haholo joalo ka lebitso le tloaelehileng la ketsahalo. Ntle ho moo, ha e hole le mona ho ea ho taelo ea do_something. Empa ha u na tiisetso ea hore motho o bala ketsahalo ena; ’me haeba u e bala, joale u e bala ka katleho; ’me haeba u e balile ka katleho, joale u entse ho hong, ’me ntho e ’ngoe e ile ea atleha. Hang ha ketsahalo e fetoha ntho_ntho, maikutlo a hlokahala, 'me ke bothata.

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Ka phapanyetsano ea asynchronous ho RabbitMQ, ha u bala molaetsa, e-ea ho http, u na le karabo - bonyane hore molaetsa o amohetsoe. Ha u ngolla Kafka, ho na le molaetsa oo u o ngoletseng Kafka, empa ha u tsebe letho ka hore na o sebelitsoe joang.

Ka hona, molemong oa rona, re ile ra tlameha ho hlahisa ketsahalo ea ho arabela le ho theha tlhokomelo e le hore haeba liketsahalo tse ngata li rometsoe, ka mor'a nako e joalo le ka nako e joalo palo e tšoanang ea liketsahalo tse arabelang e lokela ho fihla. Haeba sena se sa etsahale, joale ho bonahala eka ho na le ho phoso. Ka mohlala, haeba re rometse ketsahalo ea "item_ready_to_refund", re lebeletse hore puseletso e tla etsoa, ​​chelete e tla khutlisetsoa ho moreki, 'me ketsahalo ea "money_refund" e tla romelloa ho rona. Empa sena ha se na bonnete, kahoo ho hlokahala ho beha leihlo.

Metsotso

Ho na le bothata bo totobetseng: haeba u bala ho tsoa sehloohong ka tatellano, 'me u na le molaetsa o mobe, moreki o tla oa,' me u ke ke ua fetela pele. U hloka emisa bareki bohle, ikemisetse ho tsoela pele ho bala.

Re ne re tseba ka eona, re e tšepile, leha ho le joalo ea etsahala. 'Me sena se etsahetse hobane ketsahalo eo e ne e nepahetse ho tloha ponong ea liketsahalo-bese, ketsahalo eo e ne e nepahetse ho ea ka pono ea moetsi oa kopo, empa e ne e sa sebetse ho tloha ponong ea PostgreSQL, hobane tsamaisong ea rona e le' ngoe. MySQL e nang le UNSIGNED INT, 'me tsamaisong e sa tsoa ngoloa e ne e na le PostgreSQL feela ka INT. Boholo ba hae bo nyane hanyane, mme Id ha ea lekana. Symfony o ile a shoa ka mokhelo. Ka 'nete, re ile ra tšoara mokhelo hobane re ne re itšetlehile ka eona, 'me re ne re tla etsa sena, empa pele ho moo re ne re batla ho eketsa k'hamera ea bothata, kaha molaetsa o ile oa sebetsoa ntle le katleho. Li-counters morerong ona li boetse li le database, 'me Symfony e se e koetse puisano le database,' me mokhelo oa bobeli o bolaile ts'ebetso eohle ntle le monyetla oa ho etsa phoso.

Tšebeletso e ile ea robala ka nako e itseng - ka lehlohonolo, le Kafka sena ha se mpe hakaalo, hobane melaetsa e sala. Ha mosebetsi o tsosolositsoe, u ka qeta ho li bala. E phutholohile.

Kafka e na le bokhoni ba ho beha mokhoa o sa reroang ka ho sebelisa lisebelisoa. Empa ho etsa sena, o hloka ho emisa bareki bohle - molemong oa rona, lokisetsa tokollo e fapaneng eo ho eona ho ke keng ha e-ba le bareki, redeployments. Ebe ho Kafka o ka fetola offset ka ho sebelisa lisebelisoa, 'me molaetsa o tla feta.

Nuance e 'ngoe - replication log vs rdkafka.so - e amana le lintlha tse tobileng tsa morero oa rona. Re sebelisa PHP, 'me ka PHP, e le molao, lilaebrari tsohle li buisana le Kafka ka polokelo ea rdkafka.so, ebe ho na le mofuta o itseng oa wrapper. Mohlomong ana ke mathata a rona, empa ho ile ha fumaneha hore ho bala hape karoloana ea seo re seng re se balile ha ho bonolo hakaalo. Ka kakaretso, ho ne ho e-na le mathata a software.

Ho khutlela ho tse tobileng tsa ho sebetsa le likaroloana, ho ngotsoe hantle litokomaneng bareki >= likarolo tsa sehlooho. Empa ke ile ka tseba ka sena hamorao haholo ho feta kamoo nka ratang kateng. Haeba u batla ho lekanya le ho ba le bareki ba babeli, u hloka bonyane likarolo tse peli. Ke hore, haeba u ne u e-na le karohano e le 'ngoe eo ho eona melaetsa e likete tse 20 e neng e bokelletse,' me u entse e ncha, palo ea melaetsa e ke ke ea lekanngoa haufinyane. Ka hona, ho ba le bareki ba babeli ba tšoanang, o hloka ho sebetsana le li-partitions.

Tlhokomelo

Ke nahana hore tsela eo re e behang leihlo ka eona e tla hlaka le ho feta hore na ho na le mathata afe ka mokhoa o teng.

Ka mohlala, re bala hore na ke lihlahisoa tse kae ho database tse sa tsoa fetola boemo ba tsona, 'me, ka hona, liketsahalo li ne li lokela ho etsahala ho latela liphetoho tsena,' me re romela nomoro ena tsamaisong ea rona ea ho beha leihlo. Ebe ho tloha Kafka re fumana nomoro ea bobeli, hore na ke liketsahalo tse kae tse hlileng li tlalehiloeng. Ho hlakile hore phapang lipakeng tsa linomoro tsena tse peli e lokela ho lula e le zero.

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Ho feta moo, o hloka ho beha leihlo hore na mohlahisi o ntse a sebetsa joang, hore na liketsahalo-bese e amohetse melaetsa, le hore na moreki o ntse a sebetsa joang. Ka mohlala, lichabeng tse ka tlaase, Puseletso Tool e sebetsa hantle, empa BOB ka ho hlaka e na le mathata a itseng (litlhōrō tse putsoa).

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Ke se ke boletse lag ea sehlopha sa bareki. Ka mantsoe a mang, ena ke palo ea melaetsa e sa baloang. Ka kakaretso, bareki ba rona ba sebetsa ka potlako, kahoo lag hangata ke 0, empa ka linako tse ling ho ka ba le tlhōrō ea nakoana. Kafka e ka etsa sena ka ntle ho lebokose, empa o hloka ho beha nako e itseng.

Ho na le morero Burrowe tla u fa leseli le eketsehileng ka Kafka. E sebelisa API ea sehlopha sa bareki ho fana ka boemo ba hore na sehlopha sena se sebetsa joang. Ho phaella ho OK le Failed, ho na le temoso, 'me u ka fumana hore bareki ba hao ha ba khone ho sebetsana ka katleho le lebelo la tlhahiso - ha ba na nako ea ho bala se ngotsoeng. Sistimi e bohlale haholo ebile e bonolo ho e sebelisa.

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Sena ke tsela eo karabelo ea API e shebahalang ka eona. Mona ke sehlopha sa bob-live-fifa, partition refund.update.v1, status OK, lag 0 - the last final offset tse joalo le tse joalo.

Boiphihlelo ba ho nts'etsapele ts'ebeletso ea Sesebelisoa sa Puseletso ka API ea Asynchronous Kafka

Tlhokomelo e nchafalitsoe_ho SLA (e tsitsitse) Ke se ke boletse. Ka mohlala, sehlahisoa se fetohile ho ea boemong ba hore se loketse ho khutlisetsoa. Re kenya Cron, e reng haeba ka metsotso ea 5 ntho ena ha e e-s'o khutlisetsoe chelete (re khutlisetsa chelete ka mekhoa ea ho lefa ka potlako), joale ho na le ntho e sa tsamaeeng hantle, 'me ka sebele ena ke nyeoe ea tšehetso. Ka hona, re nka feela Cron, e balang lintho tse joalo, 'me haeba li kholo ho feta 0, joale e romela tlhokomeliso.

Ho akaretsa, ho sebelisa liketsahalo ho bonolo ha:

  • tlhahisoleseding e hlokehang ke litsamaiso tse 'maloa;
  • sephetho sa ts'ebetso ha se bohlokoa;
  • ho na le liketsahalo tse fokolang kapa tse nyane.

Ho ka bonahala eka sengoloa se na le sehlooho se ikhethileng haholo - API ea asynchronous ka Kafka, empa mabapi le eona nka rata ho khothaletsa lintho tse ngata ka nako e le 'ngoe.
Ea pele, e latelang Phahameng++ re lokela ho ema ho fihlela ka November; ka April ho tla ba le phetolelo ea St. Petersburg, 'me ka June re tla bua ka meroalo e phahameng Novosibirsk.
Ea bobeli, mongoli oa tlaleho, Sergei Zaika, ke setho sa Komiti ea Lenaneo la kopano ea rona e ncha ea tsamaiso ea tsebo. TseboConf. Kopano ke ea letsatsi le le leng, e tla tšoaroa ka la 26 Mmesa, empa lenaneo la eona le matla haholo.
'Me e tla ba ka May PHP Russia и RIT++ (ka DevOpsConf e kenyelelitsoe) - o ka boela oa fana ka maikutlo a sehlooho sa hau moo, bua ka boiphihlelo ba hau le ho tletleba ka li-cones tsa hau tse pentiloeng.

Source: www.habr.com

Eketsa ka tlhaloso