บัญชี Alibaba Cloud: บทแนะนำการปรับใช้โครงการ Spring Cloud ตามสถาปัตยกรรมไมโครเซอร์วิสดั้งเดิมของ Alibaba Cloud
มีบทช่วยสอนมากมายเกี่ยวกับการปรับใช้ไมโครเซอร์วิสในตลาดซึ่งช่วยให้คุณสร้าง Nginx, Nacos, Sentinel, Zipkin บนเซิร์ฟเวอร์... หลังจากชุดหมัดรวมหน่วยความจำเซิร์ฟเวอร์จะระเบิดและไฟล์การกำหนดค่าต่างๆสามารถฆ่าคนได้ครึ่งหนึ่ง
ในยุคของคลาวด์มันไม่มีประสิทธิภาพเกินไปที่จะเล่นแบบนี้ Alibaba Cloud ได้สร้างฐานบริการขนาดเล็กทั้งหมด (ศูนย์การลงทะเบียนศูนย์การกำหนดค่าเกตเวย์การลดระดับขีดจำกัดปัจจุบัน)
บริการโฮสติ้งพื้นเมืองบนคลาวด์
。
บทช่วยสอนในวันนี้ไม่ได้พูดถึงทฤษฎีสถาปัตยกรรมที่ซับซ้อนหรือเรื่องไร้สาระเราใช้มาตรฐานโดยตรง
โครงการบริการไมโคร Spring Cloud
ตัวอย่างเช่นนำคุณไปสู่วิธีการต่อสู้จริงที่มีเหตุผลที่สุด
จากสถาปัตยกรรมดั้งเดิมของ Alibaba Cloud (MSE ACK/SAE) การปรับใช้และการเรียกใช้บริการขนาดเล็กจะเสร็จสมบูรณ์ตั้งแต่เริ่มต้น
。
การออกแบบสถาปัตยกรรมหลัก
ก่อนที่จะเริ่มให้ดูที่โทโพโลยีการปรับใช้บริการไมโครเนทีฟบนคลาวด์ที่เราต้องการบรรลุ:
[คำขอของลูกค้า]
│
▼
[Alibaba Cloud Native Gateway (MSE)] ── (บริการค้นหาอัตโนมัติ) ──> 【ศูนย์การลงทะเบียนไมโครเซอร์วิส (MSE Nacos)】
││
├────> 【ไมโครเซอร์วิส A (แอพพลิเคชั่นน้ำหนักเบา/SAE)】 <────────────────────────────────────────────────────────────────────────────
││
└ ────> 【ไมโครเซอร์วิส B (แอพพลิเคชั่นน้ำหนักเบา/SAE)】 <──────────────────────────────────────────────────────────────────────────────────────
วิธีการดั้งเดิมคือการติดตั้ง Nacos และ Gateway บน ECS ด้วยตัวเองในขณะที่วิธีการดั้งเดิมบนคลาวด์คือการใช้ Alibaba Cloud โดยตรง
ของ
MSE (เครื่องมือไมโครเซอร์วิส)
และ
SAE (โปรแกรมประยุกต์ Serverless)
。ด้วยวิธีนี้คุณไม่จำเป็นต้องรักษาชั้นล่างสุดของเซิร์ฟเวอร์แต่ยังสามารถปรับขนาดได้อย่างยืดหยุ่นในไม่กี่วินาที
ขั้นตอนที่1: การเปลี่ยนแปลงรหัสไมโครเซอร์วิส (ปรับให้เข้ากับคลาวด์เนทีฟ)
ในการย้ายโครงการ Spring Cloud ในเครื่องไปยังระบบคลาวด์ก่อนอื่นคุณต้องแก้ไขไฟล์คอนฟิกูเรชันเพื่อเชื่อมต่อกับ Nacos ที่โฮสต์ของ Alibaba Cloud
1.แนะนำการพึ่งพา
ตรวจสอบให้แน่ใจว่าไฟล์
Pom.xml
แนะนำมาตรฐาน Spring Cloud Alibaba พึ่งพา:
XML
<Dependency>
<GroupId> com.alibaba.cloud</groupId>
<ArtifactId> spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</Dependency>
<Dependency>
<GroupId> com.alibaba.cloud</groupId>
<ArtifactId> spring-cloud-starter-alibaba-nacos-config</artifactId>
</Dependency>
2. แก้ไขไฟล์กำหนดค่า
ในพื้นที่เรามักจะเขียนที่อยู่ Nacos เป็น
Localhost: 8848
。แต่ในการปรับใช้คลาวด์เนทีฟเรา
อย่าเขียนเส้นทาง IP ใดๆในรหัส
。ใช้ตัวแปรสภาพแวดล้อมโดยตรงเพื่อฉีดแบบไดนามิก:
YAML
# Bootstrap.yml หรือ application.yml
Spring:
Application:
ชื่อ: order-service # ชื่อบริการของคุณ
Cloud:
Nacos:
Discovery:
Server-addr: ${NACOS_SERVER_ADDR:localhost:8848} # ลำดับความสำคัญอ่านตัวแปรสภาพแวดล้อม
Namespace: ${NACOS_NAMESPACE:public}
Config:
Server-addr: ${NACOS_SERVER_ADDR:localhost:8848}
File-extension: yaml
💡ทำไมต้องเขียนแบบนี้? ด้วยการเขียน $ {ชื่อตัวแปร: ค่าเริ่มต้น} หากไม่มีการส่งผ่านตัวแปรสภาพแวดล้อมในระหว่างการพัฒนาในเครื่องเรายังคงใช้ localhost และในระบบคลาวด์แพลตฟอร์มคลาวด์จะช่วยเราฉีดที่อยู่คลัสเตอร์ Alibaba Cloud จริงโดยอัตโนมัติเพื่อให้ได้รหัส "ชุดของการคอมไพล์เรียกใช้ทุกที่".
ขั้นตอนที่2: เปิดและกำหนดค่า MSE Nacos ใน Alibaba Cloud (1นาที)
ตอนนี้เราไปที่ Alibaba Cloud เพื่อรับ "สมอง" ของศูนย์การลงทะเบียนไมโครเซอร์วิสและศูนย์กำหนดค่า
ลงชื่อเข้าใช้คอนโซล Alibaba Cloud ค้นหาและป้อน "Micro Service Engine MSE"
คลิก "ตัวอย่างการจัดการ" $ \ rightarrow $ "สร้างอินสแตนซ์" และเลือก "Nacos"
การเลือกเวอร์ชัน: เลือกเวอร์ชันเสถียรล่าสุด (เช่น Nacos 2.x) ข้อกำหนดคลัสเตอร์สามารถเลือกได้ตามปริมาณธุรกิจการทดสอบส่วนบุคคลหรือโครงการขนาดเล็กสามารถเลือกประเภทการทดสอบการพัฒนา (โหนดเดียว) และสภาพแวดล้อมการผลิตต้องเป็นประเภทมืออาชีพ (3โหนดที่มีความพร้อมสูง)
หลังจากสร้างเสร็จแล้วให้ไปที่หน้ารายละเอียดของอินสแตนซ์คุณจะเห็นที่อยู่เครือข่ายหลักสองที่อยู่: ที่อยู่อินทราเน็ต (คล้ายกับ mse-xxxx-nacos-ctl.tbls.com:8848) ที่อยู่เครือข่ายสาธารณะ (หากเป็นการดีบักเครือข่ายสาธารณะจำเป็นต้องเปิดใช้งานสภาพแวดล้อมการผลิตขอแนะนำให้ใช้อินทราเน็ตเพื่อความปลอดภัยเท่านั้น)
บันทึกที่อยู่อินทราเน็ตนี้ซึ่งเป็นตัวแปรที่ป้อมปราการถัดไปของเราจะมอบให้กับไมโครเซอร์วิส
ขั้นตอนที่3: ใช้ SAE เพื่อปรับใช้ส่วนประกอบไมโครเซอร์วิส (4นาที)
มีส่วนประกอบของไมโครเซอร์วิสมากมายหากคุณใช้ K8s(ACK) แบบเดิมในการปรับใช้คุณต้องเขียนไฟล์ YAML จำนวนมากและเข้าใจแนวคิดเช่น Pod และ Deployment
ขอแนะนำให้ใช้งานง่ายขึ้น
SAE (โปรแกรมประยุกต์ Serverless)
ช่วยให้คุณไม่ต้องเจ็บปวดจากการรักษาคลัสเตอร์ K8s คุณสามารถเรียกใช้โดยการอัปโหลดแพ็คเกจ Jar หรือมิเรอร์ได้โดยตรง
1.บรรจุรายการ
ดำเนินการคำสั่ง Maven ในไดเร็กทอรีรากของโครงการในเครื่องเพื่อบรรจุไมโครเซอร์วิสลงในแพ็คเกจ Jar มาตรฐาน:
แบช
Mvn clean package -DskipTests
รับแพ็ค
Order-service.jar
。
2.สร้างแอปพลิเคชันใน SAE
เข้าสู่คอนโซลของ Alibaba Cloud "Serverless Application Engine SAE"
คลิกที่ "รายการแอป" $ \ rightarrow $ "สร้างแอป"
วิธีการปรับใช้แอปพลิเคชัน: เลือก "การปรับใช้แพ็กเกจ JAR" (หากคุณคุ้นเคยกับ Docker คุณสามารถเลือกการปรับใช้แบบมิเรอร์ได้เช่นกัน)
สภาพแวดล้อมรันไทม์: เลือกรุ่น JDK ที่สอดคล้องกัน (เช่น Java 8หรือ Java 11/17)
อัปโหลด order-service.jar ที่คุณเพิ่งแพ็ค
3.การฉีดตัวแปรสภาพแวดล้อม (ขั้นตอนหลัก)
ในหน้าการปรับใช้
"การตั้งค่าขั้นสูง"
ค้นหา
"ตัวแปรสิ่งแวดล้อม"
ตัวเลือกจำช่องว่างที่เราทิ้งไว้ในโค้ดขั้นตอนแรก
บิต? เพิ่มที่นี่:
คีย์ (Key)
มูลค่า (Value)
NACOS_SERVER_ADDR
กรอกที่อยู่อินทราเน็ต MSE Nacos ที่คัดลอกในขั้นตอนที่สอง
NACOS_NAMESPACE
หากคุณสร้างเนมสเปซใหม่ใน Nacos ให้กรอก ID หากไม่มีให้กรอกข้อมูลสาธารณะ
4.เปิดตัวแอป
คลิกยืนยันการสร้างและปรับใช้ SAE จะกำหนดเวลาทรัพยากรคอมพิวเตอร์ให้คุณโดยอัตโนมัติในพื้นหลังดึงคอนเทนเนอร์ขึ้นและเรียกใช้แพ็คเกจ Jar รอ1 ~ ใน2นาทีฉันเห็นว่าสถานะกลายเป็น "กำลังดำเนินการ" ซึ่งแสดงว่าบริการทำงานได้สำเร็จในระบบคลาวด์
คุณสามารถกลับเข้าสู่ระบบ
คอนโซล MSE Nacos
, รีเฟรชในรายการ "การจัดการบริการ" คุณจะเห็น
Order-service
ลงทะเบียนเรียบร้อยแล้ว!
ขั้นตอนที่4: กำหนดค่าเกตเวย์เนทีฟบนคลาวด์เพื่อเข้าถึงภายนอก (2นาที)
ไมโครเซอร์วิสทำงานบนอินทราเน็ตแต่ผู้ใช้เครือข่ายภายนอกจะเข้าถึงได้อย่างไร? เราต้องการพอร์ทัลแบบรวมคือไมโครเซอร์วิสเกตเวย์ Alibaba Cloud MSE มี "เกตเวย์เนทีฟบนคลาวด์" ในตัวซึ่งแทนที่ Spring Cloud Gateway แบบเดิมได้อย่างสมบูรณ์แบบ
เข้าสู่คอนโซล MSE $ \ rightarrow $ Cloud Native Gateway $ \ rightarrow $ รายการอินสแตนซ์เกตเวย์คลิกสร้าง
เชื่อมโยงตัวอย่าง MSE Nacos ที่คุณเพิ่งสร้างขึ้น
หลังจากสร้างเกตเวย์สำเร็จแล้วให้ไปที่หน้ารายละเอียดเกตเวย์และคลิก "แหล่งบริการ" $ \ rightarrow $ "เพิ่มแหล่งบริการ" ทางด้านซ้ายประเภทแหล่งที่มาเลือก "MSE Nacos" และตรวจสอบอินสแตนซ์ Nacos ของคุณ
คลิก "การกำหนดเส้นทาง" ทางด้านซ้าย $ \ rightarrow $ "สร้างเส้นทาง": ชื่อเส้นทาง: เช่น order-route เส้นทางการจับคู่: ตัวอย่างเช่นอินพุต/order/ บริการเป้าหมาย: เลือกบริการออร์เดอร์ที่คุณลงทะเบียนใน Nacos โดยตรงในเมนูแบบเลื่อนลง
คลิกบันทึกและเผยแพร่
ณจุดนี้ให้เข้าถึงเส้นทางการเพิ่ม IP สาธารณะที่ให้บริการโดยเกตเวย์ดั้งเดิมบนคลาวด์ (เช่น https:// Gateway IP/order/create)
เกตเวย์จะรับรู้โหนดไมโครเซอร์วิสใน Nacos โดยอัตโนมัติและส่งต่อคำขออย่างสมบูรณ์แบบ
คู่มือการต่อสู้จริงเพื่อหลีกเลี่ยงหลุมและการปรับแต่งขั้นสูง
หน้าจอสีขาว/ไม่สามารถลงทะเบียน? ตรวจสอบกลุ่มความปลอดภัยเครือข่ายก่อน! แอปพลิเคชัน MSE Nacos และ SAE ต้องอยู่ภายใต้ VPC เดียวกัน (Virtual Private Cloud) และสวิตช์เดียวกันและสามารถสื่อสารผ่านอินทราเน็ตได้หากคุณพบว่าไมโครเซอร์วิสใน SAE รายงานข้อผิดพลาดอย่างบ้าคลั่งว่า "เชื่อมต่อกับ Nacos หมดเวลา" ให้ตรวจสอบแอตทริบิวต์ VPC ของผลิตภัณฑ์ทั้งสองทันทีว่าสอดคล้องกันหรือไม่
ไมโครเซอร์วิสปัญหาออฟไลน์ที่หรูหราไมโครเซอร์วิสกลัวมากที่สุดที่จะทำให้ผู้ใช้ที่กำลังเยี่ยมชมรายงานข้อผิดพลาดเมื่อมีการเผยแพร่เวอร์ชันใหม่ Alibaba Cloud SAE มาพร้อมกับฟังก์ชันออฟไลน์ที่หรูหรา (ออฟไลน์แบบไม่สูญเสีย) เดิม
เหตุผล: ก่อนที่ไมโครเซอร์วิสจะถูกทำลาย SAE จะส่งสัญญาณออกจากระบบไปยัง MSE Nacos ในเชิงรุกเพื่อไม่ให้เกตเวย์ถ่ายโอนการรับส่งข้อมูลใหม่อีกต่อไปและปิดคอนเทนเนอร์หลังจากประมวลผลคำขอเก่าแล้ววิธีใช้: ในการตั้งค่าขั้นสูงของแอปพลิเคชัน SAE ให้เปิดสวิตช์ "Micro Service Lossless Offline" โดยไม่ต้องแก้ไขโค้ดเลย
หน่วยความจำล้น (OOM) รายงานข้อผิดพลาดมือใหม่หลายคนสับสนหน่วยความจำ JVM กับหน่วยความจำระบบหากคุณซื้ออินสแตนซ์ข้อมูลจำเพาะ1คอร์2G ใน SAE อย่าเขียน-Xmx2g ในพารามิเตอร์ JVM เนื่องจากระบบเองต้องใช้หน่วยความจำในการทำงานกฎทอง: หน่วยความจำฮีปสูงสุดของ JVM (-Xmx) ควรตั้งค่าเป็น60% ของข้อกำหนดอินสแตนซ์ ~ ประมาณ70% ตัวอย่างเช่นตัวอย่างข้อกำหนด2G พารามิเตอร์ JVM แนะนำให้กำหนดค่าเป็น-Xmx1300m
ยินดีด้วย! ณจุดนี้ระบบบริการไมโครเนทีฟบนคลาวด์ที่มีความพร้อมใช้งานสูงซึ่งสามารถปรับขนาดได้โดยอัตโนมัติและยืดหยุ่นได้ทำงานอย่างสมบูรณ์บอกลาการทำงานและการบำรุงรักษามิดเดิลแวร์ที่ยุ่งยากคุณสามารถทุ่มเทพลังทั้งหมดให้กับการเขียนโค้ดธุรกิจ
