Talaan ng nilalaman[Tago][Ipakita]
Ang pagkakaroon ng mga application ay hindi kailanman sineseryoso tulad ng ngayon kapag gumagamit kami ng mga app para sa higit pa sa komunikasyon, personal man o propesyonal at kapag ang mga app ang negosyo.
Ang mga application na hindi palaging online, o hindi matatag, ay nawawala ang kanilang mga user at kaugnayan, sa kalaunan ay nagiging lipas na. Nangyari ito sa isang iglap. Dahil ang internet ay hindi kailanman natutulog at nagpapatakbo ng 24 na oras sa isang araw, 7 araw sa isang linggo, ang parehong ideya ay dapat na nalalapat sa mga app.
Ang scalability ay mahalaga sa paggawa nito at pagtiyak ng availability ng application. Ang load balancing ay isa sa pinakamahalagang bahagi sa pagtiyak ng availability. Maraming tao ang naniniwala pa rin na ang load balancing ay maaaring magawa sa isang simpleng script.
Gayunpaman, hindi ito ang kaso. Ito lamang ang nagbibigay ng access sa mga programa sa buong mundo — anumang oras at mula sa anumang device.
Sa post na ito, titingnan natin nang malalim ang load balancing, ang mga algorithm nito, at kung paano ito nauugnay sa mga microservice, bukod sa iba pang mga bagay. Magsimula na tayo!
Ano ang load balancing?
Habang lumalaki ang demand para sa isang website o application ng negosyo, malapit nang hindi mahawakan ng isang server ang buong load. Ibinabahagi ng mga organisasyon ang workload sa maraming server upang matugunan ang pangangailangan. Ang pamamaraang ito, na kilala bilang "pagbabalanse ng pag-load," ay nagpapanatili sa isang server na ma-overload, na maaaring maging sanhi ng paghina nito, pagbaba ng mga kahilingan, o kahit na pag-crash.
Ang load balancing ay pantay na namamahagi ng trapiko sa network upang maiwasan ang pagkabigo dahil sa sobrang karga ng mapagkukunan. Ang mga application, website, database, at iba pang mapagkukunan ng computer ay gumaganap nang mas mahusay at mas magagamit gamit ang paraang ito. Nakakatulong din ito sa maayos at napapanahong pagproseso ng mga kahilingan ng user.
Mula sa pananaw ng user, ang load balancing ay nagsisilbing hindi nakikitang tagapamagitan sa pagitan ng isang kliyente at isang koleksyon ng mga server, na tinitiyak na ang mga kahilingan sa koneksyon ay hindi nababawasan. Ang mga application, website, database, at online na serbisyo ay malamang na bumagsak kung ang demand ay naging masyadong malaki nang walang load balancing.
Daan-daang libong mga kahilingan ng user ang maaaring ipadala sa isang website na may mataas na trapiko sa parehong oras. Maraming mga server ang kinakailangan upang tama na ma-populate ang mga web page ng hinihiling na nilalaman, tulad ng teksto, mga larawan, video, at audio streaming. Ang load balancing ay karaniwang ginagamit sa mga farm ng server ng website na may mataas na trapiko, gayundin sa mga DNS server, database, at mga site ng File Transfer Protocol (FTP).
Kung ang isang server ay labis na pasan, ito ay maaaring gumana nang hindi maganda o kahit na mag-crash. Binabawasan ng mga load balancer ang pagkakataon ng downtime sa pamamagitan ng pamamahagi ng mga kahilingan ng user nang pantay-pantay sa isang koleksyon ng mga server. Kung ang isa sa mga server sa pangkat ay nabigo, ang trapiko ay inilipat sa ibang mga server sa pangkat. Awtomatikong nagdaragdag ang isang load balancer ng mga bagong server sa proseso ng pamamahagi ng trapiko kapag idinagdag ang mga ito sa pool ng server.
Paano gumagana ang load balancing?
Ito ay gumagana tulad ng sumusunod:
- Kapag nakatanggap ang isang kliyente ng kahilingan, gaya ng sa pamamagitan ng browser o application, sinusubukan nitong kumonekta sa server.
- Kapag ang isang load balancer ay nakatanggap ng isang kahilingan, ito ay ruta ito sa isa sa mga server sa isang pangkat ng server batay sa mga itinatag na pattern ng algorithm (o sakahan).
- Natatanggap ng server ang kahilingan sa koneksyon at sinasagot ang kliyente sa pamamagitan ng load balancer.
- Kapag natanggap ng load balancer ang tugon, tumutugma ito sa IP address ng kliyente sa IP address ng napiling server. Kasunod nito, ang sagot ay ipinadala kasama ang packet.
- Ang SSL offload ay ang proseso ng pag-decrypt ng data gamit ang Security Socket Layer encryption protocol upang hindi na kailanganin ng mga server.
- Ang proseso ay paulit-ulit hanggang sa matapos ang sesyon.
Mga Paraan ng Pagbalanse ng Load
Upang piliin kung alin sa mga server sa isang server farm ang makakatanggap ng susunod na kahilingan, ang bawat diskarte sa pagbalanse ng load ay gumagamit ng isang hanay ng mga pamantayan. Mayroong limang karaniwang mga diskarte para sa pagbabalanse ng load:
- Round Robin: Ito ang default na diskarte, at ito ay gumagana kung paano ito tunog. Ang load balancer ay namamahagi ng mga kahilingan sa isang umiikot na pattern, simula sa unang server sa grupo at magpatuloy pababa sa ibaba, kung saan ito naghihintay na tawagan muli. Tinitiyak ng pamamaraang ito na ang bawat server ay humahawak ng halos parehong bilang ng mga koneksyon.
- Timbang Round Robin: Ang diskarte na ito ay nagtatalaga sa bawat server ng timbang (o kagustuhan) na karaniwang proporsyonal sa kapasidad nito. Kung mas maraming kahilingan ang natatanggap ng isang server, mas mataas ang timbang. Halimbawa, ang isang server na may timbang na halaga ng dalawa ay tumatanggap ng dalawang beses na mas maraming kahilingan kaysa sa isang server na may timbang na halaga ng isa.
- Malagkit na Sesyon: Ang diskarteng ito, na kilala rin bilang session persistence, ay nag-uugnay sa ilang partikular na kliyente at server sa tagal ng isang session. Upang maitatag ang link, ang load balancer ay gumagamit ng cookie o IP address ng user upang matukoy ang isang katangian ng user. Kapag naitatag na ang koneksyon, ididirekta ang mga kahilingan ng user sa parehong server hanggang sa matapos ang session. Ino-optimize nito ang mga mapagkukunan ng network habang pinapahusay din ang karanasan ng user.
- Pinakamababang Koneksyon: Ipinapalagay ng diskarteng ito na ang lahat ng kahilingan ay nagreresulta sa pantay na pasanin ng server. Bilang resulta, ang server na may pinakamaliit na bilang ng mga kahilingan ay makakatanggap ng susunod na kahilingan.
- IP Hash: Bumubuo ang algorithm na ito ng natatanging hash key batay sa source at destination IP address ng client at server. Ang susi ay ginagamit upang iruta ang kahilingan at pinapayagan ang isang nawalang koneksyon sa parehong server na maipagpatuloy.
Hardware vs. Mga Software Load Balancer
Hardware Load Balancer
Ang pisikal na hardware, gaya ng appliance, ay bumubuo ng mga hardware load balancer. Ang mga ruta ng trapiko sa mga server depende sa mga kadahilanan tulad ng bilang ng mga umiiral na koneksyon, paggamit ng processor, at pagganap ng server. Ang mga hardware load balancer ay may pagmamay-ari na firmware na kailangang panatilihin at i-update kapag may mga bagong bersyon at mga pag-aayos sa seguridad.
Ang mga hardware load balancer ay kadalasang nagbibigay ng mas mataas na performance at kontrol, pati na rin ang mas malawak na hanay ng mga kakayahan gaya ng Kerberos authentication at SSL hardware acceleration, ngunit nangangailangan sila ng ilang antas ng management at maintenance expertise. Dahil ang mga hardware load balancer ay hindi gaanong nababaluktot at nasusukat kaysa sa mga software load balancer, may posibilidad na mag-overprovision ng mga hardware load balancer.
Software Load Balancer
Ang mga software load balancer ay karaniwang mas madaling i-set up kaysa sa kanilang mga hardware counterparts. Ang mga ito ay mas cost-effective at madaling ibagay, at gumagana ang mga ito nang maayos sa mga software development environment. Binibigyang-daan ka ng paraan ng software na i-customize ang load balancer sa eksaktong mga kinakailangan ng iyong kapaligiran. Ang mas mataas na flexibility ay maaaring dumating sa gastos ng karagdagang oras na ginugol sa pag-set up ng load balancer.
Ang mga tagabalanse ng software ay nagbibigay sa iyo ng higit na kakayahang umangkop upang gumawa ng mga pagbabago at pag-update kaysa sa mga hardware, na may mas closed-box na diskarte. Ang mga naka-prepack na virtual machine ay maaaring gamitin bilang mga software load balancer (mga VM). Ang mga virtual machine ay makakatipid sa iyo ng ilang oras sa pagse-set, ngunit maaaring wala silang lahat ng functionality na available sa kanilang mga hardware counterparts.
Simple Load Balancing Implementation
Gagamitin namin ang Spring Cloud library para bumuo ng mga app na kumokonekta sa iba pang mga app sa isang balanseng pag-load. Habang pinoproseso ang mga kahilingan sa malayong serbisyo, madali kaming makakagawa ng load balancing gamit ang anumang pamamaraan na gusto namin. Isaalang-alang ang sumusunod na code bilang isang halimbawa. Magsisimula tayo sa isang pangunahing application ng server.
Ang server ay magkakaroon lamang ng isang HTTP endpoint at mapapatakbo sa ilang pagkakataon. Pagkatapos ay bubuo kami ng client app na gumagamit ng Load Balancer upang ipamahagi ang mga kahilingan sa ilang mga instance ng server.
server
Magsisimula tayo sa isang basic Spring boot application para sa aming halimbawang server:
Upang magsimula, nag-inject kami ng nako-customize na variable na tinatawag na instance_ID. Nakakatulong ito sa amin na makilala ang maraming pagkakataon na gumagana. Kasunod nito, gumawa kami ng iisang HTTP GET endpoint na nagbabalik ng mensahe at instance ID.
Ang default na instance na may ID 1 ay gagana sa port 8080. Kailangan lang naming magdagdag ng ilang parameter ng program para maglunsad ng pangalawang instance:
Kliente
Tingnan natin ngayon ang code ng kliyente. Dito pumapasok ang Load Balancer, kaya magsimula tayo sa pamamagitan ng pagsasama nito sa ating aplikasyon:
Kasunod nito, bumuo kami ng pagpapatupad ng ServiceInstanceListSupplier. Isa ito sa pinakamahalagang interface sa Load Balancer. Tinutukoy nito kung paano namin mahahanap ang mga naa-access na pagkakataon ng serbisyo.
Mag-hard-code kami ng dalawang magkahiwalay na pagkakataon ng aming halimbawang server sa aming sample na application. Tumatakbo sila sa parehong sistema ngunit gumagamit ng hiwalay na mga port:
Lumikha ng klase ng LoadBalancerConfiguration ngayon:
Iisa lang ang layunin ng klase na ito: lumilikha ito ng isang load-balanced na WebClient builder para sa paggawa ng mga malayuang kahilingan. Gumagamit ang aming anotasyon ng isang kathang-isip na pangalan para sa serbisyo.
Ito ay dahil sa katotohanan na malamang na hindi natin malalaman ang mga tumpak na hostname at port para sa pagpapatakbo ng mga pagkakataon nang mas maaga. Bilang resulta, gumagamit kami ng isang kathang-isip na pangalan bilang isang placeholder, at papalitan ng framework ang aktwal na impormasyon kapag pumili ito ng tumatakbong instance.
Susunod, gumawa tayo ng klase ng Configuration na gagamitin para i-instantiate ang supply ng instance ng serbisyo. Tandaan na ginagamit namin ang parehong alias tulad ng dati:
Magagawa na natin ngayon ang tunay na application ng kliyente. Magpadala tayo ng 10 query sa sample na server gamit ang WebClient bean mula kanina:
Makikita natin mula sa output na nag-load balancing tayo sa pagitan ng dalawang magkahiwalay na pagkakataon:
Load Balancing sa Microservices
Ang arkitektura ng microservice ay ginagamit ng ilang kumpanya, tulad ng Netflix at Amazon, upang bumuo ng mga application ng negosyo bilang isang hanay ng mga serbisyong maluwag na konektado. Ang hyperscale at tuluy-tuloy na paghahatid para sa mga kumplikadong application ay dalawa lamang sa mga dahilan para sa paglipat sa ipinamahagi, maluwag na konektadong arkitektura na ito.
Ang mga koponan ng negosyong ito ay nagpatupad ng mga diskarte sa Agile at DevOps upang makagawa ng mga app nang mas mabilis at may mas mababang rate ng pagkabigo kaysa sa mga tradisyonal na pamamaraan. Gayunpaman, dapat kang magkaroon ng balanse sa pagitan ng pagiging kumplikado ng ipinamahagi na arkitektura at mga hinihingi ng application, mga kinakailangan sa sukat, at mga limitasyon sa oras-sa-market.
Sa napakaraming taon, naging kritikal ang mga application delivery controller (ADC) upang matugunan ang mga kinakailangan sa antas ng serbisyo para sa mga corporate application na naka-host sa lugar o sa cloud. Ang isang kliyente na nakikipag-ugnayan sa isang microservice-based na application ay hindi kailangang malaman ang tungkol sa mga pagkakataon na nagbibigay nito upang mapalago ang kliyente at mga microservice nang hiwalay.
Ito talaga ang decoupling na ibinigay ng isang reverse proxy o isang load balancer. Muli, ang load balancing ay ang solusyon para sa pagtiyak na ang mga microservice ay makakayanan ng demand, seguridad, at availability.
Kapag pinagsama mo ang tradisyunal na North-South load balancing sa pagitan ng client at mga microservice-based na app na may East-West deployment para sa pahalang na scalability, makakakuha ka ng malaking tulong. Ang layunin ay upang mapanatili ang ligtas at regulated na kapaligiran na kinakailangan ng IT nang hindi isinasakripisyo ang liksi ng pag-unlad o Awtomatiko ng DevOps kinakailangan.
Mga Benepisyo
Nagbibigay ang load balancing ng iba't ibang benepisyo sa pamamagitan ng pagpapahusay sa paggamit ng mapagkukunan, paghahatid ng data, at oras ng pagtugon para sa mga website at app na may mataas na trapiko, pati na rin ang mga database na nakakakuha ng maraming query. Tinitiyak ng load balancing na ang mga kahilingan ng user ay matutupad nang mabilis at tama sa mga sitwasyong may mataas na trapiko.
Nai-save nila ang mga user sa paglala ng pagharap sa mga tamad na programa at mapagkukunan. Nakakatulong din ang load balancing na maiwasan ang downtime at pasimplehin ang seguridad, binabawasan ang panganib ng pagkawala ng produktibo at kita para sa iyong kumpanya.
- Ang load balancing ay nagbibigay ng flexibility upang magdagdag at mag-alis ng mga server ayon sa hinihingi ng demand, bilang karagdagan sa pamamahala ng trapiko sa pinakamainam na kahusayan. Dahil ang trapiko ay inililihis sa iba pang mga server sa panahon ng pagpapanatili, posible ring magsagawa ng pagpapanatili ng server nang hindi nakakaabala sa mga user.
- Nagbibigay ang load balancing ng built-in na redundancy sa pamamagitan ng paghahati ng trapiko sa isang set ng mga server. Maaari mong agad na i-divert ang load sa ibang mga server kung mabigo ang isa, na pinapaliit ang epekto sa mga user.
- Kung ang isang application o paggamit ng website ay lumago, ang tumaas na trapiko ay maaaring magpababa sa pagganap nito kung hindi epektibong mapangasiwaan. Sa load balancing, maaari kang magdagdag ng tunay o virtual na server upang matugunan ang pangangailangan nang hindi nakakaabala sa serbisyo. Tinutukoy ng load balancer ang mga bagong server habang sila ay online at walang kahirap-hirap na isinasama ang mga ito sa operasyon. Ang pamamaraang ito ay mas mainam kaysa sa paglipat ng isang website mula sa isang overburdened server patungo sa isang bago, na kadalasang nagsasangkot ng ilang downtime.
Konklusyon
Ang load balancing ay isang kritikal na bahagi ng mga kontemporaryo, fault-tolerant system. Maaari lang kaming bumuo ng mga app na namamahagi ng mga kahilingan sa maraming mga instance ng serbisyo gamit ang iba't ibang mga diskarte sa pag-load. Dapat suportahan ng mga negosyo ang mga kumplikadong IT system upang ligtas na makapagbigay ng mga application.
Ang configuration, deployment, at maintenance ng cross-domain na microservice ay maaaring madaling magkamali, mahal, at matagal. Dapat gumamit ang IT ng automation, visibility, analytics, at orchestration na pinakamahuhusay na kagawian at teknolohiya na tugma sa kanilang maliksi at mga proseso ng DevOps upang gawing mas madali ang pag-setup at pagpapanatili ng mga microservice na ito.
Mag-iwan ng Sagot