Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

Sepatemaba 19 ma Moscow ua hanaia ʻO ka hui mua ʻo HUG (Highload++ User Group), i hoʻolaʻa ʻia i nā microservices. Aia kahi hōʻike "Operating Microservices: Size Matters, Even If You Have Kubernetes," kahi i hōʻike ai mākou i ka ʻike nui o Flant i ka hana ʻana i nā papahana me ka hoʻolālā microservice. ʻO ka mea mua, pono ia i nā mea hoʻomohala āpau e noʻonoʻo nei e hoʻohana i kēia ala i kā lākou papahana o kēia manawa a i ʻole ka wā e hiki mai ana.

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

Hoʻolauna wikiō o ka hōʻike (50 mau minuke, ʻoi aku ka ʻike ma mua o ka ʻatikala), a me ka unuhi nui mai ia mea ma ke ʻano kikokikona.

NB: Loaʻa ka wikiō a me ka hōʻike ma ka hope o kēia pou.

Hōʻike

ʻO ka maʻamau, he hoʻomaka ka moʻolelo maikaʻi, kahi manaʻo nui a me kahi hoʻoholo. Ua like kēia hōʻike me kahi prelude, a he mea pōʻino i kēlā. He mea nui nō hoʻi e hoʻomaopopo i ka hāʻawi ʻana i ka ʻike o nā mea ʻē aʻe i nā microservices. hoʻoluhi.

E hoʻomaka wau me kēia pakuhi, ʻo ia ka mea kākau (ma 2015) lilo ʻO Martin Fowler:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

Hōʻike ia pehea, i ka hihia o kahi noi monolithic i hiki i kahi waiwai, hoʻomaka ka emi ʻana o ka huahana. ʻOkoʻa nā Microservices i ka haʻahaʻa o ka huahana mua me lākou, akā i ka piʻi ʻana o ka paʻakikī, ʻaʻole ʻike ʻia ka hoʻohaʻahaʻa ʻana i ka pono no lākou.

E hoʻohui au i kēia pakuhi no ka hihia o ka hoʻohana ʻana iā Kubernetes:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

No ke aha i ʻoi aku ka maikaʻi o kahi noi me nā microservices? No ka mea, ua hoʻopuka ʻia kēlā ʻano hoʻolālā i nā koi koʻikoʻi no ka hale hoʻolālā, ʻo ia hoʻi ka uhi piha ʻia e nā mana o Kubernetes. Ma ka ʻaoʻao ʻē aʻe, pono kekahi o kēia hana no kahi monolith, ʻoi aku ka nui o ka monolith maʻamau i kēia lā ʻaʻole ia he monolith (e ʻike ʻia nā kikoʻī ma hope o ka hōʻike).

E like me kāu e ʻike ai, ʻaʻole ʻokoʻa loa ka pakuhi hope (i ka wā i loaʻa ai nā noi monolithic a me nā microservice i loko o ka ʻōnaehana me Kubernetes) mai ka mea mua. A laila e kamaʻilio mākou e pili ana i nā noi i hoʻohana ʻia me Kubernetes.

ʻO nā lawelawe micro pono a pōʻino

A eia ka manao nui.

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

He aha kūpono hale hana microservice? Pono e lawe mai iā ʻoe i nā pōmaikaʻi maoli, e hoʻonui ana i kāu pono hana. Inā mākou e hoʻi i ka pakuhi, eia kēia:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

Inā ʻoe e kelepona iā ia pono, a laila aia ma kēlā ʻaoʻao o ka pakuhi mea ino microservices (hoʻopilikia i ka hana):

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

Ke hoʻi nei i ka "manaʻo nui": pono anei au e hilinaʻi i koʻu ʻike? Mai ka hoʻomaka ʻana o kēia makahiki ua nānā au 85 papahana. ʻAʻole lākou a pau he microservices (ma kahi o ka hapakolu a i ka hapalua o lākou i loaʻa i kahi hoʻolālā), akā he helu nui kēia. ʻO mākou (Flant company) ma ke ʻano he mea hoʻopukapuka e hoʻokele e ʻike i nā ʻano noi like ʻole i hoʻomohala ʻia ma nā hui liʻiliʻi (me nā mea hoʻomohala 5) a me nā mea nui (~ 500 mea hoʻomohala). ʻO kahi pōmaikaʻi hou ke ʻike mākou i kēia mau noi e ola a ulu i nā makahiki.

