การสั่งซื้อ: 1. nginx 2. วานิช 3. haproxy 4. เว็บเซิร์ฟเวอร์?


50

ฉันเคยเห็นผู้คนแนะนำให้รวมสิ่งเหล่านี้ทั้งหมดเข้าด้วยกัน แต่ดูเหมือนว่าพวกเขาจะมีคุณสมบัติที่ทับซ้อนกันมากมายดังนั้นฉันจึงต้องการที่จะขุดลึกลงไปว่าทำไมคุณถึงต้องการผ่าน 3 โปรแกรมที่แตกต่างกัน

Nginx:

  • ssl: ใช่
  • บีบอัด: ใช่
  • แคช: ใช่
  • แบ็กเอนด์พูล: ใช่

เคลือบเงา:

  • ssl: ไม่ (stunnel)
  • บีบอัด:
  • แคช: ใช่ (คุณสมบัติหลัก)
  • แบ็กเอนด์พูล: ใช่

haproxy:

  • ssl: ไม่ (stunnel)
  • บีบอัด:
  • แคช: ไม่
  • พูลแบ็กเอนด์: ใช่ (คุณสมบัติหลัก)

ความตั้งใจที่จะผูกมัดสิ่งเหล่านี้ต่อหน้าเว็บเซิร์ฟเวอร์หลักของคุณเพียงเพื่อให้ได้ประโยชน์จากคุณสมบัติหลักของพวกเขาหรือไม่?

ดูเหมือนว่าค่อนข้างบอบบางที่มี daemons จำนวนมากร่วมกันทำสิ่งที่คล้ายกัน

การปรับใช้และการกำหนดลักษณะการสั่งซื้อของคุณคืออะไรและเพราะอะไร


1
ตอนนี้วานิชมีการรองรับ SSL: ดูblog.exceliance.fr/2012/09/10/…
MiniQuark

4
คุณจะพูดว่า HAProxy?
Luis Lobo Borobia

Nginx ดูเหมือนจะมีทุกอย่างดังนั้นฉันจะบอกว่าใช้ nginx
Seun Osewa

คำตอบ:


60

ใส่เพียง ..

HaProxyเป็น loadbalancer opensource ที่ดีที่สุดในตลาด
วานิชเป็นตัวเปิดไฟล์คงที่ที่ดีที่สุดในตลาด
Nginxเป็นเว็บเซิร์ฟเวอร์ opensource ที่ดีที่สุดในตลาด

(แน่นอนว่านี่เป็นความเห็นของฉันและชนชาติอื่น ๆ อีกมากมาย)

แต่โดยทั่วไปแล้วแบบสอบถามทั้งหมดไม่ได้ผ่านทั้งกอง

ทุกอย่างต้องผ่าน haproxy และ nginx / multiple nginx
ความแตกต่างเพียงอย่างเดียวคือคุณ "โบลต์" บนวานิชสำหรับคำขอคงที่

  • การร้องขอใด ๆ ที่มีการโหลดบาลานซ์สำหรับความซ้ำซ้อนและปริมาณงาน (ดีนั่นคือความซ้ำซ้อนที่ปรับขนาดได้)
  • คำขอใด ๆ สำหรับไฟล์สแตติกคือการกดปุ่มวานิชแคช (ดีเร็วนั่น)
  • คำขอแบบไดนามิกใด ๆ ตรงไปที่แบ็กเอนด์ (ดีมาก, วานิชไม่ได้ใช้)

โดยรวมแล้วรุ่นนี้เหมาะกับสถาปัตยกรรมที่ปรับขนาดได้และเติบโต (ถอด haproxy ออกหากคุณไม่มีเซิร์ฟเวอร์หลายเครื่อง)

หวังว่านี่จะช่วยได้: D

หมายเหตุ:ฉันจะแนะนำปอนด์สำหรับการสืบค้น SSL ด้วยเช่นกัน: D
คุณสามารถมีเซิร์ฟเวอร์เพื่อถอดรหัสการร้องขอ SSL และส่งคำขอมาตรฐานไปยังสแต็กแบ็คเอนด์: D (ทำให้สแต็กทั้งหมดทำงานได้เร็วและง่ายขึ้น)


