Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Inona no mety hanery ny orinasa lehibe toa an'i Lamoda, miaraka amin'ny dingana mirindra sy serivisy mifandray am-polony, hanova tanteraka ny fomba fiasany? Ny antony manosika dia mety ho hafa tanteraka: avy amin'ny mpanao lalàna ka hatramin'ny faniriana hanandrana izay misy amin'ny mpandrindra rehetra.

Saingy tsy midika izany fa tsy afaka miantehitra amin'ny tombontsoa fanampiny ianao. Sergey Zaika dia hilaza aminao izay tena mety ho azonao raha mampihatra ny API entin'ny hetsika ao amin'ny Kafka ianao (fewald). Hisy ihany koa ny resaka momba ny tifitra lehibe sy ny zava-baovao mahaliana - tsy ho vita ny fanandramana raha tsy misy azy ireo.

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Disclaimer: Ity lahatsoratra ity dia mifototra amin'ny fitaovana avy amin'ny fihaonana nataon'i Sergey tamin'ny Novambra 2018 tao amin'ny HighLoad++. Ny traikefa mivantana nataon'i Lamoda tamin'ny fiaraha-miasa tamin'ny Kafka dia nahasarika mpihaino tsy latsaky ny tatitra hafa momba ny fandaharam-potoana. Heverinay fa ohatra tena tsara amin'ny hoe afaka mahita olona mitovy hevitra foana ianao, ary ny mpikarakara ny HighLoad++ dia hanohy hiezaka hamorona rivo-piainana mifanaraka amin'izany.

Momba ny dingana

