2016-11-08 63 views
8

遵循一個正常的微服務框架,我們希望將每個微服務放置在它自己的git倉庫中,然後爲Service Fabric項目提供一個倉庫。當我們更新其中一個微服務時,Service Fabric項目將重新部署該服務。單獨的git倉庫中的服務結構項目

有沒有像這樣分裂Service Fabric項目的任何例子?我注意到在他們的所有例子中,一切都在一個解決方案/資料庫中。

+0

會喜歡你決定的更新 –

回答

1

在我們的項目中,我們遵循類似於此的模式,但沒有那麼細緻。每個SF應用程序都包含在它自己的回購中,但我們將在應用程序中有多個特定的微服務。我們將應用程序分爲與最終應用程序相關的特定功能塊(數據層,中間層,演示文稿,分析等)。升級時,我們將一次升級特定的應用程序,而不一定是特定的服務。升級特定服務是一個巨大的挑戰。我們仍然有一個共享的接口項目,我們使用SF遠程處理來在不同的應用程序之間進行通信,我們可以這樣做,因爲我們通過自己的回購來管理容器和接口,然後我們通過私人的nuget服務器進行分發。這使工作流程變得很困難,但最終它很好,因爲它使我們保持了應用程序之間的接口兼容性。我們也有一些核心的微服務,我們使用SF Nuget分發每個應用程序。它還年輕,有一些鋒利的邊緣,但它很棒。

2

tl; dr:找出在管理代碼和個別服務發佈方面最適合您的開發團隊的東西。使用diff packages僅升級Service Fabric應用程序中的更改。最小的回購大小應該是包含在一個Visual Studio解決方案中的一個服務結構應用程序。

加長版: 這是完全有可能對您的服務光纖應用分成多個應用程序,最小的是一個服務織物應用你有每個微服務。如果這是一個好主意或者不完全取決於你正在嘗試構建的應用程序的類型。服務之間是否存在任何依賴關係?你如何劃分服務,當你想以協調的方式做到這一點時,是否有任何情況?你打算如何監控你的服務?如果你不想以協調一致的方式做到這一點,那麼再次在同一個應用程序中提供更多的服務可能是有意義的。

將代碼拆分成小於您的Visual Studio解決方案的回購可能只會導致您遇到麻煩。您可以在技術上與Git子模塊或子樹一起工作,但Visual Studio在解決方案中處理項目引用的方式很可能會使您最終陷入合併 - 地獄。

當涉及到升級Service Fabric應用程序時,實際上有一種方法可以根據服務清單中的版本號僅升級應用程序中已更改的服務。這稱爲diff包,可用於將應用程序部署到至少部署了該應用程序一次的羣集(即它是升級,而不是安裝)。如果只升級應用程序中的少數服務,這可能會極大地影響部署的升級時間。 The full documentation for this can be found here。還有一個描述它的SO answer

我想說,您的選擇與發展一樣,是不同收益之間的折衷。

將服務拆分爲包含更少服務的更細粒度應用程序可以使升級變得更容易(但在技術上這種效果在技術上也可以通過使用diff包來實現)。這種方法的缺點是您必須將依賴關係作爲您的服務之間的嚴格接口進行管理。一種方法是將你的服務/行爲者接口發佈到私人的NuGet-feed。這反過來在您的開發流程中引入了一些額外的複雜性。

如果您的解決方案在合併,版本控制和版本方面不斷增長,那麼同樣的Visual Studio解決方案中保留所有內容,相同的服務結構應用程序可以用於較小的解決方案,但從長遠來看可能很難。

+0

我正在閱讀你的答案,並且關於_服務之間是否存在任何依賴?_ - 在我們的例子中,我們確實存在服務之間的依賴關係,並且我們使用遠程處理/接口溝通**你的方法改變了嗎?想知道您是否可以分享如何構建您的項目/應用程序?**我們在1個解決方案中擁有大約100個微服務,並且慢慢將其分解爲1:1的比例微服務與應用程序 –

0

您不應該將Service Fabric服務視爲微服務。

的代碼/服務/應用程序等服務織物分類爲您提供瞭如何撰寫您需要的高彈性(如已經指出的那樣)。考慮一下這樣一個事實,即你可以在一個服務中運行更多的代碼包,並試圖將其轉換爲微服務定義,這使得事情變得更加難以應付。

由於SF Appation是您的部署單位(無論是否包含一個或多個更新的服務),因此您應該努力以一種方式構建您的repo/solution/SF應用程序設置,以便您可以包含對一個SF App的大部分更改(=一個解決方案和一個回購)。

如果你在一個情況下,你需要不斷部署多個應用程序的SF得到一個改變了得到的,你會不會生產。

2

閱讀你的問題,這聽起來像你的資料庫分割主要是爲部署的關注,所以我將專注於這方面。

我們爲每個Service Fabric應用程序(包含多個服務)使用一個Git存儲庫,這有助於簡化Continuous Integration和Continuous部署的完成方式:如果存儲庫中存在更改(代碼或配置)應用程序需要被構建和部署。

如果您正在使用VSTS的生成和發佈功能,在線,您可以輕鬆地利用可用的服務架構中的構建任務,以支持差分升級。使用「更新服務織物應用版本」任務(https://www.visualstudio.com/en-us/docs/build/steps/utility/service-fabric-versioning),使用「僅更新改變時」與「確定性編譯器標誌」(https://blogs.msdn.microsoft.com/dotnet/2016/04/02/whats-new-for-c-and-vb-in-visual-studio/)選項,以確保二進制文件始終是相同的,如果代碼是一樣的,你通過每個SF應用程序的差分升級很容易結束。

+0

有關使用tfs 2013進行部署的最佳實踐的任何指導? –