การเปิดตัวตัวปรับสมดุล HTTP/TCP HAProxy 2.0

ที่ตีพิมพ์ การเปิดตัวโหลดบาลานเซอร์ HA Proxy 2.0ซึ่งช่วยให้คุณสามารถกระจายการรับส่งข้อมูล HTTP และคำขอ TCP ที่กำหนดเองระหว่างกลุ่มเซิร์ฟเวอร์ โดยคำนึงถึงปัจจัยหลายประการ (เช่น ตรวจสอบความพร้อมใช้งานของเซิร์ฟเวอร์ ประเมินระดับโหลด มีมาตรการตอบโต้ DDoS) และดำเนินการกรองข้อมูลหลัก ( ตัวอย่างเช่น คุณสามารถแยกวิเคราะห์ส่วนหัว HTTP, กรองพารามิเตอร์การสืบค้นที่ไม่ถูกต้องในการส่ง, บล็อกการทดแทน SQL และ XSS, เชื่อมต่อตัวแทนการประมวลผลเนื้อหา) HAProxy ก็ได้ นำมาใช้ เพื่อประสานการทำงานร่วมกันของส่วนประกอบในระบบตามสถาปัตยกรรมไมโครเซอร์วิส รหัสโครงการเขียนด้วยภาษา C และ ให้มา ได้รับอนุญาตภายใต้ GPLv2 โปรเจ็กต์นี้ใช้กับไซต์ขนาดใหญ่หลายแห่ง รวมถึง Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter และ Vimeo

