2017-01-23 63 views
4

根據這個答案https://stackoverflow.com/a/41811770/2849613我想了解更多有關Heroku上的微服務最佳實踐的信息。Heroku負載平衡器vs Netflix zuul

問題是哪種方法更好?

  1. 安裝每個服務作爲獨立的應用程序,並使用其中之一作爲REST「代理」(例如Netflix Eureka)?

或者

  • 創建具有基於搬運工方法,例如Netflix的Zuul作爲負載平衡器?
  • 在我自己我已經看到這兩種方法的優點和缺點:

    1. 優點:更好的擴展性(容易創造更大的負荷新機器)。 缺點:服務之間的通信變得「在heroku之外」換句話說:因爲heroku應用程序具有公共地址,所有人都可以直接連接到服務(無需拋出Eureka),因爲每個服務都需要提供一些身份驗證方法並共享它彼此之間 - 我認爲這是風險。

    2. 優點:容易重現生產環境的測試和開發(泊塢窗圖像),服務之間的通信進行「內部」(圖片圖像,而不是應用程序)。 缺點:難以擴展(我認爲Heroku應用程序和Docker鏡像之間的負載平衡有點花銷)。

    哪種方法更好?也許我可以把它們混合在一起?或者也許有一些不同的更好的解決方案?

    難道說實話,我敢肯定的唯一事情,就是我想用RabbitMQ的一個消息隊列...

    回答

    3

    我喜歡的方式#1(尤其是因爲我知道你正在使用的Heroku已經) 。

    Docker非常棒,但如果您在Heroku上部署,其優勢非常有限。之所以Heroku已經完成了Docker所做的一切:管理依賴關係,安裝和流程管理。 Heroku已經爲您做了所有這些工作,而無需Docker的額外工作,即化您的環境。

    關於負載平衡:實際上並不重要。在這兩種情況下,如果您想在Heroku上運行,您將使用Heroku負載平衡器。這是因爲沒有辦法繞過Heroku堆棧的那一層。

    如果你想使用Docker/zuul,你肯定需要在Heroku的外部做這件事。這意味着你需要做各種其他的東西,找到碼頭主持人,管理你自己的基礎設施等。

    所以,在我看來,#1是一個更好的選擇(如果你使用Heroku),因爲:

    1. 一切都已經爲你照顧。
    2. 您可以專注於編寫可伸縮的代碼,而不是管理各種其他事物。
    3. 您的所有服務都將位於同一個AWS區域,因此即使它們會通過HTTP進行對話,它也會非常快。