Vitalu vya ujenzi wa programu zilizosambazwa. Ukadiriaji wa sifuri

Vitalu vya ujenzi wa programu zilizosambazwa. Ukadiriaji wa sifuri

Ulimwengu haujasimama. Maendeleo huleta changamoto mpya za kiteknolojia. Kwa mujibu wa mahitaji ya mabadiliko, usanifu wa mifumo ya habari lazima ibadilike. Leo tutazungumza juu ya usanifu unaoendeshwa na hafla, upatanishi, upatanishi, usawazishaji, na jinsi unavyoweza kuishi kwa amani na haya yote huko Erlang.

Utangulizi

Kulingana na saizi ya mfumo iliyoundwa na mahitaji yake, sisi, watengenezaji, tunachagua njia ya kubadilishana habari kwenye mfumo. Katika hali nyingi, kuandaa mwingiliano wa huduma, chaguo la kufanya kazi linaweza kuwa mpango na broker, kwa mfano, kulingana na RabbitMQ au kafka. Lakini wakati mwingine mtiririko wa matukio, SLA na kiwango cha udhibiti wa mfumo ni kwamba ujumbe uliotengenezwa tayari haufai kwetu. Bila shaka, unaweza kutatiza mfumo kidogo kwa kuchukua jukumu la safu ya usafiri na uundaji wa nguzo, kwa mfano kutumia ZeroMQ au nanomsg. Lakini ikiwa mfumo una matokeo ya kutosha na uwezo wa nguzo ya kawaida ya Erlang, basi suala la kuanzisha huluki ya ziada linahitaji utafiti wa kina na uhalali wa kiuchumi.

Mada ya programu tendaji zilizosambazwa ni pana kabisa. Ili kuweka ndani ya muundo wa makala, mada ya majadiliano ya leo yatakuwa tu mazingira yenye usawa yaliyojengwa kwenye Erlang/Elixir. Mfumo ikolojia wa Erlang/OTP hukuruhusu kutekeleza usanifu tendaji kwa kiwango kidogo cha juhudi. Lakini kwa hali yoyote, tutahitaji safu ya ujumbe.

Msingi wa kinadharia

Ubunifu huanza na kufafanua malengo na vikwazo. Lengo kuu sio katika eneo la maendeleo kwa ajili ya maendeleo. Tunahitaji kupata zana salama na hatari kwa msingi ambayo tunaweza kuunda na, muhimu zaidi, kuendeleza matumizi ya kisasa ya viwango mbalimbali: kuanzia programu za seva moja zinazohudumia hadhira ndogo, ambayo baadaye inaweza kukua katika makundi ya hadi 50. -nodi 60, na kuishia na mashirikisho ya nguzo. Hivyo, lengo kuu ni kuongeza faida kwa kupunguza gharama ya maendeleo na umiliki wa mfumo wa mwisho.

Wacha tuangazie mahitaji 4 kuu ya mfumo wa mwisho:

  • Π‘inayolenga tukio.
    Mfumo daima uko tayari kupitisha mtiririko wa matukio na kufanya vitendo muhimu;
  • Мscalability.
    Vitalu vya mtu binafsi vinaweza kuongezwa kwa wima na mlalo. Mfumo mzima lazima uwe na uwezo wa ukuaji usio na usawa wa usawa;
  • Оuvumilivu wa makosa.
    Ngazi zote na huduma zote zinapaswa kuwa na uwezo wa kurejesha kiotomatiki kutokana na kushindwa;
  • Π“muda wa majibu wa uhakika.
    Muda ni wa thamani na watumiaji hawapaswi kusubiri muda mrefu sana.

Kumbuka hadithi ya zamani kuhusu "Injini ndogo ambayo inaweza"? Ili mfumo ulioundwa uondoke kwa ufanisi hatua ya mfano na uendelee, msingi wake lazima ukidhi mahitaji ya chini SMOG.

Hoja moja zaidi inaongezwa kwa ujumbe kama zana ya miundombinu na msingi wa huduma zote: urahisi wa kutumia kwa watayarishaji programu.

Inayolenga tukio

Ili programu ikue kutoka kwa seva moja hadi kundi, usanifu wake lazima uauni uunganishaji usio huru. Mfano wa asynchronous hukutana na mahitaji haya. Ndani yake, mtumaji na mpokeaji anajali kuhusu mzigo wa habari wa ujumbe na usijali kuhusu maambukizi na uelekezaji ndani ya mfumo.

Scalability

Scalability na ufanisi wa mfumo ni karibu na kila mmoja. Vipengele vya maombi lazima viweze kutumia rasilimali zote zilizopo. Kadiri tunavyoweza kutumia uwezo kwa ufanisi zaidi na jinsi mbinu zetu za uchakataji zinavyofaa zaidi, ndivyo tunavyotumia pesa kidogo kununua vifaa.

