ฉันจะกัด
คำตอบแรกนั้นจากเว็บเซิร์ฟเวอร์จะต้องอยู่ในระยะไม่เกิน 200 มิลลิวินาทีในสหราชอาณาจักร
ขณะนี้ไม่มีส่วนหน้าให้กับเว็บไซต์มันเป็นรูปแบบที่ฟรีและไม่มีรูปภาพ
คุณจะไม่บรรลุตัวเลขเหล่านั้นหากไม่ได้รับความช่วยเหลือจากวานิชหรือ FPC (หรือทั้งสองอย่าง) ฉันหวังว่ารูปนั้นไม่จำเป็นต้องรวมเนื้อหาแบบสแตติก (เมื่อใดก็ตามที่คุณตัดสินใจที่จะเพิ่ม) - เนื่องจากเป็นไปไม่ได้ที่จะบรรลุผล (ใกล้จะมีภาพ / js / css น้อยมาก)
เรากำลังเข้ามาที่ 800ms
และมันก็ถูกเรียกใช้บนNginxกับ Varnish
คุณได้วานิชกำหนดค่าผิด
การติดตั้ง Varnish ที่กำหนดค่าไว้อย่างถูกต้องจะส่งมอบเวลาโหลดหน้ากระดาษ <100ms (เราเห็นใกล้กับ <10ms)
อันที่จริงแล้วสำหรับวีโอไอพีคุณควรคาดหวังที่จะเห็นอะไรแบบนี้
เมื่อลูกค้าไม่ได้ลงชื่อเข้าใช้ ...
คือ ไม่มีการสร้างเซสชันที่ไม่ซ้ำกัน (เพิ่มในรถเข็น / สิ่งที่อยากได้เข้าสู่ระบบ ฯลฯ )
--1.2s--------0.8s-----------------0.6s----------------0.1s--------------0.08s----
Uncached Mage default cache Partial FPC cache Total FPC cache Varnish
เมื่อลูกค้าเข้าสู่ระบบ ...
คือ ต้องสร้างเซสชันที่ไม่ซ้ำกัน (เข้าสู่ระบบรายการในรถเข็น ฯลฯ ) เมื่อถึงจุดนี้วานิชก็น่าจะปิด และถ้าคุณเลือกที่จะใช้ ESI ของ - ขึ้นอยู่กับการโทรกลับก็สามารถรักษาเวลาในการโหลดหน้าที่คล้ายกันเป็นแคช FPC (เนื่องจากค่าโสหุ้ยการบูต) - หรือเพิ่มเวลาในการโหลดหน้ามากกว่าที่ไม่ได้ใช้จริง
--1.4s--------0.8s-----------------0.6s--------------
Uncached Mage default cache Total FPC cache
ไม่ได้เป็นกรณีของการปรับแต่งวานิช - กรณีของ - "คุณไม่ได้จริงแคชอะไรเลย"
ไฟล์กำหนดค่าเซิร์ฟเวอร์ Magento ในอุดมคติ
มีไม่หนึ่งดีไม่มาก
เราดำเนินงานเซิร์ฟเวอร์มากกว่า 400 แห่งร้าน Magento ล้วนแล้วแต่มีขนาดและความจุแตกต่างกัน และหายากที่ไฟล์การกำหนดค่าที่เรามีอยู่ - จะตรงกับไฟล์อื่น นั่นเป็นเพราะไม่ใช่ทุกธุรกิจที่เหมือนกัน
คอขวดสามารถเกิดขึ้นได้จากหลายสาเหตุด้วยกัน:
- มีผู้เข้าชมพร้อมกันจำนวนมากพร้อมเซสชันที่ใช้งานอยู่
- ผู้ที่ตกเป็นเหยื่อของบ็อตการรวบรวมข้อมูลที่ 'ไม่ดี' สร้างภาระที่จำเป็นและไม่สามารถประเมินค่าได้
- สัดส่วนที่สูงของความนิยมในการนำทางแบบเลเยอร์
- จำนวนคำค้นหาจำนวนมาก
- ปริมาณธุรกรรมสูงต่อชั่วโมง
- เทมเพลตที่สร้างไม่ดี
- ส่วนขยายของบุคคลที่สามมากเกินไป / ช้า / ใหญ่
- ลิงก์ขาเข้าที่ล้าสมัยนำไปสู่สัดส่วนสูงถึง 404 ครั้ง
- ความจุเครือข่ายอินเตอร์เฟสที่ขีด จำกัด
- แคตตาล็อกขนาดใหญ่ / ซับซ้อน (ผลิตภัณฑ์ / หมวดหมู่ / แอตทริบิวต์จำนวนมาก)
ดังนั้นด้วยร้านค้าทั่วทั้งสเปกตรัมนี้แต่ละแห่งจึงมีวิธีที่แตกต่างกันในการเพิ่มประสิทธิภาพสูงสุด
เพื่อแก้ไขปัญหาที่กล่าวถึงข้างต้น เราจะจงใจหลีกเลี่ยงเพียงระบุ "ฮาร์ดแวร์เพิ่มเติม / ดีกว่า"
- ใช้ FPC นอกเหนือจากวานิช
- กรอง / ปิดกั้นบ็อตที่ไม่ดีที่ขอบเครือข่าย - หรือเปลี่ยนเส้นทางคำขอทั้งหมดไปที่วานิชโดยไม่คำนึงถึงสถานะ / URL ของคุกกี้
- เปลี่ยนการนำทางแบบชั้นหุ้นเป็น SOLR ทำให้ตัวกรองการนำทางแบบชั้นขึ้นอยู่กับ
- เปลี่ยนการค้นหาหุ้นเป็น SOLR
- แจกจ่าย MySQL โหลดผ่านการกำหนดค่า Master / Slave - ทำสิ่งนี้เฉพาะเมื่อคุณรับประกันว่าภาระการสืบค้นจะถูกดูดซับโดย Varnish / FPC
- สร้างแม่แบบอีกครั้ง
- ตัดพวกเขาออก
- ตรวจสอบล็อกการเข้าถึงอย่างต่อเนื่องและเขียน URL ใหม่ที่ Nginx / Varnish ก่อนส่งมอบ หากทำที่ระดับ Nginx - ตรวจสอบให้แน่ใจว่า Varnish กำลังแคชการเปลี่ยนเส้นทาง 301/302
- แยกเนื้อหาสแตติกออกเป็น CDN หรือปรับปรุงการเชื่อมต่อ
- เพิ่มฮาร์ดแวร์เพิ่มเติม (เราต้องพูดในบางจุด)
ดังนั้นเมื่อคำนึงถึงสิ่งนี้ - คุณจะเห็นว่าคงไม่มีไฟล์ config Nginx, ไฟล์ PHP fcgi pool config, ไฟล์ MySQL config หรือไฟล์ Varnish config ที่จะเหมือนกัน จับคู่กับการเปลี่ยนแปลงของฮาร์ดแวร์; หน่วยความจำที่มีอยู่, ประสิทธิภาพ I / O (HDD และเครือข่าย) และ CPU - และคุณจะพบว่ามีรูปแบบที่หลากหลายที่นำไปสู่ประสิทธิภาพที่เพิ่มขึ้นถึง 400% ตามที่คุณต้องการ - แต่ไม่มีคำตอบอย่างรวดเร็ว
คุณสามารถคัดลอก + วางกระดาษขาวคุณภาพเยี่ยมของ Peer 1 ที่สนับสนุนโดย Peerance (เราไม่แนะนำ); หวังว่าการตั้งค่าจะไม่เกินหน่วยความจำที่มีอยู่ขีด จำกัด เธรดสถานะ TCP / IP ความจุ I / O และนำไปสู่ประสิทธิภาพที่น้อยกว่าการกำหนดค่าวานิลลา Apache / mod_php
ดังนั้นให้ดำเนินการต่อไป
เซิร์ฟเวอร์วีโอไอพีที่สมบูรณ์แบบ
นี่มีแนวโน้มที่จะทำให้คุณใกล้ชิดกับความเป็นจริงมากขึ้น ตัวอย่างที่ดีในการสาธิตสิ่งนี้คือการแสดงให้เห็นว่าMageStackมีการกำหนดค่าระบบวีโอไอพีโดยเฉพาะอย่างไร
นำส่วนประกอบย่อยแยกจากกันและคุณจะได้รายการซอฟต์แวร์ที่ดีที่สุด / สำคัญที่สุดเมื่อกำหนดค่าอย่างเหมาะสมเพื่อเรียกใช้ Magento store สะดุดตา:
ไฟร์วอลล์, ตัวกรอง DOS, ตัวโหลดบาลานซ์, วานิช, Nginx, PHP, Redis, Memcached, MySQL
ดังนั้นเมื่อคุณถาม:
การตั้งค่าเซิร์ฟเวอร์วีโอไอพีที่ดีที่สุดคืออะไร
เป้าหมายของคุณคืออะไร
- พร้อมใช้งานสูง
- ความเชื่อถือได้
- ความเรียบง่ายของการบริหาร
- ประสิทธิภาพ
- scalability
พอบรรยายเราจะทำอย่างไร
เมื่อต้องการทำมิรเรอร์คำตอบที่ให้ไว้ในข้อผิดพลาดของเซิร์ฟเวอร์ลงหลอดเลือดดำที่คล้ายกัน คุณมีเซิร์ฟเวอร์ 3 ตัวตามความเหมาะสม - ดังนั้นปรับทิศทางให้ดีที่สุดเท่าที่จะทำได้ เราจะหลีกเลี่ยงโซลูชันที่มีความพร้อมใช้งานสูงเนื่องจากอยู่ไกลเกินขอบเขตของคำตอบนี้
ส่วนประกอบย่อยที่จำเป็นสำหรับการกำหนดค่าหลายเซิร์ฟเวอร์คือ:
- ไฟร์วอลล์
- โหลดบาลานเซอร์
- เว็บเซิร์ฟเวอร์
- เซิร์ฟเวอร์ MySQL
- ที่เก็บข้อมูลทั่วไป
ดังนั้นเราจะใช้ระบบบางอย่างได้อเนกประสงค์ ความสอดคล้องกับ PCI-DSS กำหนดบทบาทสำหรับเซิร์ฟเวอร์แต่ละเครื่อง ดังนั้นด้วย 5 บทบาทและ 3 เซิร์ฟเวอร์ - คุณจะฝ่าฝืนทันที MageStackได้รับรอบนี้โดยใช้ virtualisation - คุณสามารถทำเช่นเดียวกัน
เซิร์ฟเวอร์ 1: โหลดบาลานเซอร์ + เว็บเซิร์ฟเวอร์
เซิร์ฟเวอร์ 2: เว็บเซิร์ฟเวอร์
เซิร์ฟเวอร์ 3: เซิร์ฟเวอร์ฐานข้อมูล
โดยไม่ต้อง latency ต่ำและแบนด์วิธเครือข่ายอย่างมีนัยสำคัญ (> 1Gbps <125μs) มากกว่าที่มีการจัดเก็บข้อมูลร่วมกัน - ที่ดีกว่าสำหรับคุณที่จะเพียงเก็บไดเรกทอรีรากร้านค้าในแต่ละเครื่องและทำซ้ำข้อมูลทั้งในแบบ real-time โดยใช้ionotify
หรือหมดอายุการใช้cron
งาน อีกครั้งเราจะหลีกเลี่ยงระบบไฟล์เครือข่ายเช่น NFS หรืออุปกรณ์บล็อกแบบจำลองเช่น Gluster หรือ DRBD เนื่องจากต้องมีการปรับแต่งและแบนด์วิดธ์เครือข่ายที่เหมาะสม
วานิชจำเป็นต้องนั่งให้ชิดกับด้านหน้ามากที่สุด แต่วานิชไม่สามารถถอดรหัส SSL ได้ ดังนั้นควรรวมเข้ากับเทอร์มิเนล SSL Nginx, ปอนด์, Stunnel, Stud และอื่น ๆ โหลดบาลานซ์ที่สร้างขึ้นในวานิชไม่ได้ยอดเยี่ยม - แต่จะเพียงพอสำหรับการตั้งค่าเซิร์ฟเวอร์ 2 เครื่อง
Nginx + PHP-FPM ใช้ได้ แต่ไม่ดื่ม Nginx kool-aid มากเกินไป มันจะดำเนินการเกือบจะเหมือนกันการกำหนดค่า Apache / mod_php แบบดั้งเดิมที่นี่เป็นบางส่วนอ่านที่ดีเกี่ยวกับเหตุผลที่จะไม่ใช้ Nginx Nginx เป็นสิ่งที่ดีและเป็นสิ่งที่ดีมาก แต่ก็ไม่ได้เป็นคอขวดของร้านวีโอไอพี - และได้รับความซับซ้อนและขาดการสนับสนุน Magento ดั้งเดิม ผู้ดูแลระบบมือใหม่ส่วนใหญ่จะได้รับประโยชน์จากการใช้ Apache / mod_php เหนือสิ่งอื่นใด สิ่งนี้อาจดูเหมือนคำแนะนำที่เก่าแก่กว่าการใช้ PHP-FPM - แต่การทดสอบประสิทธิภาพของเราแสดงให้เห็นว่าประสิทธิภาพนั้นเร็วขึ้นเพียง 7% เมื่อใช้โซลูชัน Nginx - เมื่อกำหนดค่าอย่างเหมาะสม. การปรับแต่งและประสบการณ์ที่จำเป็นสำหรับการติดตั้ง Nginx / PHP-FPM ที่มีประสิทธิภาพสูงและน่าเชื่อถือนั้นค่อนข้างกว้างใหญ่พอที่จะทำให้ Apache / mod_php มีประสิทธิภาพเหนือกว่า แล้วแต่ว่าคุณจะเลือกใช้สายไหนก็คือสายของคุณ
เซิร์ฟเวอร์ฐานข้อมูลนั้นง่าย MySQL แต่ตามที่กล่าวไว้ก่อนหน้านี้หากคุณมีไซต์ที่มีการแปลงสูงแนะนำให้กำหนดค่า Master / Slave ไม่ว่าคุณควรทำตามวิธีนี้จะถูกกำหนดโดยการอ่านบทความนี้
จากนั้นแคชส่วนหลังของคุณ Memcached และ Redis ในร้านค้าขนาดเล็กการจัดเก็บเซสชันในอินสแตนซ์ Memcache หนึ่งและแคชแบ็กเอนด์ที่รวดเร็วในอีกอันจะให้ประโยชน์ด้านประสิทธิภาพที่ดี เราไม่สนับสนุนการจัดเก็บแท็กแคชในแบ็กเอนด์ที่ช้าเพราะมันทำให้เกิดปัญหามากกว่าที่มันให้ ดังนั้นด้วย Memcached การตั้งค่าที่คุณจะต้องปรับการติดแท็กแคช แต่เราใช้การกำหนดค่าเช่นนี้
Redis ไม่พื้นเมืองวีโอไอพี แต่มีนามสกุลจากโคลิน Mollenhour - เป็นทางออกที่ดีกว่า Memcache, สนับสนุนแท็กแคชจัดเก็บเซสชั่นและแม้กระทั่งการจัดเก็บแคชถาวร - มันไม่ได้ค่อนข้างผันผวน Memcache แต่มันก็มีข้อเสีย เราพบร้านค้าขนาดใหญ่ (> 500 คำสั่งซื้อ / ชั่วโมง> 30k เฉพาะ / ชั่วโมง) ที่แคช (และแท็ก) สามารถเติมได้อย่างรวดเร็วและเมื่อจุดอิ่มตัวถูกตีกลไก LRU ค่อนข้างล้มเหลว ( แม้จะมีการตั้งค่าที่แตกต่างกัน) และทำให้เกิดปัญหาคอขวดใหญ่ทันที ดังนั้นจึงควรระมัดระวังในการตัดบันทึกเก่า ๆ ด้วยตนเอง
ดังนั้นควรใช้ฮาร์ดแวร์อะไรเพื่ออะไร
เว็บเซิร์ฟเวอร์: CPU ที่เร็วที่สุด, คอร์ CPU ส่วนใหญ่, อัตราส่วน 2GB RAM / Core
DB เซิร์ฟเวอร์: CPU ที่เร็วที่สุด, ดิสก์ I / O ที่เร็วที่สุด, RAM ส่วนใหญ่
ดังนั้นเมื่อมีการกำหนดเป้าหมาย 3 เครื่องของคุณรูปแบบที่ดีที่สุดจะเป็น:
เซิร์ฟเวอร์ 1: SSL Terminator -> วานิช -> Nginx / Apache> PHP
Server 2: Nginx / Apache> PHP, Redis, (MySQL Slave)
เซิร์ฟเวอร์ 3: MySQL
เป็นการกำหนดค่าเฉพาะของแต่ละแอปพลิเคชัน นั่นเป็นไปตามข้อกำหนดฮาร์ดแวร์ของคุณความซับซ้อนของร้านค้าประเภทและลักษณะของผู้เข้าชมและปริมาณผู้เยี่ยมชม