ฉันใช้ gRPC เพื่อสื่อสารระหว่าง Java (ทำงานบนโฮสต์) และ Python (ทำงานบน Guest VM ของฉัน) ซอฟต์แวร์ของฉันตั้งค่า VMs บางตัวเมื่อเริ่มต้นด้วย libvirt ฉันระบุเครือข่ายของฉันด้วยช่วง DHCP ดังนี้:
<network>
...
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.128' end='192.168.122.254'/>
<host mac="00:16:3e:77:e2:ed" ip="192.168.122.128"/>
<host mac="00:16:3e:3e:a9:1a" ip="192.168.122.129"/>
...
</dhcp>
</ip>
...
</network>
เมื่อทุกอย่างถูกตั้งค่าและ VM ของฉันกำลังทำงานอยู่ฉันจะสร้างสแนปชอตของ VM แต่ละรายการ ตอนนี้เวิร์กโฟลว์ของซอฟต์แวร์จะเป็นดังนี้: เปิดอินเทอร์เฟซ gRPC กับ VM ของผู้เยี่ยมชมที่มี IP ที่ระบุข้างต้นสำหรับที่อยู่ mac ตั้งเวลาที่ถูกต้อง (เวลาตอนนี้แตกต่างจากสแน็ปช็อตและไม่มีอินเทอร์เน็ต) คืนค่าภาพรวมและทำซ้ำ
ในรหัส Python บน VM ฉันส่งข้อความ ping ทุกๆ 5s ไปยังโฮสต์ (ชนิดของการเต้นของหัวใจ) เวลาส่วนใหญ่ใช้งานได้ดีและฉันได้รับข้อความบนโฮสต์ในโค้ด Java อย่างไรก็ตามในบางครั้งฉันไม่ได้รับข้อความอีกต่อไปบนโฮสต์เป็นเวลา 3 นาที (หลังจากนั้นฉันก็ยกเว้นการหมดเวลาที่กำหนดเอง) ไม่มีข้อผิดพลาดหรือการวนซ้ำไม่สิ้นสุดในโค้ด Python และไม่มีการยกเว้นในฝั่ง Java ดังนั้นปัญหาจะต้องอยู่ที่อื่น
ในขณะที่ตรวจสอบสาเหตุของพฤติกรรมแปลก ๆ นี้ฉันเจอ DHCP ครั้ง VMs ของฉันรับ IP จากช่วง DHCP ที่กำหนดค่าผ่าน libvirt (ดูด้านบน) การเช่า DHCP ถูกกำหนดให้หมดอายุใน 1 ชั่วโมง ที่น่าสนใจการหมดเวลาจากข้อความ heartbeat มักจะเกิดขึ้น (ถ้ามันเกิดขึ้นไม่เสมอไป) ประมาณ 1 ชั่วโมงหลังจากที่ฉันทำสแนปชอตเริ่มต้นที่ฉันกู้คืน ปัญหาของฉันอาจเกี่ยวข้องกับขั้นตอนการต่ออายุการเช่า DHCP โดยที่ VM อยู่ในสถานะที่ไม่ได้มี IP เริ่มต้นอีกต่อไปหรือไม่ ตัวอย่างเช่นฉันเปิดการเชื่อมต่อ gRPC ของฉันไปที่ 192.168.122.128 รับข้อความ heartbeat และทันใดนั้นเนื่องจาก DHCP หมดอายุสัญญาเช่า IP ก็เปลี่ยนไปและ gRPC ไม่สามารถส่งข้อความเพิ่มเติมได้อีกหรือไม่ หากนั่นอาจเป็นปัญหาฉันควรทำอย่างไรกับปัญหานี้?
ฉันได้ทำการทดสอบที่กำหนดเองเพิ่มเติมที่ฉันเปิดการเชื่อมต่อ gRPC กับ VM จากนั้นฉันเปลี่ยนที่อยู่ IP บน VM ด้วยตนเองจากนั้นเปลี่ยนกลับเป็น IP ดั้งเดิม ฉันสังเกตเห็นพฤติกรรมที่เหมือนกัน: ฉันได้รับข้อยกเว้นการหมดเวลาหลังจาก 3 นาทีเนื่องจากไม่มีการรับข้อความ heartbeat อีกต่อไปหลังจากการเปลี่ยนแปลงด้วยตนเอง ดังนั้นฉันมีความรู้สึกที่แข็งแกร่งว่าอย่างใด IP บน VM มีการเปลี่ยนแปลงซึ่งอาจเกี่ยวข้องกับการเช่า DHCP ที่หมดอายุและสิ่งนี้รบกวนการเชื่อมต่อ gRPC
อาจเป็นปัญหาหรือเป็นสิ่งที่แตกต่างอย่างสิ้นเชิงที่ทำให้เกิดปัญหากับการเชื่อมต่อ gRPC? ฉันจะทำอย่างไรกับปัญหานี้ ความช่วยเหลือหรือรายละเอียดเพิ่มเติมใด ๆ ที่ชื่นชม