คุณสมบัติการเปิดตัวที่สำคัญ:

  • เปิดตัว API ใหม่ แผนข้อมูลซึ่งช่วยให้คุณจัดการการตั้งค่า HAProxy ได้ทันทีผ่าน REST Web API รวมถึงคุณสามารถเพิ่มและลบแบ็คเอนด์และเซิร์ฟเวอร์แบบไดนามิก สร้าง ACL เปลี่ยนเส้นทางคำขอ เปลี่ยนการเชื่อมโยงตัวจัดการเป็น IP
  • เพิ่มคำสั่ง nbthread ซึ่งช่วยให้คุณสามารถกำหนดค่าจำนวนเธรดที่ใช้ใน HAProxy เพื่อเพิ่มประสิทธิภาพการทำงานบน CPU แบบมัลติคอร์ ตามค่าเริ่มต้น จำนวนเธรดของผู้ปฏิบัติงานจะถูกเลือกโดยขึ้นอยู่กับแกน CPU ที่มีอยู่ในสภาพแวดล้อมปัจจุบัน และในสภาพแวดล้อมคลาวด์ ค่าเริ่มต้นคือหนึ่งเธรด ในการตั้งค่าขีดจำกัดฮาร์ด มีการเพิ่มตัวเลือกแอสเซมบลี MAX_THREADS และ MAX_PROCS ซึ่งจำกัดขีดจำกัดบนจำนวนเธรดและกระบวนการ
  • การใช้คำสั่งการผูกสำหรับตัวจัดการการผูกกับที่อยู่เครือข่ายได้รับการทำให้ง่ายขึ้น เมื่อตั้งค่า ไม่จำเป็นต้องกำหนดพารามิเตอร์กระบวนการอีกต่อไป - ตามค่าเริ่มต้น การเชื่อมต่อจะถูกกระจายระหว่างเธรด ขึ้นอยู่กับจำนวนการเชื่อมต่อที่ใช้งานอยู่
  • การตั้งค่าบันทึกเมื่อทำงานในคอนเทนเนอร์ที่แยกได้ทำให้ง่ายขึ้น - ขณะนี้สามารถส่งบันทึกไปยัง stdout และ stderr รวมถึงตัวอธิบายไฟล์ที่มีอยู่ (เช่น "log fd@1 local0");
  • การสนับสนุน HTX (Native HTTP Representation) ถูกเปิดใช้งานตามค่าเริ่มต้น ช่วยให้สามารถปรับสมดุลเมื่อใช้คุณสมบัติขั้นสูง เช่น HTTP/2 จากต้นทางถึงปลายทาง การลองใหม่อีกครั้งในเลเยอร์ 7 และ gRPC HTX ไม่ได้แทนที่ส่วนหัว แต่ลดการดำเนินการแก้ไขลงโดยการลบและเพิ่มส่วนหัวใหม่ต่อท้ายรายการ ซึ่งช่วยให้คุณสามารถจัดการตัวแปรเพิ่มเติมของโปรโตคอล HTTP โดยรักษาความหมายดั้งเดิมของส่วนหัวและช่วยให้คุณ เพื่อให้ได้ประสิทธิภาพที่สูงขึ้นเมื่อแปล HTTP/2 เป็น HTTP/1.1 และในทางกลับกัน
  • เพิ่มการสนับสนุนอย่างเป็นทางการสำหรับโหมด End-to-End HTTP/2 (การประมวลผลทุกขั้นตอนใน HTTP/2 รวมถึงการเรียกไปยังแบ็กเอนด์ และไม่ใช่แค่การโต้ตอบระหว่างพร็อกซีและไคลเอนต์)
  • มีการนำการสนับสนุนอย่างเต็มที่สำหรับการพร็อกซีแบบสองทิศทางของโปรโตคอล gRPC มาใช้ โดยมีความสามารถในการแยกวิเคราะห์สตรีม gRPC โดยเน้นข้อความแต่ละข้อความ สะท้อนถึงการรับส่งข้อมูล gRPC ในบันทึก และการกรองข้อความโดยใช้ ACL gRPC ช่วยให้คุณสามารถจัดระเบียบงานของไมโครเซอร์วิสในภาษาการเขียนโปรแกรมต่างๆ ที่โต้ตอบกันโดยใช้ Universal API การสื่อสารเครือข่ายใน gRPC ใช้งานบนโปรโตคอล HTTP/2 และอิงตามการใช้บัฟเฟอร์โปรโตคอลสำหรับการจัดลำดับข้อมูล
  • เพิ่มการรองรับสำหรับโหมด "Layer 7 Retries" ซึ่งช่วยให้คุณสามารถส่งคำขอ HTTP ซ้ำๆ ในกรณีที่ซอฟต์แวร์ล้มเหลวซึ่งไม่เกี่ยวข้องกับปัญหาในการสร้างการเชื่อมต่อเครือข่าย (เช่น หากไม่มีการตอบสนองหรือการตอบสนองที่ว่างเปล่าต่อ คำขอโพสต์) หากต้องการปิดใช้งานโหมดนี้ ได้มีการเพิ่มแฟล็ก "disable-l7-retry" ลงในตัวเลือก "http-request" และเพิ่มตัวเลือก "retry-on" เพื่อการปรับแต่งอย่างละเอียดในส่วนค่าเริ่มต้น การฟัง และแบ็กเอนด์ สัญญาณต่อไปนี้มีไว้สำหรับการส่งอีกครั้ง: ข้อผิดพลาดที่ลองใหม่ได้ทั้งหมด, ไม่มี, ความล้มเหลวในการเชื่อมต่อ, การตอบกลับที่ว่างเปล่า, การตอบกลับที่เป็นขยะ, การหมดเวลาการตอบกลับ, 0rtt-ถูกปฏิเสธ รวมถึงการผูกเข้ากับรหัสสถานะการส่งคืน (404 ฯลฯ ) ;
  • มีการนำตัวจัดการกระบวนการใหม่มาใช้ ซึ่งช่วยให้คุณกำหนดค่าการเรียกไฟล์ปฏิบัติการภายนอกด้วยตัวจัดการสำหรับ HAProxy
    ตัวอย่างเช่น Data Plan API (/usr/sbin/dataplaneapi) รวมถึงกลไกการประมวลผลสตรีม Offload ต่างๆ ได้รับการปรับใช้ในรูปแบบของตัวจัดการภายนอกดังกล่าว

  • เพิ่มการเชื่อมโยงสำหรับ .NET Core, Go, Lua และ Python สำหรับการพัฒนาส่วนขยาย SPOE (Stream Processing Offload Engine) และ SPOP (Stream Processing Offload Protocol) ก่อนหน้านี้ การพัฒนาส่วนขยายรองรับเฉพาะในภาษา C;
  • เพิ่มตัวจัดการ spoa-mirror ภายนอก (/usr/sbin/spoa-mirror) สำหรับการร้องขอการมิเรอร์ไปยังเซิร์ฟเวอร์ที่แยกจากกัน (ตัวอย่างเช่น สำหรับการคัดลอกส่วนหนึ่งของการรับส่งข้อมูลการใช้งานจริงสำหรับการทดสอบสภาพแวดล้อมการทดลองภายใต้โหลดจริง)
  • แนะนำ ตัวควบคุมทางเข้า HAProxy Kubernetes เพื่อให้แน่ใจว่ามีการบูรณาการกับแพลตฟอร์ม Kubernetes
  • เพิ่มการสนับสนุนในตัวสำหรับการส่งออกสถิติไปยังระบบการตรวจสอบ โพร;
  • Peers Protocol ที่ใช้ในการแลกเปลี่ยนข้อมูลกับโหนดอื่นๆ ที่ใช้ HAProxy ได้รับการขยายแล้ว รวมถึงการสนับสนุนเพิ่มเติมสำหรับ Heartbeat และการส่งข้อมูลที่เข้ารหัส
  • เพิ่มพารามิเตอร์ "sample" ลงในคำสั่ง "log" แล้ว ซึ่งช่วยให้คุณสามารถดัมพ์คำขอเพียงบางส่วนลงในบันทึก เช่น 1 ใน 10 เพื่อสร้างตัวอย่างเชิงวิเคราะห์
  • เพิ่มโหมดการทำโปรไฟล์อัตโนมัติ (คำสั่ง profiling.tasks ซึ่งสามารถรับค่าอัตโนมัติเปิดและปิด) เปิดใช้งานการสร้างโปรไฟล์อัตโนมัติหากเวลาแฝงเฉลี่ยเกิน 1000 ms หากต้องการดูข้อมูลโปรไฟล์ คำสั่ง "แสดงโปรไฟล์" ได้ถูกเพิ่มลงใน Runtime API หรือสามารถรีเซ็ตสถิติลงในบันทึกได้
  • เพิ่มการรองรับการเข้าถึงเซิร์ฟเวอร์แบ็กเอนด์โดยใช้โปรโตคอล SOCKS4
  • เพิ่มการรองรับแบบ end-to-end สำหรับกลไกในการเปิดการเชื่อมต่อ TCP อย่างรวดเร็ว (TFO - TCP Fast Open, RFC 7413) ซึ่งช่วยให้คุณลดจำนวนขั้นตอนการตั้งค่าการเชื่อมต่อโดยการรวมขั้นตอนแรกเป็นคำขอเดียวและขั้นตอนที่สองของ กระบวนการเจรจาการเชื่อมต่อ 3 ขั้นตอนแบบคลาสสิกและทำให้สามารถส่งข้อมูลในระยะเริ่มต้นของการสร้างการเชื่อมต่อ
  • เพิ่มการกระทำใหม่:
    • "http-request replacement-uri" เพื่อแทนที่ URL โดยใช้นิพจน์ทั่วไป
    • “tcp-request content do-resolve” และ “http-request do-resolve” สำหรับการแก้ไขชื่อโฮสต์
    • “tcp-request content set-dst” และ “tcp-request content set-dst-port” เพื่อทดแทนที่อยู่ IP และพอร์ตเป้าหมาย
  • เพิ่มโมดูลการแปลงใหม่:
    • aes_gcm_dev สำหรับการถอดรหัสสตรีมโดยใช้อัลกอริธึม AES128-GCM, AES192-GCM และ AES256-GCM
    • protobuf เพื่อแยกฟิลด์จากข้อความ Protocol Buffers;
    • ungrpc เพื่อแยกฟิลด์ออกจากข้อความ gRPC

    ที่มา: opennet.ru

เพิ่มความคิดเห็น