HTTP/TCP balancer HAProxy 2.0 విడుదల

ప్రచురించబడింది లోడ్ బాలన్సర్ విడుదల HA ప్రాక్సీ 2.0, ఇది అనేక అంశాలను పరిగణనలోకి తీసుకుని, సర్వర్‌ల సమూహం మధ్య HTTP ట్రాఫిక్ మరియు ఏకపక్ష TCP అభ్యర్థనలను పంపిణీ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది (ఉదాహరణకు, ఇది సర్వర్‌ల లభ్యతను తనిఖీ చేస్తుంది, లోడ్ స్థాయిని అంచనా వేస్తుంది, DDoS కౌంటర్‌మెజర్‌లను కలిగి ఉంటుంది) మరియు ప్రాథమిక డేటా ఫిల్టరింగ్‌ను నిర్వహిస్తుంది ( ఉదాహరణకు, మీరు HTTP హెడర్‌లను అన్వయించవచ్చు, ట్రాన్స్‌మిషన్ తప్పు ప్రశ్న పారామితులను ఫిల్టర్ చేయవచ్చు, SQL మరియు XSS ప్రత్యామ్నాయాన్ని నిరోధించవచ్చు, కంటెంట్ ప్రాసెసింగ్ ఏజెంట్‌లను కనెక్ట్ చేయవచ్చు). HAProxy కూడా చేయవచ్చు దరఖాస్తు మైక్రోసర్వీసెస్ ఆర్కిటెక్చర్ ఆధారంగా సిస్టమ్‌లలోని భాగాల పరస్పర చర్యను సమన్వయం చేయడానికి. ప్రాజెక్ట్ కోడ్ C మరియు లో వ్రాయబడింది సరఫరా GPLv2 కింద లైసెన్స్ పొందింది. Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter మరియు Vimeoతో సహా అనేక పెద్ద సైట్‌లలో ప్రాజెక్ట్ ఉపయోగించబడుతుంది.

