ยูเรก้าเป็นผลิตภัณฑ์โอเพ่นซอร์สของ Netflix ที่ให้การลงทะเบียนและการค้นพบบริการและให้การใช้งานที่สมบูรณ์ของรีจิสทรีบริการและการค้นพบบริการ นอกจากนี้ยังเป็นหนึ่งในองค์ประกอบที่สำคัญที่สุดและหลักในระบบ SpringCloud
การแนะนำพื้นหลัง
ศูนย์บริการ
ศูนย์บริการเรียกอีกอย่างว่าศูนย์การลงทะเบียนซึ่งจัดการฟังก์ชั่นการบริการต่าง ๆ รวมถึงการลงทะเบียนบริการการค้นพบเบรกเกอร์วงจรโหลดการลดระดับ ฯลฯ เช่นฟังก์ชั่นต่าง ๆ ของพื้นหลังผู้ดูแลระบบ Dubbo
การเปลี่ยนแปลงอะไรจะเกิดขึ้นกับความสัมพันธ์ระหว่างศูนย์บริการ? วาดไดอะแกรมง่ายๆสองสามอย่างเพื่อช่วยให้คุณเข้าใจ
โครงการ A Project B
โดยปกติโทรหาโครงการ A เพื่อขอโครงการ B
หลังจากมีศูนย์บริการจะไม่สามารถลบและใช้บริการได้โดยตรงและจำเป็นต้องเรียกผ่านศูนย์บริการ
Project A Project B โครงการ B กำลังเรียกโครงการ C
ในเวลานี้ขั้นตอนในการโทรจะเป็นสองขั้นตอน: ขั้นตอนแรกคือโครงการที่มีการร้องขอครั้งแรกของ Project B Server จากศูนย์บริการจากนั้นร้องขอโครงการ B โครงการ C Project C จากศูนย์บริการ
โครงการข้างต้นเป็นเพียงการโทรง่าย ๆ ระหว่างสองหรือสาม แต่หากมีมากกว่า 20 โครงการและ 30 โครงการโครงการกระจายของ บริษัท ของเราได้ถึงกว่า 20 รายการภายในสิ้นปี 2558 วาดภาพเพื่ออธิบายความสัมพันธ์ระหว่างหลายสิบโครงการและทั้งหมดเป็นสาย การเปลี่ยนแปลงใด ๆ ในหนึ่งในโครงการจะเกี่ยวข้องกับหลายโครงการรีสตาร์ทซึ่งเป็นปัญหาและมีแนวโน้มที่จะเกิดข้อผิดพลาด ในการรับบริการผ่านศูนย์บริการคุณไม่จำเป็นต้องให้ความสนใจกับที่อยู่ IP ของโครงการที่คุณโทรหา ประกอบด้วยเซิร์ฟเวอร์หลายแห่ง ทุกครั้งที่คุณไปที่ศูนย์บริการเพื่อรับบริการที่มีให้โทร
เนื่องจากบริการทุกประเภทได้รับการลงทะเบียนในศูนย์บริการจึงมีฟังก์ชั่นขั้นสูงมากมายที่ต้องทำ ตัวอย่างเช่นบริการหลายแห่งให้บริการเดียวกันเพื่อปรับสมดุลการโหลด ตรวจสอบอัตราความสำเร็จของการเรียกเซิร์ฟเวอร์เพื่อทำการแตกวงจรลบจุดความผิดพลาดในรายการบริการ ตรวจสอบเวลาการโทรบริการเพื่อตั้งค่าน้ำหนักที่แตกต่างกันสำหรับเซิร์ฟเวอร์ที่แตกต่างกัน ฯลฯ
ก่อนที่จะพูดถึงยูเรก้าฉันจะนินทาเกี่ยวกับ netflix
netflix
การแนะนำต่อไปนี้มาจากสารานุกรม Baidu:
Netflix เป็น บริษัท อเมริกันที่ให้บริการสื่อสตรีมมิ่งออนไลน์ในสถานที่ในสหรัฐอเมริกาและแคนาดาและ DVD ที่กำหนดเองและ Blu-ray Disc Rental Services ก่อตั้งขึ้นในปี 1997 บริษัท มีสำนักงานใหญ่ใน Los Gaitu, California และได้เริ่มให้บริการสมัครสมาชิกในปี 1999 ในปี 2009 บริษัท สามารถจัดหาภาพยนตร์ดีวีดีได้มากถึง 100,000 เรื่องและมีสมาชิก 10 ล้านคน เมื่อวันที่ 25 กุมภาพันธ์ 2550 Netflix ประกาศว่าได้ขายดีวีดี 1 พันล้านเครื่อง A รายงานของเขากล่าวว่าในปี 2011 การขายภาพยนตร์ออนไลน์ Netflix คิดเป็น 45% ของยอดขายภาพยนตร์ออนไลน์ทั้งหมดของผู้ใช้ในสหรัฐอเมริกา
ครั้งแรกที่ฉันเห็นคำนี้มันเป็นจุดเริ่มต้นของละครหรือภาพยนตร์อเมริกันหลายเรื่อง ตัวแทนชาวอเมริกันที่ถ่ายทำโดย Netflix ได้แก่ "House of Cards", "Drug Lords" และ "Stranger Things" ต่อมาเมื่อฉันเรียน SpringCloud ฉันค้นพบ บริษัท Netflix และสงสัยว่าพวกเขาเป็น บริษัท เดียวกันหรือไม่ หลังจากตรวจสอบคำต่อท้ายอีเมลบน GitHub ฉันได้พิจารณาแล้วว่ามันเป็น บริษัท เดียวกัน ในความเป็นจริง Microservices ของ SpringCloud นั้นใช้ผลิตภัณฑ์โอเพ่นซอร์สของ Netflix
ส่วนประกอบเฟรมเวิร์กโอเพ่นซอร์สของ Netflix ได้รับการพิสูจน์แล้วในสภาพแวดล้อม Microservice ขนาดใหญ่ของ Netflix เป็นเวลาหลายปีและได้รับการยอมรับจากชุมชนอย่างค่อยเป็นค่อยไปเป็นส่วนประกอบมาตรฐานสำหรับการสร้างเฟรมเวิร์ก Microservice ผลิตภัณฑ์สปริงคลาวด์โอเพ่นซอร์สส่วนใหญ่ขึ้นอยู่กับบรรจุภัณฑ์เพิ่มเติมของส่วนประกอบโอเพ่นซอร์ส Netflix ซึ่งอำนวยความสะดวกให้กับนักพัฒนาฤดูใบไม้ผลิในการสร้างเฟรมเวิร์ก Microservice ขั้นพื้นฐาน สำหรับบาง บริษัท ที่ตั้งใจจะสร้างระบบ Microservice Framework ใช้ประโยชน์อย่างเต็มที่หรืออ้างถึงส่วนประกอบ Microservice โอเพ่นซอร์สของ Netflix (หรือสปริงคลาวด์) และการปรับแต่งองค์กรที่จำเป็นบนพื้นฐานนี้เป็นทางลัดไปยังสถาปัตยกรรม Microservice
ยูเรก้า
ตามคำแนะนำอย่างเป็นทางการ:
ยูเรก้าเป็นบริการที่เหลือ (การถ่ายโอนสถานะเป็นตัวแทน) ที่ใช้เป็นหลักในคลาวด์ AWS สำหรับการค้นหาบริการเพื่อจุดประสงค์ในการโหลดบาลานซ์และการล้มเหลวของเซิร์ฟเวอร์ระดับกลาง
ยูเรก้าเป็นบริการที่ใช้งานส่วนใหญ่ใช้ในคลาวด์ AWS และค้นหาบริการเพื่อโหลดบาลานซ์และการล้มเหลวของเซิร์ฟเวอร์ระดับกลาง
สปริงคลาวด์ห่อหุ้มโมดูลยูเรก้าที่พัฒนาโดย Netflix เพื่อเปิดใช้งานการลงทะเบียนและการค้นพบ ยูเรก้าใช้สถาปัตยกรรมการออกแบบ CS เซิร์ฟเวอร์ยูเรก้าเป็นเซิร์ฟเวอร์ที่มีฟังก์ชั่นการลงทะเบียนบริการเป็นศูนย์ลงทะเบียนบริการ microservices อื่น ๆ ในระบบใช้ไคลเอนต์ของยูเรก้าเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ยูเรก้าและรักษาการเชื่อมต่อหัวใจ ด้วยวิธีนี้บุคลากรการบำรุงรักษาระบบสามารถตรวจสอบได้ว่าแต่ละ microservice ในระบบจะทำงานตามปกติผ่านเซิร์ฟเวอร์ยูเรก้าหรือไม่ โมดูลอื่น ๆ ของสปริงคลาวด์ (เช่น Zuul) สามารถใช้เซิร์ฟเวอร์ยูเรก้าเพื่อค้นหาไมโครไซต์อื่น ๆ ในระบบและดำเนินการตรรกะที่เกี่ยวข้อง
ยูเรก้าประกอบด้วยสององค์ประกอบ: เซิร์ฟเวอร์ยูเรก้าและไคลเอนต์ยูเรก้า เซิร์ฟเวอร์ยูเรก้าใช้เป็นเซิร์ฟเวอร์การลงทะเบียนบริการ ไคลเอนต์ยูเรก้าเป็นไคลเอนต์ Java ที่ใช้เพื่อลดความซับซ้อนของการโต้ตอบกับเซิร์ฟเวอร์ทำหน้าที่เป็นตัวโหลดบาลานซ์แบบสำรวจและให้การสนับสนุนการล้มเหลวของบริการ Netflix ใช้ไคลเอนต์อื่นในสภาพแวดล้อมการผลิตซึ่งให้การปรับสมดุลโหลดแบบถ่วงน้ำหนักตามการรับส่งข้อมูลการใช้ทรัพยากรและสถานะข้อผิดพลาด
ใช้รูปภาพเพื่อทำความเข้าใจสิ่งต่อไปนี้:
รูปด้านบนอธิบายถึงสถาปัตยกรรมพื้นฐานของยูเรก้าโดยย่อประกอบด้วย 3 บทบาท:
1. เซิร์ฟเวอร์ยูเรก้า
2. ผู้ให้บริการ
3. บริการผู้บริโภค
การปฏิบัติกรณี
เซิร์ฟเวอร์ยูเรก้า
Spring Cloud ช่วยให้ฉันใช้ศูนย์ลงทะเบียนบริการและเราต้องการขั้นตอนง่ายๆเพียงไม่กี่ขั้นตอนในการทำให้เสร็จสมบูรณ์
1. เพิ่มการพึ่งพาใน POM
<การพึ่งพา> <การพึ่งพา> <roupId> org.springframework.cloud </groupId> <ratifactid> Spring-Cloud-Starter </Artifactid> </การพึ่งพาอาศัย> <การพึ่งพา <RoupID> org.springframework.boot </groupid> <ratifactid> การทดสอบสปริง-สตาร์เทสต์ </artifactid> <scope> ทดสอบ </cope>
2. เพิ่ม @EnableEurekaServer คำอธิบายประกอบลงในรหัสเริ่มต้น
@springbootapplication@enableeurekaserverpublic คลาส Springcloudeurekaapplication {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (springcloudeurekaapplication.class, args); -3. ไฟล์กำหนดค่า
โดยค่าเริ่มต้นรีจิสทรีบริการจะพยายามลง application.properties ตัวเองเป็นไคลเอน
Spring.application.name = Spring-Cloud-Eurekaserver.port = 8000eureka.client.register-with-eureka = falseeureka.client.fetch-registry = falseeureka.client.serviceurl.defaultzone = http: // localhost
eureka.client.register-with-eureka : ระบุว่าจะลงทะเบียนตัวเองด้วยเซิร์ฟเวอร์ยูเรก้าค่าเริ่มต้นเป็นจริงeureka.client.fetch-registry : ระบุว่าจะได้รับข้อมูลการลงทะเบียนจากเซิร์ฟเวอร์ยูเรก้าค่าเริ่มต้นเป็นจริงหรือไม่eureka.client.serviceUrl.defaultZone : ตั้งค่าที่อยู่ให้โต้ตอบกับเซิร์ฟเวอร์ยูเรก้า ทั้งบริการสอบถามและบริการลงทะเบียนจำเป็นต้องพึ่งพาที่อยู่นี้ ค่าเริ่มต้นคือ http: // localhost: 8761/Eureka; ที่อยู่หลายที่สามารถใช้และแยกออกได้หลังจากเริ่มโครงการแล้วให้ไปที่: http: // localhost: 8000/และคุณสามารถดูหน้าด้านล่างซึ่งไม่พบบริการ
กลุ่ม
บริการที่สำคัญเช่นนี้เป็นศูนย์การลงทะเบียนหากเป็นจุดเดียวมันจะทำลายล้างที่จะต้องเผชิญกับความล้มเหลว ในระบบกระจายศูนย์การลงทะเบียนบริการเป็นส่วนพื้นฐานที่สำคัญที่สุดและควรอยู่ในสถานะที่สามารถให้บริการได้ตลอดเวลา เพื่อรักษาความพร้อมใช้งานการใช้กลุ่มเป็นทางออกที่ดี ยูเรก้าใช้การปรับใช้ที่มีอยู่อย่างสูงโดยการลงทะเบียนซึ่งกันและกันดังนั้นเราจึงต้องกำหนดค่าเซิร์ฟเวอร์ยูเรคเพื่อกำหนดค่าบริการอื่น ๆ ที่มีอยู่เพื่อให้ได้การปรับใช้ที่มีอยู่อย่างสูง
ศูนย์ลงทะเบียนโหนดคู่
เป็นครั้งแรกที่เราพยายามสร้างศูนย์ลงทะเบียนสองโหนด
1. สร้าง Application-Peer1.Properties เป็นการกำหนดค่าของศูนย์บริการ Peer1 และจุดบริการไปยัง peer2
Spring.application.name = Spring-Cloud-Eurekaserver.port = 8000eureka.instance.hostname = peer1eureka.client.serviceurl.defaultzone = http: // peer2: 8001/eureka/
2. สร้าง Application-Peer2.Properties เป็นการกำหนดค่าของศูนย์บริการ Peer2 และจุด ServiceUrl เป็น peer1
Spring.application.name = Spring-Cloud-Eurekaserver.port = 8001eureka.instance.hostname = peer2eureka.client.serviceurl.defaultzone = http: // peer1: 8000/eureka/
3. การแปลงโฮสต์
เพิ่มการกำหนดค่าต่อไปนี้ในไฟล์โฮสต์
127.0.0.1 Peer1 127.0.0.1 Peer2
4. แพ็คเกจเริ่มต้น
ดำเนินการคำสั่งต่อไปนี้ในทางกลับกัน
#Package MVN Clean Package# เริ่มต้น Eurekajava ด้วย peer1 และ peeer2 การกำหนดค่าข้อมูลตามลำดับ -jar Spring-Cloud-Eureka-0.0.1-snapshot.jar--spring.profiles.act.act.jar-spring.java -jar-jar Spring-cloud-eureka-0.0.0.0.0.
หลังจากเริ่มทีละหนึ่งเบราว์เซอร์จะเข้า: http://localhost:8000/ การแสดงผลมีดังนี้:
ตามตัวเลขจะเห็นได้ว่าแบบจำลอง DS ของศูนย์การลงทะเบียนของ Peer1 มีข้อมูลการกำหนดค่าที่เกี่ยวข้องของ Peer2 และปรากฏใน Replicas ที่มีอยู่ เราหยุด Peer2 ด้วยตนเองเพื่อสังเกตและพบว่า Peer2 จะย้ายไปยังคอลัมน์ที่ไม่พร้อมใช้งานซึ่งระบุว่า Peer2 ไม่สามารถใช้ได้
การกำหนดค่าของโหนดคู่นี้เสร็จสมบูรณ์แล้ว
การใช้คลัสเตอร์ยูเรก้า
ในการผลิตเราอาจต้องใช้ศูนย์ลงทะเบียนสามแห่งขึ้นไปเพื่อให้แน่ใจว่ามีเสถียรภาพของบริการ หลักการกำหนดค่านั้นเหมือนกันและเราชี้ศูนย์การลงทะเบียนไปยังศูนย์ทะเบียนอื่น ๆ ตามลำดับ ที่นี่เราจะแนะนำการกำหนดค่าของสามกลุ่มเท่านั้น ในความเป็นจริงมันคล้ายกับศูนย์การลงทะเบียนสองโหนด แต่ละศูนย์การลงทะเบียนสามารถชี้ไปที่อีกสองโหนดตามลำดับและใช้ application.yml เพื่อกำหนดค่า
รายละเอียดการกำหนดค่า Application.yml มีดังนี้:
--Spring: แอปพลิเคชัน: ชื่อ: Spring-Cloud-Eureka โปรไฟล์: peer1server: พอร์ต: 8000eureka: อินสแตนซ์: โฮสต์: Peer1 ไคลเอนต์: ServiceUrl: defaultZone: http: // peer2: 8001/eureka/, http: // peer3: 8002/eureka Peer2Server: พอร์ต: 8001EUREKA: อินสแตนซ์: โฮสต์ชื่อ: Peer2 ไคลเอ็นต์: ServiceUrl: DefaultZone: http: // peer1: 8000/Eureka/, http: // peer3: 8002/eureka/--- ฤดูใบไม้ผลิ: แอปพลิเคชัน: ชื่อ: Spring-Cloud-Eureka Peer3 ไคลเอ็นต์: ServiceUrl: DefaultZone: http: // peer1: 8000/Eureka/, http: // peer2: 8001/Eureka/
เริ่มต้นศูนย์การลงทะเบียนยูเรก้าด้วยพารามิเตอร์การกำหนดค่าของ peer1, peer2 และ peer3 ตามลำดับ
java -jar Spring-Cloud-eureka-0.0.1-snapshot.jar ---spring.profiles.active = peer1java -jar-jar Spring-Cloud-eureka-0.0.1-snapshot.jar-spring.profiles.active = peer2java --spring.profiles.active = peer3
หลังจากเริ่มทีละหนึ่งเบราว์เซอร์จะเข้า: http://localhost:8000/ การแสดงผลมีดังนี้:
คุณสามารถดูข้อมูลที่เกี่ยวข้องเกี่ยวกับ peer2 และ peer3 ใน peer1 จนถึงตอนนี้คลัสเตอร์ยูเรก้าก็เสร็จสมบูรณ์แล้ว
รหัสตัวอย่าง
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น