2011-12-21 76 views
8

Tôi có một ứng dụng Erlang/OTP thực hiện một số logic nghiệp vụ. Nó được viết bằng Erlang chủ yếu cho khả năng chịu lỗi, bởi vì tôi có thể dễ dàng khởi động lại một trong những thành phần bị hỏng của hệ thống (thời gian hoạt động cao là yêu cầu quan trọng nhất). Mỗi thành phần của nó thực hiện một số loại tính toán "song song" cụ thể.Sử dụng OTP/Erlang như là một phần của kiến ​​trúc dựa trên thành phần của ứng dụng web

Do một chu kỳ làm việc, ứng dụng tạo ra một danh sách các giá trị. Hãy gọi ứng dụng Erlang/OTP này là "back-end".

Ứng dụng Erlang/OTP này cũng sẽ sử dụng máy chủ PostgreSQL để lưu trữ kết quả trong lưu trữ liên tục và lưu trữ thêm thông tin cần thiết cho tính toán của nó (chưa được triển khai).

Tiếp theo tôi cần thêm giao diện người dùng vào ứng dụng Erlang/OTP này - một giải pháp dựa trên web đơn giản có thể phục vụ cho người dùng web: chấp nhận yêu cầu tính toán từ người đó, yêu cầu back-end thực hiện tính toán và cung cấp cho người dùng kết quả từ back-end.

Không có yêu cầu khả năng mở rộng, tôi nghĩ rằng số lượng người dùng tối đa mỗi ngày có thể không quá 1000.

