Gobetween - Load Balancer ที่ทันสมัยและเรียบง่ายและย้อนกลับ Proxy สำหรับยุคคลาวด์☁
สถานะปัจจุบัน : โหมดการบำรุงรักษายอมรับ PRS ปัจจุบันมีการใช้งานในสภาพแวดล้อมการผลิตที่มีการโหลดสูงหลายแห่ง
คุณสมบัติ
Fast L4 Load Balancing
- TCP - ด้วยการสนับสนุนโปรโตคอลพร็อกซีเสริม
- TLS - TLS Termination + Acme & TLS Proxy
- UDP - ด้วยเซสชันเสมือนจริงและโหมดโปร่งใส
การกำหนดค่าที่ชัดเจนและยืดหยุ่นด้วย TOML หรือ JSON
- ไฟล์ - อ่านการกำหนดค่าจากไฟล์
- URL - URL แบบสอบถามโดย HTTP และรับการกำหนดค่าจากร่างกายตอบสนอง
- กงสุล - คีย์คีย์คีย์ - ค่าจัดเก็บ API สำหรับการกำหนดค่า
API การจัดการส่วนที่เหลือ
- ข้อมูลระบบ - ข้อมูลเซิร์ฟเวอร์ทั่วไป
- การกำหนดค่า - ถ่ายโอนการกำหนดค่าปัจจุบัน
- เซิร์ฟเวอร์ - รายการสร้างและลบ
- Stats & Metrics - สำหรับเซิร์ฟเวอร์และแบ็กเอนด์รวมถึง RX/TX, สถานะ, การเชื่อมต่อที่ใช้งานอยู่ & ฯลฯ
การค้นพบ
- คงที่ - รายการแบ็กเอนด์ฮาร์ดโค้ดในไฟล์กำหนดค่า
- Docker - Query Backends จาก Docker / Swarm API ที่กรองโดยฉลาก
- EXEC - ดำเนินการโปรแกรมโดยพลการและรับแบ็กเอนด์จาก stdout
- JSON - URL HTTP แบบสอบถามโดยพลการและเลือกแบ็กเอนด์จากการตอบสนอง JSON (ของโครงสร้างใด ๆ )
- Plaintext - Query โดยพลการและแยกวิเคราะห์แบ็กเอนด์จากข้อความตอบกลับด้วย regexp ที่กำหนดเอง
- SRV - Query DNS Server และรับแบ็กเอนด์จาก SRV Records
- กงสุล - Query Consul Services API สำหรับแบ็กเอนด์
- LXD - แบ็กเอนด์แบบสอบถามจาก LXD
HealthChecks
- Ping - TCP Ping Healthcheck ง่ายๆ
- EXEC - ดำเนินการโปรแกรมโดยพลการผ่านโฮสต์และพอร์ตเป็นตัวเลือกและอ่านสถานะ HealthCheck จาก stdout
- โพรบ - ส่งไบต์เฉพาะไปยังแบ็กเอนด์ (UDP, TCP หรือ TLS) และคาดว่าจะมีคำตอบที่ถูกต้อง (ไบต์หรือ regexp)
กลยุทธ์การปรับสมดุล (ด้วยการสนับสนุน SNI)
- น้ำหนัก - เลือกแบ็กเอนด์จากน้ำหนักที่สัมพันธ์กับสระว่ายน้ำของแบ็กเอนด์
- Roundrobin - แบ็กเอนด์ที่ได้รับเลือกอย่างง่ายจากสระว่ายน้ำตามลำดับวงกลม
- iPhash - เส้นทางไคลเอน
- iPhash1 - เหมือนกับ iPhash แต่การกำจัดแบ็กเอนด์ที่สอดคล้องกัน (ลูกค้ายังคงเชื่อมต่อกับแบ็กเอนด์เดียวกันแม้ว่าจะมีแบ็กเอนด์อื่น ๆ ลง)
- EYSCONN - เลือกแบ็กเอนด์ที่มีการเชื่อมต่อที่ใช้งานน้อยที่สุด
- Bandwidth - แบ็กเอนด์ที่มีแบนด์วิดท์น้อยที่สุด
รวมเข้ากับ Docker และระบบที่กำหนดเองใด ๆ อย่างราบรื่น (ขอบคุณ Exec Discovery และ HealthChecks)
การกระจายไบนารีเดี่ยว
สถาปัตยกรรม
การใช้งาน
- ติดตั้งด้วย SNAP: https://snapcraft.io/gobetween
- ตัวเลือกการติดตั้งอื่น ๆ
- อ่านข้อมูลอ้างอิงการกำหนดค่า
- ดำเนินการ
gobetween --help
สำหรับความช่วยเหลือเต็มรูปแบบสำหรับคำสั่งและตัวเลือกที่มีอยู่ทั้งหมด
การแฮ็ก
- ติดตั้งไป 1.14+ https://golang.org/
-
$ git clone [email protected]:yyyar/gobetween.git
-
$ make
-
$ make run
ดีบักและทดสอบ
เรียกใช้เว็บเซิร์ฟเวอร์หลายรายการสำหรับการทดสอบในเทอร์มินัลที่แตกต่างกัน:
-
$ python -m SimpleHTTPServer 8000
-
$ python -m SimpleHTTPServer 8001
แทนที่จะเป็นโมดูล HTTP ภายในของ Python คุณสามารถใช้เว็บเซิร์ฟเวอร์ไบนารี (ไปตาม) ได้เช่น: https://github.com/udhos/Gowebhello
Gowebhello สนับสนุน SSL sertificates เช่นกัน (โหมด HTTPS ) ในกรณีที่คุณต้องการทำการสาธิตอย่างรวดเร็วของความสามารถ TLS+SNI ของ Gobetween
ใส่ localhost:8000
และ localhost:8001
ถึง static_list
ของการค้นพบแบบคงที่ในไฟล์ config จากนั้นลอง:
เปิดใช้งานปัญหา Profiler และ Debug ที่คุณพบ
[profiler]
enabled = true # false | true
bind = ":6060" # "host:port"
ผลงาน
เร็ว! ดูการทดสอบประสิทธิภาพ
ชื่อ
มันคือการเล่นด้วยคำพูด: gobetween ("ไประหว่าง")
นอกจากนี้ยังเขียนไว้ใน GO และเป็นพร็อกซีดังนั้นจึงเป็นสิ่งที่อยู่ระหว่าง 2 ฝ่าย?
ใบอนุญาต
MIT ดูไฟล์ใบอนุญาตสำหรับรายละเอียดเพิ่มเติม
ผู้เขียนและผู้ดูแล
- Yaroslav Pogrebnyak
- Nick Doikov
- ievgen ponomarenko
- Illarion Kovalchuk
ผู้มีส่วนร่วมทั้งหมด
ชุมชน
- เข้าร่วมกลุ่มโทรเลขที่นี่
โลโก้
โลโก้โดย Max Demchenko