Nga poraka hanga o nga tono toha. Te huarahi tuatahi

Nga poraka hanga o nga tono toha. Te huarahi tuatahi

I nga ra o mua Tuhinga I tirotirohia e matou nga turanga ariā o te hoahoanga urupare. Kua tae ki te wa ki te korero mo nga rerenga raraunga, nga huarahi ki te whakatinana i nga punaha Erlang/Elixir tauhohe me nga tauira karere kei roto:

  • Tono-whakautu
  • Whakautu Tono-Chunked
  • Whakautu me te Tono
  • Whakaputa-ohauru
  • Hurihuri Whakaputa-ohauru
  • Te tohatoha mahi

SOA, MSA me te Karere

Ko te SOA, ko MSA nga hoahoanga punaha e tautuhi ana i nga ture mo nga punaha hanga whare, i te wa e tuku ana nga karere i nga tikanga tuatahi mo te whakatinanatanga.

Kaore au e pai ki te whakatairanga i tenei, i tera ranei te hoahoanga punaha. Ko ahau mo te whakamahi i nga tikanga tino whai hua me te whai hua mo tetahi kaupapa motuhake me te pakihi. Ahakoa he aha te ahua ka whiriwhiria e tatou, he pai ake te hanga poraka punaha me te titiro ki te Unix-ara: nga waahanga me te iti o te honohono, te kawenga mo nga hinonga takitahi. Ko nga tikanga API e mahi ana i nga mahi ngawari me nga hinonga.

Ko te Karere, ko te ingoa e kii ana, he kaihokohoko karere. Ko tana kaupapa matua ko te whiwhi me te tuku karere. Kei a ia te kawenga mo nga hononga mo te tuku korero, te hanganga o nga huarahi arorau mo te tuku korero i roto i te punaha, te ararere me te whakataurite, tae atu ki te whakahaere hapa i te taumata o te punaha.
Ko te karere e whakawhanake ana matou ehara i te ngana ki te whakataetae me te whakakapi ranei i te rabbitmq. Ko ona ahuatanga matua:

  • Tohanga.
    Ka taea te hanga i nga tohu whakawhiti ki runga i nga kohinga kahui katoa, kia tata ki te waehere e whakamahi ana.
  • He ngawari.
    Arotahi ki te whakaiti i te waehere boilerplate me te ngawari o te whakamahi.
  • He pai ake te mahi.
    Kaore matou e ngana ana ki te whakahoki ano i nga mahi o te rabbitmq, engari me tohu noa te paparanga hoahoanga me te kawe waka, e uru ana matou ki te OTP i te mea ka taea, me te whakaiti i nga utu.
  • Te ngawari.
    Ka taea e ia ratonga te whakakotahi i nga tauira whakawhiti maha.
  • Te manahau ma te hoahoa.
  • Tauineine.
    Ka tipu te karere me te tono. Ka piki ake te kawenga, ka taea e koe te neke i nga tohu whakawhiti ki nga miihini takitahi.

Ranui. Mo te whakahaere waehere, he pai nga kaupapa-meta mo nga punaha Erlang / Elixir matatini. Ko nga waehere kaupapa katoa kei roto i tetahi putunga - he kaupapa marara. I te wa ano, ka tino wehea nga ratonga moroiti me te mahi i nga mahi ngawari hei kawenga mo tetahi hinonga motuhake. Ma tenei huarahi, he ngawari ki te pupuri i te API o te punaha katoa, he ngawari ki te whakarereke, he pai ki te tuhi i nga waahanga me nga whakamatautau whakauru.

Ko nga waahanga o te punaha e mahi tika ana ma te kaihokohoko ranei. Mai i te tirohanga karere, he maha nga waahanga o ia ratonga:

  • Arawhitinga ratonga.
    I tenei wa, ka whirihorahia, ka whakarewahia te tukanga me nga whakawhirinakitanga e whakahaere ana i te ratonga.
  • Te hanga i tetahi waahi whakawhiti.
    Ka taea e te ratonga te whakamahi i tetahi tohu whakawhiti pateko kua tohua i roto i te whirihoranga node, ka hanga hihiri ranei nga tohu whakawhiti.
  • Rehita ratonga.
    Kia taea ai e te ratonga te tuku tono, me rehita ki te waahi whakawhiti.
  • Mahi noa.
    Ko te ratonga ka whakaputa i nga mahi whai hua.
  • Whakaweto.
    E rua nga momo katinga ka taea: noa me te ohorere. I te wa e mahi noa ana, ka momotuhia te ratonga mai i te waahi whakawhiti ka mutu. I nga ahuatanga ohorere, ka mahia e te karere tetahi o nga tuhinga ngaro.