Lamoda dia sehatra e-varotra lehibe izay manana foibem-pifandraisana manokana, serivisy fanaterana (sy ireo mpiara-miombon'antoka maro), studio sary, trano fanatobiana entana lehibe, ary izany rehetra izany dia mandeha amin'ny rindrambaiko manokana. Misy fomba fandoavam-bola am-polony, mpiara-miombon'antoka b2b izay mety hampiasa ny sasany na ny rehetra amin'ireo serivisy ireo ary te-hahafantatra ny vaovao farany momba ny vokatra azony. Ankoatr'izay, ny Lamoda dia miasa any amin'ny firenena telo ankoatry ny Federasiona Rosiana ary hafa kely ny zava-drehetra any. Amin'ny fitambarany, mety misy fomba maherin'ny zato hanamboarana lamina vaovao, izay tsy maintsy karakaraina amin'ny fombany. Izany rehetra izany dia miasa miaraka amin'ny fanampian'ny serivisy am-polony izay indraindray mifandray amin'ny fomba tsy mazava. Misy ihany koa ny rafitra foibe izay ny sata mifehy ny filaminana no tena andraikiny. Antsoinay hoe BOB izy, miara-miasa aminy aho.

Fitaovana famerenam-bola miaraka amin'ny API entin'ny hetsika

Ny teny hoe entin'ny hetsika dia somary hackney; lavidavitra kokoa dia hofaritantsika amin'ny antsipiriany kokoa ny dikan'izany. Hanomboka amin'ny teny manodidina izay nanapa-kevitra izahay hanandrana ny fomba fiasa API entin'ny hetsika ao Kafka.

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Any amin’ny magazay rehetra, ankoatra ny kaomandy aloan’ny mpanjifa, dia misy fotoana tsy maintsy averin’ny magazay ny vola satria tsy mifanaraka amin’ny mpanjifa ny vokatra. Fomba fohy ihany ity: manazava ny vaovao izahay, raha ilaina, ary mamindra ny vola.

Saingy nanjary sarotra kokoa ny fiverenana noho ny fiovan'ny lalàna, ary tsy maintsy nampihatra microservice manokana ho an'izany izahay.

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Ny antony manosika antsika:

  1. Lalàna FZ-54 - Raha fintinina, ny lalàna dia mitaky ny fanaovana tatitra any amin'ny biraon'ny hetra momba ny fifanakalozana ara-bola rehetra, na fiverenana na tapakila, ao anatin'ny SLA fohy ao anatin'ny minitra vitsy. Izahay, amin'ny maha-orinasa e-varotra, dia manao asa be dia be. Ara-teknika, izany dia midika andraikitra vaovao (ary noho izany dia serivisy vaovao) sy fanatsarana ny rafitra rehetra voakasik'izany.
  2. BOB mizara dia tetikasa anatiny an'ny orinasa mba hanamaivanana ny BOB amin'ny andraikitra marobe tsy fototra ary hampihena ny fahasarotana ankapobeny.

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Ity diagram ity dia mampiseho ny rafitra Lamoda lehibe. Ankehitriny dia maro kokoa ny ankamaroan'izy ireo antokon-kintana 5-10 microservices manodidina ny monolith mihena. Mihamitombo tsikelikely izy ireo, saingy miezaka ny hanamaivana azy ireo izahay, satria mampatahotra ny fanaparitahana ny sombiny voafantina eo afovoany - tsy azontsika avela hianjera izany. Voatery mitahiry ny fifanakalozana rehetra (zana-tsipìka) izahay ary mandinika ny zava-misy fa ny iray amin'izy ireo dia mety tsy ho hita.

Ny BOB ihany koa dia manana fifanakalozana betsaka: rafitra fandoavam-bola, rafitra fanaterana, rafitra fampahafantarana, sns.

Ny BOB ara-teknika dia:

  • ~150k andalana kaody + ~100k andalana fitsapana;
  • php7.2 + Zend 1 & Symfony Components 3;
  • > 100 API & ~50 fampidirana ivelany;
  • Firenena 4 manana ny lojikan'ny fandraharahany manokana.

Ny fametrahana BOB dia lafo sy maharary, ny habetsaky ny kaody sy ny olana voavahany dia tsy misy afaka mametraka izany rehetra izany ao an-dohany. Amin'ny ankapobeny dia misy antony maro hanatsorana azy.

Fomba famerenana

Amin'ny voalohany, rafitra roa no tafiditra ao anatin'ilay dingana: BOB sy Payment. Miseho roa izao:

  • Fiscalization Service, izay hikarakara ny olana amin'ny fiscalization sy ny fifandraisana amin'ny serivisy ivelany.
  • Fitaovana famerenam-bola, izay misy fifanakalozana vaovao fotsiny mba tsy hampisondrotra ny BOB.

Toy izao ny fizotrany:

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

  1. Ny BOB dia mahazo fangatahana famerenana.
  2. BOB dia miresaka momba ity fitaovana famerenam-bola ity.
  3. Ny fitaovana famerenam-bola dia milaza amin'ny Payment: "Avereno ny vola."
  4. Ny fandoavana dia mamerina ny vola.
  5. Ny fitaovana famerenam-bola sy ny BOB dia mampifandray ny sata, satria amin'izao fotoana izao dia samy mila izany izy ireo. Tsy mbola vonona ny hivadika tanteraka amin'ny fitaovana famerenam-bola izahay, satria manana UI ny BOB, mitatitra momba ny kaonty, ary amin'ny ankapobeny ny angona maro tsy azo afindra mora. Tsy maintsy mipetraka amin'ny seza roa ianao.
  6. Lasa ny fangatahana fiscalization.

Vokatr'izany dia nanao karazana fiara fitateram-bahoaka izahay tao amin'ny Kafka - fiara fitateram-bahoaka, izay niatombohan'ny zava-drehetra. Hery, manana teboka tokana amin'ny tsy fahombiazana isika ankehitriny (eso).

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Ny mahatsara sy maharatsy ny mifampiresaka dia mibaribary. Nanamboatra fiara fitateram-bahoaka izahay, midika izany fa miankina amin'izany ny serivisy rehetra. Manamora ny famolavolana izany, fa mampiditra teboka tokana amin'ny tsy fahombiazan'ny rafitra. Hirodana ny Kafka, hijanona ny dingana.

Inona no atao hoe API entin'ny hetsika

Ny valiny tsara amin'ity fanontaniana ity dia ao amin'ny tatitra nataon'i Martin Fowler (GOTO 2017) "Ny hevitry ny maro amin'ny Architecture entin'ny hetsika".

Fohy ny zavatra nataonay:

  1. Fenoy ny fifanakalozana asynchronous rehetra amin'ny fitahirizana hetsika. Raha tokony hampahafantatra ny mpanjifa liana rehetra momba ny fiovan'ny sata amin'ny tambajotra izahay, dia manoratra hetsika momba ny fiovan'ny sata ho fitahirizana foibe, ary ny mpanjifa liana amin'ny lohahevitra dia mamaky izay rehetra miseho avy ao.
  2. Ny hetsika amin'ity tranga ity dia fampahafantarana (fampahatsiahivana) fa nisy zavatra niova tany ho any. Ohatra, niova ny satan'ny baiko. Ny mpanjifa iray izay liana amin'ny angon-drakitra sasany miaraka amin'ny fiovan'ny sata izay tsy tafiditra ao anatin'ny fampahafantarana dia afaka mahita ny sata mifehy azy.
  3. Ny safidy faratampony dia ny fanangonana hetsika feno, famindrana fanjakana, amin'ny hetsika izay ahitana ny fampahalalana rehetra ilaina amin'ny fanodinana: avy aiza izy io sy ny sata nalehany, ahoana marina ny fiovan'ny data, sns. Ny hany fanontaniana dia ny fahafaha-manao sy ny habetsaky ny fampahalalana azonao tehirizina.

Ao anatin'ny fandefasana ny fitaovana famerenam-bola dia nampiasa ny safidy fahatelo izahay. Ity fikarakarana hetsika notsotsotra ity satria tsy ilaina ny maka fampahalalana amin'ny antsipiriany, miampy ny fanafoanana ny scenario izay mahatonga ny hetsika vaovao tsirairay hanazavana ny fangatahana avy amin'ny mpanjifa.

Serivisy fitaovana famerenam-bola tsy entina, noho izany Kafka dia misy tsiron'ny penina mihoatra noho ny filana. Tsy mieritreritra aho fa raha lasa tetik'asa be entana ny serivisy famerenana dia ho faly ny orinasa.

Async exchange AS IS

Ho an'ny fifanakalozana asynchronous, matetika ny departemanta PHP dia mampiasa RabbitMQ. Nanangona ny angon-drakitra ho an'ny fangatahana izahay, nametraka izany tamin'ny filaharana, ary namaky izany ny mpanjifan'ny serivisy mitovy ary nandefa azy (na tsy nandefa azy). Ho an'ny API mihitsy dia mampiasa Swagger i Lamoda. Manamboatra API izahay, mamaritra azy amin'ny Swagger, ary mamorona kaody mpanjifa sy mpizara. Mampiasa JSON RPC 2.0 ihany koa izahay.

Any amin'ny toerana sasany dia ampiasaina ny bisy ESB, ny sasany miaina amin'ny activeMQ, fa amin'ny ankapobeny, RabbitMQ - fenitra.

Async fifanakalozana TO BE

Rehefa mamolavola fifanakalozana amin'ny alàlan'ny bisy hetsika, dia azo jerena ny fanoharana. Manoritsoritra ny fifanakalozana angona ho avy amin'ny alàlan'ny famaritana firafitry ny hetsika izahay. Ny endrika yaml, tsy maintsy nanao ny famoronana kaody ny tenanay, ny mpamokatra dia mamorona DTO araka ny fepetra ary mampianatra ireo mpanjifa sy mpizara hiara-miasa amin'izy ireo. Ny taranaka dia mandeha amin'ny fiteny roa - golang sy php. Manampy amin'ny fitazonana ny tranomboky tsy miovaova izany. Nosoratana tamin’ny teny golang ny gropy ka izany no nahazoany ny anarana hoe gogi.

Zavatra mahazatra ny fitadiavana hetsika ao amin'ny Kafka. Misy vahaolana avy amin'ny dikan-tenin'ny orinasa lehibe an'ny Kafka Confluent, misy nakadi, vahaolana avy amin'ireo rahalahintsika Zalando. NY fanentanana hanomboka amin'ny vanila Kafka - midika izany fa mamela malalaka ny vahaolana mandra-pahitantsika amin'ny farany raha hampiasa izany na aiza na aiza, ary mamela toerana ho an'ny hetsika sy fanatsarana ihany koa: mila fanohanana ho an'ny tenantsika isika. JSON RPC 2.0, mpamokatra ho an'ny fiteny roa ary andeha hojerentsika izay hafa.

Mampihomehy fa na dia amin'ny tranga mahafaly toy izany aza, rehefa misy orinasa mitovitovy amin'izany, Zalando, izay nanao vahaolana mitovy amin'izany, dia tsy afaka mampiasa izany amin'ny fomba mahomby isika.

Ny lamin'ny maritrano amin'ny fanombohana dia toy izao manaraka izao: mamaky mivantana avy amin'ny Kafka izahay, fa manoratra amin'ny alàlan'ny hetsika-bus ihany. Betsaka ny vonona hovakiana ao amin'ny Kafka: brokers, balancers, ary efa vonona ho an'ny scaling horizontaly, tiako ny hitazona izany. Te hamita ny fandraisam-peo amin'ny alàlan'ny Gateway iray aka Events-bus izahay, ary izao no antony.

Events-bus

Na fiara fitateram-bahoaka. Io dia vavahady http tsy misy fanjakana, izay mitana andraikitra lehibe maro:

  • Famokarana Validation - manamarina izahay fa mifanaraka amin'ny fepetra takianay ny hetsika.
  • Rafitra tompon'ny hetsika, izany hoe, ity no rafitra lehibe sy tokana ao amin'ny orinasa izay mamaly ny fanontaniana momba ny hetsika izay heverina ho manan-kery. Ny fanamarinana dia ahitana karazana data sy enum fotsiny mba hamaritana ny atiny.
  • Fampiasana hash ho an'ny sharding - ny firafitry ny hafatra Kafka dia sanda manan-danja ary amin'ny fampiasana ny hash of key dia kajy ny toerana hametrahana azy.

Nahoana

Miasa ao amin'ny orinasa lehibe misy dingana mirindra. Nahoana no manova zavatra? Andrana izany, ary manantena ny hijinja tombontsoa maro izahay.

1: n+1 fifanakalozana (iray amin'ny maro)

Kafka dia manamora ny mampifandray ireo mpanjifa vaovao amin'ny API.

Andeha hatao hoe manana lahatahiry iray izay ilainao havaozina amin'ny rafitra maromaro indray mandeha (ary amin'ny sasany vaovao). Teo aloha, namorona amboara izay nampihatra set-API izahay, ary nampahafantarina ny adiresy mpanjifa ny rafitra master. Ankehitriny ny rafitra master dia mandefa fanavaozam-baovao amin'ny lohahevitra, ary izay rehetra liana dia mamaky azy io. Nisy rafitra vaovao niseho - nosoniavinay ho an'ny lohahevitra izany. Eny, amboara ihany koa, fa tsotra kokoa.

Raha ny momba ny refund-tool, izay ampahany amin'ny BOB, dia mety ho antsika ny mitazona azy ireo amin'ny alàlan'ny Kafka. Ny fandoavam-bola dia milaza fa naverina ny vola: BOB, RT nahita izany, nanova ny satany, nahita izany ny Fiscalization Service ary namoaka seky.

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Manana drafitra hamorona serivisy fampahafantarana iraisana izahay izay hampandre ny mpanjifa momba ny vaovao momba ny baiko/famerenany. Ankehitriny dia miparitaka eo amin'ny rafitra izany andraikitra izany. Ampy ho antsika ny mampianatra ny Sampan-draharahan'ny Fampandrenesana mba hahazoana vaovao mifandraika amin'ny Kafka sy hamaly izany (ary hanafoana ireo fampandrenesana ireo amin'ny rafitra hafa). Tsy ilaina ny fifanakalozana mivantana vaovao.

