แนวทางปฏิบัติที่ดีที่สุดของ Scala หรือ Clojure Functional Programming


11

ฉันทำการเข้ารหัสด้วยตนเองจำนวนมากได้รับประสบการณ์จากโมเดลการเขียนโปรแกรมแบบขนาน: นักแสดงซอฟต์แวร์หน่วยความจำทรานแซคชันซอฟต์แวร์การไหลของข้อมูล

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

ไม่มีใครรู้ตัวอย่างที่ดีของสถาปัตยกรรม (src หรือข้อความหรือไดอะแกรมหรือพิมพ์เขียว) ที่ใช้Akka Actors หรือ Software Transaction Memory และใช้ความคงทนในตอนท้าย?

ตัวอย่าง / ความคิดที่ดีสำหรับ Transactional Memory, Actors, Dataflow, Tuple ช่องว่างในแอปพลิเคชันในชีวิตจริงยินดีต้อนรับ


คุณต้องการทั้ง akka และ stm หรือไม่?
อ้อมนามนาม

ดูเหมือนผิดปกติที่คุณคิดว่าการคงอยู่ "ในตอนท้าย" ฉันเชื่อว่า "การซิงค์ฐานข้อมูลกับดักคอขวดที่สามารถขยายได้และอื่น ๆ " เป็นปัญหาได้อย่างแม่นยำเพราะพวกเขาอยู่ในกลางสิ่งมากกว่าที่จะจบ
Dan Burton

ยอมรับว่าการติดตาเกิดขึ้นบ่อยกว่าในตอนท้าย

@ สถานะคำถามเกี่ยวข้องกับ (1) Scala และ Clojure (2) แนวทางปฏิบัติที่ดีที่สุดอย่างไร สิ่งที่ฉันได้อ่านคือ (1) ผู้ไม่เชื่อเรื่องภาษาและ (2) เกี่ยวข้องกับการเห็นพ้องด้วย (โดยเฉพาะอย่างยิ่งความทนทาน / ความคงทน)
Sakisk

คำตอบ:


5

นางแบบนักแสดง / STM และการคงอยู่ของฐานข้อมูลค่อนข้างจะตั้งฉาก - คุณสามารถมีหนึ่งโดยไม่ต้องอื่น ๆ และฉันคิดว่ามีอันตรายจากความสับสนทั้งสอง

การบรรลุความทนทาน (D ในกรด) มีความซับซ้อนอย่างมากในการตั้งค่าการทำธุรกรรมและโดยเฉพาะอย่างยิ่งในการตั้งค่าแบบกระจายที่คุณมีนักแสดง / กระบวนการที่ประสานงานโดยการส่งข้อความ คุณได้รับเป็นปัญหายุ่งยากเช่นนายพลปัญหาไบเซนไทน์

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

น่ามอง (มุมมอง Clojure):


5

นักแสดงนางแบบทำงานได้ดีกับCommand / Query Responsibility Segregation (CQRS)เนื่องจากข้อความถึงนักแสดงที่ใช้การจัดการข้อมูลสามารถใช้เป็น "Command" ที่เทียบเท่าได้

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

นี่เป็นเทคนิคที่ใช้กันทั่วไป ดู VoltDB และ Redis เพื่อหาแรงบันดาลใจเพิ่มเติม


4

Rich Hickey มีลูกสมุนใหม่เอี่ยมที่เรียกว่า Datomic มันเป็นวิธีการใหม่ในการคงอยู่การแยกหน่วยเก็บข้อมูลการจัดการธุรกรรมและการสืบค้น มันขึ้นอยู่กับบันทึกที่ไม่เปลี่ยนรูปแบบและใช้ภาษาแบบสอบถามที่เรียกว่า Datalog (ใช้คุณลักษณะร่วมกับ Prolog) เป้าหมายสำคัญคือการอนุญาตให้มีการแจกจ่ายและการปรับใช้ระบบคลาวด์ได้ง่าย มันขึ้นอยู่กับการจัดเก็บข้อมูลเป็นบริการ (ดังนั้นไม่ใช่การใช้งานที่เป็นรูปธรรม แต่มีการเชื่อมต่ออย่างหลวม ๆ ผ่าน API แบบ over-the-wire)

ใน Clojure เรามี STM ซึ่งทำให้เรา ACI, D หายไป Datomic เพิ่ม D

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