Microservices le conaltradh tro Axon

San oideachadh sÏmplidh seo nÏ sinn meanbh-sheirbheisean ann an Spring Boot agus cuiridh sinn air dòigh eadar-obrachadh eatorra tro fhrèam Axon.

Microservices le conaltradh tro Axon


Canaidh sinn gu bheil a leithid de dh’ obair againn.

Tha stòr de ghnothaichean anns a 'mhargaidh stoc. Bidh an stòr seo a’ sgaoileadh ghnothaichean thugainn tro eadar-aghaidh Rest.

Feumaidh sinn na gnothaichean sin fhaighinn, an sàbhaladh ann an stòr-dàta agus cruthaich stòradh cuimhneachaidh goireasach.

Feumaidh an stòr seo na gnÏomhan a leanas a choileanadh:

  • tilleadh liosta ciĂšird;
  • thoir air ais an suidheachadh slĂ n, i.e. clĂ r "ionnsramaidean" - "an Ă ireamh lĂ ithreach de thèarainteachdan";
  • thoir air ais suidheachadh airson inneal sònraichte.

Ciamar a dhèiligeas sinn ris an duilgheadas seo?

A rèir riaghailtean fasan microservice, feumaidh sinn an obair a roinn ann am meanbh-sheirbheisean co-phàirteach:

  • a 'faighinn malairt Rest;
  • a 'sĂ bhaladh a' ghnothaich don stòr-dĂ ta;
  • stòradh ann an cuimhne airson dĂ ta a thaisbeanadh a rèir suidheachadh.

Dèanamaid a 'chiad agus an treas seirbheis taobh a-staigh frèam an oideachaidh seo, a' fàgail an dàrna fear airson an dàrna pàirt (sgrÏobh anns na beachdan ma tha seo inntinneach).

Mar sin tha dĂ  mhicro-sheirbheisean againn.

Bidh a 'chiad fhear a' faighinn dĂ ta bhon taobh a-muigh.

Bidh an dàrna fear a’ pròiseasadh an dàta seo agus a’ freagairt iarrtasan a thig a-steach.

Gu dearbh, tha sinn airson sgèileadh còmhnard fhaighinn, Úrachadh gun stad agus buannachdan eile bho mhicro-sheirbheisean.

Dè an obair gu math duilich a tha romhainn?

Gu fìrinneach, tha tòrr dhiubh ann, ach a-nis bruidhnidh sinn mu mar a bhios dàta a ’sruthadh eadar na microservices sin. Faodaidh tu cuideachd Rest a dhèanamh eatorra, faodaidh tu ciudha de sheòrsa air choreigin a chuir, faodaidh tu tòrr rudan a chruthachadh leis na buannachdan agus na h-eas-bhuannachdan aca fhèin.

Bheir sinn sùil air aon dòigh-obrach a dh’ fhaodadh a bhith ann - eadar-obrachadh asyncronach tro Axon frèam.

Dè na buannachdan a tha ann an leithid de fhuasgladh?

An toiseach, bidh eadar-obrachadh asyncronach a ’meudachadh sùbailteachd (tha, tha minus an seo, ach chan eil sinn a’ bruidhinn ach mu na buannachdan an-dràsta).

San dàrna h-àite, dìreach a-mach às a’ bhogsa a gheibh sinn Stòradh Tachartas и CQRS.
San treas àite, tha Axon a’ toirt seachad bun-structar deiseil, agus chan fheum sinn ach fòcas a chuir air leasachadh loidsig gnìomhachais.

Feuch an tòisich sinn.

Bidh am pròiseact againn air astar. Bidh trÏ modalan ann:

  • cumanta. modal le structaran dĂ ta cumanta (cha toil leinn lethbhreac-paste);
  • malairtCruthaiche. modal le microservice airson gabhail ri gnothaichean tro Rest;
  • Ceistean malairt. modal le microservice airson taisbeanadh suidheachadh.

Gabhamaid Spring Boot mar bhunait agus ceangail an inneal tòiseachaidh Axon.

Bidh Axon ag obair gu math às aonais an Earraich, ach cleachdaidh sinn iad còmhla.

An seo feumaidh sinn stad agus beagan fhaclan a rĂ dh mu Axon.

Is e siostam frithealaiche teachdaiche a tha seo. Tha frithealaiche ann - is e tagradh air leth a tha seo, ruithidh sinn e ann an Docker.

