2017-05-11 101 views
1

我正在使用docker構建一個微服務項目。Docker上的微服務 - 架構

我的一個微服務是一個應該從各種來源獲取數據的監聽器。

我想要實現的是能夠啓動和停止從源動態獲取數據。

architecture

例如在該圖中,我有3個源極連接到3個碼頭工人。

我的問題開始,因爲我需要創建另一個碼頭實例,當一個新的來源可用。在這個例子中,讓我們說源#4現在可用,我需要得到他的數據(我知道什麼時候有新源可用),但我希望它自動縮放(用於收聽源#4信息)

I提出了兩種解決方案,每種解決方案都有優點和缺點:

1)創建一個運行偵聽器服務的大量docker的docker池,並且每當有新的源可用時發送消息(使用rabbitmq但我認爲較少相關)到可用碼頭工人開始獲取數據。

在這個解決方案中,我有點擔心沒有理由運行Docker鏡像的內存消耗 - 但這不是一個非常複雜的解決方案。

2)每當一個新的源變得可用創建一個新的泊塢窗(用不同的環境變量)

有了這個解決方案,我有創造泊塢窗的問題。 在這一刻我已經實現了這一點,但啓動docker的服務(讓我們稱之爲管理器)只是一個常規的nodejs應用程序,它在同一臺服務器上執行命令 - 我還需要它在docker容器中。

所以這裏的問題是我無法管理從主碼頭創建一個ssh連接來創建我的新Docker。

我不太確定我的兩個解決方案是否有進展,並且會真正感謝我的問題的任何建議。

回答

1

你的問題有點不清楚,但如果你只是想擴展一個服務水平,你應該看看容器編排技術,將允許你 - 例如Kubernetes。我建議閱讀introduction

您需要添加附加服務容器的操作是更新Deployment配置中所需的replicas的數量。欲瞭解更多信息,請閱讀this

使用kubernetes(或短k8s),您將受益於部署自動化,自我修復和服務發現以及負載平衡功能和水平可伸縮性。

還有其他的編排方法(例如Docker Swarm),但我會建議首先查看kubernetes。

讓我知道這是否解決了您的問題,或者如果您有其他要求在原始問題中不太清楚。

鏈接你的跟進問題:

1 - Run kubectl commands inside container

2 - Kubernetes autoscaling based on custom metrics

3 - Env variables in Pods

+0

謝謝您的回答,我會努力讓我的問題更加清晰。我的源代碼是動態更新(添加和刪除),所以我需要我的偵聽器動態擴展,是否可以使用'Kubernetes'?如果是的話,我會很感激這個問題的參考(我在我的服務器上有一個openshift環境) – Yogevnn

+1

嗨,是的,如果你按照我的第二個鏈接的答案,你會看到這樣的縮放命令:'kubectl scale deployment nginx-部署--replicas 10' –

+0

謝謝!我剛剛檢查過,看起來不錯。關於它的一些問題,我可以從不同的Docker運行這個命令嗎?比方說,我將有一個dockerManager來監聽RabbitMQ,當有新的源代碼可用時,dockerManager將使用此命令來縮放Pod。還有一個問題,我可以在創建pod時使用環境變量嗎? (順便說一句,我使用nodejs) – Yogevnn