No ke aha ka microservices?

I ka nīnau e pili ana i nā pono o nā microservices aia pane kiko'ī loa mai ka Martin Fowler i ʻōlelo mua ʻia:

  1. nā palena maopopo o ka modularity;
  2. hoʻolaha kūʻokoʻa;
  3. kūʻokoʻa e koho i nā ʻenehana.

Ua kamaʻilio nui au i nā mea haku polokalamu a me nā mea hoʻomohala a nīnau i ke kumu e pono ai lākou i nā microservices. A ua hana wau i kaʻu papa inoa o kā lākou mau manaʻo. Eia ka mea i hanaia:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

Inā mākou e wehewehe i kekahi o nā helu "ma nā manaʻo," a laila:

  • nā palena o nā modules: eia mākou he monolith weliweli, a i kēia manawa e hoʻonohonoho pono ʻia nā mea a pau i loko o nā waihona Git, kahi o nā mea āpau "ma nā papa", ʻaʻole i hui pū ʻia ka mahana a me ka palupalu;
  • kūʻokoʻa hoʻolaha: hiki iā mākou ke ʻōwili i nā lawelawe kūʻokoʻa i ʻoi aku ka wikiwiki o ka hoʻomohala ʻana (hoʻolaha i nā hiʻohiʻona hou i ka like);
  • hoʻomohala kūʻokoʻa: hiki iā mākou ke hāʻawi i kēia microservice i kahi hui / mea hoʻomohala, a ʻo kēlā me kēia i kekahi, mahalo i hiki iā mākou ke hoʻomohala wikiwiki;
  • боʻoi aku ka hilinaʻi: inā hiki ke hoʻohaʻahaʻa hapa (hoʻokahi microservice mai ka 20 hāʻule), a laila hoʻokahi wale nō pihi e pau ka hana, a e hoʻomau ka ʻōnaehana holoʻokoʻa.

Hoʻolālā microservice maʻamau (pōʻino).

No ka wehewehe ʻana i ke kumu ʻaʻole ʻo ka ʻoiaʻiʻo ka mea a mākou e manaʻo ai, e hōʻike wau hui pū he kiʻi o kahi hoʻolālā microservice e pili ana i ka ʻike mai nā papahana like ʻole.

ʻO kahi laʻana he hale kūʻai pūnaewele abstract e hoʻokūkū ana me Amazon a i ʻole OZON. Ua like kona ano microservice penei:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

No ka hui pū ʻana o nā kumu, ua kākau ʻia kēia mau microservices ma nā kahua like ʻole:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

No ka mea pono i kēlā me kēia microservice ke kūʻokoʻa, pono ka hapa nui o lākou i kā lākou waihona ponoʻī a me ka cache. ʻO ka hoʻolālā hope loa penei:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

He aha kona hopena?

Loaʻa iā Fowler kēia aia kahi ʻatikala - e pili ana i ka "uku" no ka hoʻohana ʻana i nā microservices:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

A e ʻike mākou inā ua hoʻokō ʻia kā mākou mau manaʻo.

Holoi i nā palena o nā modules...

aka, ʻEhia mau microservices pono mākou e hoʻoponopono?e hoʻopuka i ka hoʻololi? Hiki iā mākou ke noʻonoʻo pehea e hana ai nā mea āpau me ka ʻole o kahi tracer i hoʻokaʻawale ʻia (ma hope o nā mea a pau, e hana ʻia kekahi noi e ka hapalua o nā microservices)?

Aia kekahi ʻano "puʻupuʻu lepo nui", a eia ua lilo ia i puʻupuʻu lepo. No ka hōʻoia ʻana i kēia, eia kahi hiʻohiʻona pili o ka hele ʻana o nā noi:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

Hoʻolaha kūʻokoʻa...

