ruby-on-rails - heroku介紹 - heroku付費




當AWS存在時,為什麼人們使用Heroku? Heroku與AWS有什麼區別? (9)

我是一名初學者RoR程序員,他計劃使用Heroku部署我的應用程序。 我的其他顧問的朋友說,Heroku非常簡單,使用起來很好。 唯一的問題是,我仍然不知道Heroku是做什麼的...

我看了他們的website ,簡而言之,Heroku做的是幫助擴展,但是......為什麼這很重要? Heroku如何幫助:

  1. 速度 - 我的研究表明,如果我針對美國/亞洲的觀眾,在美國東海岸部署AWS將是最快的。

  2. 安全 - 他們有多安全?

  3. 縮放 - 它是如何工作的?

  4. 成本效益 - 有一些像測功機一樣易於擴展。

  5. 他們如何面對競爭對手? 例如, Engine Yardbluebox

請使用外行英文術語來解釋...我是一名初學者程序員。


AWS / Heroku對於小型業餘愛好項目都是免費的(從開始)。

如果你想馬上啟動一個應用程序,沒有太多的自定義架構,然後選擇Heroku

如果您想專注於體系結構並能夠使用不同的Web服務器,請選擇AWS 。 根據您選擇的服務/產品,AWS比較耗時,但值得一試。 AWS還附帶了許多插件服務和產品。

Heroku的

  • 平台即服務(PAAS)
  • 良好的文檔
  • 具有內置的工具和體系結構。
  • 設計應用程序時對體系結構的控制有限
  • 部署已經完成(僅通過git命令)。
  • 不費時。

AWS

  • 基礎設施即服務(IAAS)
  • 多功能 - 有許多產品,如EC2,LAMBDA,EMR等。
  • 可以使用專用實例來更好地控制體系結構,例如選擇操作系統,軟件版本等。有多個後端圖層。
  • Elastic Beanstalk是一個類似於Heroku的PAAS的功能。
  • 可以使用自動化部署,或者自己推出。

Heroku向AWS遷移人員的比例很高。 兩者都有優勢,但在Heroku過後一段時間會變得很混亂......一旦你需要某種程度的複雜性,就不再容易維護Heroku的限制。

也就是說,越來越多的選擇可以通過搭載優秀的框架/工具在AWS上輕鬆實現Heroku和AWS的靈活性。


其實你可以同時使用 - 你可以開發一個應用程序與亞馬遜服務器ec2。 然後將它(使用git)推送到heroku免費一段時間(使用heroku免費層向公眾提供)並像這樣測試它。 與租用服務器相比,它非常符合成本效益,但您必須與更嚴格的heroku API進行交流,這是您應該考慮的事情。 來源:我的一個在線課程採用了這種方法“Coursera / Stanford的啟動工程由Balaji S. Srinivasan和Vijay S. Pande


好..它不是那麼美好..

首先,AWS不是火箭科學,如果你知道自己在一天結束時部署“事物”的方式,那麼最好使用AWS,而更便宜..而不是其他任何其他PaaS,而這些PaaS往往會更加昂貴交換為你做的“事情”...恕我直言,AWS很好,你有更多的控制權,

特別是現在有rightScale,bitnami等等,以及所有那些預先製作EC2圖像的軟件堆棧。


從開發,IT和業務目標來看這個決定有很多不同的方法,所以如果它看起來不可思議,那就不要感覺不好。 但也 - 不要過度伸縮。

考慮你的要求

我設計了網站,每天為超過8百萬個獨立服務提供服務,並且每週為基礎設施提供數TB的視頻,這些基礎設施從$ 25萬美元的資本硬件開始,由一個巨大的$ MM IT員工開始。

但我也有小型網站,每年產生10到20K美元,沒有很高的流量,數據庫或處理要求,並且我在沒有折扣的情況下以10美元/月的通用託管帳戶運行這些網站。

未來,部署將看起來更像Heroku,而不僅僅是因為進步。 縮放互聯網基礎設施的IT旋鈕的轉動價值並不是越來越大,而且它們與您提供的產品或服務的價值沒有任何關係。

另外,請記住一個商業網站 - 可擴展性是我們經常稱之為'好問題' - 雖然像Facebook和Twitter這樣的網站的可擴展性問題非常高調,但它們對成功沒有負面影響 - 新聞可能甚至有助於更多的註冊(所有新聞都是好的新聞)。

如果您有一項服務每天產生100k +以上的獨特功能並出現擴展問題,無論您使用何種語言,數據庫,平台或基礎架構,我都很樂意為您提供幫助!

可伸縮性是一個可解決的實現問題 - 沒有客戶是一個存在問題。



正如Kristian Glass Said所說,IaaS( AWS )和PaaS( HerokuEngineYard )之間沒有比較。

PaaS基本上可以幫助開發人員加快應用程序的開發速度,從而節省資金,最重要的是創新應用程序和業務,而不是設置配置和管理服務器和數據庫等內容。 購買使用PaaS的其他功能是應用程序部署過程,例如敏捷性,高可用性,監控,擴展/去除,對專業知識的需求有限,易於部署以及降低成本和開發時間。

但PaaS仍然存在一個陰影,導致PaaS採用的障礙:

  • 減少對服務器和數據庫的控制
  • 如果管理不當,成本將會很高
  • 在當前的日子和年齡過早和可疑

除了上面你應該有足夠的技能來管理你的IaaS:

  • 硬件採購
  • 操作系統
  • 服務器軟件
  • 服務器端腳本環境
  • 網絡服務器
  • 數據庫管理系統(Mysql,Redis等)
  • 配置生產服務器
  • 測試和部署工具
  • 監控應用程序
  • 高可用性
  • 加載Blancing / Http路由
  • 服務備份策略
  • 團隊合作
  • 重建生產

如果您的企業規模較小,PaaS將成為您的最佳選擇:

  • 現收現付
  • 低啟動成本
  • 把管道留給專家
  • PaaS處理自動擴展/除垢,負載平衡,災難恢復
  • PaaS管理所有安全要求
  • PaaS管理可靠性,高可用性
  • Paas為您管理許多第三方附加組件

根據要求它將完全是個人選擇。 您可以在我的PPT Hosting Rails應用程序上獲得詳細信息。


現有的答案非常準確:

  • Heroku易於使用和部署,可以輕鬆配置為自動部署存儲庫(例如GitHub),擁有大量第三方附加組件並為每個實例收費更多。

  • AWS有更廣泛的價格競爭力的第一方服務,包括DNS,負載平衡,便宜的文件存儲,並具有企業功能,如能夠定義安全策略。

對於tl; dr跳到這篇文章的末尾。

AWS ElasticBeanstalk試圖提供類似Heroku的自動縮放和簡單部署平台。 由於它使用EC2實例(它會自動創建),因此EB服務器可以完成其他EC2實例可以執行的任何操作,而且運行起來很便宜。

使用EB進行部署非常緩慢; 部署更新每台服務器可能需要10-15分鐘,部署到較大的群集可能需要一小時的最佳時間 - 與在Heroku上部署更新僅需幾秒鐘相比。 對EB的部署也沒有特別的無縫處理,這可能對應用設計施加限制。

您可以使用ElasticBeanstalk在幕後使用的所有服務來構建您自己的定制系統(使用CodeDeploy,Elastic Load Balancer,Auto Scaling組以及CodeCommit,CodeBuild和CodePipeline),但您絕對可以用一個好的幾個星期來第一次設置它,因為它比EC2中的配置要復雜一些,而且稍微有些技巧。

AWS Lightsail提供價格具有競爭力的託管選項,但無助於部署或擴展 - 它僅僅是EC2產品的封裝(但成本更高)。 它可以讓你在初始設置時自動運行一個bash腳本,這很好用,但與設置一個EC2實例(你也可以通過編程的方式)的成本相比,它是很昂貴的。

關於比較的一些想法(儘管以迂迴的方式嘗試和回答問題):

  1. 不要低估系統管理的工作量,包括通過安全補丁(以及偶爾的操作系統更新)保持安裝的所有內容。

  2. 不要低估自動部署,自動擴展和SSL供應和配置的好處。

    Heroku更新Git倉庫時的自動部署非常簡單。 它幾乎是即時的,優雅的,所以沒有終端用戶的中斷,只有在測試/持續集成通過時才能更新,因此如果您部署了破損的代碼,則不會中斷您的網站。

    您還可以使用ElasticBeanstalk進行自動部署,但要準備第一次花費一周時間 - 您可能必須更改部署和構建資產(如CSS和JS)的方式,以處理ElasticBeanstalk處理部署或構建邏輯的方式到您的應用程序來處理部署。

    請注意,為估計無縫部署而無需EB中斷的成本,您需要運行多個實例 - EB單獨推出每個服務器的更新,以便您的服務不會降級 - Heroku為您創建了一個新的測試儀,並且只是棄用舊的服務,直到所有的請求完成處理(然後刪除它)。

    有趣的是,使用EB運行多個服務器的託管成本可能比單個Heroku實例便宜,尤其是一旦包含附加組件的成本。

其他一些問題沒有具體詢問,但是由其他答案提出:

  1. 使用不同的提供商進行生產和開發是一個不好的主意。

    我正在認為人們正在暗示這一點。 雖然理想的代碼應該在任何合理的平台上運行得很好,因此它盡可能便攜,但每個主機上的軟件版本差別很大,只是因為代碼在分段運行並不意味著它將在生產環境中運行(例如主要的Node.js / Ruby / Python / PHP / Perl版本的不同之處在於代碼不兼容,通常採用無聲的方式,即使您的體面測試覆蓋率可能不會被捕獲)。

    一個好主意是利用像Heroku這樣的原型,小型項目和微型網站 - 這樣你就可以快速構建和部署,而無需花費大量時間進行配置和維護。

    確保在做出該決定時考慮運行生產和生產前實例的成本,不要忘記複製整個環境的成本(包括第三方服務,如數據存儲/附加組件,安裝和配置SSL等) 。

  2. 如果使用AWS,請警惕來自Bitnami等供應商的AWS預配置實例 - 這是一個安全噩夢。 他們可以在默認情況下公開大量易受攻擊的應用程序,而不會在描述中提及它。

    相反,只需使用受支持的主流發行版,如Ubuntu或Debian(如果需要RPM支持,則使用CentOS)。

    注意:亞馬遜產品有自己的分銷名為亞馬遜Linux,它使用RPM,但它是EC2特有的,並且不太受第三方/開源軟件支持。

  3. 您也可以在AWS(或Lightsail)上設置EC2實例,並在其上配置flynndokku的東西 - 然後您可以輕鬆部署多個站點,如果您維護了大量服務或希望成為能夠輕鬆搞定新事物。 然而,設置它不像使用Heroku那樣自動化,你最終可能花費大量的時間來配置和維護它(到我發現使用Amazon集群和Docker Swarm進行部署比設置更容易;因人而異)。

根據我正在開發的項目的需求,我已經同時使用了AWS EC實例(單獨和集群),Elastic Beanstalk和Lightsail和Heroku。

我討厭花費時間來配置服務,但如果我將它用於所有事情,並且AWS只花費一小部分成本,那麼我的Heroku賬單每年將達到數千。

TL;博士

如果資金從來不是問題,我會使用Heroku來處理幾乎所有的事情,因為這是一個巨大的時間段 - 但我仍然希望將AWS用於更複雜的項目,因為我需要Heroku無法提供的靈活性和更高級的服務。

對於我來說,理想的情況是,如果ElasticBeanstalk更像Heroku一樣工作 - 即更簡單的配置和更快的部署機制。

幾乎now.sh的服務的一個例子是now.sh ,它實際上在後台使用AWS,但部署和群集與在Heroku上一樣簡單(具有自動SSL,DNS,優雅部署,超級簡易群集設置和管理)。

我對Node.js應用程序和Docker鏡像部署都使用了很多,主要的注意事項是共享實例(反映在成本較低的情況下),目前沒有購買專用實例的選項。 不過,他們的開源部署工具'now'也可以用於部署到AWS以及Google Cloud和Azure上的專用實例。


首先,AWS和Heroku是不同的東西。 AWS提供基礎架構即服務( IaaS ),而Heroku提供平台即服務( PaaS )。

有什麼不同? 非常近似,IaaS為您提供了所需的組件,以便在其上構建一些東西; PaaS為您提供了一種只需推送代碼和一些基本配置並獲得正在運行的應用程序的環境。 IaaS可以為您提供更多的動力和靈活性,但需要自行構建和維護更多的代價。

為了讓您的代碼在AWS上運行,看起來有點像Heroku部署,您需要一些EC2實例 - 您需要在其上安裝負載均衡器/緩存層(例如Varnish ),您會希望實例運行類似於Passengernginx為您的代碼提供服務,您將需要部署和配置類似PostgreSQL的集群數據庫實例。 你需要一個類似Capistrano的部署系統,以及一些做日誌聚合的東西。

這不是一個微不足道的工作來建立和維護。 用Heroku,達到這種階段所需的努力可能是幾行應用程序代碼和git push

所以你到目前為止,你想要擴大規模。 大。 您正在使用Puppet進行EC2部署,對嗎? 所以現在你可以配置你的Capistrano文件來根據需要旋轉向上/向下的實例; 你重新調整你的Puppet配置,讓Varnish知道網絡工作者實例,並自動在它們之間建立連接。 或者你heroku scale web:+5

希望這給你一個兩者之間的比較的想法。 現在解決您的具體問題:

速度

目前,Heroku僅在美國us-easteu-west AWS實例上運行。 對你而言,這聽起來像你想要的。 對於其他人來說,這可能更多的是考慮因素。

安全

我看到很多內部維護的生產服務器在安全更新上落後了,或者通常很糟糕。 用Heroku,你有其他人管理這種事情,這可能是祝福或詛咒,這取決於你如何看待它!

部署時,您可以直接將代碼直接交給Heroku。 這可能是你的一個問題。 他們關於Dyno Isolation的文章詳細介紹了他們的隔離技術(看起來好像在單個EC2實例上運行多個dynos)。 幾位同事表達了這些技術的問題和他們孤立的力量; 我很抱歉沒有足夠的知識/經驗來真正評論,但是我目前的Heroku部署認為“足夠好”。 這可能是你的一個問題,我不知道。

縮放

我提到瞭如何在上面的IaaS和PaaS比較中實現這一點。 Procfile ,你的應用程序有一個Procfile ,它具有dyno_type: command_to_run形式的行,例如(從http://devcenter.heroku.com/articles/process-model dyno_type: command_to_run出來):

web:    bundle exec rails server
worker: bundle exec rake jobs:work

這與一個:

heroku scale web:2 worker:10

將導致您運行2個web dynos和10個worker dynos。 好,簡單,容易。 請注意, web是一種特殊的dyno類型,它可以訪問外部世界,並且在他們漂亮的網絡流量多路復用器(可能是某種Varnish / nginx組合)後面,將相應地路由流量。 您的工作人員可能會與消息隊列進行交互,以獲取類似的路由,他們將通過環境中的URL從其獲取位置。

成本效益

很多人對此有很多不同的意見。 目前,測試小時為0.05美元/小時,而AWS微型實例為0.025美元/小時或AWS小型實例為0.09美元/小時。

Heroku的dyno文檔說你有大約512MB的內存,所以考慮一個有點像EC2微型實例的dyno可能不是不合理。 它的價格是否值得兩倍? 你看重你的時間多少錢? 在IaaS產品之上構建它來達到此標準所需的時間和精力絕對不是很便宜。 我無法為你回答這個問題,但不要低估安裝和維護的“隱藏成本”。

(有點旁觀,但如果我從這裡連接到一個dyno( heroku run bash ),粗略的外觀顯示了/proc/cpuinfo中的4個內核和36GB的RAM - 這讓我相信我處於“高內存雙額外大型實例“ 。Heroku dyno文檔說每個dyno接收512MB內存,所以我可能與其他71個dynos共享(我沒有足夠的有關Heroku AWS實例同質化的數據,所以你的milage可能會有所不同))

他們如何面對競爭對手?

這恐怕我無法真正幫助你。 我真正看過的唯一競爭對手就是Google App Engine--當時我正在考慮部署Java應用程序,而對可用框架和技術的限制令人難以置信地令人難以置信。 這不僅僅是“僅僅是一件Java事情” - 一般限制和必要考慮( 常見問題解答提示)的數量看起來並不方便。 相比之下,部署到Heroku是一個夢想。

結論

我希望這可以回答你的問題(請評論是否有差距/你想談的其他方面)。 我覺得我應該提出我的個人立場。 我喜歡Heroku“快速部署”。 當我開始一個應用程序時,我想要一些便宜的主機(Heroku免費套餐非常棒 - 本質上如果您只需要一個網絡測試儀和5MB PostgreSQL,它可以免費託管一個應用程序),Heroku是我的職位。 對於幾個付費客戶的“嚴重生產部署”,通過服務級別協議以及花費在操作系統等上的專門時間,我不能讓自己把這麼多的控制權交給Heroku,然後是AWS或者我們自己的服務器一直是首選的主機平台。

最終,它是關於什麼最適合你的。 你說你是一個“初學者程序員” - 這可能只是使用Heroku將讓你專注於編寫Ruby,而不必花費時間在代碼周圍建立所有其他基礎架構。 我一定會試一試。

請注意,AWS實際上有一個支持Ruby,Node.js,PHP,Python,.NET和Java的PaaS產品Elastic Beanstalk 。 我認為一般來說,大多數人在看到“AWS”時都會跳轉到EC2和S3以及EBS這些絕對是IaaS產品的東西





amazon-web-services