Data-noroahina

Lasa mangarahara ny fampahalalam-baovao eo amin'ny rafitra - na inona na inona "orinasa maloto" anananao ary na toy inona na toy inona ny tombotsoanao. Lamoda dia manana departemanta Data Analytics izay manangona angona avy amin'ny rafitra ary mametraka izany amin'ny endrika azo ampiasaina, na ho an'ny orinasa na ho an'ny rafitra manan-tsaina. Ny Kafka dia mamela anao hanome azy ireo angon-drakitra haingana sy hitazona izany vaovao izany.

Log replication

Tsy manjavona ny hafatra rehefa avy novakiana, toy ny ao amin'ny RabbitMQ. Rehefa misy hetsika misy fampahalalana ampy ho an'ny fanodinana, dia manana tantaran'ny fanovana vao haingana momba ilay zavatra isika, ary, raha tiana, ny fahafahana mampihatra ireo fiovana ireo.

Miankina amin'ny hamafin'ny fanoratana amin'ity lohahevitra ity ny fe-potoana fitehirizana ny diarin'ny replication; Kafka dia ahafahanao mametraka fetran'ny fotoana fitehirizana sy ny habetsaky ny data. Ho an'ny lohahevitra mafonja dia zava-dehibe ny hananan'ny mpanjifa rehetra fotoana hamakiana ny vaovao alohan'ny hanjavonany, na dia amin'ny tranga tsy azo ampiasaina amin'ny fotoana fohy aza. Matetika dia azo atao ny mitahiry data ho an'ny unitan'ny andro, izay ampy ho fanohanana.

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Manaraka izany dia mamerina kely ny antontan-taratasy, ho an'ireo izay tsy mahalala ny Kafka (ny sary dia avy amin'ny antontan-taratasy ihany koa)