కీలక విడుదల లక్షణాలు:

  • కొత్త API ప్రవేశపెట్టబడింది డేటా ప్లాన్, ఇది REST వెబ్ API ద్వారా ఫ్లైలో HAProxy సెట్టింగ్‌లను నిర్వహించడానికి మిమ్మల్ని అనుమతిస్తుంది. సహా, మీరు డైనమిక్‌గా బ్యాకెండ్‌లు మరియు సర్వర్‌లను జోడించవచ్చు మరియు తీసివేయవచ్చు, ACLలను సృష్టించవచ్చు, అభ్యర్థన రూటింగ్‌ను మార్చవచ్చు, హ్యాండ్లర్ బైండింగ్‌లను IPకి మార్చవచ్చు;
  • బహుళ-కోర్ CPUలలో పనితీరును ఆప్టిమైజ్ చేయడానికి HAProxyలో ఉపయోగించిన థ్రెడ్‌ల సంఖ్యను కాన్ఫిగర్ చేయడానికి మిమ్మల్ని అనుమతించే nbthread డైరెక్టివ్ జోడించబడింది. డిఫాల్ట్‌గా, ప్రస్తుత వాతావరణంలో అందుబాటులో ఉన్న CPU కోర్‌లను బట్టి వర్కర్ థ్రెడ్‌ల సంఖ్య ఎంపిక చేయబడుతుంది మరియు క్లౌడ్ ఎన్విరాన్‌మెంట్‌లలో డిఫాల్ట్ ఒక థ్రెడ్. కఠినమైన పరిమితులను సెట్ చేయడానికి, అసెంబ్లీ ఎంపికలు MAX_THREADS మరియు MAX_PROCS జోడించబడ్డాయి, థ్రెడ్‌లు మరియు ప్రక్రియల సంఖ్యపై గరిష్ట పరిమితిని పరిమితం చేస్తుంది;
  • నెట్‌వర్క్ చిరునామాలకు హ్యాండ్లర్‌లను బైండింగ్ చేయడానికి బైండ్ డైరెక్టివ్ యొక్క ఉపయోగం సరళీకృతం చేయబడింది. సెటప్ చేసినప్పుడు, ప్రాసెస్ పారామితులను నిర్వచించడం ఇకపై అవసరం లేదు - డిఫాల్ట్‌గా, క్రియాశీల కనెక్షన్‌ల సంఖ్యను బట్టి కనెక్షన్‌లు థ్రెడ్‌ల మధ్య పంపిణీ చేయబడతాయి.
  • వివిక్త కంటైనర్‌లలో నడుస్తున్నప్పుడు లాగ్‌లను సెటప్ చేయడం సరళీకృతం చేయబడింది - లాగ్ ఇప్పుడు stdout మరియు stderrకి అలాగే ఇప్పటికే ఉన్న ఏదైనా ఫైల్ డిస్క్రిప్టర్‌కు పంపబడుతుంది (ఉదాహరణకు, “log fd@1 local0”);
  • HTX (స్థానిక HTTP ప్రాతినిధ్యం) కోసం మద్దతు డిఫాల్ట్‌గా ప్రారంభించబడింది, ఇది ఎండ్-టు-ఎండ్ HTTP/2, లేయర్ 7 రీట్రీలు మరియు gRPC వంటి అధునాతన ఫీచర్‌లను ఉపయోగిస్తున్నప్పుడు బ్యాలెన్స్ చేయడానికి అనుమతిస్తుంది. HTX హెడర్‌లను స్థానంలో భర్తీ చేయదు, కానీ జాబితా చివరలో కొత్త హెడర్‌ను తీసివేయడం మరియు జోడించడం కోసం సవరణ ఆపరేషన్‌ను తగ్గిస్తుంది, ఇది HTTP ప్రోటోకాల్ యొక్క ఏవైనా పొడిగించిన వేరియంట్‌లను మార్చటానికి మిమ్మల్ని అనుమతిస్తుంది, హెడర్‌ల యొక్క అసలైన సెమాంటిక్స్‌ను భద్రపరుస్తుంది మరియు మిమ్మల్ని అనుమతిస్తుంది. HTTP/2ని HTTP/1.1కి మరియు వైస్ వెర్సాకి అనువదించేటప్పుడు అధిక పనితీరును సాధించడానికి;
  • ఎండ్-టు-ఎండ్ HTTP/2 మోడ్‌కు అధికారిక మద్దతు జోడించబడింది (HTTP/2లోని అన్ని దశల ప్రాసెసింగ్, బ్యాకెండ్‌కి కాల్‌లతో సహా, ప్రాక్సీ మరియు క్లయింట్ మధ్య పరస్పర చర్య మాత్రమే కాదు);
  • gRPC స్ట్రీమ్‌లను అన్వయించడం, వ్యక్తిగత సందేశాలను హైలైట్ చేయడం, లాగ్‌లో gRPC ట్రాఫిక్‌ను ప్రతిబింబించడం మరియు ACLలను ఉపయోగించి సందేశాలను ఫిల్టర్ చేయడం వంటి వాటితో gRPC ప్రోటోకాల్ యొక్క ద్వి దిశాత్మక ప్రాక్సీయింగ్‌కు పూర్తి మద్దతు అమలు చేయబడింది. సార్వత్రిక APIని ఉపయోగించి ఒకదానితో ఒకటి సంభాషించే వివిధ ప్రోగ్రామింగ్ భాషలలో మైక్రోసర్వీస్‌ల పనిని నిర్వహించడానికి gRPC మిమ్మల్ని అనుమతిస్తుంది. GRPCలో నెట్‌వర్క్ కమ్యూనికేషన్ అనేది HTTP/2 ప్రోటోకాల్ పైన అమలు చేయబడుతుంది మరియు డేటా సీరియలైజేషన్ కోసం ప్రోటోకాల్ బఫర్‌ల వినియోగంపై ఆధారపడి ఉంటుంది.
  • నెట్‌వర్క్ కనెక్షన్‌ని స్థాపించడంలో సమస్యలతో సంబంధం లేని సాఫ్ట్‌వేర్ వైఫల్యాల సందర్భంలో పునరావృత HTTP అభ్యర్థనలను పంపడానికి మిమ్మల్ని అనుమతించే “లేయర్ 7 రీట్రీస్” మోడ్‌కు మద్దతు జోడించబడింది (ఉదాహరణకు, ప్రతిస్పందన లేకుంటే లేదా ఖాళీ ప్రతిస్పందన లేనట్లయితే పోస్ట్ అభ్యర్థన). మోడ్‌ను నిలిపివేయడానికి, “http-request” ఎంపికకు “disable-l7-retry” ఫ్లాగ్ జోడించబడింది మరియు డిఫాల్ట్‌లు, వినడం మరియు బ్యాకెండ్ విభాగాలలో ఫైన్-ట్యూనింగ్ కోసం “retry-on” ఎంపిక జోడించబడింది. తిరిగి పంపడానికి క్రింది సంకేతాలు అందుబాటులో ఉన్నాయి: అన్నీ తిరిగి ప్రయత్నించదగినవి-ఎర్రర్స్, ఏవీ లేవు, కాన్-ఫెయిల్యూర్, ఖాళీ-ప్రతిస్పందన, జంక్-రెస్పాన్స్, ప్రతిస్పందన-సమయం, 0rtt-తిరస్కరించబడింది, అలాగే స్థితి కోడ్‌లను తిరిగి ఇవ్వడానికి బైండింగ్ (404, మొదలైనవి) ;
  • కొత్త ప్రాసెస్ మేనేజర్ అమలు చేయబడింది, ఇది HAProxy కోసం హ్యాండ్లర్‌లతో బాహ్య ఎక్జిక్యూటబుల్ ఫైల్‌లను కాల్ చేయడాన్ని కాన్ఫిగర్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది.
    ఉదాహరణకు, డేటా ప్లాన్ API (/usr/sbin/dataplaneapi), అలాగే వివిధ ఆఫ్‌లోడ్ స్ట్రీమ్ ప్రాసెసింగ్ ఇంజిన్‌లు అటువంటి బాహ్య హ్యాండ్లర్ రూపంలో అమలు చేయబడతాయి;

  • SPOE (స్ట్రీమ్ ప్రాసెసింగ్ ఆఫ్‌లోడ్ ఇంజిన్) మరియు SPOP (స్ట్రీమ్ ప్రాసెసింగ్ ఆఫ్‌లోడ్ ప్రోటోకాల్) పొడిగింపులను అభివృద్ధి చేయడానికి .NET కోర్, గో, లువా మరియు పైథాన్‌లకు బైండింగ్‌లు జోడించబడ్డాయి. గతంలో, పొడిగింపు అభివృద్ధికి C లో మాత్రమే మద్దతు ఉంది;
  • ప్రత్యేక సర్వర్‌కు అభ్యర్థనలను ప్రతిబింబించడానికి (ఉదాహరణకు, నిజమైన లోడ్‌లో ప్రయోగాత్మక వాతావరణాన్ని పరీక్షించడం కోసం ఉత్పత్తి ట్రాఫిక్‌లో కొంత భాగాన్ని కాపీ చేయడం కోసం) బాహ్య స్పో-మిర్రర్ హ్యాండ్లర్ (/usr/sbin/spoa-mirror) జోడించబడింది;
  • సమర్పించిన వారు HAProxy Kubernetes ప్రవేశ కంట్రోలర్ కుబెర్నెట్స్ ప్లాట్‌ఫారమ్‌తో ఏకీకరణను నిర్ధారించడానికి;
  • పర్యవేక్షణ వ్యవస్థకు గణాంకాలను ఎగుమతి చేయడానికి అంతర్నిర్మిత మద్దతు జోడించబడింది ప్రోమేతియస్;
  • HAProxy నడుస్తున్న ఇతర నోడ్‌లతో సమాచారాన్ని మార్పిడి చేయడానికి ఉపయోగించే పీర్స్ ప్రోటోకాల్ పొడిగించబడింది. హార్ట్‌బీట్ మరియు ఎన్‌క్రిప్టెడ్ డేటా ట్రాన్స్‌మిషన్ కోసం అదనపు మద్దతుతో సహా;
  • "నమూనా" పరామితి "లాగ్" డైరెక్టివ్‌కు జోడించబడింది, ఇది లాగ్‌లోకి అభ్యర్థనలలో కొంత భాగాన్ని మాత్రమే డంప్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది, ఉదాహరణకు 1లో 10, విశ్లేషణాత్మక నమూనాను రూపొందించడానికి;
  • ఆటోమేటిక్ ప్రొఫైలింగ్ మోడ్ జోడించబడింది (profiling.tasks డైరెక్టివ్, ఇది విలువలను స్వయంచాలకంగా, ఆన్ మరియు ఆఫ్ చేయవచ్చు). సగటు జాప్యం 1000 ms మించి ఉంటే ఆటోమేటిక్ ప్రొఫైలింగ్ ప్రారంభించబడుతుంది. ప్రొఫైలింగ్ డేటాను వీక్షించడానికి, "షో ప్రొఫైలింగ్" కమాండ్ రన్‌టైమ్ APIకి జోడించబడింది లేదా లాగ్‌కు గణాంకాలను రీసెట్ చేయడం సాధ్యమవుతుంది;
  • SOCKS4 ప్రోటోకాల్ ఉపయోగించి బ్యాకెండ్ సర్వర్‌లను యాక్సెస్ చేయడానికి మద్దతు జోడించబడింది;
  • TCP కనెక్షన్‌లను త్వరగా తెరవడానికి (TFO - TCP ఫాస్ట్ ఓపెన్, RFC 7413) మెకానిజం కోసం ఎండ్-టు-ఎండ్ మద్దతు జోడించబడింది, ఇది మొదటిదాన్ని ఒక అభ్యర్థనగా మరియు రెండవ దశగా కలపడం ద్వారా కనెక్షన్ సెటప్ దశల సంఖ్యను తగ్గించడానికి మిమ్మల్ని అనుమతిస్తుంది. క్లాసిక్ 3-దశల కనెక్షన్ చర్చల ప్రక్రియ మరియు కనెక్షన్‌ని స్థాపించే ప్రారంభ దశలో డేటాను పంపడం సాధ్యం చేస్తుంది;
  • కొత్త చర్యలు జోడించబడ్డాయి:
    • సాధారణ వ్యక్తీకరణను ఉపయోగించి URLని భర్తీ చేయడానికి "http-request replace-uri";
    • హోస్ట్ పేరును పరిష్కరించడం కోసం “tcp-request content do-resolve” మరియు “http-request do-resolve”;
    • లక్ష్య IP చిరునామా మరియు పోర్ట్‌ను ప్రత్యామ్నాయం చేయడానికి “tcp-request content set-dst” మరియు “tcp-request content set-dst-port”.
  • కొత్త మార్పిడి మాడ్యూల్స్ జోడించబడ్డాయి:
    • AES128-GCM, AES192-GCM మరియు AES256-GCM అల్గారిథమ్‌లను ఉపయోగించి స్ట్రీమ్‌లను డీక్రిప్ట్ చేయడానికి aes_gcm_dev;
    • ప్రోటోకాల్ బఫర్‌ల సందేశాల నుండి ఫీల్డ్‌లను సంగ్రహించడానికి ప్రోటోబఫ్;
    • gRPC సందేశాల నుండి ఫీల్డ్‌లను సంగ్రహించడానికి ungrpc.

    మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి