การใช้ Terracotta สำหรับ (กระจาย) Java Objects ที่แชร์

Sep 17 2020

คุณแชร์อินสแตนซ์ / อ็อบเจ็กต์ในกระบวนการต่างๆของ Java ได้อย่างไร

EnvironmentConfig config = new EnvironmentConfig();
config.setLogLockTimeout(3000);
config.setManagementEnabled(false);
config.setEnvCloseForcedly(true);
Environment env = Environments.newInstance(dbPath, config);
environmentMap.put(dbPath, env); 

รหัสนี้ด้านบนEnvironmentคลาสไม่ใช่Serializableและวัตถุนี้ถูกใช้ในขั้นตอนการสมัครด้วย:

Environment env = environmentMap.get(dbPath);

จากนั้นใช้เช่น:

EntityId[] id = null; 
new PersistentEntityStoreBuilder(env).transact(txn -> {
    id[0] = txn.createEntity(comparableMap);
});
return id[0];

นี่Environmentคืออินเทอร์เฟซไปยังฐานข้อมูลฝังตัวที่ถูกล็อกภายในกระบวนการที่เข้าถึงครั้งแรก หมายความว่ากระบวนการอื่น ๆ ไม่สามารถเข้าถึงฐานข้อมูลได้อีกต่อไปดังนั้นเพื่อให้กระบวนการอื่น ๆ เข้าถึงฐานข้อมูลได้จึงต้องการอินสแตนซ์เดียวกันของสภาพแวดล้อมแรก นั่นคือจุดที่อ็อบเจ็กต์ Java "shared" ต้องการรูท

ตอนนี้ฉันต้องสามารถใช้วัตถุเดียวกันนี้ ( สภาพแวดล้อม ) ในกระบวนการแอปพลิเคชันที่แตกต่างกันฉันเข้าใจว่าสิ่งนี้ไม่สามารถทำได้กับ JVM มาตรฐาน Terracotta จะมีประโยชน์อย่างไรในการจัดการกับข้อกำหนดดังกล่าวฉันได้อ่านแล้ว ในความเป็นจริง Terracotta สามารถทำให้กระบวนการ JVM หลาย ๆ กระบวนการเป็นหนึ่งเดียวได้ดังนั้นฉันจึงคิดว่ามันอาจเป็นทางออกที่เหมาะสม

เอกสารฯ :

การทำคลัสเตอร์ระดับ JVM ทำให้ Java ขององค์กรง่ายขึ้นโดยการเปิดใช้งานแอปพลิเคชันเพื่อปรับใช้กับ JVM หลายตัว แต่โต้ตอบกันราวกับว่าพวกเขากำลังรันบน JVM เดียวกัน

ถ้าเป็นไปไม่ได้กับ Terracotta คุณสามารถอธิบายได้ไหมว่าทำไม? ถ้าเป็นไปได้อย่างไร?

คำตอบ

1 MichaelBorgwardt Sep 17 2020 at 17:00

จากการอ่านเอกสารนั้นอีกเล็กน้อย (ซึ่งคุณสามารถทำได้ด้วยตัวเอง) ดูเหมือนว่า Terracotta จะขึ้นอยู่กับเครื่องมือวัด bytecode และในความเป็นจริงสามารถแบ่งปันกราฟวัตถุทั้งหมดอย่างโปร่งใสผ่าน JVM ที่ทำงานบนเครื่องแยกต่างหาก

ดังนั้นโดยหลักการแล้วควรใช้กับคลาส Environment ของคุณหาก "ฐานข้อมูลฝังตัว" ที่อยู่เบื้องหลังทำงานในหน่วยความจำอย่างเต็มที่และไม่ได้ทำอะไรที่บ้าคลั่งเช่นการใช้โค้ดเนทีฟ

ไม่ว่าจะได้ผลในทางปฏิบัติและโดยเฉพาะอย่างยิ่งสิ่งที่จะมีผลต่อประสิทธิภาพเป็นสิ่งที่คุณต้องลอง