Akka หรือ Reactor [ปิด]


94

ฉันอยู่ระหว่างการเริ่มโปรเจ็กต์ใหม่ (ที่ใช้ Java) ฉันต้องการสร้างมันเป็นสถาปัตยกรรมแบบแยกส่วนกระจายและยืดหยุ่นได้

ดังนั้นฉันจึงต้องการให้กระบวนการทางธุรกิจสื่อสารกันเองสามารถทำงานร่วมกันได้ แต่ก็เป็นอิสระ

ตอนนี้ฉันกำลังดูสองกรอบที่นอกเหนือจากความแตกต่างด้านอายุแล้วยังแสดงมุมมองที่แตกต่างกัน 2 มุมมอง:

สิ่งที่ฉันควรพิจารณาเมื่อเลือกหนึ่งในกรอบข้างต้น

เท่าที่ฉันเข้าใจจนถึงตอนนี้ Akka ยังคงอยู่คู่กัน (ในลักษณะที่ฉันต้อง 'เลือก' นักแสดงที่ฉันต้องการส่งข้อความถึง) แต่มีความยืดหยุ่นมาก ในขณะที่ Reactor หลวม (ตามการโพสต์เหตุการณ์)

ใครช่วยให้ฉันเข้าใจวิธีการตัดสินใจที่ถูกต้อง?

อัปเดต

หลังจากตรวจสอบEvent Busของ Akka ให้ดีขึ้นแล้วฉันเชื่อว่าในลักษณะบางอย่างที่แสดงโดย Reactorนั้นรวมอยู่ใน Akka แล้ว

ตัวอย่างเช่นการสมัครสมาชิกและการเผยแพร่เหตุการณ์ซึ่งจัดทำเป็นเอกสารในhttps://github.com/reactor/reactor#events-selectors-and-consumersสามารถแสดงเป็น Akka ได้ดังนี้:

final ActorSystem system = ActorSystem.create("system");
final ActorRef actor = system.actorOf(new Props(
    new UntypedActorFactory() {

        @Override
        public Actor create() throws Exception {

            return new UntypedActor() {
                final LoggingAdapter log = Logging.getLogger(
                        getContext().system(), this);

                @Override
                public void onReceive(Object message)
                        throws Exception {
                    if (message instanceof String)
                        log.info("Received String message: {}",
                                message);
                    else
                        unhandled(message);
                }
            };
        }
    }), "actor");

system.eventStream().subscribe(actor, String.class);
system.eventStream().publish("testing 1 2 3");

ดังนั้นสำหรับฉันแล้วตอนนี้ความแตกต่างที่สำคัญระหว่างทั้งสองคือ:

  • Akka เป็นผู้ใหญ่มากขึ้นผูกพันกับ typesafe
  • เครื่องปฏิกรณ์ระยะเริ่มต้นผูกพันกับฤดูใบไม้ผลิ

การตีความของฉันถูกต้องหรือไม่? แต่แนวคิดของนักแสดงใน Akka กับผู้บริโภคในเครื่องปฏิกรณ์แตกต่างกันอย่างไร?


8
Akka ไม่ได้ถูก จำกัด ให้ใช้โดย Scala ในความเป็นจริงส่วนใหญ่ใช้จาก Java
วิคเตอร์กลาง

1
เดวิด: สิ่งที่ชอบ: Akka EventBus API ร่วมกับ Akka Actors ใช้ Reactor Pattern
Viktor Klang

9
เพียงเพื่อชี้แจง: เครื่องปฏิกรณ์ไม่ได้ผูกพันกับฤดูใบไม้ผลิเลย เราตั้งใจไม่ให้มีการอ้างอิง Spring เนื่องจากเป็นกรอบการทำงานพื้นฐานจึงไม่สมเหตุสมผลที่จะ จำกัด การใช้งานไว้เฉพาะผู้ใช้ Spring เท่านั้น สำหรับความแตกต่างระหว่างนักแสดงและผู้บริโภค: เท่าที่ Reactor เกี่ยวข้องผู้บริโภคของคุณอาจอยู่ในสถานะหรือไม่ก็ได้ สันนิษฐานว่าคุณต้องการใช้คลาสนิรนามหรือ Java 8 lambda แต่นั่นไม่ใช่ข้อกำหนด และเช่นเดียวกับที่ฉันได้กล่าวไว้ในคำตอบของฉันชุดเครื่องมือเครื่องปฏิกรณ์คือสำหรับการทำซ้ำในช่วงต้นโดยตั้งใจรวบรัด เราไม่ได้พยายามสร้าง "Akka คนต่อไป"
Jon Brisbin

8
เพียงแค่พูดถึงvertx.ioเพราะฉันเชื่อว่ามันจะอยู่ในฟิลด์ที่ขับเคลื่อนด้วยเหตุการณ์เดียวกันพร้อมกับแนวคิดที่น่าสนใจในเส้นเลือดที่คล้ายกันสำหรับผู้ที่กำลังค้นคว้า ..
เปิด

1
เมื่อสองสามปีที่ผ่านมาฉันก็อยู่ในสถานการณ์ที่คล้ายกันแอปพลิเคชันของฉันใช้สปริงเป็นหลักและตอนนี้ฉันต้องจัดการกับคุณสมบัติที่ขับเคลื่อนด้วยเหตุการณ์ มีผู้ชนะที่ชัดเจน b / w Akka และ Spring-reactor หรือไม่? ฉันกำลังมองหาเฟรมเวิร์กที่มีชุมชนผู้ใช้ที่ใช้งานอยู่ในกรณีที่ฉันไปถึงสถานการณ์ที่ซับซ้อนมากขึ้น
tintin

คำตอบ:


47

มันยากที่จะบอกในตอนนี้เนื่องจากเครื่องปฏิกรณ์ยังคงเป็นแบบร่างและฉัน (หัวหน้าฝ่ายเทคโนโลยีของ Akka) ไม่มีความเข้าใจว่าจะไปที่ใด มันจะน่าสนใจที่จะดูว่าเครื่องปฏิกรณ์กลายเป็นคู่แข่งกับ Akka หรือไม่เรารอคอยสิ่งนั้น

เท่าที่ฉันเห็นจากรายการความต้องการของคุณเครื่องปฏิกรณ์ไม่มีความยืดหยุ่น (เช่นสิ่งที่การกำกับดูแลให้คุณใน Akka) และความโปร่งใสของสถานที่ (เช่นการอ้างถึงเอนทิตีที่ใช้งานอยู่ในรูปแบบที่ช่วยให้คุณสามารถสรุปข้อความในพื้นที่หรือระยะไกลซึ่งเป็นสิ่งที่คุณ บ่งบอกโดย“ กระจาย”) สำหรับ "โมดูลาร์" ฉันไม่รู้จัก Reactor มากพอโดยเฉพาะอย่างยิ่งวิธีที่คุณสามารถค้นหาส่วนประกอบที่ใช้งานอยู่และจัดการได้

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


ขอบคุณโรแลนด์ฉันชอบที่จะเห็นว่าผู้คนจากทั้งสองโครงการมีส่วนร่วมในคำตอบนี้ ตอนนี้ฉันกำลังทดลองใช้ Akka ตามที่คุณคาดการณ์ไว้ค่อนข้างเร็วที่จะให้คำตอบสุดท้ายสำหรับคำถามยกเว้นว่า Reactor ยังอยู่ในช่วงเริ่มต้นดังนั้นจึงยังไม่เหมาะสำหรับการเปรียบเทียบ ดังนั้นเรามารอดูกันว่าสิ่งต่างๆพัฒนาไปอย่างไร :-) ขอบคุณเดวิด
David Riccitelli

7
ขอบคุณสำหรับคำตอบ Roland ฉันแค่อยากจะชี้แจงว่า Reactor ไม่ใช่คู่แข่งของ Akka มีความคล้ายคลึงกันเนื่องจากปัญหาพื้นที่ทับซ้อนเกี่ยวกับแอปพลิเคชันแบบอะซิงโครนัส แต่เครื่องปฏิกรณ์มีไว้เพื่อเป็นกรอบพื้นฐานที่ระบบอื่น ๆ สามารถสร้างขึ้นได้ ระบบอื่น ๆ เหล่านั้นอาจทับซ้อนกับ Akka มากกว่าเครื่องปฏิกรณ์เอง แต่สำหรับเครื่องปฏิกรณ์ในอนาคตอันใกล้จะยังคงเป็นเฟรมเวิร์กที่ช่วยให้ระบบอื่น ๆ และจะไม่เป็นเฟรมเวิร์กแบบฟูลสแต็ก คุณจะต้องชะลอความพึงพอใจในการยิง Reactor / Akka ;)
Jon Brisbin

ไม่ต้องกังวลฉันคิดว่าคุณจะทำได้ดีและฉันค่อนข้างมั่นใจว่าเราจะได้เห็นการผสมเกสรข้ามเนื่องจากห้องสมุดจำนวนมากเข้ามาในฟิลด์นี้
Roland Kuhn

37

เครื่องปฏิกรณ์ไม่ผูกมัดกับ Spring แต่เป็นโมดูลเสริม เราต้องการให้ Reactor สามารถพกพาได้ซึ่งเป็นรากฐานตามที่จอนระบุไว้

ฉันจะไม่มั่นใจเกี่ยวกับการผลักดันในการผลิตเนื่องจากเราไม่ใช่ Milestone (1.0.0.SNAPSHOT) ในเรื่องนี้ฉันจะมองลึกลงไปที่Akkaซึ่งเป็น IMO กรอบอะซิงโครนัสที่ยอดเยี่ยม พิจารณาVert.xและFinagle ด้วยซึ่งอาจปรับเปลี่ยนได้หากคุณมองหาแพลตฟอร์ม (ในอดีต) หรือฟิวเจอร์สแบบประกอบ (รุ่นหลัง) หากคุณดูแลรูปแบบอะซิงโครนัสที่หลากหลายGParsอาจเป็นโซลูชันที่สมบูรณ์ยิ่งขึ้น

ในท้ายที่สุดเราอาจมีการทับซ้อนกันอย่างแน่นอนในความเป็นจริงเรากำลังเอนเอียงไปยังแนวทางแบบผสมผสาน (การจัดงานแบบผสมผสานที่ยืดหยุ่นกระจายและไม่ผูกมัดกับกลยุทธ์การจัดส่งใด ๆ ) ซึ่งคุณสามารถค้นหาบิตจากRxJava , Vert.x , Akka และอื่น ๆได้อย่างง่ายดายเราไม่ได้ให้ความเห็นเกี่ยวกับตัวเลือกภาษาแม้ว่าเราจะมีความมุ่งมั่นอย่างมากกับ Groovy แต่ผู้คนก็เริ่มใช้พอร์ตClojureและKotlinแล้ว เพิ่มไปนี้ผสมความจริงที่ว่าความต้องการบางอย่างที่จะขับเคลื่อนด้วยฤดูใบไม้ผลิ XDและGrails

ขอบคุณมากสำหรับความสนใจเป็นสักขีพยานหวังว่าคุณจะมีคะแนนเปรียบเทียบเพิ่มขึ้นในอีกไม่กี่เดือนนี้ :)


ขอบคุณสเตฟานฉันเชื่อว่าคำตอบของคุณ (และความคิดเห็นของจอนstackoverflow.com/questions/16595393/akka-or-reactor/… ) ให้มุมมองที่ชัดเจนขึ้นมาก ฉันจะยังคงรอก่อนที่จะทำเครื่องหมายคำถามที่ตอบแล้วตามที่คุณพูดมาดูกันว่าจะมีอะไรเกิดขึ้นในอนาคตอันใกล้นี้ ขอขอบคุณอีกครั้งที่ผู้ที่เกี่ยวข้องกับทั้งสองโครงการใช้เวลาให้ข้อมูลเชิงลึกที่เป็นประโยชน์
David Riccitelli

