簡體   English   中英

在生產中使用Docker的Elixir / Erlang應用程序?

[英]Elixir/Erlang Applications with Docker in production?

我想知道在生產中使用Dockix和Elixir / Erlang應用程序的原因是什么。這是我第一次被要求在生產中使用Docker。我在沒有Docker的情況下進行生產我是Erlang / Elixir Developer。我在高流量產品服務器上工作,每秒有數百萬筆交易,沒有Docker。我花了一天的時間來創建和運行Elixir應用程序映像,其中包含很多網絡問題。不得不為DNS設置等做很多配置。之后我開始思考進一步推進的有力理由是什么。有沒有強大的理由去生產或不與Docker一起使用Elixir / Erlang應用程序。

我在論壇中經歷了一些原因,但仍然不相信。泊塢機提供的所有優勢已經存在於Erlang VM中。 表格中的任何Erlang專家都可以幫助我。

我在生產中部署了在Docker上打包的Elixir。 這曾經是我首選的做事方式,但現在我更傾向於使用預裝了所有內容的Packer創建自己的AMI。

部署中的核心問題是控制,在某種程度上我認為在利用Docker時會放棄控制。

Docker的主要缺點是它限制了Erlang / Elixir的功能,例如epmd間連接。 這也意味着remsh實際上是不可能的,而且很酷:observer.start是禁忌。 如果您因任何原因需要與生產節點進行交互,那么第一個ssh進入服務器,進入Docker等會有額外的障礙。當它只是檢查某些內容時很好,當生產正在燃燒時會感到沮喪在痛苦中。 在一個節點中啟動多個容器有點無用,因為BEAM可以有效地使用所有核心。 熱門升級實際上是不可能的,但這並不是我們個人內在的業務需求的真正特征。

已經努力讓epmd在容器設置中工作,例如: https//github.com/Random-Liu/Erlang-In-Docker但是這將需要您重建Erlang以進行自定義net_kernel修改。

亞馬遜最近發布了AWS ECS AWS VPC網絡模式的新功能,這可能會促進容器間epmd通信,從而直接連接到您的節點。 我還沒有確認。

除了epmd通信的問題是部署時間問題。 使用Docker創建您的圖像,即使您的圖像僅擁有5MB,也很快將最終占用300MB,其中200MB僅用於所有各種依賴項以創建您的版本。 可能有辦法減少這種情況,但這需要專業知識和專注努力。 我將這個額外的空間更多地分類為一個煩惱而不是交易破壞者,但相信我,如果你必須等待25分鍾才能完成不可變的部署,任何一分鍾你都可以刮掉它是值得的。

性能方面,我沒有注意到裸機部署和docker部署之間存在顯着差異。 AWS EB Docker很好地將容器資源擴展到EC2實例的容器資源。

當然,優點是便攜性。 如果你有一個需要點擊JSON API的前端工程師,那么在本地開發方面,這是一個巨大的勝利,通過一些精心設置,他們可以在他們的本地生成最新的api,而無需了解Erlang / Elixir / Rserve / Postgres的。

此外,供應商鎖定大大減少,特別是自從AWS推出對Kubernetes的支持以來

這是一個權衡問題,如果您是一名需要進行生產且具有很少Devops知識的開發人員,那么可能需要部署Docker。 如果您更熟悉基礎架構,部署等,那么作為開發人員,我相信創建自己的AMI可以讓您更好地控制您的環境。 總而言之,我鼓勵至少玩Docker並嘗試使用它,它可能會開啟一個新的可能性領域。

也許這取決於您要使用的服務器。 據我所知,例如,Docker很大程度上促進了在AWS Elastic Beanstalk上部署Phoenix應用程序,但我目前還沒有足夠的能力給你非常具體的理由。

也許有人可以詳細說明。

Docker主要是一種部署和分發工具。 來自Docker文檔:

泊塢窗允許開發者在使用本地容器中提供您的應用程序和服務規范的環境中工作,簡化了開發周期。 容器非常適合持續集成和持續開發(CI / CD)工作流程。

如果您的應用程序具有外部依賴項(例如,加密庫),則與另一種語言編寫的另一個應用程序(例如,作為單獨進程運行的數據庫)交互,或者它依賴於某些操作系統/環境配置(您提到過)你必須做一些DNS配置),然后將你的應用程序打包到docker容器中,可以幫助你避免重復工作安裝依賴項和配置環境。 它可以幫助您避免額外的工作,使您的測試和生產環境在依賴關系方面保持同步,或者調查應用程序在一個環境中的一台計算機上工作的原因,而不是另一個環境。

以上並不是特定於Erlang應用程序,但我同意Erlang有助於消除跨平台的一些問題並抽象掉一些依賴項,而OTP發布處理可幫助您打包應用程序。

由於您提到您是開發人員,因此值得一提的是Docker為管理員或運行基礎架構的團隊提供了更多優勢,而不是開發人員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM