[英]Using OTP/Erlang as a part of the component-based architecture of a web application
我有一個做一些業務邏輯的Erlang / OTP應用程序。 它是用Erlang編寫的,主要是為了容錯,因為我可以輕松地重新啟動系統崩潰的組件之一(最重要的要求是正常運行時間)。 它的每個組件都執行某種特定的“並行”計算。
作為一個工作周期的結果,該應用程序生成了一個值列表。 讓我們將此Erlang / OTP應用程序稱為“后端”。
此Erlang / OTP應用程序還將使用PostgreSQL服務器將結果存儲在持久性存儲中,並存儲其計算所需的其他元信息(尚未實現)。
接下來,我需要在此Erlang / OTP應用程序中添加一個前端-一個簡單的基於Web的解決方案,可以為Web用戶服務:接受他/她的計算請求,請后端進行計算,然后向用戶提供后端的結果。
沒有可擴展性要求,我認為每天的最大用戶數量不能超過1000。
因此,我現在的當前任務是為我的后端Erlang / OTP應用程序實現一個通用前端(這通常意味着我有一個典型的用例:訪問該站點,注冊,登錄,使用該應用程序並獲得結果)美觀的網頁,退出)。
一方面,我知道代碼重用可以節省很多時間:例如,使用Ruby on Rails,我可以免費獲得用戶身份驗證,密碼存儲,ajax接口和許多其他功能。
另一方面,我對設計包含Erlang / OTP + PostgreSQL數據庫服務器后端和Web框架(RoR,Django等)作為前端的應用程序一無所知。
我想到了很多問題:Erlang / OTP和Web框架是否應該使用相同的PostgreSQL數據庫共享結果? 將計算請求從網絡框架發送到Erlang / OTP應用程序並將其取回的最佳方法是什么? 如何監督PostgreSQL服務器-OTP的容錯能力未涵蓋該服務器?
一般來說,我有幾個異構軟件組件,我想從它們中構建一個工作系統(“主要”組件是Erlang / OTP應用程序)。
我應該從哪里開始這項任務? 您能給我任何建議或提示來閱讀哪些資源嗎?
PS我試圖閱讀這和遵循的聯系,但並沒有多少了解。
UPD:我知道Chicago Boss和其他Erlang網絡框架確實存在,但是我懷疑它們中的任何一個都具有如此成熟的環境,活躍的社區以及不同插件和庫(例如Ruby on Rails,Django或任何PHP)的巨大可變性基於MVC的框架。 對?
UPD2:也許我必須更深入地闡述:我還需要前端盡可能地易於維護。 在Erlang中進行操作意味着我可能會遇到尋找合適的開發人員進行維護的問題。 在RoR,Django等中執行此操作意味着我可以輕松地找到工作人員來維護前端並進行擴展。
首先,這里有一個Erlang PostGreySQL客戶端: https : //github.com/wg/epgsql 。 另一件事是,您可能想檢查ZOTONIC 。 它是用Erlang編寫的CMS,但它也是一個Web框架。 它的功能之一是它很好地集成了PostGreySQL數據庫,因此Zotoniuc后面的所有Erlang應用程序都將從中受益。 開發MVC或事件驅動的Web應用程序時,它非常好。
另外,您可能想查看Nitrogen Web Framework和Chicago Boss ,它們也是Erlang Web應用程序的Web框架。 我個人使用Nitrogen,Yaws和Mnesia作為整套工具開發了Erlang Web應用程序。 一個非常不錯的好處是,您可以在此技術堆棧后面擁有許多Erlang應用程序。 Yaws Web Server憑借其Appmod和動態內容服務能力 ( RESTFUL,我可以向您保證),以如此驚人的簡單性和美感為我們的JavaScript驅動的前端Web應用程序提供了強大功能,並提供了多個Erlang應用程序提供的服務。
如果您想擁有Ajaxy / HTML5之類的快速Web Front End,那就快點! 並掌握Nitrogen Web框架 。 由於您已經是Erlang程序員,因此對您來說是如此之快。 使用模板,您可以編寫HTML4.X / HTML5模板,或使用網頁Maker / Studio軟件為您創建模板。 然后,稍后,您將顯示Nitrogen的輸入位置,並使用由您的Erlang代碼產生的動態生成的JQuery代碼將您的Erlang后端綁定到這些漂亮的頁面。
您會發現文檔非常簡單。 氮氣只是Erlang記錄的集合,每個記錄代表一個HTML標簽。 其他記錄用於定義效果和事件,這些效果和事件將回發到您的Erlang應用程序中。 在氮氣中開發漂亮的Web界面是如此之快。 實際上,通過動態生成的JQuery代碼,您可以使用EXT JS或MooTools或prototype js之類的其他JavaScript庫將自己的JavaScript編寫到Template中,以配合整個功能。 在模板中,您將指出Nitrogen應該在哪里呈現動態生成的HTML元素以及將“ AJaxically”作用於這些元素的JQuery。 在這種情況下,模板僅表示HTML頁面。
記住要成為其郵件列表的成員,以尋求更多幫助,並繼續在StackOverflow上提問。 歡迎來到Erlang Web開發的世界。 您可能對一些鏈接感興趣(
IEEE關於Erlang網站開發的論文 ,
Erlang Web框架 ,
erlydtl-Erlang Django之類的模板實現 ,
ErlyWeb框架
)成功!
您也可以使用任何可用的Web框架在erlang中實現您的前端。 使用erlang RPC在單獨的erlang節點中運行前端和后端,以在它們之間進行通信。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.