Vì vậy, nhiệm vụ hiện tại của tôi bây giờ là thực hiện một chung front-end cho tôi back-end Erlang/OTP ứng dụng (thường có nghĩa là tôi có một trường hợp sử dụng điển hình: truy cập vào trang web, đăng ký, đăng nhập, sử dụng các ứng dụng, có được kết quả trên ajax'y đẹp trang web tìm kiếm, đăng xuất). Ở một bên, tôi biết rằng việc sử dụng lại mã có thể tiết kiệm cho tôi rất nhiều thời gian: ví dụ với Ruby on Rails tôi có thể nhận được xác thực người dùng, lưu trữ mật khẩu, giao diện ajax và nhiều thứ khác miễn phí. Ở phía bên kia, tôi không biết gì về việc thiết kế một ứng dụng bao gồm một back-end Erlang/OTP + PostgreSQL db server và một khung công tác web (RoR, Django, vv) như là một front-end.

Tôi có nhiều câu hỏi trong đầu: Erlang/OTP và web-framework có sử dụng cùng cơ sở dữ liệu PostgreSQL để chia sẻ kết quả không? Cách tốt nhất để gửi yêu cầu tính toán từ khung công tác web đến ứng dụng Erlang/OTP là gì và đưa nó trở lại? Làm cách nào để giám sát máy chủ PostgreSQL - nó không nằm trong khả năng chịu lỗi của OTP?

Nói chung, tôi có một vài thành phần phần mềm không đồng nhất và tôi muốn xây dựng một hệ thống làm việc từ chúng (thành phần 'trưởng' là ứng dụng Erlang/OTP).


Tôi nên bắt đầu với tác vụ này ở đâu? Bạn có thể cho tôi lời khuyên hay gợi ý nào để đọc?

P.S. Tôi đã cố gắng đọc this và theo các liên kết, nhưng không hiểu nhiều.

UPD: Tôi biết rằng Chicago Boss và Erlang web framework khác vẫn tồn tại, nhưng tôi nghi ngờ rằng ai trong số họ có một môi trường như vậy trưởng thành, sôi nổi và biến thiên rất lớn của các plugin khác nhau và các thư viện ví dụ như Ruby on Rails, Django hoặc bất kỳ khuôn khổ MVC dựa trên PHP nào. Đúng?

UPD2: Có lẽ tôi phải giải thích sâu hơn về vấn đề này: Tôi cũng cần đầu cuối để duy trì càng tốt. Làm điều đó trong Erlang có nghĩa là tôi có thể gặp vấn đề khi tìm đúng người phát triển để duy trì nó; làm điều đó trong RoR, Django, vv có nghĩa là tôi có thể dễ dàng tìm được lực lượng lao động để duy trì giao diện người dùng và phát triển nó.

+0

Tôi cũng đã chỉnh sửa câu trả lời của mình. Làm kiểm tra cập nhật câu trả lời. cảm ơn –

Trả lời

4

Trước hết, có một ứng dụng Erlang PostGreySQL tại đây: https://github.com/wg/epgsql. Một điều nữa là bạn có thể muốn xem ZOTONIC. Một CMS của nó được viết bằng Erlang nhưng nó cũng là một khung công tác Web. Một trong những tính năng của nó là nó đã tích hợp PostGreySQL Database rất tốt và vì vậy tất cả các ứng dụng Erlang đằng sau Zotoniuc sẽ được hưởng lợi từ điều này. Nó rất tốt khi phát triển MVC hoặc các ứng dụng Web hướng sự kiện.

Ngoài ra, bạn có thể muốn xem Nitrogen Web FrameworkChicago Boss cũng là khung web cho ứng dụng Web Erlang. Cá nhân tôi đã phát triển các ứng dụng web Erlang sử dụng Nitơ, Yaws và Mnesia như một bộ hoàn chỉnh. Một lợi thế rất tốt đẹp là bạn có thể có nhiều ứng dụng Erlang đằng sau ngăn xếp công nghệ này. Bịnh ghẻ hờm máy chủ web với nó Appmodsdynamic Content Serving ability (vì vậy RESTFUL tôi có thể đảm bảo với bạn đó), nó đã trao quyền JavaScript của chúng tôi Driven Frontend Web Apps với sự đơn giản và vẻ đẹp tuyệt vời như vậy, cung cấp dịch vụ từ một loạt các một vài ứng dụng Erlang.

Nếu bạn muốn có Mặt trận web nhanh, với tính năng giống như Ajaxy/HTML5, thì hãy nhanh lên! và tự chụp lấy mình Nitrogen Web Framework. Vì bạn là một lập trình viên Erlang, điều này sẽ rất nhanh cho bạn. Với Templating, bạn có thể viết HTML4.X/HTML5 Templates hoặc sử dụng Web page Maker/Studio Software để tạo mẫu cho bạn. Sau đó, bạn sẽ hiển thị Nitơ nơi để đi vào, ràng buộc Erlang Backends của bạn để những trang đẹp bằng cách sử dụng tự động tạo ra JQuery Mã phát sinh từ mã Erlang của bạn.

Bạn sẽ tìm thấy tài liệu rất đơn giản. Nitơ chỉ là một tập hợp các bản ghi Erlang, với mỗi bản ghi đứng cho một thẻ HTML. Các bản ghi khác được sử dụng để xác định các hiệu ứng và sự kiện sẽ được POST trở lại vào ứng dụng Erlang của bạn. Phát triển Web giao diện đẹp trong Nitơ là quá nhanh. Infact, với sự tạo động JQuery mã, bạn có thể viết JavaScript của riêng bạn vào Template để đi cùng với toàn bộ chức năng nói, cách sử dụng một thư viện JavaScript như EXT JS, hoặc MooTools hoặc prototype js. Trong khuôn mẫu là nơi bạn sẽ chỉ ra nơi Nitơ sẽ tạo ra các yếu tố HTML được tạo động cũng như JQuery sẽ "hành động" một cách tự nhiên trên các phần tử này. Một mẫu trong trường hợp này chỉ đơn giản có nghĩa là một Trang HTML.


Hãy nhớ trở thành thành viên của danh sách gửi thư của mình để tìm thêm trợ giúp cũng như tiếp tục hỏi thêm bất kỳ câu hỏi nào tại đây trên StackOverflow. Chào mừng bạn đến với thế giới phát triển Web Erlang. Một số số liên kết bạn có thể quan tâm đến (
IEEE Paper on Web Development in Erlang,
Erlang Web Framework,
erlydtl - Erlang Django like Templating Implementation,
ErlyWeb Framework
) thành công!



EDIT
Bây giờ, những gì bạn nói là thực sự đúng. Tìm nhà phát triển để duy trì nó sẽ là một nhiệm vụ. Tuy nhiên, Zotonic như tôi đã đề cập trước đó là một chính thức (Web) CMS giống như Joomla hoặc Word Nhấn e.t.c. Với nó, bạn có thể thực sự quản lý/duy trì trang web/ứng dụng.

Tuy nhiên, bạn cũng có thể phát triển mặt trước Web bằng cách sử dụng Django hoặc Ruby on Rails nhưng tạo Dịch vụ bảo mật bằng cách sử dụng JSON định dạng dữ liệu cho Mochiweb từ mặt trước web của bạn. Sau đó, sử dụng Mochijson2.erl đi kèm với mochiweb, bạn phân tích cú pháp JSON và dịch nó thành yêu cầu hoặc phương thức và đối số trong Erlang Back-end của bạn. Điều này sẽ được thực hiện theo cả hai hướng tức là bạn thực hiện yêu cầu cho các ứng dụng Erlang của bạn, nhận kết quả trả về và hiển thị chúng dưới dạng dữ liệu JSON.

Mochiweb là công cụ mạnh mẽ có thể giao diện bất kỳ Back Back Erlang với bất kỳ công nghệ Web nào ở phía trước bằng cách sử dụng Service/RESTFul Model. Trọng lượng đơn giản và nhẹ của nó. Nhanh chóng và tất cả những gì nó cần là bạn trỏ nó đến phương thức nào để xử lý các yêu cầu HTTP POST, GET, PUT e.t.c và nó sẽ đợi kết quả gửi lại. Mochiweb đã được sử dụng trong rất nhiều hệ thống Erlang, ví dụ: Couch DB (một trong những NoSQL DBMS tiên tiến nhất thay đổi cách chúng ta hiểu Web và Hệ thống SOA) và tất cả các hệ thống khác như Membase Single Server, Big Couch/Cloudant, e.t.c. Bạn có thể thấy ai đó đang đặt mochiweb vào hành động here, then herelastly here.

Các khung công tác của Django, Twisted, PHP hoặc Ruby on Rails thực hiện các yêu cầu JSON và mong đợi các phản hồi JSON từ Erlang Các đầu cuối được hỗ trợ bởi Mochiweb. Một giao diện RESTful tuyệt vời khác cho Erlang Web Back-end là Misultin, mà thậm chí còn hỗ trợ Web Sockets và đôi khi được cho là thư viện HTTP Erlang nhanh nhất/đáp ứng nhanh nhất :)