He tino uaua te ahua, engari ehara te waehere i te tino whakamataku. Ko nga tauira waehere me nga korero ka tukuna i roto i te tātaritanga o nga tauira i muri tata nei.

whakawhitinga

Ko te tohu whakawhiti he tukanga karere e whakatinana ana i te arorau o te taunekeneke me nga waahanga kei roto i te tauira karere. I roto i nga tauira katoa e whakaatuhia ana i raro nei, ka pahekoheko nga waahanga ma nga waahi whakawhiti, ko te huinga o enei ka hanga karere.

Tauira whakawhiti karere (MEP)

I te ao katoa, ka taea te wehewehe i nga tauira whakawhiti ki nga huarahi e rua me te huarahi kotahi. Ko te korero o mua he whakautu ki tetahi karere taumai, ko te mea whakamutunga kaore. He tauira matarohia o te tauira-rua i roto i te hoahoanga-kiritaki-tumau ko te tauira Tono-whakautu. Me titiro ki te tauira me ona whakarereketanga.

Tono-whakautu, RPC ranei

Ka whakamahia te RPC ina hiahia tatou ki te whiwhi urupare mai i tetahi atu tukanga. Ka haere pea tenei tukanga i runga i te node kotahi, kei runga ranei i tetahi whenua rereke. Kei raro nei te hoahoa o te taunekeneke i waenga i te kiritaki me te tūmau mā te karere.

Nga poraka hanga o nga tono toha. Te huarahi tuatahi