Ndani ya mashine moja, Erlang hutengeneza mazingira yenye ushindani mkubwa. Salio kati ya upatanifu na ulinganifu inaweza kuwekwa kwa kuchagua idadi ya nyuzi za mfumo wa uendeshaji zinazopatikana kwa Erlang VM na idadi ya vipanga ratiba vinavyotumia nyuzi hizi.
Michakato ya Erlang haishiriki hali na hufanya kazi katika hali isiyozuia. Hii hutoa muda wa kusubiri wa chini kiasi na upitishaji wa juu zaidi kuliko programu za kawaida za uzuiaji. Kipanga ratiba cha Erlang huhakikisha ugawaji sawa wa CPU na IO, na kutokuwepo kwa kuzuia huruhusu programu kujibu hata wakati wa mizigo ya juu au kushindwa.

Katika ngazi ya nguzo, tatizo la utupaji pia lipo. Ni muhimu kwamba mashine zote kwenye nguzo zimepakiwa sawasawa na kwamba mtandao haujazidiwa. Wacha tufikirie hali: trafiki ya watumiaji hutua kwenye visawazishaji vinavyoingia (haproxy, nginx, nk), wanasambaza maombi ya usindikaji kwa usawa iwezekanavyo kati ya seti za nyuma zinazopatikana. Ndani ya miundombinu ya programu, huduma inayotekeleza kiolesura kinachohitajika ni maili ya mwisho tu na itahitaji kuomba idadi ya huduma nyingine ili kujibu ombi la awali. Maombi ya ndani pia yanahitaji kuelekeza na kusawazisha.
Ili kudhibiti mtiririko wa data ipasavyo, ni lazima utumaji ujumbe uwape wasanidi kiolesura cha kudhibiti uelekezaji na usawazishaji wa upakiaji. Shukrani kwa hili, watengenezaji wataweza, kwa kutumia mifumo ya microservice (aggregator, proksi, mnyororo, tawi, nk), kutatua matatizo ya kawaida na yale ambayo hutokea mara chache.

Kwa mtazamo wa biashara, scalability ni mojawapo ya zana za usimamizi wa hatari. Jambo kuu ni kukidhi maombi ya wateja kwa kutumia vifaa vyema:

  • Wakati nguvu ya vifaa huongezeka kama matokeo ya maendeleo. Haitafanya kazi kwa sababu ya programu isiyo kamili. Erlang hupima wima vizuri na daima ataweza kutumia cores zote za CPU na kumbukumbu inayopatikana;
  • Katika mazingira ya wingu, tunaweza kudhibiti kiasi cha vifaa kulingana na mzigo wa sasa au uliotabiriwa na uhakikisho wa SLA.

uvumilivu wa makosa

Wacha tuchunguze misemo miwili: "Kushindwa hakukubaliki" na "Kutakuwa na kutofaulu kila wakati." Kwa biashara, kushindwa kwa programu kunamaanisha kupoteza pesa, na nini mbaya zaidi, kupoteza sifa. Kusawazisha kati ya hasara zinazowezekana na gharama ya kutengeneza programu inayostahimili makosa, maelewano yanaweza kupatikana mara nyingi.

Kwa muda mfupi, usanifu unaojumuisha uvumilivu wa makosa huokoa pesa kwa ununuzi wa suluhisho za nguzo za rafu. Wao ni ghali na pia wana mende.
Kwa muda mrefu, usanifu unaostahimili makosa hujilipa mara nyingi katika hatua zote za maendeleo.
Utumaji ujumbe ndani ya msingi wa msimbo hukuruhusu kufanyia kazi kwa undani mwingiliano wa vipengee ndani ya mfumo katika hatua ya ukuzaji. Hii hurahisisha kazi ya kujibu na kusimamia kushindwa, kwa kuwa vipengele vyote muhimu vinashughulikia kushindwa, na mfumo unaotokana unajua jinsi ya kurudi moja kwa moja kwa kawaida baada ya kushindwa kwa kubuni.

Msikivu

Bila kujali kushindwa, maombi lazima yajibu maombi na kukutana na SLA. Ukweli ni kwamba watu hawataki kusubiri, kwa hivyo biashara lazima zibadilike ipasavyo. Maombi zaidi na zaidi yanatarajiwa kuitikia sana.
Programu sikivu hufanya kazi karibu na wakati halisi. Erlang VM inafanya kazi katika hali laini ya wakati halisi. Kwa baadhi ya maeneo, kama vile biashara ya hisa, dawa, na udhibiti wa vifaa vya viwandani, hali ngumu ya wakati halisi ni muhimu.
Mifumo sikivu huboresha UX na kunufaisha biashara.

Muhtasari wa awali

Wakati wa kupanga nakala hii, nilitaka kushiriki uzoefu wangu wa kuunda wakala wa ujumbe na kuunda mifumo ngumu kulingana nayo. Lakini sehemu ya kinadharia na motisha iligeuka kuwa pana kabisa.
Katika sehemu ya pili ya kifungu hicho, nitazungumza juu ya nuances ya utekelezaji wa vidokezo vya kubadilishana, mifumo ya ujumbe na matumizi yao.
Katika sehemu ya tatu tutazingatia masuala ya jumla ya kuandaa huduma, kuelekeza na kusawazisha. Hebu tuzungumze juu ya upande wa vitendo wa scalability na uvumilivu wa makosa ya mifumo.

Mwisho wa sehemu ya kwanza.

picha @lucabravo.

Chanzo: mapenzi.com

Kuongeza maoni