ʻO ka ʻenehana, ua hoʻokō ʻia: hiki iā mākou ke ʻōwili i kēlā me kēia microservice kaʻawale. Akā i ka hoʻomaʻamaʻa pono ʻoe e noʻonoʻo i ka ʻōwili mau ʻana nui nā microservices, a pono mākou e noʻonoʻo ke kauoha o kā lākou hoʻolaha ʻana. Ma ke ala maikaʻi, pono mākou e hoʻāʻo ma kahi kaapuni ʻokoʻa inā mākou e ʻōwili nei i ka hoʻokuʻu ʻana ma ke ʻano pololei.

Ke kūʻokoʻa e koho i ka ʻenehana...

ʻo ia. E hoʻomanaʻo wale i ka palena pinepine o ke kūʻokoʻa i ka hewa. He mea nui loa ma aneʻi ʻaʻole e koho i nā ʻenehana e "pāʻani" me lākou.

Kūʻokoʻa o ka hoʻomohala ʻana...

Pehea e hana ai i ka loop ho'āʻo no ka noi holoʻokoʻa (me nā ʻāpana he nui)? Akā, pono ʻoe e hoʻomau i kēia manawa. Ke alakaʻi nei kēia mau mea i ka ʻoiaʻiʻo helu maoli o na kaapuni hoao, hiki iā mākou ke komo i loko, huli mai ka liʻiliʻi.

Pehea e pili ana i ka deploying i kēia mau mea a pau kūloko?.. Ua huli mai i ka mea i hana pinepine ka mea hoʻomohala i kāna hana kūʻokoʻa, akā "ma ka random", no ka mea, ua koi ʻia ʻo ia e kali a hiki i ke kaapuni kaʻawale no ka hoʻāʻo.

Hoʻokaʻawale ʻia ʻana...

ʻAe, akā ua kaupalena ʻia ma kahi o ka DBMS i hoʻohana ʻia. I ka laʻana hoʻolālā i hāʻawi ʻia, ʻaʻole pilikia ʻo Cassandra, akā ʻo MySQL a me PostgreSQL.

Боʻoi aku ka hilinaʻi ...

ʻAʻole wale ka hemahema o hoʻokahi microservice i ka ʻoiaʻiʻo e uhaʻi i ka hana kūpono o ka ʻōnaehana holoʻokoʻa, akā aia kekahi pilikia hou: paʻakikī loa ka hana ʻana i kēlā me kēia microservice fault-tolerant. No ka mea, hoʻohana nā microservices i nā ʻenehana like ʻole (memcache, Redis, etc.), no kēlā me kēia mea pono ʻoe e noʻonoʻo i nā mea āpau a hoʻokō iā ia, ʻoiaʻiʻo, hiki, akā pono nā kumuwaiwai nui.

Hiki ke hoʻouka ʻia...

Maikaʻi maoli kēia.

ʻO ka "māmā" o nā microservices ...

ʻAʻole mākou nui wale pūnaewele ma luna o ke poʻo (Ke hoʻonui nei nā noi no DNS, a me nā mea ʻē aʻe), akā no ka nui o nā subqueries a mākou i hoʻomaka ai hoʻopili i ka ʻikepili (nā waihona hale kūʻai), i alakaʻi i ka nui o ka waiho ʻana.

A eia ka hopena o ka hoʻokō ʻana i kā mākou mau manaʻo:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

Akā ʻaʻole ʻo ia wale nō!

No ka mea:

  • Pono paha mākou i kahi pahi leka.
  • Pehea e hana ai i kahi hoʻihoʻi maʻamau i ka manawa kūpono i ka manawa? Hoʻokahi wale nō ʻoiaʻiʻo ʻO ke koho ke hoʻopau i ke kaʻa no kēia. Akā, pehea e hana ai i kēia i ka hana?
  • Inā mākou e kamaʻilio e pili ana i ke kākoʻo ʻana i kekahi mau wahi, a laila ʻo ka hoʻonohonoho ʻana i ka hoʻomau i kēlā me kēia o lākou he hana koʻikoʻi loa.
  • Piʻi ka pilikia o ka hana ʻana i nā hoʻololi kikowaena. No ka laʻana, inā pono mākou e hōʻano hou i ka mana PHP, pono mākou e hana i kēlā me kēia waihona (a he mau kakini o lākou).
  • ʻO ka ulu ʻana o ka paʻakikī o ka hana ʻana, ma waho, exponential.