I te mea he koretake te tuku karere, mo te kaihoko ka wehea te whakawhiti ki nga waahanga e 2:

  1. Tukuna tono

    messaging:request(Exchange, ResponseMatchingTag, RequestDefinition, HandlerProcess).

    Exchange ‒ ingoa ahurei o te waahi whakawhiti
    ResponseMatchingTag ‒ tapanga rohe mo te tukatuka i te whakautu. Hei tauira, i roto i te take o te tuku i etahi tono rite mo nga kaiwhakamahi rereke.
    TonoWhakamaramatanga - tono tinana
    KaihautuTuhinga ‒ PID o te kaihautu. Ka whiwhi whakautu tenei tukanga mai i te tūmau.

  2. Te tukatuka i te whakautu

    handle_info(#'$msg'{exchange = EXCHANGE, tag = ResponseMatchingTag,message = ResponsePayload}, State)

    Uta Whakautu - whakautu tūmau.

Mo te tūmau, e rua nga waahanga o te tukanga:

  1. Te timata i te waahi whakawhiti
  2. Te tukatuka i nga tono kua tae mai

Me whakaatu tenei tauira me te waehere. Me kii tatou me whakatinana he ratonga ngawari e whakarato ana i te tikanga wa tika kotahi.

Waehere tūmau

Me tautuhi te API ratonga ki api.hrl:

%% =====================================================
%%  entities
%% =====================================================
-record(time, {
  unixtime :: non_neg_integer(),
  datetime :: binary()
}).

-record(time_error, {
  code :: non_neg_integer(),
  error :: term()
}).

%% =====================================================
%%  methods
%% =====================================================
-record(time_req, {
  opts :: term()
}).
-record(time_resp, {
  result :: #time{} | #time_error{}
}).

Me tautuhi te kaiwhakahaere ratonga i te time_controller.erl

%% В примере показан только значимый код. Вставив его в шаблон gen_server можно получить рабочий сервис.

%% инициализация gen_server
init(Args) ->
  %% подключение к точке обмена
  messaging:monitor_exchange(req_resp, ?EXCHANGE, default, self())
  {ok, #{}}.

%% обработка события потери связи с точкой обмена. Это же событие приходит, если точка обмена еще не запустилась.
handle_info(#exchange_die{exchange = ?EXCHANGE}, State) ->
  erlang:send(self(), monitor_exchange),
  {noreply, State};

%% обработка API
handle_info(#time_req{opts = _Opts}, State) ->
  messaging:response_once(Client, #time_resp{
result = #time{ unixtime = time_utils:unixtime(now()), datetime = time_utils:iso8601_fmt(now())}
  });
  {noreply, State};

%% завершение работы gen_server
terminate(_Reason, _State) ->
  messaging:demonitor_exchange(req_resp, ?EXCHANGE, default, self()),
  ok.

Waehere kiritaki

Hei tuku tono ki te ratonga, ka taea e koe te waea atu ki te API tono karere ki nga waahi katoa o te kiritaki:

case messaging:request(?EXCHANGE, tag, #time_req{opts = #{}}, self()) of
    ok -> ok;
    _ -> %% repeat or fail logic
end

I roto i te punaha tohatoha, he rereke te rereke o te whirihoranga o nga waahanga, a, i te wa o te tono, kaore ano kia timata te karere, kaore ranei te kaiwhakahaere ratonga e rite ki te mahi i te tono. Na reira, me tirotirohia te whakautu karere me te hapai i te keehi rahunga.
I muri i te tuku angitu, ka whiwhi te kiritaki i te whakautu, i te hapa ranei mai i te ratonga.
Me whakahaere nga keehi e rua i roto i te handle_info:

handle_info(#'$msg'{exchange = ?EXCHANGE, tag = tag, message = #time_resp{result = #time{unixtime = Utime}}}, State) ->
  ?debugVal(Utime),
  {noreply, State};

handle_info(#'$msg'{exchange = ?EXCHANGE, tag = tag, message = #time_resp{result = #time_error{code = ErrorCode}}}, State) ->
  ?debugVal({error, ErrorCode}),
  {noreply, State};

Whakautu Tono-Chunked

He pai ki te karo i te tuku karere nui. Ko te urupare me te mahi pumau o te punaha katoa ka whakawhirinaki ki tenei. Mena ka nui te mahara o te whakautu ki tetahi patai, he mea whakahau kia wehewehea ki etahi waahanga.

Nga poraka hanga o nga tono toha. Te huarahi tuatahi

Ka hoatu e ahau etahi tauira o enei keehi:

  • Ko nga waahanga e whakawhiti ana i nga raraunga rua, penei i nga konae. Ko te wawahi i te whakautu ki nga waahanga iti ka awhina koe ki te mahi pai me nga konae ahakoa te rahi me te karo i te puhake mahara.
  • Nga rarangi ingoa. Hei tauira, me kowhiria e tatou nga rekoata katoa mai i tetahi ripanga nui i roto i te paataka raraunga ka whakawhiti ki tetahi atu waahanga.

Ka kiia e au enei whakautu he kaikoohiko. Ahakoa he aha, he pai ake nga karere 1024 o te 1 MB i te karere kotahi o te 1 GB.

I roto i te roopu Erlang, ka whiwhi tatou i te painga atu - te whakaiti i te kawenga i runga i te waahi whakawhiti me te whatunga, na te mea ka tukuna tonu nga whakautu ki te kaiwhiwhi, ma te whakawhiti i te waahi whakawhiti.

Whakautu me te Tono

He whakarereke onge tenei o te tauira RPC mo te hanga punaha korero.

Nga poraka hanga o nga tono toha. Te huarahi tuatahi

Whakaputa-ohauru (rakau tohatoha raraunga)

Ko nga punaha whakahaere-a-takahanga ka tukuna ki nga kaihoko i te wa kua rite nga raraunga. No reira, he kaha ake nga punaha ki te tauira pana atu i te tauira kume, pooti ranei. Ma tenei ahuatanga ka taea e koe te karo i te moumou rauemi ma te tono me te tatari mo nga raraunga.
Ko te ahua e whakaatu ana i te tukanga o te tohatoha karere ki nga kaihoko kua ohauru ki tetahi kaupapa motuhake.

Nga poraka hanga o nga tono toha. Te huarahi tuatahi

Ko nga tauira tawhito o te whakamahi i tenei tauira ko te tohatoha o te kawanatanga: te ao keemu i roto i nga keemu rorohiko, nga raraunga maakete mo nga whakawhitinga, nga korero whai hua i roto i nga whangai raraunga.

Kia titiro tatou ki te waehere kaiohauru:

init(_Args) ->
  %% подписываемся на обменник, ключ = key
  messaging:subscribe(?SUBSCRIPTION, key, tag, self()),
  {ok, #{}}.

handle_info(#exchange_die{exchange = ?SUBSCRIPTION}, State) ->
  %% если точка обмена недоступна, то пытаемся переподключиться
  messaging:subscribe(?SUBSCRIPTION, key, tag, self()),
  {noreply, State};

%% обрабатываем пришедшие сообщения
handle_info(#'$msg'{exchange = ?SUBSCRIPTION, message = Msg}, State) ->
  ?debugVal(Msg),
  {noreply, State};

%% при остановке потребителя - отключаемся от точки обмена
terminate(_Reason, _State) ->
  messaging:unsubscribe(?SUBSCRIPTION, key, tag, self()),
  ok.

Ka taea e te puna te karanga i te mahi ki te whakaputa karere ki tetahi waahi watea:

messaging:publish_message(Exchange, Key, Message).

Exchange - ingoa o te waahi whakawhiti,
Key - kī ararere
karere - utaina

Hurihuri Whakaputa-ohauru

Nga poraka hanga o nga tono toha. Te huarahi tuatahi

Ma te whakawhänui i te pub-sub, ka taea e koe te tiki tauira pai mo te takiuru. Ko te huinga o nga puna me nga kaihoko ka tino rereke. Ko te ahua e whakaatu ana i tetahi keehi me tetahi kaihoko me nga puna maha.

Tauira tohatoha mahi

Tata ki ia kaupapa he mahi tukatuka whakaroa, penei i te whakaputa purongo, te tuku panui, me te tango raraunga mai i nga punaha tuatoru. Ko te whakaputanga o te punaha e mahi ana i enei mahi ka ngawari ki te whakarahi ma te taapiri i nga kaikawe. Ko nga mea e toe ana ma matou ko te hanga i te roopu o nga kaitukatuka me te tohatoha i nga mahi ki waenga i a raatau.

Me titiro ki nga ahuatanga ka puta ma te whakamahi i te tauira o nga kaikawe e 3. Ahakoa i te wahanga o te tohatoha mahi, ka ara ake te patai mo te tika o te tohatoha me te puhake o nga kaikawe. Ko te tohatoha-a-roobin te kawenga mo te tika, me te karo i te ahua o te puhake o nga kaikawe, ka tukuna e matou he here. prefetch_limit. I roto i nga ahuatanga poto prefetch_limit ka aukati tetahi kaihautu ki te whiwhi i nga mahi katoa.

Ko te Karere e whakahaere ana i nga rarangi me te mahi matua. Ka whiwhi mahi nga kaitukatuka ina tae mai. Ka taea e te mahi te whakaoti angitu, ka hinga ranei:

  • messaging:ack(Tack) - ka karangahia mena kua pai te tukatuka i te karere
  • messaging:nack(Tack) - ka karangahia i nga waahi ohorere katoa. Kia whakahokia mai te mahi, ka tukuna atu te karere ki tetahi atu kaihautu.

Nga poraka hanga o nga tono toha. Te huarahi tuatahi

Mehemea i puta he rahunga uaua i te wa e tukatuka ana i nga mahi e toru: kaitukatuka 1, i muri i te whiwhinga o te mahi, i tuki me te kore e whai wa ki te tuku korero ki te waahi whakawhiti. I tenei keehi, ka whakawhitia e te waahi whakawhiti te mahi ki tetahi atu kaihautu i muri i te paunga o te wa waahi. Na etahi take, ka whakarerea e te Kaihautu 3 te mahi, ka tukuna he nack, na reira, i tukuna ano te mahi ki tetahi atu kaihautu i tutuki pai.

Whakarapopototanga Tuatahi

Kua hipokina e matou nga poraka hanga taketake o nga punaha tohatoha me te maarama ki te whakamahi i a Erlang/Elixir.

Ma te whakakotahi i nga tauira taketake, ka taea e koe te hanga paradigms uaua ki te whakaoti rapanga ka puta ake.

I te waahanga whakamutunga o te raupapa, ka titiro tatou ki nga take whanui mo te whakarite i nga ratonga, te ararere me te whakataurite, me te korero ano mo te taha whaihua o te tauineine me te aukati i nga hapa o nga punaha.

Te mutunga o te wahanga tuarua.

Photography Marius Christensen
Ko nga whakaahua i whakaritea ma te whakamahi i te websequencediagrams.com

Source: will.com

Tāpiri i te kōrero