ฉันเห็นด้วยกับ Vert.x. ฉันใช้ Vert.x ในสภาพแวดล้อมการผลิตในสองโครงการเพื่อสื่อสารระหว่างส่วนประกอบและมันทำงานได้อย่างราบรื่น
ชนะ

33

นี่เป็นคำถามที่ยอดเยี่ยมและคำตอบจะเปลี่ยนไปในอีกไม่กี่สัปดาห์ข้างหน้า เราไม่สามารถให้คำมั่นสัญญาได้ว่าการสื่อสารระหว่างโหนดจะเป็นอย่างไรในตอนนี้เพราะยังเร็วเกินไป เรายังมีบางส่วนที่ต้องรวบรวมก่อนที่เราจะสาธิตการรวมกลุ่มในเครื่องปฏิกรณ์

จากที่กล่าวไปเพียงเพราะ Reactor ไม่ทำการสื่อสารระหว่างโหนด OOTB ไม่ได้หมายความว่ามันทำไม่ได้ไม่สามารถทำได้:) เราต้องการเพียงเลเยอร์เครือข่ายที่บางพอสมควรในการประสานงานระหว่างเครื่องปฏิกรณ์โดยใช้บางอย่างเช่น Redis หรือ AMQP เพื่อให้มันมีสมาร์ทแบบคลัสเตอร์

เรากำลังพูดถึงและวางแผนสำหรับสถานการณ์แบบกระจายใน Reactor อย่างแน่นอน ยังเร็วเกินไปที่จะบอกว่ามันจะทำงานอย่างไร

หากคุณต้องการสิ่งที่ทำคลัสเตอร์ในตอนนี้คุณจะปลอดภัยยิ่งขึ้นเมื่อเลือก Akka


ขอบคุณจอนฉันพบว่าเครื่องปฏิกรณ์มีแนวโน้มดีมาก แต่ฉันต้องเข้าใจว่ามีความแตกต่างทางแนวคิดระหว่าง Reactor และ Akka หรือไม่นอกจากคุณสมบัติที่ Reactor หายไป (แน่นอนว่าอยู่ในช่วงเริ่มต้น) สรุปแล้วความแตกต่างทางแนวคิดระหว่างนักแสดงใน Akka กับผู้บริโภคในเครื่องปฏิกรณ์คืออะไร? ฉันยังอัปเดตคำถามของฉันด้วยเหตุการณ์ตัวอย่างใน Akka ซึ่งฉันเชื่อว่าคล้ายกับการสมัครรับข้อมูลเหตุการณ์ / การจัดส่งในหน้า Reactor GitHub ขอบคุณ.
David Riccitelli

จอนฉันกำลังอ่านคำตอบของคุณที่นี่: blog.springsource.org/2013/05/13/… - ดังนั้นเราอาจคิดได้ว่าในระยะยาว Akka และ Reactor จะเป็นเฟรมเวิร์กที่คล้ายกันทั้งที่รองรับรูปแบบเครื่องปฏิกรณ์และแบบจำลองนักแสดง
David Riccitelli

ความคิดเห็นด้านบนไม่ถูกต้องอีกต่อไปเนื่องจากคำต่อไปนี้stackoverflow.com/questions/16595393/akka-or-reactor/…และstackoverflow.com/a/16674388/565110
David Riccitelli

ฉันไม่เข้าใจว่าความคิดเห็นนี้ไม่ถูกต้องอย่างไร? ไม่มีสิ่งใดขัดแย้งกับคำอธิบายของทิศทางเชิงกลยุทธ์ของเครื่องปฏิกรณ์
Jon Brisbin

1
Gotcha ใช่คุณเข้าใจถูกต้อง ขอบคุณที่ถามคำถามเหล่านี้! :)
Jon Brisbin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.