Agus tha teachdaichean ann a tha freumhaichte ann am microservices.
Seo an dealbh a gheibh sinn. An toiseach, tòisichidh am frithealaiche Axon (ann an Docker), an uairsin na microservices againn.

Nuair a thòisicheas tu, bidh microservices a’ lorg frithealaiche agus a’ tòiseachadh ag eadar-obrachadh leis. Faodar eadar-obrachadh a roinn ann an dà sheòrsa: teicnigeach agus gnìomhachais.

Gu teicnigeach, is e seo iomlaid teachdaireachdan “Tha mi beò” (tha teachdaireachdan mar sin rim faicinn sa mhodh logaidh deasbaid).

Is e gnìomhachas iomlaid teachdaireachdan mar “aonta ùr.”

Feart cudromach: às deidh a chuir air bhog, faodaidh am microservice faighneachd don t-seirbheisiche Axon “dè thachair” agus bidh an frithealaiche a ’cur na tachartasan cruinnichte chun mhicro-sheirbheis. San dòigh seo, faodar am microservice ath-thòiseachadh gu ìre mhath sàbhailte gun a bhith a ’call dàta.
Leis an sgeama iomlaid seo, is urrainn dhuinn mòran eisimpleirean de mhicro-sheirbheisean a chuir air bhog gu furasta,
agus air diofar luchd-aoigheachd.

Tha, chan eil aon eisimpleir de fhrithealaiche Axon earbsach, ach sin mar a tha e airson a-nis.

Bidh sinn ag obair anns na paradigms Sourcing Tachartas agus CQRS. Tha seo a’ ciallachadh gum feum “àitheantan”, “tachartasan” agus “taghaidhean” a bhith againn.

Bidh aon àithne againn: “cruthaich cùmhnant”, aon tachartas “cruthaich cùmhnant” agus trì taghaidhean: “seall a h-uile cùmhnant”, “seall suidheachadh”, “seall suidheachadh le ionnstramaid”.

Tha an sruth-obrach a’ coimhead mar seo:

  1. Bidh am microservice tradeCreator a’ gabhail ri malairt Rest.
  2. Bidh am microservice tradeCreator a’ cruthachadh àithne “cruthaich malairt” agus ga chuir chun t-seirbheisiche Axon.
  3. Gabhaidh am frithealaiche Axon ris an àithne agus cuiridh e an àithne air adhart chun neach le ùidh, anns a’ chùis againn am microservice tradeCreator.
  4. Bidh am microservice tradeCreator a ’faighinn an àithne, a’ gineadh an tachartas “malairt air a chruthachadh” agus ga chuir chun t-seirbheisiche Axon.
  5. Bidh am frithealaiche Axon a’ faighinn an tachartais agus ga chuir air adhart gu luchd-aontachaidh le ùidh.
  6. An-drĂ sta chan eil againn ach aon neach le Ăšidh: an tradeQueries microservice.
  7. Bidh am microservice tradeQueries a’ faighinn an tachartais agus ag ùrachadh an dàta a-staigh.

(Tha e cudromach aig an àm a thèid an tachartas a chruthachadh, is dòcha nach bi an tradeQueries Microservice ri fhaighinn, ach cho luath ‘s a thòisicheas e, gheibh e an tachartas sa bhad).

Tha, tha am frithealaiche axon aig cridhe a’ chonaltraidh, bidh a h-uile teachdaireachd a’ dol troimhe.

Gluaisidh sinn air adhart gu còdadh.

Gus nach cuir thu dragh air a’ phost le còd, gu h-ìosal cha toir mi seachad ach criomagan; bidh ceangal ris an eisimpleir gu lèir gu h-ìosal.

Feuch an tòisich sinn leis a 'mhodal cumanta cumanta.

Is e na pàirtean cumanta ann an tachartas (clas CreatedTradeEvent). Thoir aire don ainm, gu dearbh, is e seo ainm an sgioba a chruthaich an tachartas seo, ach san àm a dh'fhalbh. San àm a dh'fhalbh, air sgàth An toiseach tha àithne ann a dh’ adhbharaicheas tachartas a chruthachadh.

Tha structaran cumanta eile a’ toirt a-steach clasaichean airson cunntas a thoirt air suidheachadh (Suidheachadh clas), malairt (Malairt clas) agus taobh malairt (Taobh enum), i.e. ceannach no reic.

Gluaisidh sinn air adhart chun mhodal tradeCreator.

