Google Cloud Account Sale: ใช้ GCP Cloud Run เป็นเวลา5นาทีเพื่อปรับใช้เว็บแอปพลิเคชันโดยไม่ต้องใช้เซิร์ฟเวอร์ (Serverless)
ในฐานะนักพัฒนาหรือสถาปนิกฉันมักจะเขียนเว็บแอปพลิเคชันที่ยอดเยี่ยม (ไม่ว่าจะเป็น Node.js, Python Flask, Go หรือ Java Spring Boot) สิ่งที่ต่อต้านมากที่สุดมักจะไม่ใช่การเปลี่ยนข้อบกพร่องแต่
การ部署
。
ขั้นตอนการปรับใช้แบบเดิมเป็นเพียงตัวฆ่าเวลา: ก่อนอื่นคุณต้องซื้อเครื่องเสมือน VM ติดตั้งระบบปฏิบัติการติดตั้งสภาพแวดล้อม Docker และกำหนดกฎการเข้าถึงกลุ่มความปลอดภัยต่างๆเมื่อการเข้าชมมีมากคุณต้องพิจารณาว่าจะมีส่วนร่วมในการทำโหลดบาลานซ์และการจัดสรรคลัสเตอร์อย่างไรหากการเข้าชมไม่มีคุณต้องดูเซิร์ฟเวอร์ไม่ทำงานและการหักเงินในการ์ดก็ไร้ผลคลัสเตอร์ K8s ที่สร้างขึ้นเองนั้นสูงแต่เกณฑ์การดำเนินงานและการบำรุงรักษาที่สูงและงบประมาณฮาร์ดแวร์สามารถทำให้ทีมเล็กๆเสียชีวิตได้โดยตรง
ในระบบนิเวศของ Google Cloud(GCP, Google Cloud) มีการต่อต้านการลดขนาดที่ออกแบบมาเพื่อปลดปล่อยและพัฒนาผลผลิตที่เรียกว่า
Cloud Run
。
ตรรกะหลักของมันบริสุทธิ์มาก:
คอนเทนเนอร์ Serverless (ไม่มีเซิร์ฟเวอร์)
。คุณจะต้องบรรจุแอปพลิเคชันของคุณลงในมิเรอร์ Docker มาตรฐานและโยนไปที่นั่นจากนั้นจะคาย URL เครือข่ายสาธารณะที่มีใบรับรอง HTTPS ของตัวเองการจัดสรรภาระงานทั่วโลกและการปรับขนาดแบบยืดหยุ่นอัตโนมัติภายใน5นาที
อยู่ยงคงกระพันที่สุดคือรูปแบบการเรียกเก็บเงิน:
การเรียกเก็บเงินตามความต้องการเต็มรูปแบบรองรับการลดขนาดลงเหลือ0(Scale to Zero)
。ซึ่งหมายความว่าหากไม่มีใครเข้าชมเว็บไซต์ของคุณจะไม่ใช้ CPU และหน่วยความจำใดๆและ Google จะไม่หักเงินสักบาท
วันนี้เราไม่ท่องแนวคิดอย่างเป็นทางการและปฏิเสธเรื่องไร้สาระนำรหัสของคุณมาพูดคุยโดยตรงจากสถาปัตยกรรมหลักและนำคุณไปออนไลน์แอปพลิเคชันเว็บ Serverless ตัวแรกของคุณอย่างราบรื่นภายใน5นาที
ขั้นตอนที่1: การถอดชิ้นส่วนลึก, Cloud Run's "Minimalist World Model"
ก่อนการปรับใช้คุณต้องเข้าใจตรรกะการทำงานทางกายภาพของ Cloud Run ในใจของคุณมิฉะนั้นคุณจะตาบอดเมื่อคุณเข้าสู่คอนโซลและเผชิญกับพารามิเตอร์การทำงานพร้อมกันและหน่วยความจำต่างๆ
สตรีมข้อมูลพื้นฐานของระบบทั้งหมดถูกเชื่อมอย่างไร้รอยต่อโดยส่วนประกอบหลักสามส่วน:
ตู้คอนเทนเนอร์มิเรอร์ (Artifact Registry): เทอร์มินัลตู้คอนเทนเนอร์รหัสของคุณนี่คือคลังสินค้ามิเรอร์รุ่นใหม่ของ GCP แทนที่ GCR เก่าแอปของคุณจะถูกบรรจุลงในกระจก Docker และเก็บไว้ที่นี่
Cloud Run Service (Service): สมองตั้งเวลา Serverless ของคุณมีหน้าที่ในการจ้องมองกระจกเมื่อมีคำขอ HTTP บนเครือข่ายสาธารณะมันจะดึงมิเรอร์ขึ้นและกลายเป็นอินสแตนซ์คอนเทนเนอร์เพื่อรับลูกค้า
เครื่องยนต์อัตโนมัติ (Auto-scaling): ตำรวจจราจรจราจรของคุณหากมีคน10,000คนเริ่มคำขอในเวลาเดียวกันมันจะดึงตู้คอนเทนเนอร์หลายสิบตู้ในพื้นหลังทันทีเพื่อแบ่งปันแรงกดดันหากไม่มีใครเข้าถึงเป็นเวลาหลายนาทีมันจะทำลายตู้คอนเทนเนอร์ทั้งหมด
เข้าสู่สถานะการนอนหลับที่มีค่าใช้จ่าย0
ขั้นตอนที่สอง: การฝึกซ้อมการต่อสู้จริง-5นาทีในสายการประกอบออนไลน์
สมมติว่าคุณได้เขียนเว็บแอปพลิเคชัน Node.js หรือ Python พื้นฐานที่สุดแล้วและมีการติดตั้ง Docker และ GCP Command Line Tools (gcloud CLI) ในเครื่อง
ขั้นตอนที่1: รหัสท้องถิ่น "Container" (Dockerfile)
ในไดเร็กทอรีรากโครงการของคุณสร้างมาตรฐานใหม่
Dockerfile
เอกสาร. นี่คือหนึ่งในแอปพลิเคชัน Node.js ที่ง่ายที่สุดเป็นตัวอย่าง:
# ใช้กระจก Node ที่มีน้ำหนักเบาอย่างเป็นทางการ
FROM node:18-slim
# การตั้งค่าไดเรกทอรีการทำงาน
WORKDIR/usr/src/app
# คัดลอกการกำหนดค่าการพึ่งพาและติดตั้ง
COPY package *.json./
RUN npm install -- only = production
# คัดลอกรหัสแพคเกจทั้งหมด
COPY ..
# พอร์ตสัมผัส (หมายเหตุ: Cloud Run จะฉีดตัวแปรสภาพแวดล้อมที่เรียกว่า PORT ลงในคอนเทนเนอร์โดยค่าเริ่มต้นโดยปกติคือ8080)
EXPOSE 8080
#คำสั่งเริ่มต้นต้องฟัง0.0.0.0
CMD [ "node", "server.js"]
Core Pit Guide: ในรหัสแอปพลิเคชันของคุณอย่าเขียน IP การตรวจสอบเป็น127.0.0.1คุณต้องตรวจสอบ0.0.0.0และพอร์ตจะอ่านตัวแปรสภาพแวดล้อม Process.env.PORT โดยตรงถ้าเป็น Python คำสั่งเริ่มต้นจะเขียนเป็น CMD ["gunicorn", "-bind", "0.0.0.0:8080", "main:app"] หากการตรวจสอบไม่ถูกต้อง Cloud Run จะรายงานการหยุดทำงานโดยตรงเนื่องจากไม่สามารถรับการตอบสนองการเต้นของหัวใจของคอนเทนเนอร์ได้เมื่อเริ่มทำงาน
ขั้นตอนที่2: สร้างท่าเรือมิเรอร์ใน GCP (Artifact Registry)
เปิดเทอร์มินัลของคุณและใช้
Gcloud
คำสั่งในการสร้างคลังสินค้า Docker ในพื้นที่ที่ใกล้ที่สุดของคุณสมมติว่าเราเลือกภูมิภาคไต้หวันของจีน (
Asia-east1
) เรียกว่า ID โครงการ
My-serverless-project
:
Gcloud artifacts repositories create my-docker-repo\
-- Repository-format = docker \
-- Location = asia-east1 \
-- Description = "My
Serverless App Repo"
ขั้นตอนที่3: แพ็คท้องถิ่นและสตรีมมิ่งบนคลาวด์
ใช้ Docker ในเครื่องเพื่อรวบรวมมิเรอร์และนำเส้นทางคลังสินค้า GCP ที่สมบูรณ์ในชื่อ
รหัสการจัดตำแหน่ง (กำหนดค่าการรับรอง Docker):Bashgcloud auth configure-docker asia-east1-docker.pkg.dev
แพคเกจการรวบรวม: Bashdocker build -t asia-east1-docker.pkg.dev/my-serverless-project/my-docker-repo/web-app: v1.0.
ผลักดันเต็มรูปแบบ: Bashdocker push asia-east1-docker.pkg.dev/my-serverless-project/my-docker-repo/ web-app:v1.0
เมื่อเห็นแถบความคืบหน้าที่คุ้นเคยบนเทอร์มินัลเสร็จสมบูรณ์ตู้คอนเทนเนอร์ของคุณก็อยู่ในระบบคลาวด์ที่ปลอดภัยแบบกระจายของ Google
ขั้นตอนที่4: ช่วงเวลาที่เจ๋งที่สุด-เปิดใช้งาน Cloud Run ในคลิกเดียว
กลับไป
คอนโซล GCP
,ค้นหาแล้วเข้าไป
คลาวด์รัน
หน้า
คลิกที่ด้านบน
"สร้างบริการ (Create Service)"
เข้าสู่สนามรบการกำหนดค่าหลัก:
ปรับใช้เวอร์ชันแก้ไข: คลิกเพื่อเลือกและเลือกภาพเว็บ-แอป: v1.0ที่คุณเพิ่งดันขึ้น
ชื่อบริการ: ชื่อ my-web-service 。
ภูมิภาค (ภูมิภาค): ขอแนะนำให้สอดคล้องกับคลังสินค้ามิเรอร์เลือก asia-east1 (ไต้หวัน) เครือข่ายการเข้าถึงภายในประเทศมีความล่าช้าต่ำมาก
การขยายตัวอัตโนมัติ (Autoscaling): จำนวนตัวอย่างขั้นต่ำ: อินพุต0 (เปิดเทคโนโลยีสีดำที่ไม่สามารถเข้าถึงได้โดยไม่ต้องหักเงิน) จำนวนอินสแตนซ์สูงสุด: เพียงแค่ป้อน10ในช่วงเริ่มต้นของการทดสอบเพื่อป้องกันไม่ให้เกิดการใช้จ่ายเกินตัวเนื่องจากการรับส่งข้อมูลที่เป็นอันตราย
Authentication: ในฐานะที่เป็นเว็บแอปพลิเคชันสำหรับสาธารณะคุณไม่ลังเลที่จะเลือก "อนุญาตให้มีการโทรแบบไม่ระบุตัวตน" หากคุณไม่ตรวจสอบบุคคลภายนอกที่เยี่ยมชมเว็บไซต์ของคุณจะถูกปฏิเสธโดยตรงโดย Google Return 403
คลิกที่ด้านล่าง
“สร้าง (Create)”
。
ขั้นตอนที่สาม: การตรวจสอบออนไลน์และไซต์จริง "เริ่มต้นเย็น"
หลังจากคลิกที่สร้างแล้วให้จ้องไปที่วงกลมเล็กๆบนหน้าจอ Cloud Run จะกำหนดค่าการจัดสรรภาระงานการทำแผนที่ชื่อโดเมนและอุโมงค์การเข้ารหัส SSL ให้คุณโดยอัตโนมัติในพื้นหลัง
โดยปกติเพียง
30วินาทีถึง1นาที
, ขอเกี่ยวสีเขียวขนาดใหญ่จะสว่างขึ้นที่ด้านบนของคอนโซลและจะคายรูปร่างของ htt ออกมาให้คุณ
Ps: //
My-web-service-xxxx-de.a.run.app
เว็บไซต์ถาวร HTTPS อย่างเป็นทางการ
คลิกที่ URL นี้หน้าเว็บจะเปิดในไม่กี่วินาที! ขอแสดงความยินดีแอปพลิเคชันเว็บ Serverless ของคุณมีชื่อเสียงอย่างสมบูรณ์บนเว็บสาธารณะ
การทดลองวงในฮาร์ดคอร์: "สตาร์ทเย็น" คืออะไร?
เพื่อตรวจสอบพลังของ "หดเป็น0" โปรดปิดหน้าเว็บออกจากแป้นพิมพ์ด้วยมือทั้งสองข้างและรออย่างเงียบๆเป็นเวลา15นาที
ในตอนนี้ให้ไปที่ดัชนีการตรวจสอบ (Metrics) ของคอนโซลและคุณจะพบว่าจำนวนอินสแตนซ์ที่ใช้งานอยู่ในพื้นหลังเป็นศูนย์อย่างสมบูรณ์ในเวลานี้
เนื่องจากไม่มีการดำเนินการใดๆการเรียกเก็บเงินของคุณจึงเป็นแบบคงที่อย่างสมบูรณ์
ตอนนี้คลิกอีกครั้งเพื่อเปิด URL เครือข่ายสาธารณะคุณจะพบว่าหน้าเว็บไม่ได้เปิดในไม่กี่วินาทีเหมือนเมื่อก่อนแต่ค้างเล็กน้อย
1ถึง2วินาที
ปัดออกในภายหลัง
วงในเทคโนโลยี: นี่คือ "Cold Start" ที่มีชื่อเสียงในสื่อสตรีมมิ่งและเซิร์ฟเวอร์เนื่องจากไม่มีใครเข้าชมในช่วง15นาทีแรก Google จึงล้างคอนเทนเนอร์ของคุณจนหมดเมื่อคุณคลิกอีกครั้งระบบจะต้องส่งทรัพยากรฟิสิคัลแมชชีนชั่วคราวในพื้นหลังดาวน์โหลดมิเรอร์ Docker ของคุณอีกครั้งคลายซิปและเริ่มโปรแกรมหลักความล่าช้า1ถึง2วินาทีนี้เป็นราคาเล็กน้อยที่ต้องจ่ายเพื่อประหยัดเงิน
ขั้นตอนที่สี่: ประวัติการหลีกเลี่ยงเลือดและน้ำตาของโครงสร้างระดับการค้าและการปรับดัชนีโรงงานขนาดใหญ่
สถาปัตยกรรม Serverless นี้ใช้งานได้ง่ายมากแต่ในสภาพแวดล้อมการผลิตที่มีการทำงานพร้อมกันสูงระดับองค์กรอย่างแท้จริงสถาปนิกการดำเนินงานและการบำรุงรักษาจะต้องดำเนินการ "การผ่าตัดที่ละเอียดอ่อน" กับพารามิเตอร์เริ่มต้นทันทีมิฉะนั้นคุณจะเหยียบสองอันต่อไปนี้โดยไม่ได้ตั้งใจหลุมใหญ่:
1.ระเบิด "กำแพงพร้อมกันของซอมบี้" ของฐานข้อมูลส่วนหลัง
นักพัฒนามือใหม่หลายคนรู้สึกว่าเนื่องจาก Cloud Run สามารถขยายได้โดยอัตโนมัติไม่จำกัดฉันจะตั้งค่าอินสแตนซ์สูงสุดเป็น1,000เป็นผลให้ทันทีที่โปรโมชั่น Black Friday มาถึงการเข้าชมก็พุ่งสูงขึ้นและ Cloud Run ก็ทุ่มเทอย่างมากในการดึงตู้คอนเทนเนอร์500ตู้เพื่อรับลูกค้าในทันที
เกิดภัยพิบัติ: ในช่วงเวลาที่มีการเปิดตัวคอนเทนเนอร์500คอนเทนเนอร์คำขอการเชื่อมต่อจะถูกเปิดตัวไปยังฐานข้อมูลเชิงสัมพันธ์ของ Cloud SQL แบบย้อนหลังจำนวนการเชื่อมต่อสูงสุดของฐานข้อมูล MySQL แบบดั้งเดิมอาจอยู่ที่200เท่านั้นด้วยเหตุนี้ฐานข้อมูลจึงถูกทำลายลงทันทีโดยการรับส่งข้อมูลอย่างกะทันหันทำให้ธุรกิจทั้งหมดเป็นอัมพาต
โซลูชันมาตรฐานของผู้ผลิตรายใหญ่: ป้อนการตั้งค่าขั้นสูงของ "คอนเทนเนอร์การเชื่อมต่อความปลอดภัย" ของ Cloud Run: เพิ่ม "จำนวนพร้อมกันสูงสุด" จากค่าเริ่มต้น (เช่นตั้งค่าเป็น80หรือ100) ซึ่งหมายความว่าอินสแตนซ์คอนเทนเนอร์อนุญาตให้ประมวลผลคำขอ HTTP พร้อมกัน80รายการในเวลาเดียวกันเมื่อ80หลุมเต็ม Google จะดึงคอนเทนเนอร์ใหม่ร่วมมือกับการตั้งค่าพูลการเชื่อมต่อ (Connection
Pool) ล็อคขีดจำกัดสูงสุดของการขยายตัวสูงสุดและปกป้องสินทรัพย์หลักส่วนหลังที่เปราะบาง
2.ไม่สามารถทนต่อทักษะเวทย์มนตร์ "สตาร์ทเย็น" ได้
หากธุรกิจของคุณเป็นการชำระเงินอีคอมเมิร์ซออนไลน์หลักหรืออินเทอร์เฟซ API ที่มีความไวต่อความล่าช้าอย่างมากหากผู้ใช้พบความล่าช้าเป็นเวลา2วินาทีในระหว่างการชำระเงินเขาอาจยกเลิกการชำระเงินโดยตรง
เคล็ดลับการปรับแต่งสถาปนิก: ไม่มีอาหารกลางวันฟรีในโลกหากคุณต้องการกำจัดการสตาร์ทเย็นให้ไปที่การตั้งค่าการลดขนาดและเปลี่ยน "อินสแตนซ์ขั้นต่ำ (อินสแตนซ์ขั้นต่ำ)" จาก0เป็น1
ค่าใช้จ่ายและผลประโยชน์: หลังจากเปลี่ยนเป็น1แม้ว่าจะไม่มีใครมาเยี่ยมในช่วงกลางดึก Google จะเก็บภาชนะบรรจุระดับต่ำไว้ให้คุณในห้องคอมพิวเตอร์แม้ว่าสิ่งนี้จะมีค่าเบี้ยยังชีพคงที่จำนวนเล็กน้อย (ประมาณไม่กี่ดอลลาร์ต่อเดือน) แต่ก็แลกกับการเข้าถึงตลอด24ชั่วโมงของผู้ใช้ทั่วโลกในระดับมิลลิวินาทีซึ่งจะช่วยขจัดข้อบกพร่องของประสบการณ์ที่เกิดจากการสตาร์ทเย็นได้อย่างสมบูรณ์.
สรุป
การใช้ GCP Cloud Run เพื่อเล่นกับการปรับใช้ Serverless สาระสำคัญระดับอุตสาหกรรมหลักอยู่ที่สิบหกคำ:
แพ็คเกจมิเรอร์ขยายตามต้องการควบคุมการขยายตัวติดขัดและพร้อมกัน
。
คุณไม่จำเป็นต้องเสียเวลาอันมีค่าไปกับการทำงานและการบำรุงรักษาระบบเล็กน้อยอีกต่อไปเช่นการติดตั้งระบบปฏิบัติการและการซ่อมแซมไฟร์วอลล์ตราบใดที่โค้ดของคุณสามารถวิ่งเข้าไปในคอนเทนเนอร์ Docker ในเครื่องได้ Cloud Run สามารถให้แนวป้องกันส่วนหน้าระดับองค์กรที่มีความยืดหยุ่นไม่จำกัดการกู้คืนระบบอัตโนมัติและงบประมาณที่จำกัดอย่างมากการคืนอำนาจที่โดดเด่นให้กับโค้ดนั้นเป็นท่าทางการพัฒนาที่แท้จริงและสง่างามที่สุดในยุคคลาวด์สมัยใหม่