He aha ka hana me kēia mau mea?

E hoʻomaka me kahi noi monolithic. Ka ʻike a Fowler e'ōlelo ana ʻaneʻane hoʻomaka nā noi microservice holomua ma ke ʻano he monolith i lilo i mea nui loa a laila ua haki. I ka manawa like, kokoke i nā ʻōnaehana āpau i kūkulu ʻia e like me nā microservices mai ka hoʻomaka ʻana a i ʻole ma hope i loaʻa i nā pilikia koʻikoʻi.

ʻO kekahi manaʻo koʻikoʻi no ka holomua o kahi papahana me kahi hoʻolālā microservice, pono ʻoe e ʻike pono a me ke kumuhana, a pehea e hana ai i nā microservices. A ʻo ke ala maikaʻi loa e aʻo ai i kahi kumuhana e hana i kahi monolith.

Akā, pehea inā mākou i kēia kūlana?

ʻO ka hana mua i ka hoʻoponopono ʻana i kekahi pilikia, ʻo ia ke ʻae me ia a hoʻomaopopo he pilikia ia, ʻaʻole makemake mākou e ʻeha hou.

Inā, ma ke ʻano o kahi monolith overgrown (i ka wā i pau ai mākou i ka manawa e kūʻai ai i nā kumuwaiwai hou aʻe no ia mea), ʻoki mākou iā ia, a laila i kēia hihia ka moʻolelo ʻē aʻe: inā ʻaʻole kōkua hou nā microservices nui, akā keʻakeʻa - e oki i ka nui a e hoonui!

No ka laʻana, no ke kiʻi hui i kūkākūkā ʻia ma luna...

E hoʻopau i nā microservice pilikia loa:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

Hoʻohui i nā microservices kuleana no ka hana mua:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

... i loko o hoʻokahi microservice, i kākau ʻia i hoʻokahi (ʻano a me ka maʻamau, e like me kou manaʻo) ʻōlelo/framework:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

E loaʻa iā ia hoʻokahi ORM (hoʻokahi DBMS) a ʻelua mau noi mua:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

... akā ma ka laulā hiki iā ʻoe ke hoʻololi hou aku ma laila, e loaʻa i kēia hopena:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

Eia kekahi, ma Kubernetes mākou e holo i kēia mau mea a pau i nā manawa kaʻawale, ʻo ia ka mea hiki iā mākou ke ana i ka ukana a hoʻokaʻawale iā lākou.

E hōʻuluʻulu manaʻo

E nānā i ke kiʻi nui aʻe. ʻO ka manawa pinepine, kū mai kēia mau pilikia āpau me nā microservices no ka mea ua lawe kekahi i kā lākou hana, akā makemake e "pāʻani me nā microservices".

Ma ka huaʻōlelo "microservices" ʻaʻohe hapa "micro".. He "micro" wale nō lākou no ka mea liʻiliʻi lākou ma mua o kahi monolith nui. Akā, mai noʻonoʻo iā lākou he mea liʻiliʻi.

A no ka manaʻo hope, e hoʻi kāua i ka pakuhi kumu:

Microservices: He mea nui ka nui, ʻoiai inā he Kubernetes kāu

He palapala i kākau ʻia ma luna (luna ʻākau) pili i ka mea ʻO nā mākau o ka hui e hana i kāu papahana he mea mua - e hana nui lākou i kāu koho ma waena o nā microservices a me kahi monolith. Inā ʻaʻole lawa nā mākau o ka hui, akā hoʻomaka ia e hana i nā microservices, e make maoli ka moʻolelo.

Nā wikiō a me nā paheʻe

ʻO ke wikiō mai ka haʻiʻōlelo (~ 50 mau minuke; akā naʻe, ʻaʻole ia e hōʻike i ka nui o nā manaʻo o ka poʻe kipa, ka mea i hoʻoholo nui i ke ʻano o ka hōʻike, akā ʻo ia ke ʻano):

Hōʻike i ka hōʻike:

PS

Nā hōʻike ʻē aʻe ma kā mākou blog:

Hiki paha iā ʻoe ke hoihoi i kēia mau puke:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka