คุณเพิ่งสร้างเว็บไซต์หน้าแรกในชีวิตเสร็จ เปิดดูบนจอแล้วสวยงาม ทุกปุ่มกดได้ คุณจึงคัดลอกที่อยู่ในแถบด้านบน localhost:3000 ส่งให้เพื่อนอย่างภูมิใจ ไม่กี่วินาทีต่อมาเพื่อนตอบกลับมาว่า "เปิดไม่ได้นะ"
เว็บไซต์ไม่ได้พัง อินเทอร์เน็ตของเพื่อนก็ไม่ได้เสีย แต่ระหว่างคอมพิวเตอร์ของคุณกับคอมพิวเตอร์ของคนทั้งโลก ยังขาดชิ้นส่วนอีกหลายชิ้น บทนี้จะพาคุณประกอบชิ้นส่วนเหล่านั้นทีละชิ้น จนเว็บไซต์เดินทางออกจากเครื่องของคุณไปถึงหน้าจอของคนในอีกซีกโลกได้
ปริศนาแรกทำไมเพื่อนเปิดไม่ได้?
ลองดูที่อยู่ที่คุณส่งไปอีกครั้ง คำว่า localhost ไม่ใช่ชื่อของคอมพิวเตอร์คุณ แต่เป็นคำพิเศษที่คอมพิวเตอร์ทุกเครื่องเข้าใจตรงกันว่า "เครื่องนี้เอง" ส่วนตัวเลข 3000 คือหมายเลข ที่โปรแกรมเว็บไซต์ของคุณรอรับการเชื่อมต่ออยู่
หยุดคิดสักนิด
ถ้า localhost แปลว่า "เครื่องนี้เอง" เมื่อเพื่อนพิมพ์ localhost:3000 บนเครื่องของเพื่อน เบราว์เซอร์ของเพื่อนจะวิ่งไปหาเครื่องไหน?
ทดลอง · ใครพิมพ์ localhost:3000?
กดเลือกเครื่องด้านบน แล้วดูว่าคำขอเดินทางไปที่ไหน
- localhostเครื่องนี้เอง
- ชื่อพิเศษที่ชี้กลับมาหาเครื่องที่ใช้งานอยู่เสมอ นักพัฒนาใช้ทดสอบเว็บไซต์บนเครื่องตัวเองก่อนเผยแพร่ ไม่มีใครภายนอกเข้าถึงได้ผ่านชื่อนี้
เจาะลึก · สำหรับคนที่อยากรู้มากกว่านี้แล้วทำไมที่อยู่เว็บทั่วไปไม่มีเลข port?
https:// ใช้ช่อง 443 และ http:// ใช้ช่อง 80 เป็นค่าตั้งต้นที่ทุกเบราว์เซอร์รู้กันอยู่แล้ว จึงไม่ต้องพิมพ์ ส่วนเลข 3000 เป็นช่องที่เครื่องมือของนักพัฒนาหลายตัวนิยมใช้ตอนทดสอบบนเครื่องตัวเองสรุปปริศนาแรก: ตอนนี้เว็บไซต์ของคุณมีชีวิตอยู่ในเครื่องของคุณเพียงเครื่องเดียว ถ้าจะให้คนอื่นเปิดได้ เราต้องตอบคำถามสี่ข้อให้ได้ก่อน: เว็บไซต์จะอยู่ที่ไหน? ที่นั่นมีที่อยู่อะไร? คนจะจำที่อยู่นั้นได้อย่างไร? และใครจะช่วยแปลงสิ่งที่คนจำได้ให้เป็นที่อยู่จริง?
ชิ้นส่วนที่ 1บ้านที่ไม่เคยปิดไฟ: Hosting
คอมพิวเตอร์ของคุณปิดเครื่องตอนกลางคืน ย้ายไปต่อไวไฟร้านกาแฟ และไม่ได้ถูกตั้งค่าให้คนแปลกหน้าเชื่อมต่อเข้ามา มันจึงไม่เหมาะจะเป็นที่อยู่ของเว็บไซต์ เราจึงส่งไฟล์เว็บไซต์ไปไว้บน เซิร์ฟเวอร์ ซึ่งก็คือคอมพิวเตอร์ที่ถูกสร้างมาเพื่อเปิดทำงานตลอดเวลา ต่ออินเทอร์เน็ตความเร็วสูง และคอยตอบคนที่ขอดูเว็บไซต์
- Hostingบริการที่อยู่ของเว็บไซต์
- บริการให้เช่าพื้นที่บนเซิร์ฟเวอร์ ผู้ให้บริการดูแลไฟฟ้า ความเย็น สายอินเทอร์เน็ต และเครื่อง เราแค่อัปโหลดเว็บไซต์ขึ้นไป
ความเชื่อที่พบบ่อย
“เว็บไซต์ลอยอยู่บน "อินเทอร์เน็ต" หรือบน "คลาวด์" ไม่ได้อยู่ในเครื่องไหนเป็นพิเศษ”
เจาะลึก · สำหรับคนที่อยากรู้มากกว่านี้ทำไมไม่เปิดคอมพิวเตอร์ที่บ้านให้คนอื่นเข้ามาเลย
เมื่อเว็บไซต์ขึ้นไปอยู่บนเซิร์ฟเวอร์ มันจะมีที่อยู่สาธารณะเป็นตัวเลข เรียกว่า IP Address ในบทนี้เราใช้ตัวอย่าง 203.0.113.10 ซึ่งเป็นช่วงตัวเลขที่ถูกกันไว้ให้ใช้ในเอกสารและตัวอย่างโดยเฉพาะ ไม่ใช่เครื่องจริงของใคร
- IP Addressที่อยู่ของเครื่องบนเครือข่าย
- ชุดตัวเลขที่ระบุเครื่องหนึ่งเครื่องบนอินเทอร์เน็ต เช่น 203.0.113.10 อุปกรณ์เครือข่ายใช้ตัวเลขนี้ส่งข้อมูลไปให้ถูกเครื่อง เหมือนเลขที่บ้านบนซองจดหมาย
ชิ้นส่วนที่ 2 และ 3ชื่อที่คนจำได้ กับสมุดที่อยู่ของโลก
ถึงตรงนี้ใครพิมพ์ 203.0.113.10 ก็เปิดเว็บไซต์ได้แล้ว แต่ไม่มีใครอยากจำตัวเลขแบบนี้ เราจึงจด ชื่อโดเมน อย่าง internetmachine.example เป็นชื่อที่อ่านออกเสียงได้และจำง่าย
- Domainชื่อโดเมน
- ชื่อที่คนใช้เรียกเว็บไซต์แทนตัวเลข เช่น example.com เราจดชื่อผ่านผู้ให้บริการจดโดเมน และต้องต่ออายุเป็นระยะ ชื่อจึงเป็นของเราตราบที่ยังจ่ายค่าต่ออายุ
แต่การจดชื่ออย่างเดียวยังไม่พอ ชื่อที่เพิ่งจดยังไม่รู้ว่าต้องพาคนไปที่เครื่องไหน เราต้องไปเขียนบันทึกไว้ในระบบที่ชื่อว่า DNS ว่าชื่อนี้หมายถึงตัวเลขอะไร
- DNS (Domain Name System)ระบบแปลชื่อโดเมน
- ระบบที่แปลชื่อโดเมนให้เป็น IP Address ทุกครั้งที่เราพิมพ์ชื่อเว็บไซต์ เบราว์เซอร์จะถาม DNS ก่อนว่าชื่อนี้คือเครื่องหมายเลขอะไร
ชื่อ ประเภท ค่า internetmachine.example. A 203.0.113.10
ประกอบร่างเมื่อมีคนพิมพ์ชื่อเว็บไซต์ของคุณ
ตอนนี้ชิ้นส่วนครบพอให้คนทั้งโลกเปิดเว็บได้แล้ว ลองไล่ดูว่าเกิดอะไรขึ้นในเสี้ยววินาทีที่ผู้ใช้ในญี่ปุ่นพิมพ์ internetmachine.example แล้วกด Enter
- เบราว์เซอร์ถาม DNS ว่า "internetmachine.example คือเครื่องหมายเลขอะไร?" และได้คำตอบว่า
203.0.113.10 - เบราว์เซอร์เชื่อมต่อไปที่เครื่องหมายเลขนั้น แล้วส่ง Request ขอหน้าแรกของเว็บไซต์ (เล่ม 02 เล่าเรื่อง Request และ Response อย่างละเอียด)
- เซิร์ฟเวอร์ตอบกลับด้วย Response ที่มีไฟล์ HTML, CSS และ JavaScript
- เบราว์เซอร์อ่านไฟล์เหล่านั้นแล้ววาดหน้าเว็บขึ้นจอ (เรื่องที่เล่ม 01 พาแกะดู)
ติดตามทีละก้าว
ผู้ใช้ในญี่ปุ่นพิมพ์ internetmachine.example
- เบราว์เซอร์
- DNS
- เซิร์ฟเวอร์
เบราว์เซอร์ → DNSถามว่าชื่อนี้คือเครื่องไหน
เบราว์เซอร์ยังไม่รู้ว่า internetmachine.example อยู่ที่ไหน จึงถาม DNS ก่อนว่าชื่อนี้คือเครื่องหมายเลขอะไร
เป้าหมาย: กด 'ก้าวถัดไป' จนหน้าเว็บกลับมาถึงเบราว์เซอร์
หยุดคิดสักนิด
สมมติวันหนึ่งคุณย้ายเว็บไซต์ไปอยู่เซิร์ฟเวอร์เครื่องใหม่ที่มีเลข IP ใหม่ ผู้ใช้ต้องเปลี่ยนไปจำชื่อเว็บใหม่หรือไม่?
ลงมือห้องทดลอง: เผยแพร่เว็บไซต์ของคุณสู่โลก
ถึงเวลาลงมือเอง ห้องทดลองนี้เริ่มจากเว็บไซต์ที่อยู่บนเครื่องผู้พัฒนาเพียงเครื่องเดียว กดปุ่มเผยแพร่แล้วดูชิ้นส่วนต่อกันทีละขั้น สังเกตสามจุด: แถบที่อยู่ เปลี่ยนไปอย่างไร ใครบ้าง ที่เปิดเว็บได้ในแต่ละขั้น และ เส้นทาง ที่ข้อมูลวิ่งบนแผนที่
LAB 04 — Global Network Observatory
เผยแพร่สู่โลก
ใครเปิดได้เปิดได้คนเดียว: ผู้พัฒนา
ขั้นที่ 0 · เว็บไซต์ยังอยู่บนเครื่องผู้พัฒนา
เว็บไซต์ทำงานอยู่ที่ localhost:3000 คำว่า localhost แปลว่า 'เครื่องนี้เอง' เบราว์เซอร์บนเครื่องเราจึงเปิดได้ แต่ถ้าเพื่อนพิมพ์คำเดียวกัน เบราว์เซอร์ของเพื่อนจะไปหาเครื่องของเพื่อนเอง ไม่ใช่เครื่องเรา
คำสั่งเปิดเว็บบนเครื่องตัวเอง
$ npm run dev > พร้อมใช้งานที่ http://localhost:3000
ทดลองโหลด: เมื่อคนมาพร้อมกัน
Load & Capacity · ตัวเลขสมมติถ้าคุณลองครบ คุณน่าจะสังเกตเห็นสองเรื่องที่ยังไม่ได้อธิบาย: แม่กุญแจที่โผล่ขึ้นมาในขั้น HTTPS และกล่อง CDN ที่ทำให้คนในบราซิลโหลดรูปเร็วขึ้นมาก สองหัวข้อถัดไปจะอธิบายว่ามันทำงานอย่างไร
ชิ้นส่วนที่ 4แม่กุญแจหน้าชื่อเว็บ: HTTPS
ระหว่างเครื่องผู้ใช้กับเซิร์ฟเวอร์ ข้อมูลวิ่งผ่านอุปกรณ์หลายตัว เช่น เราเตอร์ไวไฟในร้านกาแฟ และอุปกรณ์ของผู้ให้บริการอินเทอร์เน็ตหลายราย ถ้าข้อมูลเดินทางแบบไม่เข้ารหัส (HTTP ธรรมดา) อุปกรณ์ระหว่างทางสามารถอ่านหรือแอบแก้ไขข้อมูลได้ รวมถึงรหัสผ่านที่คุณพิมพ์
- HTTPSHTTP แบบปลอดภัย
- การส่ง Request และ Response ผ่านการเชื่อมต่อที่เข้ารหัส (ด้วยมาตรฐานชื่อ TLS) เซิร์ฟเวอร์ต้องมีใบรับรองที่ยืนยันว่าเป็นเจ้าของชื่อโดเมนนั้นจริง เบราว์เซอร์จึงแสดงแม่กุญแจ
ชิ้นส่วนที่ 5ระยะทาง คนจำนวนมาก และ CDN
ข้อมูลในสายใยแก้วนำแสงวิ่งเร็วมาก ราว 200,000 กิโลเมตรต่อวินาที แต่โลกก็กว้างมากเช่นกัน กรุงเทพฯ กับเซาเปาโลในบราซิลห่างกันเป็นเส้นตรงราว 16,000 กิโลเมตร คำขอที่ต้องไปแล้วกลับจึงใช้เวลาอย่างน้อยราว 160 มิลลิวินาทีในทางทฤษฎี และของจริงมักนานกว่านั้น เพราะสายเคเบิลไม่ได้วิ่งเป็นเส้นตรงและต้องผ่านอุปกรณ์หลายต่อ ช่วงเวลารอแบบนี้เรียกว่า
หน้าเว็บหนึ่งหน้ามักประกอบด้วยไฟล์หลายสิบไฟล์ ความหน่วงเล็ก ๆ จึงสะสมจนรู้สึกได้ ทางแก้คือนำสำเนาของไฟล์ที่ไม่ค่อยเปลี่ยนไปไว้ใกล้ผู้ใช้ตั้งแต่แรก
- CDN (Content Delivery Network)เครือข่ายส่งเนื้อหา
- เครือข่ายเซิร์ฟเวอร์ปลายทาง (edge) ที่ตั้งอยู่หลายประเทศ เก็บสำเนาไฟล์อย่างรูปภาพ CSS และ JavaScript ไว้ใกล้ผู้ใช้ ผู้ใช้ได้ไฟล์เร็วขึ้น และเซิร์ฟเวอร์ต้นทางรับงานน้อยลง
CDN ยังช่วยเรื่องที่สำคัญไม่แพ้กัน คือ ภาระงาน (Load) เซิร์ฟเวอร์ทุกเครื่องมี ความจุ (Capacity) จำกัด คือรับคำขอได้แค่จำนวนหนึ่งต่อวินาที ถ้าคำขอมาเกินกว่านั้น คำขอที่เกินต้องรอคิว และถ้าคิวเต็ม เซิร์ฟเวอร์จะปฏิเสธด้วยรหัส 503 Service Unavailable ซึ่งแปลว่า "ตอนนี้ไม่ว่างให้บริการ" นี่คือสิ่งที่เกิดกับเว็บขายบัตรคอนเสิร์ตในนาทีที่เปิดขาย
- ลดงานที่มาถึงต้นทาง ด้วย CDN ให้ edge ตอบไฟล์คงที่แทน
- เพิ่มจำนวนเซิร์ฟเวอร์ แล้วใช้ แบ่งคำขอให้ช่วยกันตอบ
- ทำให้แต่ละคำขอใช้งานน้อยลง เช่น เก็บผลลัพธ์ที่คำนวณแล้วไว้ใช้ซ้ำ (เล่มนี้บทที่ 6 จะลงลึก)
หยุดคิดสักนิด
ในห้องทดลอง ถ้าเปิด CDN แล้ว ทำไมผู้ใช้จำนวนมากยังทำให้เซิร์ฟเวอร์ต้นทางเกินกำลังได้อยู่ดี?
ภาพใหญ่สี่เล่ม หนึ่งเครื่องจักร
ลองย้อนดูเส้นทางทั้งหมด หน้าเว็บที่คุณเห็นถูกประกอบจากไฟล์ฝั่ง Frontend (เล่ม 01) เมื่อคุณกดปุ่ม คำขอวิ่งไปให้ Backend ตัดสินใจ (เล่ม 02) ข้อมูลที่ต้องจำถูกเก็บใน Database (เล่ม 03) และทั้งหมดนี้ไปถึงคุณได้เพราะ Hosting, Domain, DNS, HTTPS และ CDN ที่เราเพิ่งประกอบกันในบทนี้ ทุกครั้งที่คุณเปิดเว็บไซต์ เครื่องจักรทั้งระบบนี้ทำงานพร้อมกันในเวลาไม่ถึงวินาที
ก่อนสรุป ลองทดสอบว่าคุณจำได้ไหมว่าชิ้นส่วนแต่ละชิ้นแก้ปัญหาอะไร
ลองจัดกลุ่ม
ชิ้นส่วนไหนแก้ปัญหานี้?
01ปิดคอมพิวเตอร์ตอนกลางคืน แล้วไม่มีใครเปิดเว็บได้
02เว็บต้องมีที่อยู่สาธารณะที่คนทั้งโลกส่งคำขอมาถึงได้
03ไม่มีใครจำตัวเลข 203.0.113.10 ได้
04ย้ายเว็บไปเครื่องใหม่ แต่อยากให้ผู้ใช้พิมพ์ชื่อเดิม
05ลูกค้ากรอกรหัสผ่านบนไวไฟร้านกาแฟ
06คนในบราซิลโหลดรูปจากเซิร์ฟเวอร์ในเอเชียช้ามาก
เป้าหมาย: จับคู่ปัญหาทั้ง 6 ข้อกับชิ้นส่วนที่ถูกต้อง
SYSTEM SUMMARY
สรุปบทนี้
- 01
localhostแปลว่า "เครื่องนี้เอง" เว็บที่รันบนเครื่องเราจึงมีแค่เราที่เปิดได้ - 02Hosting คือการนำเว็บไซต์ไปไว้บนเซิร์ฟเวอร์ที่เปิดตลอดเวลาและมี IP Address สาธารณะ
- 03Domain คือชื่อที่คนจำได้ ส่วน DNS คือระบบที่แปลชื่อนั้นเป็น IP Address
- 04เบราว์เซอร์ถาม DNS ก่อน แล้วจึงส่ง Request ไปที่เซิร์ฟเวอร์ และได้ Response กลับมา
- 05HTTPS เข้ารหัสข้อมูลระหว่างทางและยืนยันชื่อโดเมน แต่ไม่ได้รับรองว่าเว็บไซต์ซื่อสัตย์
- 06CDN เก็บสำเนาไฟล์ไว้ใกล้ผู้ใช้ ช่วยลดความหน่วงและลดภาระของเซิร์ฟเวอร์ต้นทาง
- 07เซิร์ฟเวอร์มีความจุจำกัด งานที่เกินจะต้องรอคิว หรือถูกปฏิเสธด้วยรหัส 503
ท้ายบท
เช็กความเข้าใจ
ตอบแล้ว 0/4
ไม่มีคะแนนเก็บ ไม่มีใครเห็นคำตอบนอกจากคุณ ทุกตัวเลือกมีเหตุผลอธิบาย ทั้งข้อที่ถูกและข้อที่ผิด
ขั้นสุดท้าย ลองอธิบายด้วยคำพูดของคุณเอง ระบบไม่ได้อ่านหรือให้คะแนน แต่การเรียบเรียงเองบอกได้ดีที่สุดว่าเราเข้าใจจริงหรือยัง
อธิบายด้วยคำพูดของคุณเอง
ข้อความนี้อยู่แค่ในหน้าจอของคุณ ไม่ถูกส่งหรือบันทึกไว้ที่ไหน และระบบไม่ได้ให้คะแนน
เส้นทางการเรียนรู้
0/4
- ตามคำขอตั้งแต่พิมพ์ชื่อจนหน้าเว็บขึ้นจอ (ยังไม่ได้ทำ)ภาพ 1.2: กด 'ก้าวถัดไป' จนถึงก้าวสุดท้าย
- จับคู่ปัญหากับชิ้นส่วนที่แก้ได้ครบ 6 ข้อ (ยังไม่ได้ทำ)ภาพ 1.3: เลือกชิ้นส่วนให้ถูกครบทุกข้อ
- ตอบแบบทดสอบท้ายบทครบทุกข้อ (ยังไม่ได้ทำ)ตอบครบทุกข้อ ผิดได้ ไม่มีผลกับการติ๊ก
- อธิบายด้วยคำพูดของตัวเอง (ยังไม่ได้ทำ)เขียนอย่างน้อย 30 ตัวอักษร แล้วกด 'เทียบกับคำอธิบายตัวอย่าง'
รายการนี้บันทึกสิ่งที่คุณได้ลงมือทำในเบราว์เซอร์นี้ ไม่ใช่ใบรับรองว่าเข้าใจแล้ว วิธีวัดที่ดีที่สุดคือลองอธิบายให้คนอื่นฟัง ล้างบันทึกได้ที่ Machine Lens แท็บ DATABASE