使用 Azure Service Fabric 编排本地开发或测试环境
Orchestrating local development or testing environments with Azure Service Fabric
在尝试了一些 Azure Service Fabric 并观看了来自 BUILD 的流之后,我有点好奇是否有任何关于工具的管道可以用于为更复杂的服务编排环境。
假设我构建了一个服务 "Service1",它调用 "Service2" 和 "Service3" 中的参与者和服务;任何检查 "Service1" 存储库以执行更改的开发人员不仅必须检查 "Service2" 和 "Service3",而且还必须构建它们并将它们部署到 Service Fabric,然后才能正确测试 his/her 在 "Service1" 内变化。将其与例如 Compose for Docker(我知道 Azure Service Fabric 本身不是容器式基础设施,但仅作为示例)进行比较,您可以在其中创建描述您的服务及其依赖项的清单。然后,您可以轻松 bootstrap 运行 所需的整个环境并测试您的服务。
这对于服务的自动化测试甚至 QA 也很有用,您可以在其中启动一个新集群并部署您的服务 - 及其依赖项 - 以及 运行 之前对更改进行的实际实时测试您开始生产部署。
这可能是一个更适合 product feedback 的问题或提案,但在将其形成为建议之前对此进行更多输入会很有趣。我对 Compose 并不十分熟悉,我将其用作示例 - 也不熟悉 Azure Service Fabric,因此可能有更好的解决方案。
一旦您在微服务之间定义了明确的契约,您就可以升级它们并独立测试它们。
各种微服务可以打包在单个应用程序包中,也可以是不同应用程序包的一部分。您可以在单个应用程序或不同的应用程序中创建所需的微服务实例。
假设微服务服务 A 是应用程序包 A 的一部分。它依赖于属于应用程序包 B 的其他微服务服务 B。您已将应用程序包 B 安装并实例化为“fabric :/AppB”并创建了一个微服务“fabric:/AppB/ServiceB”。
您可以将应用程序 A 和服务 A 部署和实例化为“fabric:/AppA/ServiceA”,配置为与“fabric:/AppB/ServiceB”对话。您还可以在运行时查找特定类型的服务,并根据服务端点或命名 属性 存储中发布的元数据动态连接到所需的服务。
下拉 application packages 并将它们部署到您的集群(无论是本地、测试、生产,还是其他)实际上是一件相当简单的事情,只要您有一个类似于 Compose 的应用程序包的中央存储库与 Docker 集线器。换句话说,功能是存在的,但我们还没有像 Docker Hub 这样的集中位置来存储应用程序包——你必须自己编写一些脚本来把东西拉下来。所以现在是的,您需要检查具有您的依赖项的存储库并构建(或注入模拟以进行本地测试)。
关于这一点,请向我们的 product feedback 提出 post 这个建议!
不确定我是否看到了这个问题。假设使用 TFS(或其他),团队可能有一个包含所有服务项目的根项目。您将在本地框(您可以构建和部署)上已有一个 ServiceB 的本地工作集。您构建并部署 ServiceB(如果您之前没有)到本地开发结构。它会保留在那里,直到您将其删除或部署到它上面。现在您签出编辑 ServiceA,进行更改,在 ServiceA 解决方案上按 f5 键,您的 ServiceA 找到已经在开发结构中的 ServiceB。如果稍后有人更改了 ServiceB,您将获得新的位并再次部署该应用程序,以便它会在您的开发结构中更新,直到它再次更改。
在 Azure 结构中(发布时)情况似乎大同小异。 ServiceB 已经 运行。您更改 ServiceA 并部署您的更改。
我们处理各种服务和参与者包之间关系的方式是进行完整部署。通过完全部署,用户在其本地 git 分支中提交的任何更改都将通过完整的应用程序部署(所有服务和参与者)进行测试。我们使用自定义 ps 脚本在本地环境中部署相同的脚本。
应用程序部署后,开发人员 运行 我们完整的 specflow 测试套件使用模拟数据并测试我们服务结构应用程序的所有部分以及所做的任何新更改。目前,部署是由开发人员执行的手动 steps。开发人员需要附上 specflow 测试 运行 结果和 commit/merge。
来自 Microsoft BizTalk 世界,其中 apps/orchestrations 表现得像 SF 中的服务和参与者,我们了解到在同一环境中管理应用程序之间的依赖关系时,完全部署比部分部署更简洁。
我们的应用程序包含 3 个服务
1. Stateless router service
2. State full cache service
3. Domain specific Actor micro services ( we have multiple services in same actor project)
Service 1 and 3 are dependent on service 2. Any change in 'Router' or 'Actor' service need to be tested along with 'Cache' service as they all work together.
Any changes to 'Actor' ( this one changes most of the time due to business logic ) generally require our team to deploy all 3 service and execute our spec flow test suite to test complete functionality. This make sure that all the functionality is working as expected.
作为替代方案,您可以为不同的参与者创建多个项目,而不是将所有参与者都放在同一个项目中。我们还在 v2 实施中研究这种方法。这将有助于我们仅部署基于参与者的微服务,其中更改随任何所需服务一起发生。
我同意我们目前将所有参与者组合在一个项目中的设计并不是最好的,但这有助于我们以更快的速度构建应用程序。一旦您根据需要了解了哪些有效,哪些无效,重构就始终很重要。
在尝试了一些 Azure Service Fabric 并观看了来自 BUILD 的流之后,我有点好奇是否有任何关于工具的管道可以用于为更复杂的服务编排环境。
假设我构建了一个服务 "Service1",它调用 "Service2" 和 "Service3" 中的参与者和服务;任何检查 "Service1" 存储库以执行更改的开发人员不仅必须检查 "Service2" 和 "Service3",而且还必须构建它们并将它们部署到 Service Fabric,然后才能正确测试 his/her 在 "Service1" 内变化。将其与例如 Compose for Docker(我知道 Azure Service Fabric 本身不是容器式基础设施,但仅作为示例)进行比较,您可以在其中创建描述您的服务及其依赖项的清单。然后,您可以轻松 bootstrap 运行 所需的整个环境并测试您的服务。
这对于服务的自动化测试甚至 QA 也很有用,您可以在其中启动一个新集群并部署您的服务 - 及其依赖项 - 以及 运行 之前对更改进行的实际实时测试您开始生产部署。
这可能是一个更适合 product feedback 的问题或提案,但在将其形成为建议之前对此进行更多输入会很有趣。我对 Compose 并不十分熟悉,我将其用作示例 - 也不熟悉 Azure Service Fabric,因此可能有更好的解决方案。
一旦您在微服务之间定义了明确的契约,您就可以升级它们并独立测试它们。 各种微服务可以打包在单个应用程序包中,也可以是不同应用程序包的一部分。您可以在单个应用程序或不同的应用程序中创建所需的微服务实例。
假设微服务服务 A 是应用程序包 A 的一部分。它依赖于属于应用程序包 B 的其他微服务服务 B。您已将应用程序包 B 安装并实例化为“fabric :/AppB”并创建了一个微服务“fabric:/AppB/ServiceB”。 您可以将应用程序 A 和服务 A 部署和实例化为“fabric:/AppA/ServiceA”,配置为与“fabric:/AppB/ServiceB”对话。您还可以在运行时查找特定类型的服务,并根据服务端点或命名 属性 存储中发布的元数据动态连接到所需的服务。
下拉 application packages 并将它们部署到您的集群(无论是本地、测试、生产,还是其他)实际上是一件相当简单的事情,只要您有一个类似于 Compose 的应用程序包的中央存储库与 Docker 集线器。换句话说,功能是存在的,但我们还没有像 Docker Hub 这样的集中位置来存储应用程序包——你必须自己编写一些脚本来把东西拉下来。所以现在是的,您需要检查具有您的依赖项的存储库并构建(或注入模拟以进行本地测试)。
关于这一点,请向我们的 product feedback 提出 post 这个建议!
不确定我是否看到了这个问题。假设使用 TFS(或其他),团队可能有一个包含所有服务项目的根项目。您将在本地框(您可以构建和部署)上已有一个 ServiceB 的本地工作集。您构建并部署 ServiceB(如果您之前没有)到本地开发结构。它会保留在那里,直到您将其删除或部署到它上面。现在您签出编辑 ServiceA,进行更改,在 ServiceA 解决方案上按 f5 键,您的 ServiceA 找到已经在开发结构中的 ServiceB。如果稍后有人更改了 ServiceB,您将获得新的位并再次部署该应用程序,以便它会在您的开发结构中更新,直到它再次更改。
在 Azure 结构中(发布时)情况似乎大同小异。 ServiceB 已经 运行。您更改 ServiceA 并部署您的更改。
我们处理各种服务和参与者包之间关系的方式是进行完整部署。通过完全部署,用户在其本地 git 分支中提交的任何更改都将通过完整的应用程序部署(所有服务和参与者)进行测试。我们使用自定义 ps 脚本在本地环境中部署相同的脚本。
应用程序部署后,开发人员 运行 我们完整的 specflow 测试套件使用模拟数据并测试我们服务结构应用程序的所有部分以及所做的任何新更改。目前,部署是由开发人员执行的手动 steps。开发人员需要附上 specflow 测试 运行 结果和 commit/merge。
来自 Microsoft BizTalk 世界,其中 apps/orchestrations 表现得像 SF 中的服务和参与者,我们了解到在同一环境中管理应用程序之间的依赖关系时,完全部署比部分部署更简洁。
我们的应用程序包含 3 个服务
1. Stateless router service
2. State full cache service
3. Domain specific Actor micro services ( we have multiple services in same actor project)
Service 1 and 3 are dependent on service 2. Any change in 'Router' or 'Actor' service need to be tested along with 'Cache' service as they all work together.
Any changes to 'Actor' ( this one changes most of the time due to business logic ) generally require our team to deploy all 3 service and execute our spec flow test suite to test complete functionality. This make sure that all the functionality is working as expected.
作为替代方案,您可以为不同的参与者创建多个项目,而不是将所有参与者都放在同一个项目中。我们还在 v2 实施中研究这种方法。这将有助于我们仅部署基于参与者的微服务,其中更改随任何所需服务一起发生。
我同意我们目前将所有参与者组合在一个项目中的设计并不是最好的,但这有助于我们以更快的速度构建应用程序。一旦您根据需要了解了哪些有效,哪些无效,重构就始终很重要。