Theo kinh nghiệm của tôi, tôi đã làm việc với rất nhiều PHP, JavaScript rất kinh nghiệm nhưng chúng tôi thấy phát triển rẻ hơn bất cứ khi nào chúng tôi đặt máy chủ Web của chúng tôi là yaws với số Service Oriented Model sử dụng các yêu cầu và phản hồi JSON từ cả hai Chỉ đường. Trong trường hợp này, chúng tôi không mất khả năng sẵn sàng và khả năng chịu lỗi của Erlang và bằng cách này, bạn có thể thực hiện nhiều yêu cầu tới nhiều Máy chủ Erlang được phân phối ngay cả khi chúng được ẩn trong các mạng con khác nhau của Tên miền bằng cách sử dụng JSONP được hỗ trợ bởi tất cả JavaScript và/hoặc khung công tác Front-web. Tôi khuyên bạn nên đặt Mochiweb hoặc Misultin vào trước chương trình phụ trợ của bạn và có khung Web bạn chọn để tạo yêu cầu bằng cách sử dụng Định dạng JSON (hoặc thậm chí XML, mà bạn sẽ phân tích bằng cách sử dụng erlsom, tải xuống here). Tôi hy vọng bạn có được những gì đang gợi ý. Sự thành công!!!

+1

Cảm ơn! Tôi đã cập nhật câu hỏi của mình một chút. – skanatek

+0

Đó là một chỉnh sửa thực sự tốt đẹp của câu trả lời của bạn! Bạn có thể giới thiệu cho tôi một số nguồn mà tôi có thể đọc thêm về "Dịch vụ an toàn bằng cách sử dụng dữ liệu định dạng JSON cho Mochiweb" không? Tôi biết Mochiweb là gì, nhưng tôi chưa bao giờ nghe về Dịch vụ an toàn liên quan đến Mochiweb. – skanatek

1

Bạn có thể triển khai lối vào của mình trong erlang cũng như sử dụng bất kỳ web framework có sẵn nào. Chạy front-end và back-end trong các nút erlang riêng biệt bằng cách sử dụng RPC erlang để liên lạc giữa chúng.

Các vấn đề liên quan