Tha eadar-aghaidh Rest aig a’ mhodal seo (Class TradeController) airson gabhail ri ciùird.
Bhon chùmhnant a fhuaireadh, thèid an àithne “cruthaich cùmhnant” a chruthachadh agus a chuir chun t-seirbheisiche axon.

    @PostMapping("/trade")
    public ResponseEntity<String> create(@RequestBody Trade trade) {
        var createTradeCommand = CreateTradeCommand.builder()
                .tradeId(trade.getTradeId())
	...
                .build();
        var result = commandGateway.sendAndWait(createTradeCommand, 3, TimeUnit.SECONDS);
        return ResponseEntity.ok(result.get().toString());
    }

Tha an clas TradeAggregate air a chleachdadh gus an àithne a phròiseasadh.
Airson Axon a lorg, chuir sinn an nota @Aggregate.
Tha an dòigh airson an àithne a ghiullachd a’ coimhead mar seo (air a ghiorrachadh):

    @CommandHandler
    public TradeAggregate(CreateTradeCommand command) {
        log.info("command: {}", command);
        var event = CreatedTradeEvent.builder()
                .tradeId(command.tradeId())
		....
                .build();
        AggregateLifecycle.apply(event);
    }

Thèid tachartas a chruthachadh bhon àithne agus a chuir chun t-seirbheisiche.
Tha an àithne anns a’ chlas CreateTradeCommand.

A-nis leig dhuinn sùil a thoirt air a’ mhodal tradeQueries mu dheireadh.

Tha na taghaidhean air am mìneachadh anns a’ phacaid cheistean.
Tha eadar-aghaidh Rest aig a’ mhodal seo cuideachd
Rianadair malairt clas poblach.

Mar eisimpleir, leigamaid sĂšil air a bhith a 'giollachd an iarrtais: "seall a h-uile gnothach".

    @GetMapping("/trade/all")
    public List<Trade> findAllTrades() {
        return queryGateway.query(new FindAllTradesQuery(),
                ResponseTypes.multipleInstancesOf(Trade.class)).join();
    }

Thèid iarrtas fetch a chruthachadh agus a chuir chun t-seirbheisiche.

Tha an clas TradesEventHandler air a chleachdadh gus an t-iarrtas fetch a phròiseasadh.
Tha modh air a chomharrachadh le nota

   @QueryHandler
    public List<Position> handleFindCurrentPositionQuery(FindCurrentPositionQuery query)

Is e esan a tha an urra ri dàta fhaighinn air ais bho stòradh cuimhne.

Tha ceist ag èirigh a thaobh mar a tha am fiosrachadh anns an stòr seo air Úrachadh.

Feuch an tòisich sinn leis gur e dÏreach seata de ConcurrentHashMap a tha seo, air a dhealbhadh airson sampallan sònraichte.
Gus an Úrachadh, cleachd an dòigh a leanas:

    @EventHandler
    public void on(CreatedTradeEvent event) {
        log.info("event:{}", event);

        var trade = Trade.builder()
	...
                .build();
        trades.put(event.tradeId(), trade);
        position.merge(event.shortName(), event.size(),
                (oldValue, value) -> event.side() == Side.BUY ? oldValue + value : oldValue - value);
    }

Bidh e a’ faighinn an tachartas “cruthaichte le aonta” agus ag ùrachadh nam Mapaichean.

Is iad seo na prĂŹomh phuingean ann an leasachadh microservices.

Dè as urrainn dhut a ràdh mu easbhaidhean Axon?

An toiseach, tha seo na dhuilgheadas den bhun-structar, tha puing fàilligeadh air nochdadh - frithealaiche Axon, bidh a h-uile conaltradh a ’dol troimhe.

San dàrna h-àite, tha ana-cothrom nan siostaman sgaoilte sin air a nochdadh gu soilleir - neo-chunbhalachd dàta sealach. Anns a’ chùis againn, dh’ fhaodadh ùine fhada nach gabh gabhail ris a dhol seachad eadar a bhith a’ faighinn cùmhnant ùr agus ag ùrachadh an dàta airson na sampallan.

Dè tha air fhàgail air cÚl na seallaidhean?

Chan eil dad air a ràdh mu dheidhinn Stòradh Tachartas agus CQRS, dè a th’ ann agus carson a tha feum air.
Às aonais na bun-bheachdan sin fhoillseachadh, is dòcha nach bi cuid de phuingean soilleir.

Is dòcha gu feum pÏosan còd fa leth mÏneachadh cuideachd.

Bruidhnidh sinn mu dheidhinn seo aig webinar fosgailte 21 Sultain.

Eisimpleir slĂ n.

Source: www.habr.com