1
น่าสนใจมากโดยเฉพาะส่วนเกี่ยวกับเซิร์ฟเวอร์ถอดรหัส +1
Gerry

คำตอบที่ยอดเยี่ยม ฉันสงสัยว่าอะไรอยู่ข้างหน้าทุกอย่าง? มันเป็น HAProxy หรือ Nginx?
John

2
@John: [ลูกค้า -> HAProxy -> วานิช -> Nginx -> เนื้อหาคงที่] หรือ [ลูกค้า -> HAProxy -> Nginx (ไม่บังคับ) -> แอปพลิเคชันเซิร์ฟเวอร์ (เนื้อหาแบบไดนามิก)]
MiniQuark

2
ทำไมคุณแคชแบบคงที่และแสดงผลแบบไดนามิก? Nginx เร็วเกินไปสำหรับการให้บริการไฟล์คงที่ ฉันชอบที่จะใช้สแต็กเช่น [ HAProxy-> Nginx] สำหรับสแตติกและ [ HAProxy-> Nginx-> Varnish->> Apacheเพื่อใช้แคชกับไดนามิก การยกเลิก SSL ที่ตัวโหลดบาลานซ์ตามที่คุณระบุด้วยโหนดการยกเลิกเฉพาะ
Steve Buzonas

33

คำนำ

อัปเดตในปี 2559 สิ่งต่าง ๆ กำลังพัฒนาเซิร์ฟเวอร์ทั้งหมดเริ่มดีขึ้นพวกเขาทุกคนรองรับ SSL และเว็บน่าทึ่งกว่าที่เคย

เว้นแต่จะมีการกล่าวต่อไปนี้จะถูกกำหนดเป้าหมายไปยังมืออาชีพในธุรกิจและเริ่มต้นธุรกิจรองรับผู้ใช้หลายพันถึงล้านคน

เครื่องมือและสถาปัตยกรรมเหล่านี้ต้องการผู้ใช้ / ฮาร์ดแวร์ / เงินจำนวนมาก คุณสามารถลองทำสิ่งนี้ได้ที่ห้องแล็บที่บ้านหรือเรียกใช้บล็อก แต่มันก็ไม่สมเหตุสมผล

ตามกฎทั่วไปจำไว้ว่าคุณต้องการที่จะให้มันง่าย มิดเดิ้ลแวร์ทุกตัวที่ต่อท้ายเป็นอีกหนึ่งชิ้นส่วนที่สำคัญของมิดเดิลแวร์ที่ต้องดูแล ความสมบูรณ์แบบไม่สามารถทำได้เมื่อไม่มีสิ่งใดที่จะเพิ่ม แต่เมื่อไม่มีสิ่งใดที่จะลบ

การปรับใช้ทั่วไปและน่าสนใจบางอย่าง

HAProxy (ปรับสมดุล) + nginx (แอปพลิเคชัน php + การแคช)

เว็บเซิร์ฟเวอร์กำลังทำงาน nginx php เมื่อ nginx มีอยู่แล้วก็อาจจัดการกับแคชและการเปลี่ยนเส้นทาง

HAProxy ---> nginx-php
A       ---> nginx-php
P       ---> nginx-php
r       ---> nginx-php
o       ---> nginx-php
x       ---> nginx-php
y       ---> nginx-php

HAProxy (ปรับสมดุล) + วานิช (แคช) + Tomcat (แอปพลิเคชัน Java)

HAProxy สามารถเปลี่ยนเส้นทางไปยัง Varnish ตามคำขอ URI (* .jpg * .css * .js)

HAProxy ---> tomcat
A       ---> tomcat
        ---> tomcat
P       ---> tomcat <----+
r       ---> tomcat <---+|
o                       ||
x       ---> varnish <--+|
y       ---> varnish <---+

HAProxy (ปรับสมดุล) + nginx (SSL ไปยังโฮสต์และแคช) + เว็บเซิร์ฟเวอร์ (แอปพลิเคชัน)

เว็บเซิร์ฟเวอร์ไม่ได้พูด SSL แม้ว่าทุกคนจะต้องพูด SSL ( โดยเฉพาะการเชื่อมโยง HAProxy-WebServer นี้พร้อมข้อมูลผู้ใช้ส่วนตัวที่กำลังจะผ่าน EC2 ) การเพิ่ม local nginx อนุญาตให้นำ SSL ขึ้นไปยังโฮสต์ เมื่อ nginx อยู่ที่นั่นแล้วก็อาจทำการแคชและการเขียน URL อีกครั้ง

หมายเหตุ : การเปลี่ยนเส้นทางพอร์ต 443: 8080 กำลังเกิดขึ้น แต่ไม่ได้เป็นส่วนหนึ่งของคุณสมบัติ ไม่มีจุดในการทำการเปลี่ยนเส้นทางพอร์ต ตัวโหลดบาลานซ์สามารถพูดโดยตรงกับเว็บเซิร์ฟเวอร์: 8080

          (nginx + webserver on same host)
HAProxy ---> nginx:443 -> webserver:8080
A       ---> nginx:443 -> webserver:8080
P       ---> nginx:443 -> webserver:8080
r       ---> nginx:443 -> webserver:8080
o       ---> nginx:443 -> webserver:8080
x       ---> nginx:443 -> webserver:8080
y       ---> nginx:443 -> webserver:8080

มิดเดิ้ล

HAProxy: โหลดบาลานเซอร์

คุณสมบัติหลัก :

  • โหลดบาลานซ์ (TCP, HTTP, HTTPS)
  • อัลกอริธึมหลายอย่าง (round robin, source ip, header)
  • การคงอยู่ของเซสชัน
  • การยกเลิก SSL

ทางเลือกที่คล้ายกัน : nginx (เว็บเซิร์ฟเวอร์อเนกประสงค์สามารถกำหนดเป็น load balancer)
ทางเลือกที่แตกต่าง : Cloud (Amazon ELB, Google load balancer), ฮาร์ดแวร์ (F5, Fortinet, citrix netscaler), อื่น ๆ & ทั่วโลก (DNS, anycast, CloudFlare)

HAProxy ทำอะไรและเมื่อไหร่ที่คุณต้องใช้มัน?
เมื่อใดก็ตามที่คุณต้องการสมดุลภาระ HAProxy เป็นทางแก้ปัญหา

ยกเว้นเมื่อคุณต้องการราคาถูกมากหรือเร็ว & สกปรกหรือคุณไม่มีทักษะที่มีอยู่คุณอาจใช้ ELB: D

ยกเว้นเมื่อคุณอยู่ในธนาคาร / รัฐบาล / ที่คล้ายกันที่ต้องการใช้ดาต้าเซ็นเตอร์ของคุณเองด้วยข้อกำหนดที่เข้มงวด (โครงสร้างพื้นฐานเฉพาะ, failover ที่เชื่อถือได้, ไฟร์วอลล์ 2 ชั้น, การตรวจสอบข้อมูล, SLA จ่าย x% ต่อนาทีของการหยุดทำงานทั้งหมด) คุณอาจวาง 2 F5 ไว้ด้านบนสุดของชั้นวางที่มีเซิร์ฟเวอร์แอปพลิเคชัน 30 เครื่องของคุณ

ยกเว้นเมื่อคุณต้องการผ่าน 100k HTTP (S) [และหลายไซต์] คุณต้องมีHAProxy ทวีคูณด้วยเลเยอร์ของ [โลก] โหลดบาลานซ์ที่อยู่ตรงหน้า (cloudflare, DNS, anycast) ในทางทฤษฎีบาลานเซอร์ระดับโลกสามารถพูดคุยกับเว็บเซิร์ฟเวอร์ได้โดยตรงเพื่อให้สามารถแฮ็ป HAProxy ได้ อย่างไรก็ตามโดยปกติคุณควรเก็บ HAProxy เป็นจุดเข้าสู่ศูนย์ข้อมูลของคุณและปรับตัวเลือกขั้นสูงเพื่อสร้างความสมดุลให้กับโฮสต์อย่างเป็นธรรมและลดความแปรปรวน

ความคิดเห็นส่วนตัว : โครงการโอเพนซอร์ซขนาดเล็กที่บรรจุอยู่ทั้งหมดทุ่มเทให้กับวัตถุประสงค์ของ ONE TRUE ท่ามกลางการกำหนดค่าที่ง่ายที่สุด (ไฟล์เดียว) ซอฟต์แวร์โอเพ่นซอร์สที่มีประโยชน์และน่าเชื่อถือที่สุดที่ฉันเคยเจอในชีวิตของฉัน

Nginx: Apache ที่ไม่ดูด

คุณสมบัติหลัก :

  • WebServer HTTP หรือ HTTPS
  • เรียกใช้แอปพลิเคชั่นใน CGI / PHP / อื่น ๆ
  • การเปลี่ยนเส้นทาง URL / เขียนใหม่
  • การควบคุมการเข้าถึง
  • การจัดการส่วนหัว HTTP
  • เก็บเอาไว้
  • Reverse Proxy

ทางเลือกที่คล้ายกัน : Apache, Lighttpd, Tomcat, Gunicorn ...

Apache เป็นเว็บเซิร์ฟเวอร์แบบพฤตินัยหรือที่รู้จักกันว่าเป็นคลัสเตอร์ขนาดใหญ่ของโมดูลจำนวนมากและหลายร้อยบรรทัดhttpd.confบนสถาปัตยกรรมการประมวลผลคำขอที่ไม่สมบูรณ์ nginx ทำซ้ำทั้งหมดด้วยโมดูลที่น้อยกว่า (เล็กน้อย) การกำหนดค่าที่ง่ายขึ้นและสถาปัตยกรรมแกนที่ดีกว่า

nginx ทำอะไรและเมื่อไหร่ที่คุณจะต้องใช้มัน?
เว็บเซิร์ฟเวอร์มีวัตถุประสงค์เพื่อเรียกใช้แอปพลิเคชัน เมื่อแอปพลิเคชันของคุณถูกพัฒนาให้ทำงานบน nginx คุณมี nginx อยู่แล้วและคุณอาจใช้ฟีเจอร์ทั้งหมดของมันเช่นกัน

ยกเว้นเมื่อแอปพลิเคชันของคุณไม่ได้ตั้งใจให้เรียกใช้บน nginx และ nginx ไม่พบในสแต็กของคุณ คุณลักษณะ webservers มีอยู่ในเว็บเซิร์ฟเวอร์ปัจจุบันของคุณและงานอื่น ๆ จะได้รับการจัดการที่ดีขึ้นโดยเครื่องมือเฉพาะที่เหมาะสม (HAProxy / Varnish / CDN)

ยกเว้นเมื่อเว็บเซิร์ฟเวอร์ / แอปพลิเคชันของคุณขาดฟีเจอร์ยากที่จะกำหนดค่าและ / หรือคุณอยากตายมากกว่ามอง (Gunicorn ใคร?) คุณอาจวาง nginx ไว้ด้านหน้า (เช่นในแต่ละโหนด) เพื่อดำเนินการ URL เขียนใหม่ส่งการเปลี่ยนเส้นทาง 301 บังคับใช้การควบคุมการเข้าถึงจัดให้มีการเข้ารหัส SSL และแก้ไขส่วนหัว HTTP แบบทันที [นี่คือคุณสมบัติที่คาดหวังจากเว็บเซิร์ฟเวอร์]

วานิช: เซิร์ฟเวอร์แคช

คุณสมบัติหลัก :

  • เก็บเอาไว้
  • การแคชขั้นสูง
  • แคชเม็ดเล็ก ๆ
  • เก็บเอาไว้

ทางเลือกที่คล้ายกัน : nginx (เว็บเซิร์ฟเวอร์อเนกประสงค์ที่สามารถกำหนดค่าเป็นเซิร์ฟเวอร์แคช)
ทางเลือกอื่น : CDN (Akamai, Amazon CloudFront, CloudFlare), ฮาร์ดแวร์ (F5, Fortinet, Citrix Netscaler)

วานิชทำอะไรและเมื่อไหร่ที่คุณต้องใช้?
มันแคชเพียงแคช มันมักจะไม่คุ้มค่ากับความพยายามและเสียเวลา ลอง CDN แทน โปรดทราบว่าการแคชเป็นสิ่งสุดท้ายที่คุณควรใส่ใจเมื่อใช้งานเว็บไซต์

ยกเว้นเมื่อคุณใช้งานเว็บไซต์เกี่ยวกับรูปภาพหรือวิดีโอโดยเฉพาะคุณควรตรวจสอบ CDN อย่างละเอียดและคิดถึงการแคชอย่างจริงจัง

ยกเว้นเมื่อคุณถูกบังคับให้ใช้ฮาร์ดแวร์ของคุณเองในดาต้าเซ็นเตอร์ของคุณเอง (CDN ไม่มีตัวเลือก) และเว็บเซิร์ฟเวอร์ของคุณแย่มากในการส่งไฟล์สแตติก

ยกเว้นเมื่อคุณมีเว็บไซต์ที่มีเนื้อหาที่สร้างขึ้นแบบคงที่ แต่ซับซ้อนส่วนใหญ่แบบไดนามิก (ดูย่อหน้าต่อไปนี้) วานิชสามารถประหยัดพลังงานในการประมวลผลจำนวนมากบนเว็บเซิร์ฟเวอร์ของคุณ

การแคชแบบคงที่ถูกประเมินค่าเกินจริงในปี 2559

การแคชเกือบฟรีแล้วไม่มีค่าใช้จ่ายและไม่มีเวลา เพียงสมัครสมาชิก CloudFlare หรือ CloudFront หรือ Akamai หรือ MaxCDN เวลาที่ฉันจะเขียนบรรทัดนี้จะนานกว่านั้นเวลาที่ใช้ในการตั้งค่าแคชและเบียร์ที่ฉันถืออยู่ในมือของฉันนั้นแพงกว่าการสมัครสมาชิก CloudFlare เฉลี่ย

บริการทั้งหมดนี้ทำงานนอกกรอบสำหรับ static * .css * .js * .png และอื่น ๆ ในความเป็นจริงพวกเขาส่วนใหญ่ให้เกียรติCache-Controlคำสั่งในส่วนหัว HTTP ขั้นตอนแรกของการแคชคือการกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณเพื่อส่งคำสั่งแคชที่เหมาะสม ไม่สำคัญว่า CDN คืออะไร Varnish เบราว์เซอร์ใดอยู่ตรงกลาง

ข้อควรพิจารณาด้านประสิทธิภาพ

วานิชถูกสร้างขึ้นในเวลาที่เว็บเซิร์ฟเวอร์โดยเฉลี่ยสำลักเพื่อให้บริการภาพแมวในบล็อก ทุกวันนี้อินสแตนซ์เดียวของเว็บเซิร์ฟเวอร์ที่ทำงานด้วย buzzword ซึ่งทำงานด้วย buzzword โดยเฉลี่ยนั้นสามารถส่งลูกแมวไปทั่วประเทศได้อย่างน่าเชื่อถือ sendfile()มารยาทของ

ฉันทำการทดสอบประสิทธิภาพอย่างรวดเร็วสำหรับโปรเจ็กต์สุดท้ายที่ฉันทำงาน อินสแตนซ์ tomcat เดียวสามารถให้บริการ 21,000 ถึง 33,000 ไฟล์คงที่ต่อวินาทีผ่านทาง HTTP (การทดสอบไฟล์จาก 20B ถึง 12kB โดยนับรวมการเชื่อมต่อ HTTP / ไคลเอนต์ที่แตกต่างกัน) ปริมาณการใช้ข้อมูลขาออกที่ยั่งยืนเกินกว่า 2.4 Gb / s การผลิตจะมีเพียง 1 Gb / s อินเตอร์เฟส ไม่สามารถทำได้ดีกว่าฮาร์ดแวร์ไม่มีจุดลองใช้วานิช

แคชที่ซับซ้อนการเปลี่ยนแปลงเนื้อหาแบบไดนามิก

CDN และแคชเซิร์ฟเวอร์มักจะไม่สนใจ URL ที่มีพารามิเตอร์เช่น?article=1843พวกเขาไม่สนใจคำขอกับคุกกี้ประชุมหรือผู้ใช้สิทธิ์ใด ๆ และพวกเขาไม่สนใจชนิด MIME มากที่สุดรวมทั้งจากapplication/json /api/article/1843/infoมีตัวเลือกการกำหนดค่าที่ใช้ได้ แต่โดยปกติจะไม่เป็นเม็ดเล็กแทนที่จะเป็น "all or nothing"

สารเคลือบเงาสามารถมีกฎที่ซับซ้อนที่กำหนดเอง (ดู VCL) เพื่อกำหนดสิ่งที่สามารถเข้าถึงได้และสิ่งที่ไม่ กฎเหล่านี้สามารถแคชเนื้อหาที่เฉพาะเจาะจงโดย URI ส่วนหัวและคุกกี้เซสชันผู้ใช้ปัจจุบันและประเภทและเนื้อหา MIME ALL TOGETHER ที่สามารถประหยัดพลังงานการประมวลผลจำนวนมากบนเว็บเซิร์ฟเวอร์สำหรับรูปแบบการโหลดที่เฉพาะเจาะจง นั่นคือเมื่อวานิชมีประโยชน์และน่ากลัว

ข้อสรุป

ฉันใช้เวลาสักครู่เพื่อทำความเข้าใจชิ้นส่วนเหล่านี้ทั้งหมดเมื่อใช้พวกเขาและวิธีที่พวกเขาเข้าด้วยกัน หวังว่านี่จะช่วยคุณได้

มันค่อนข้างยาว (เขียนได้ 6 ชั่วโมง OMG!: O) บางทีฉันควรเริ่มต้นบล็อกหรือหนังสือเกี่ยวกับเรื่องนั้น สนุกจริง: ดูเหมือนจะไม่จำกัดความยาวของคำตอบ


5
ความยาวของคำตอบนั้นมี จำกัด แต่คุณจะต้องเขียนหนังสือเพิ่มเพื่อให้ได้
Michael Hampton

2
จุดหนึ่งที่ควรกล่าวถึงเกี่ยวกับแคช: เป็นวิธีที่มีประสิทธิภาพในการปรับปรุงประสิทธิภาพของไซต์เมื่อคุณไม่สามารถควบคุมแอปพลิเคชันได้ โดยเฉพาะอย่างยิ่งหากแอปพลิเคชันมีส่วนหัวแคชที่โง่จริงๆ คุณจะต้องตระหนักถึงทรัพยากรที่ผ่านการรับรองความถูกต้องมากขึ้น
คาเมรอนเคอร์

@ user5994461 ฉันชอบที่จะอ่านบล็อกของคุณ คำตอบที่น่าทึ่ง!
oxalorg

20

เป็นความจริงที่เครื่องมือทั้งสามนี้ใช้คุณสมบัติทั่วไป การตั้งค่าส่วนใหญ่นั้นใช้ได้กับการรวมกันของ 2 ใน 3 ขึ้นอยู่กับวัตถุประสงค์หลักของพวกเขา เป็นเรื่องปกติที่จะยอมรับที่จะเสียสละแคชหากคุณรู้ว่าเซิร์ฟเวอร์แอปพลิเคชันของคุณทำงานได้อย่างรวดเร็วบนสถิติ (เช่น: nginx) เป็นเรื่องธรรมดาที่จะเสียสละคุณสมบัติโหลดบาลานซ์บางอย่างหากคุณกำลังติดตั้งเซิร์ฟเวอร์หลายสิบหรือหลายร้อยเครื่องและไม่สนใจว่าจะได้รับประโยชน์สูงสุดจากปัญหาเหล่านี้หรือปัญหาการแก้ไขปัญหา เป็นเรื่องปกติที่จะต้องเสียสละคุณสมบัติเว็บเซิร์ฟเวอร์บางอย่างหากคุณต้องการใช้งานแอพพลิเคชั่นแบบกระจายที่มีองค์ประกอบมากมาย ถึงกระนั้นบางคนก็สร้างฟาร์มที่น่าสนใจกับพวกเขาทั้งหมด

คุณควรจำไว้ว่าคุณกำลังพูดถึง 3 ผลิตภัณฑ์ที่เป็นของแข็ง โดยทั่วไปคุณไม่จำเป็นต้องโหลดยอดเงิน หากคุณต้องการ SSL ด้านหน้าดังนั้น nginx ก่อนเนื่องจาก reverse-proxy ไม่เป็นไร หากคุณไม่ต้องการสิ่งนั้นสารเคลือบเงาที่ด้านหน้าก็ใช้ได้ จากนั้นคุณสามารถใส่ haproxy เพื่อโหลดแอพของคุณ บางครั้งคุณอาจต้องการสลับไปยังเซิร์ฟเวอร์ฟาร์มที่แตกต่างกันใน haproxy ขึ้นอยู่กับประเภทของไฟล์หรือพา ธ

บางครั้งคุณจะต้องป้องกันการโจมตี DDoS อย่างหนักและ haproxy ที่อยู่ด้านหน้าจะเหมาะสมกว่าการโจมตีแบบอื่น ๆ

โดยทั่วไปแล้วคุณไม่ควรกังวลเกี่ยวกับการประนีประนอมระหว่างตัวเลือกของคุณ คุณควรเลือกวิธีที่จะรวบรวมพวกเขาเพื่อรับความยืดหยุ่นที่ดีที่สุดสำหรับความต้องการของคุณในขณะนี้และที่จะมา แม้ว่าคุณจะเรียงซ้อนหลาย ๆ ครั้งหลาย ๆ ครั้งมันก็อาจจะถูกต้องขึ้นอยู่กับความต้องการของคุณ

หวังว่านี่จะช่วยได้!


1
+1 สำหรับ HAProxy - ผู้แต่งตอบคำถามในข้อบกพร่องของเซิร์ฟเวอร์ ขอบคุณ
Joel K

Arenstar: คุณเขียนหนึ่งในเครื่องมือเหล่านี้หรือไม่? Willy Tarreau เป็นผู้พัฒนาหลักของ HAProxy
Joel K

ขอบคุณสำหรับ Willy นี้ คุณตอบคำถามของฉันถึง Arenstar ด้านบน
John

2
โปรดทราบว่าปัจจุบันรหัสการพัฒนาสำหรับ HAProxy นั้นรวมถึง SSL ด้วย
Joel K

14

คำตอบอื่น ๆ ทั้งหมดอยู่ก่อนปี 2010 ดังนั้นจึงเป็นการเพิ่มการเปรียบเทียบที่อัปเดตแล้ว

Nginx

  • เว็บเซิร์ฟเวอร์แบบเต็มคุณสมบัติอื่น ๆ สามารถใช้งานได้ เช่นการบีบอัด HTTP
  • รองรับ SSL
  • น้ำหนักเบามากเนื่องจาก Nginx ได้รับการออกแบบให้เบาตั้งแต่ต้น
  • ใกล้ประสิทธิภาพการแคชเคลือบเงา
  • ใกล้กับ HAProxy ภาระการทรงตัว

เคลือบเงา

  • ดีที่สุดสำหรับสถานการณ์การแคชที่ซับซ้อนและรวมเข้ากับแอปพลิเคชัน
  • cacher ไฟล์คงที่ดีที่สุด
  • ไม่รองรับ SSL
  • กินหน่วยความจำและ CPU

haproxy

  • โหลดบาลานซ์ที่ดีที่สุดสำหรับคุณสมบัติการปรับสมดุลโหลดคมตัดเปรียบได้กับฮาร์ดแวร์โหลดบาลานซ์
  • รองรับ SSL ตั้งแต่ 1.5.0
  • ง่ายกว่าการเป็นเพียงพร็อกซี tcp โดยไม่มีการติดตั้ง http ซึ่งทำให้ข้อผิดพลาดเร็วขึ้นและน้อยลง

ดังนั้นวิธีที่ดีที่สุดดูเหมือนว่าจะดำเนินการทั้งหมดในลำดับที่เหมาะสม

อย่างไรก็ตามสำหรับวัตถุประสงค์ทั่วไป Nginx นั้นดีที่สุดเมื่อคุณได้รับประสิทธิภาพเหนือค่าเฉลี่ยสำหรับทุกคน: การแคชการย้อนกลับพร็อกซีการโหลดบาลานซ์โดยมีค่าใช้จ่ายในการใช้ทรัพยากรน้อยมาก แล้วคุณมีคุณสมบัติ SSL และเว็บเซิร์ฟเวอร์แบบเต็ม


6

วานิชมีการสนับสนุนการทำโหลดบาลานซ์: http://www.varnish-cache.org/trac/wiki/LoadBalancing

Nginx มีการสนับสนุนการทำโหลดบาลานซ์: http://wiki.nginx.org/NginxHttpUpstreamModule

ฉันเพียงแค่กำหนดค่านี้ด้วยวานิช + stunnel ถ้าฉันต้องการ nginx ด้วยเหตุผลอื่นฉันจะใช้ nginx + varnish คุณสามารถให้ nginx ยอมรับการเชื่อมต่อ SSL และใช้พร็อกซีเพื่อเคลือบเงาจากนั้นให้วานิชคุยกับ nginx ผ่านทาง http

บางคนอาจโยน nginx (หรือ Apache) ลงในส่วนผสมเนื่องจากเครื่องมือเหล่านี้ค่อนข้างใช้งานทั่วไปมากกว่าวานิช ตัวอย่างเช่นหากคุณต้องการแปลงเนื้อหา (เช่นการใช้ XDV ตัวกรอง apache และอื่น ๆ ) ที่ชั้นเลเยอร์พร็อกซีคุณจะต้องใช้สิ่งใดสิ่งหนึ่งเนื่องจากวานิชไม่สามารถทำเช่นนั้นได้ บางคนอาจคุ้นเคยกับการกำหนดค่าเครื่องมือเหล่านี้มากขึ้นดังนั้นจึงง่ายต่อการใช้ Varnish เป็นแคชแบบง่ายและทำการปรับสมดุลภาระให้กับเลเยอร์อื่นเนื่องจากพวกเขาคุ้นเคยกับ Apache / nginx / haproxy เป็น load balancer แล้ว


ขวา - "พูลแบ็คเอนด์" หมายถึงการชี้ให้เห็นว่าทั้งสามสิ่งนี้มีคุณสมบัติการปรับสมดุลโหลด จากการตรวจสอบเบื้องต้นของฉันดูเหมือนว่า HAProxy มีตัวเลือกการปรับสมดุลภาระที่ปรับได้มากที่สุด
Joel K

ฟังดูสมเหตุสมผลเพราะมันถูกสร้างขึ้นตามวัตถุประสงค์เป็นเครื่องมือสร้างสมดุลในการโหลด ในทางกลับกันคุณสมบัติการปรับสมดุลภาระของวานิชค่อนข้างดีและการลบหนึ่งกระบวนการจากมิกซ์นี้จะช่วยให้คุณกำหนดค่าได้ง่ายขึ้นโดยมีเวลาแฝงน้อยลง
larsks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.