Thực hành tốt nhất Scala hoặc Clojure Lập trình chức năng


11

Tôi đã tự học mã hóa rất nhiều, có một số kinh nghiệm với các Mô hình lập trình song song: Diễn viên, Bộ nhớ giao dịch phần mềm, Luồng dữ liệu.

Khi tôi đang cố gắng áp dụng các kiến ​​trúc này vào cuộc sống thực - vào ứng dụng web tải cao - bất kỳ mô hình nào cũng không hỗ trợ độ bền và tính bền bỉ cho dữ liệu. Nhiệm vụ thực tế đòi hỏi phải lưu dữ liệu vào cuối. Điều này có nghĩa là tôi vẫn phải sử dụng DB và bẫy đồng bộ DB, cổ chai có khả năng mở rộng có thể, v.v.

Có ai biết ví dụ hay về kiến ​​trúc (src hoặc văn bản hoặc sơ đồ hoặc bản thiết kế) sử dụng Akka Actors hoặc Bộ nhớ giao dịch phần mềm và thực hiện kiên trì ở cuối không?

Bất kỳ ví dụ / ý tưởng hay nào cho Bộ nhớ giao dịch, Diễn viên, Dataflow, Tuple không gian trong các ứng dụng thực tế đều được chào đón.


Bạn có cần cả akka và stm?
om-nom-nom

Có vẻ bất thường khi bạn coi sự kiên trì là "cuối cùng". Tôi tin rằng "bẫy đồng bộ DB, tắc nghẽn khả năng mở rộng có thể, v.v." là một vấn đề chính xác bởi vì chúng ở giữa mọi thứ, hơn là kết thúc.
Dan Burton

Đồng ý rằng sự kiên trì xảy ra thường xuyên hơn vào cuối

@Stas Câu hỏi liên quan đến (1) Scala và Clojure như thế nào, (2) thực tiễn tốt nhất? Những gì tôi đã đọc là (1) bất khả tri về ngôn ngữ và (2) chỉ liên quan đến sự tương tranh (đặc biệt là Độ bền / Độ bền).
sakisk

Câu trả lời:


5

Các mô hình diễn viên / STM và tính bền vững của cơ sở dữ liệu có phần trực giao - bạn có thể dễ dàng có cái này mà không có cái kia, và tôi nghĩ có nguy cơ nhầm lẫn giữa hai cái này.

Đạt được Độ bền (D trong ACID) cực kỳ phức tạp trong cài đặt giao dịch và đặc biệt là trong cài đặt phân tán nơi bạn có các tác nhân / quy trình được điều phối bằng cách gửi tin nhắn. Bạn gặp phải những vấn đề nhức nhối như Vấn đề về tướng của Byzantine .

Kết quả là, tôi nghĩ sẽ luôn có một mức độ nào đó để điều chỉnh giải pháp để đáp ứng các yêu cầu kiên trì cụ thể của bạn. Không có giải pháp "một kích thước phù hợp với tất cả".

Đáng xem (phối cảnh Clojure):


5

Mô hình diễn viên hoạt động khá tốt với Phân đoạn trách nhiệm lệnh / truy vấn (CQRS) , vì các thông báo cho các tác nhân thực hiện thao tác dữ liệu có thể được sử dụng làm tương đương "Lệnh".

Vì vậy, điều đó có liên quan gì đến vấn đề kiên trì của bạn? Chà, bạn làm việc trên bộ nhớ và ghi tất cả các lệnh vào nhật ký, đây là một hoạt động rẻ hơn vì nó chỉ bổ sung và thỉnh thoảng bỏ các ảnh chụp nhanh để giảm thời gian cần thiết để tải lại cơ sở dữ liệu nếu cần thiết (cộng với việc có thể phục hồi không gian được sử dụng bởi nhật ký).

Đây là một kỹ thuật khá phổ biến. Nhìn vào VoltDB và Redis để có thêm cảm hứng.


4

Rich Hickey có một sản phẩm trí tuệ hoàn toàn mới có tên là Datomic. Đó là một cách tiếp cận mới để duy trì, tách rời lưu trữ, quản lý giao dịch và truy vấn. Nó dựa trên các bản ghi bất biến và sử dụng ngôn ngữ truy vấn có tên là Datalog (chia sẻ các tính năng với Prolog). Mục tiêu chính là cho phép phân phối và triển khai đám mây dễ dàng. Nó phụ thuộc vào lưu trữ như một dịch vụ (vì vậy không phải là một triển khai cụ thể, mà được kết nối lỏng lẻo thông qua API quá khổ).

Trong Clojure, chúng ta có STM cung cấp cho chúng ta ACI, D bị thiếu. Datomic thêm D.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.