Manana filaharana ny AMQP: manoratra hafatra amin'ny filaharana ho an'ny mpanjifa izahay. Amin'ny ankapobeny, ny filaharana iray dia karakarain'ny rafitra iray miaraka amin'ny lojika fandraharahana mitovy. Raha mila mampandre rafitra maromaro ianao dia azonao atao ny mampianatra ny fampiharana hanoratra amin'ny filaharana maromaro na manitsy ny fifanakalozana amin'ny mekanika fanout, izay manao clone azy ireo.

Kafka dia manana abstraction mitovy lohahevitra, izay hanoratanao hafatra, nefa tsy manjavona rehefa avy mamaky. Amin'ny alàlan'ny default, rehefa mifandray amin'ny Kafka ianao dia mahazo ny hafatra rehetra ary manana safidy hamonjy izay nialanao. Izany hoe mamaky misesy ianao, mety tsy hanamarika ilay hafatra ho voavaky, fa tehirizo ilay id izay ahafahanao manohy mamaky. Ny Id nipetrahanao dia antsoina hoe offset, ary ny mekanika dia commit offset.

Araka izany dia azo ampiharina ny lojika samihafa. Ohatra, manana BOB izahay amin'ny tranga 4 ho an'ny firenena samihafa - any Rosia, Kazakhstan, Ukraine, Belarosia i Lamoda. Koa satria apetraka misaraka izy ireo dia manana config hafa kely sy lojikan'ny orinasany manokana. Asehonay ao amin'ny hafatra hoe iza no firenena resahiny. Ny mpanjifa BOB tsirairay any amin'ny firenena tsirairay dia mamaky miaraka amin'ny groupId samihafa, ary raha tsy mihatra amin'izy ireo ny hafatra dia adinony izany, i.e. avy hatrany dia manao offset +1. Raha toa ka vakin'ny Service Payment ny lohahevitra mitovy amin'izany, dia manao izany miaraka amin'ny vondrona misaraka izy io, ary noho izany dia tsy mifanelanelana ny offset.

Fepetra amin'ny hetsika:

  • Fahafenoana angona. Tiako ny hanana angon-drakitra ampy ny hetsika mba ho azo karakaraina.

  • Ny tsy fivadihana. Atolotray ao amin'ny Events-bus ny fanamarinana fa tsy miova ny hetsika ary afaka mikarakara azy io.
  • Zava-dehibe ny filaminana. Raha ny fiverenana dia voatery miasa miaraka amin'ny tantara isika. Miaraka amin'ny fampandrenesana, tsy zava-dehibe ny baiko, raha fampandrenesana homogeneous izy ireo, dia hitovy ny mailaka na inona na inona baiko tonga voalohany. Raha ny famerenam-bola dia misy dingana mazava; raha ovainay ny baiko, dia hisy ny maningana, ny famerenam-bola dia tsy hoforonina na hokarakaraina - hiafara amin'ny toe-javatra hafa isika.
  • Consistency. Manana fivarotana izahay, ary ankehitriny dia mamorona hetsika fa tsy API. Mila fomba fampitana haingana sy mora ny vaovao momba ny hetsika vaovao sy ny fiovana amin'ny efa misy amin'ny serivisy izahay. Izany dia tratra amin'ny alàlan'ny famaritana mahazatra ao amin'ny tahiry git misaraka sy mpamorona code. Noho izany, ny mpanjifa sy ny mpizara amin'ny serivisy samihafa dia mifandrindra.

Kafka in Lamoda

Manana fametrahana Kafka telo izahay:

  1. Logs;
  2. R&D;
  3. Events-bus.

Ny teboka farany ihany no resahantsika anio. Amin'ny hetsika-bus, tsy manana fametrahana lehibe be izahay - brokers 3 (server) ary lohahevitra 27 ihany. Amin'ny maha-fitsipika, lohahevitra iray dia dingana iray. Hevitra an-kolaka anefa ity, ary hiresaka momba izany isika izao.

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Eo ambony ny tabilao rps. Ny fizotran'ny famerenam-bola dia voamarika amin'ny tsipika turquoise (eny, ilay eo amin'ny X axis), ary ny tsipika mavokely dia ny fizotran'ny fanavaozana votoaty.

Ny katalaogin'i Lamoda dia misy vokatra an-tapitrisany, ary havaozina hatrany ny angon-drakitra. Ny famoriam-bola sasany dia miala amin'ny lamaody, misy vaovao navoaka hanolo azy ireo, ary misy modely vaovao tsy mitsaha-mitombo ao amin'ny katalaogy. Miezaka maminavina izay hahaliana ny mpanjifanay izahay rahampitso, noho izany dia mividy zava-baovao hatrany izahay, maka sary azy ireo ary manavao ny vata fampirantiana.

Pink peaks dia fanavaozana ny vokatra, izany hoe fiovana amin'ny vokatra. Hita taratra fa naka sary ry zalahy, naka sary, avy eo indray! - nameno fonosana hetsika.

Lamoda Events mampiasa tranga

Mampiasa ny maritrano namboarina izahay ho an'ireto asa manaraka ireto:

  • Famerenana ny sata fanaraha-maso: antso ho amin'ny hetsika sy fanaraha-maso ny sata avy amin'ireo rafitra rehetra voakasik'izany. Fandoavana, sata, fiscalization, fampahafantarana. Eto izahay dia nanandrana ny fomba fiasa, nanao fitaovana, nanangona ny bibikely rehetra, nanoratra antontan-taratasy ary nilaza tamin'ny mpiara-miasa ny fomba fampiasana azy.
  • Fanavaozana karatra vokatra: configuration, meta-data, toetra. Ny rafitra iray dia mamaky (izay mampiseho), ary maro no manoratra.
  • Email, push ary sms: voaangona ny baiko, tonga ny baiko, nekena ny fiverenana, sns, maro be.
  • Stock, fanavaozana trano fanatobiana entana — fanavaozana ny entana, isa fotsiny: tonga any amin'ny trano fanatobiana entana, miverina. Ilaina ny rafitra rehetra mifandray amin'ny famandrihana entana miasa miaraka amin'ny angona farany indrindra. Amin'izao fotoana izao, ny rafitra fanavaozana ny tahiry dia somary sarotra; Kafka dia hanatsotra izany.
  • Data Analysis (Departemantan'ny R&D), fitaovana ML, fanadihadiana, antontan'isa. Tianay ho mangarahara ny vaovao - mety tsara amin'izany ny Kafka.

Ankehitriny ny ampahany mahaliana kokoa momba ny fihoaram-pefy lehibe sy ny zava-baovao mahaliana izay nitranga tao anatin'ny enim-bolana lasa.

Olana amin'ny famolavolana

Andeha atao hoe te hanao zava-baovao isika - ohatra, afindra any Kafka ny fizotry ny fandefasana manontolo. Ankehitriny ny ampahany amin'ny dingana dia ampiharina amin'ny Processing Order ao amin'ny BOB. Misy modely sata ao ambadiky ny famindrana baiko mankany amin'ny serivisy fanaterana, hetsika mankany amin'ny trano fanatobiana entana, sns. Misy monolith iray manontolo, na roa aza, miampy andiana API natokana ho an'ny fandefasana. Mahafantatra bebe kokoa momba ny fanaterana izy ireo.

Toa mitovitovy ihany ireo faritra ireo, saingy samy hafa ny sata mifehy ny baikon'ny baiko ao amin'ny BOB sy ny rafitra fandefasana entana. Ohatra, ny serivisy iraka sasany dia tsy mandefa sata manelanelana, fa ny farany ihany: "naterina" na "very". Ny hafa kosa mitatitra amin'ny antsipiriany momba ny fivezivezen'ny entana. Samy manana ny fitsipika momba ny fanamarinana ny tsirairay: ho an'ny sasany, manankery ny mailaka, izay midika fa hokarakaraina; ho an'ny hafa dia tsy mitombina izany fa mbola hirosoana ihany ny commande satria misy numéro téléphone azo hifandraisana, ary hisy hilaza fa tsy ho vita mihitsy ny commande toy izany.

Data stream

Raha ny momba an'i Kafka dia mipetraka ny fanontaniana momba ny fandaminana ny fikorianan'ny angona. Ity asa ity dia misy ny fisafidianana paikady mifototra amin'ny teboka maromaro; andao hojerentsika izy rehetra.

Amin'ny lohahevitra iray sa amin'ny lohahevitra samihafa?

Manana famaritana hetsika izahay. Ao amin'ny BOB dia manoratra izahay fa mila aterina ny baiko toy izany, ary manondro: ny laharan'ny baiko, ny firafiny, ny SKU sy ny kaody bar, sns. Rehefa tonga any amin'ny trano fanatobiana entana ny entana, dia afaka mahazo sata, mari-pamantarana ary izay rehetra ilaina ny fanaterana. Saingy te-hahazo vaovao farany momba an'io data io ao amin'ny BOB izahay. Manana dingana mifamadika izahay amin'ny fandraisana angona avy amin'ny fanaterana. Toy izany koa ve ny hetsika? Sa fifanakalozam-bola mitokana izay mendrika ny lohahevitra manokana?

Azo inoana fa hitovy be izy ireo, ary tsy mitombina ny fakam-panahy hanao lohahevitra iray, satria ny lohahevitra misaraka dia midika ho mpanjifa misaraka, configs misaraka, taranaka misaraka amin'izany rehetra izany. Saingy tsy zava-misy.

saha vaovao sa hetsika vaovao?

Saingy raha mampiasa hetsika mitovy ianao, dia misy olana hafa. Ohatra, tsy ny rafitra fanaterana rehetra no afaka mamorona karazana DTO izay azon'ny BOB avoaka. Mandefa azy ireo ny id izahay, saingy tsy mitahiry izany izy ireo satria tsy ilainy izany, ary amin'ny fomba fijerin'ny fanombohana ny fizotran'ny hetsika-bus dia ilaina io sehatra io.

Raha mampiditra fitsipika ho an'ny bisy hetsika isika izay takiana amin'ity sehatra ity, dia voatery mametraka fitsipika fanamafisana fanampiny ao amin'ny BOB na amin'ny mpandrindra hetsika fanombohana. Manomboka miparitaka manerana ny serivisy ny fanamarinana - tsy dia mety loatra izany.

Olana iray hafa dia ny fakam-panahy amin'ny fampandrosoana mitombo. Ilazana isika fa misy zavatra tokony ampiana amin'ny hetsika, ary angamba, raha mieritreritra izany isika, dia tokony ho hetsika manokana. Saingy ao amin'ny drafitray dia lohahevitra misaraka ny hetsika misaraka. Lohahevitra mitokana ny dingana manontolo nolazaiko tetsy ambony. Alaim-panahy ny mpamorona hanampy saha iray hafa amin'ny schema JSON ary hamerina azy io.

Raha ny famerenam-bola dia tonga tamin'ny hetsika izahay tao anatin'ny antsasaky ny taona. Nanana hetsika meta iray antsoina hoe fanavaozana fanavaozana izahay, izay misy karazana saha mamaritra ny tena dikan'io fanavaozana io. Noho izany, nanana switch "mahatalanjona" izahay miaraka amin'ireo mpanamarina izay nilaza taminay ny fomba hanamarinana ity hetsika ity amin'ity karazana ity.

Fandikana hetsika

Mba hanamarinana ny hafatra ao amin'ny Kafka dia azonao ampiasaina Avro, saingy nilaina ny nametrahana azy avy hatrany ary nampiasa Confluent. Amin'ny tranga misy antsika dia tsy maintsy mitandrina amin'ny versioning isika. Tsy ho azo atao foana ny mamerina mamaky hafatra avy amin'ny diarin'ny replication satria "niala" ilay modely. Amin'ny ankapobeny dia hita fa manangana dikan-teny mba hifanaraka amin'ny lamosina ny modely: ohatra, manaova saha tsy mety. Raha mafy loatra ny fahasamihafana, dia manomboka manoratra amin'ny lohahevitra vaovao isika, ary mamindra mpanjifa rehefa vita ny famakiana ilay taloha.

Ny filaharan'ny fizarazarana azo antoka

Mizarazara ho fizarana ny lohahevitra ao anatin'ny Kafka. Tsy dia zava-dehibe loatra izany eo am-pamolavolana orinasa sy fifanakalozana, fa zava-dehibe kosa rehefa manapa-kevitra ny amin'ny fomba hanjifa sy hanesorana azy.

Amin'ny tranga mahazatra, manoratra lohahevitra iray amin'ny Kafka ianao. Amin'ny alàlan'ny default, fizarazarana iray no ampiasaina, ary ny hafatra rehetra amin'ity lohahevitra ity dia mankany aminy. Ary noho izany ny mpanjifa dia mamaky ireo hafatra ireo araka ny filaharany. Andeha hatao hoe mila manitatra ny rafitra isika mba hamakian'ny mpanjifa roa samy hafa ny hafatra. Raha toa ka mandefa SMS ianao, ohatra, dia azonao atao ny milaza amin'i Kafka hanao fisarahana fanampiny, ary hanomboka hizara ny hafatra ho roa i Kafka - ny antsasany eto, ny antsasany eto.

Ahoana no izarazan'i Kafka azy ireo? Ny hafatra tsirairay dia manana vatana (izay itahirizantsika JSON) sy fanalahidy iray. Azonao atao ny mametaka asa hash amin'ity fanalahidy ity, izay hamaritra izay fizarazarana hidiran'ny hafatra.

Raha ny momba ny famerenam-bola dia zava-dehibe izany, raha maka partitions roa isika, dia misy ny mety hisian'ny mpanjifa mifanitsy amin'ny hetsika faharoa alohan'ny voalohany ary hisy ny olana. Ny hash function dia miantoka fa ny hafatra miaraka amin'ny fanalahidy mitovy dia miafara amin'ny fizarazarana mitovy.

Hetsika vs baiko

Olana hafa sendra anay ity. Ny hetsika dia hetsika iray: milaza izahay fa nisy zavatra nitranga tany ho any (zavatra_nitranga), ohatra, nisy zavatra nofoanana na nisy famerenam-bola. Raha misy mihaino ireo hetsika ireo, dia araka ny "zavatra nofoanana", dia hoforonina ny sampan-draharahan'ny famerenam-bola, ary ny "famerenana nitranga" dia hosoratana any amin'ny toerana misy ny fanamboarana.

Saingy matetika, rehefa mamolavola hetsika ianao dia tsy te hanoratra azy ireo foana - miantehitra amin'ny hoe misy olona mamaky azy ireo. Misy fakam-panahy be dia be ny manoratra fa tsy hoe zavatra_nitranga (zavatra_nofoanana, naverina_niverina), fa zavatra_tokony_vita. Ohatra, efa vonona ny hamerenana ny entana.

Amin'ny lafiny iray, manoro hevitra ny fomba hampiasana ny hetsika. Etsy an-danin'izany, toa tsy mitovy amin'ny anarana hetsika mahazatra izy io. Ankoatra izany, tsy lavitra eto ny baiko manao_zavatra. Saingy tsy manana antoka ianao fa misy olona mamaky ity hetsika ity; ary raha mamaky azy ianao dia mamaky azy soa aman-tsara; ary raha namaky azy soa aman-tsara ianao dia nanao zavatra, ary nisy zavatra nahomby. Rehefa lasa manao_zavatra ny hetsika iray, dia ilaina ny fanehoan-kevitra, ary olana izany.

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Amin'ny fifanakalozana asynchronous amin'ny RabbitMQ, rehefa mamaky ny hafatra ianao dia mandehana any amin'ny http, manana valiny ianao - farafaharatsiny fa voaray ilay hafatra. Rehefa manoratra amin'ny Kafka ianao dia misy hafatra nosoratanao ho an'i Kafka, saingy tsy fantatrao na inona na inona momba ny fikarakarana azy.

Noho izany, amin'ny tranga misy anay dia tsy maintsy nampiditra hetsika famaliana izahay ary nametraka fanaraha-maso ka raha be dia be ny hetsika alefa, aorian'ny fotoana toy izany dia tokony ho tonga ny hetsika famaliana mitovy. Raha tsy tanteraka izany dia toa misy zavatra tsy mety. Ohatra, raha nandefa ilay hetsika “zavatra_vonona_averina” izahay, dia manantena izahay fa hisy famerenam-bola, haverina amin'ny mpanjifa ny vola, ary halefa any aminay ny hetsika “vola_averina”. Tsy azo antoka anefa izany ka ilaina ny fanaraha-maso.

tsipirian'ilay

Misy olana mazava be: raha mamaky lohahevitra iray ianao, ary manana hafatra ratsy ianao, dia hianjera ny mpanjifa, ary tsy handeha lavitra ianao. Ilainao ajanony ny mpanjifa rehetra, manolora offset bebe kokoa hanohizana ny famakiana.

Nahafantatra izany izahay, niantehitra tamin’izany izahay, nefa nitranga izany. Ary izany dia nitranga satria ny hetsika dia manan-kery amin'ny fomba fijerin'ny hetsika-bus, ny hetsika dia manan-kery amin'ny fomba fijerin'ny validator fampiharana, saingy tsy manan-kery izany amin'ny fomba fijerin'ny PostgreSQL, satria ao amin'ny rafitra tokana misy antsika. MySQL miaraka amin'ny UNSIGNED INT, ary ao amin'ny rafitra vao nosoratana dia manana PostgreSQL miaraka amin'ny INT fotsiny ny rafitra. Kely kely ny habeny, ary tsy nety ny Id. Symfony dia maty tsy nisy hafa. Izahay, mazava ho azy, dia nahazo ny maningana satria niantehitra tamin'izany izahay, ary hanao izany offset izany, saingy talohan'izay dia te-hampitombo ny fifanolanana olana izahay, satria tsy nahomby ny hafatra. Ny kaontera amin'ity tetikasa ity dia ao amin'ny angon-drakitra ihany koa, ary i Symfony dia efa nanakatona ny fifandraisana tamin'ny angon-drakitra, ary ny fanavahana faharoa dia namono ny dingana manontolo tsy nisy fahafahana hanao offset.

Nandry nandritra ny fotoana kelikely ny serivisy - soa ihany, miaraka amin'i Kafka tsy dia ratsy loatra izany, satria mijanona ny hafatra. Rehefa tafaverina ny asa dia azonao atao ny mamarana azy ireo. Mampahazo aina.

Kafka dia manana fahafahana mametraka offset tsy misy dikany amin'ny alàlan'ny fitaovana. Saingy mba hanaovana izany dia mila manakana ny mpanjifa rehetra ianao - amin'ny tranga misy antsika, manomana famoahana manokana izay tsy hisy mpanjifa, redeployments. Avy eo ao amin'ny Kafka dia azonao atao ny manova ny offset amin'ny alàlan'ny fitaovana, ary handeha ny hafatra.

Nuance iray hafa - replication log vs rdkafka.so - mifandraika amin'ny mombamomba ny tetikasanay. Mampiasa PHP izahay, ary amin'ny PHP, amin'ny ankapobeny, ny tranomboky rehetra dia mifandray amin'ny Kafka amin'ny alàlan'ny fitehirizana rdkafka.so, ary avy eo misy karazana fonosana. Sao dia fahasahirananay manokana ireo, saingy hita fa tsy mora ny mamerina mamaky fotsiny ny ampahany efa novakianay. Amin'ny ankapobeny, nisy olana tamin'ny rindrambaiko.

Miverina amin'ny antsipiriany momba ny fiasana amin'ny fizarazarana, dia voasoratra ao amin'ny antontan-taratasy mpanjifa>= fizarana lohahevitra. Saingy taty aoriana lavitra noho izay tiako no nahafantarako izany. Raha te-hampitombo sy hanana mpanjifa roa ianao dia mila fizarazarana roa farafahakeliny. Izany hoe, raha manana fizarazarana iray ianao izay nanangona hafatra 20, ary nanao vaovao ianao, dia tsy hampitovina tsy ho ela ny isan'ny hafatra. Noho izany, mba hanana mpanjifa roa mifanitsy, dia mila miatrika partitions.

fanaraha-maso

Heveriko fa ny fomba fanaraha-maso dia vao mainka hazava kokoa ny olana misy amin'ny fomba fiasa misy.

Ohatra, kajy ny isan'ny vokatra ao amin'ny angon-drakitra nanova ny satany vao haingana, ary, araka izany, ny hetsika dia tokony ho nitranga mifototra amin'ireo fiovana ireo, ary alefanay any amin'ny rafitra fanaraha-maso anay io isa io. Avy eo dia avy amin'ny Kafka no mahazo ny isa faharoa, firy ny zava-nitranga voarakitra marina. Mazava ho azy fa tokony ho aotra foana ny fahasamihafana misy eo amin'ireo isa roa ireo.

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Ankoatra izany, mila manara-maso ny ataon'ny mpamokatra ianao, raha nahazo hafatra ny hetsika-bus, ary ny fomba ataon'ny mpanjifa. Ohatra, ao amin'ny tabilao etsy ambany, dia mandeha tsara ny fitaovana famerenam-bola, fa ny BOB mazava ho azy dia manana olana sasany (tampon'ny manga).

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Efa nolazaiko ny tsy fahampian'ny vondrona mpanjifa. Raha fintinina dia io no isan'ny hafatra tsy voavaky. Amin'ny ankapobeny, miasa haingana ny mpanjifantsika, noho izany dia matetika 0 ny fahatarana, fa indraindray dia mety hisy tampon'ny fotoana fohy. Afaka manao izany ivelan'ny boaty ny Kafka, saingy mila mametraka elanelam-potoana ianao.

Misy tetikasa lavakaizay hanome anao fampahalalana bebe kokoa momba ny Kafka. Mampiasa ny API vondrona mpanjifa fotsiny izy io mba hanomezana ny sata momba ny fomba fiasan'ity vondrona ity. Ho fanampin'ny OK sy Tsy nahomby dia misy fampitandremana, ary azonao atao ny mahita fa ny mpanjifanao dia tsy afaka miatrika ny hafainganam-pandehan'ny famokarana - tsy manam-potoana handinihana izay voasoratra izy ireo. Ny rafitra dia somary marani-tsaina sy mora ampiasaina.

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

Toy izao ny valin'ny API. Ity ny groupe bob-live-fifa, partition refund.update.v1, status OK, lag 0 - ny farany farany offset toy izao sy izao.

Traikefa amin'ny fampivoarana ny serivisy Refund Tool miaraka amin'ny API asynchronous ao amin'ny Kafka

fanaraha-maso updated_at SLA (miraikitra) efa voalazako. Ohatra, ny vokatra dia niova ho amin'ny sata vonona ny hiverina. Mametraka Cron izahay, izay milaza fa raha ao anatin'ny 5 minitra dia tsy miverina amin'ny laoniny ity zavatra ity (mamerina haingana ny vola amin'ny alàlan'ny rafitra fandoavam-bola), dia misy zavatra tsy nety, ary izany dia azo antoka ho an'ny fanohanana. Noho izany, maka Cron fotsiny isika, izay mamaky zavatra toy izany, ary raha lehibe noho 0 izy ireo, dia mandefa fanairana.

Raha fintinina, ny fampiasana hetsika dia mety rehefa:

  • ilain'ny rafitra maromaro ny fampahalalana;
  • ny vokatry ny fanodinana dia tsy zava-dehibe;
  • vitsy ny hetsika na hetsika kely.

Toa manana lohahevitra manokana ilay lahatsoratra - API asynchronous amin'ny Kafka, saingy mifandraika amin'izany aho dia te-hanolotra zavatra maro indray mandeha.
Voalohany, manaraka HighLoad ++ Mila miandry hatramin'ny Novambra isika, amin'ny volana aprily dia hisy ny dikan-teny St.
Faharoa, ny mpanoratra ny tatitra, Sergei Zaika, dia mpikambana ao amin'ny Komitin'ny Programan'ny fihaonambe vaovao momba ny fitantanana fahalalana. KnowledgeConf. Indray andro ny fihaonambe, hatao amin’ny 26 aprily izao, saingy tena mafy ny fandaharan’asany.
Ary amin'ny volana Mey izany PHP Rosia и RIT++ (miaraka amin'ny DevOpsConf) - azonao atao ihany koa ny manolotra ny lohahevitrao ao, miresaka momba ny traikefanao ary mitaraina momba ny cones feno anao.

Source: www.habr.com

Add a comment