欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Service Fabric承載eShop On Containers的實(shí)現(xiàn)方法

 更新時(shí)間:2018年01月09日 09:33:01   作者:云上的翅膀  
下面小編就為大家分享一篇利用Service Fabric承載eShop On Containers的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

從Pet Shop 到eShop on Container都是Microsoft在技術(shù)演進(jìn)的路徑上給開(kāi)發(fā)者展示.Net的開(kāi)發(fā)能力和架構(gòu)能力的Sample工程,Petshop的時(shí)候更多的是展現(xiàn)應(yīng)用的分層架構(gòu),設(shè)計(jì)的抽象與模塊間的通訊。到了eShop on Container更多的關(guān)注在架構(gòu)設(shè)計(jì)與微服務(wù)化的,下面我們先來(lái)看看eshop on Container的架構(gòu)圖

在上圖,我們可以看到后端服務(wù)分成了

1 Identity microservice(驗(yàn)證服務(wù))

2 Catalog microservice(商品分類服務(wù))

3 Ordering microservice(訂單服務(wù))

4 Basket microservice(購(gòu)物車服務(wù))

5 Marketing microservice(市場(chǎng)營(yíng)銷服務(wù))

6 Locations microservice(地理位置信息服務(wù))

在以前的分層架構(gòu)中,通常這些服務(wù)都是以某一模塊來(lái)體現(xiàn)的,為什么現(xiàn)在要將他們拆分成了各個(gè)服務(wù)呢?當(dāng)我們從業(yè)務(wù)場(chǎng)景上面來(lái)看這些服務(wù)時(shí),我們會(huì)發(fā)現(xiàn)每個(gè)服務(wù)的訪問(wèn)峰值時(shí)間區(qū)間、容量規(guī)劃都是不一樣的,甚至實(shí)現(xiàn)這些服務(wù)最方便最簡(jiǎn)單的技術(shù)棧都有可能是不一樣的(當(dāng)然強(qiáng)大的.net core無(wú)所不能,但是公司內(nèi)不同業(yè)務(wù)線上的技術(shù)儲(chǔ)備不一樣,就有可能選擇不同的技術(shù)實(shí)現(xiàn))。這是因?yàn)槿绻覀兌紝⑦@些模塊整合到了一個(gè)程序或者服務(wù)中的時(shí)候,就會(huì)碰到在不同時(shí)間內(nèi)服務(wù)高峰期擴(kuò)展系統(tǒng)容量困難,要不就是資源不足,要不就是資源過(guò)剩。譬如搶購(gòu)業(yè)務(wù)開(kāi)始前大家提前個(gè)半小時(shí)登錄了系統(tǒng),這時(shí)候系統(tǒng)最忙的是登錄模塊,到了開(kāi)始搶購(gòu)時(shí)間,系統(tǒng)最忙的是訂單模塊。不采用微服務(wù)架構(gòu)的話,半小時(shí)前準(zhǔn)備給登錄模塊使用的資源不一定能夠及時(shí)的釋放出來(lái)給訂單模塊。如果兩個(gè)模塊都使用單一程序架構(gòu)的話,很可能出現(xiàn)的情況就是搶購(gòu)的業(yè)務(wù)把所有資源都占滿了了,連其他正常訪問(wèn)系統(tǒng)的用戶資源都被占用掉,導(dǎo)致系統(tǒng)崩潰。在講究Dev/Ops的今天,開(kāi)發(fā)人員和架構(gòu)師需要更多的考慮硬件架構(gòu)層面對(duì)程序應(yīng)用帶來(lái)的影響。

用Service Fabric來(lái)承載eShop on Container微服務(wù)的方法一,通過(guò)Service Fabric直接管理Docker

首先我們先到Azure上申請(qǐng)一個(gè)Container Registry來(lái)承載eShop各個(gè)微服務(wù)程序的鏡像(image).創(chuàng)建Azure Docker Registry可以參考官方文檔:https://docs.microsoft.com/zh-cn/azure/container-registry/

現(xiàn)在最新版本Service Fabric已經(jīng)可以直接管理編排Docker了。

1.創(chuàng)建一個(gè)類型為Container的Service

image

2.在servicemanifest.xml中描述清楚image所在路徑

<CodePackage Name="Code" Version="1.0.0">
 <!-- Follow this link for more information about deploying Windows containers to Service Fabric: https://aka.ms/sfguestcontainers -->
 <EntryPoint>
 
  <ContainerHost>
  <ImageName>eshopsample.azurecr.io/catalog:latest</ImageName>  
  </ContainerHost>  
 </EntryPoint>
 <!-- Pass environment variables to your container: --> 
 <EnvironmentVariables>
  <EnvironmentVariable Name="HttpGatewayPort" Value=""/>
 </EnvironmentVariables>
 </CodePackage>

這里非常簡(jiǎn)單,指定了image所在位置就好了,如果本身Docker Image里需要很多配置信息譬如:數(shù)據(jù)庫(kù)鏈接串、其他服務(wù)的地址等等都可以在EnvironmentVariables里面去配置。

3.配置Registry的訪問(wèn)賬號(hào)密碼,需要在ApplicationManifest.xml上面來(lái)配置

<ServiceManifestImport>
 <ServiceManifestRef ServiceManifestName="CatalogService_Pkg" ServiceManifestVersion="1.0.1" />  
 <Policies>
  <ContainerHostPolicies CodePackageRef="Code" Isolation="hyperv">
  <RepositoryCredentials AccountName="youraccount" Password="xxxxxxxxxxxxx" PasswordEncrypted="false"/>
  <PortBinding ContainerPort="80" EndpointRef="CatalogServieEndpoint"/>
  
  </ContainerHostPolicies>
 </Policies>
 </ServiceManifestImport>

整個(gè)過(guò)程不會(huì)太復(fù)雜,只要配置好了Catalog microserivce的ServiceManifest.xm和ApplicationManifest.xml文件之后,我們可以用同樣的方法將其他服務(wù)一一配置完成,然后我們就可以將Service Fabric的配置Publish到Cluster上面了。

image

Service Fabric會(huì)自動(dòng)根據(jù)配置在Cluster上面Pull Image和將Docker運(yùn)行起來(lái)。非常簡(jiǎn)單

用Service Fabric承載eShop on Container微服務(wù)的方法二:用Service Fabric的Runtime運(yùn)行eShop on Container的微服務(wù)

Service Fabric本身就是個(gè)微服務(wù)的開(kāi)發(fā)框架,現(xiàn)在已經(jīng)直接支持了.net Core 2.0了所以,我們更新了Service Fabric的SDK之后就可以直接創(chuàng)建.net core的服務(wù)了

imageimage

eShop on Container的代碼都已經(jīng)是一份成型的.net core 2.0的代碼,所以不需要重新編寫(xiě)服務(wù)。

1.通過(guò)nuget添加最新的Service Fabric最新的SDK。

image

2.修改programe.cs,啟動(dòng)ServiceFabric Runtime而不是直接啟動(dòng)Asp.net WebHost

public static void Main(string[] args)
  {
   try
   {
    // ServiceManifest.XML 文件定義一個(gè)或多個(gè)服務(wù)類型名稱。
    // 注冊(cè)服務(wù)會(huì)將服務(wù)類型名稱映射到 .NET 類型。
    // 在 Service Fabric 創(chuàng)建此服務(wù)類型的實(shí)例時(shí),
    // 會(huì)在此主機(jī)進(jìn)程中創(chuàng)建類的實(shí)例。
    ServiceRuntime.RegisterServiceAsync("Catalog.API",
     context => new CatalogAPI(context)).GetAwaiter().GetResult();
    ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(CatalogAPI).Name);
    // 防止此主機(jī)進(jìn)程終止,以使服務(wù)保持運(yùn)行。 
    Thread.Sleep(Timeout.Infinite);
   }
   catch (Exception e)
   {
    ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());
    throw;
   }
}

3.編寫(xiě)

CatalogAPI 類用于啟動(dòng)WebHost

internal sealed class CatalogAPI : StatelessService
 {
  public CatalogAPI(StatelessServiceContext context)
   : base(context)
  { }
  /// <summary>
  /// Optional override to create listeners (like tcp, http) for this service instance.
  /// </summary>
  /// <returns>The collection of listeners.</returns>
  protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
  {
   return new ServiceInstanceListener[]
   {
    new ServiceInstanceListener(serviceContext =>
     new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
     {
      ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting WebListener on {url}");
            return new WebHostBuilder()
           .UseKestrel()
         .ConfigureServices(
          services => services
           .AddSingleton<StatelessServiceContext>(serviceContext))
         .UseContentRoot(Directory.GetCurrentDirectory())
         .ConfigureAppConfiguration((builderContext, config) =>
         {
          IHostingEnvironment env = builderContext.HostingEnvironment;
          config.AddJsonFile("settings.json", optional: false, reloadOnChange: true)
           .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
          
         })
         .UseStartup<Startup>()
         .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
         .UseUrls(url)
         .UseWebRoot("Pics")
         .Build();     
     }))
   };
  }
 }

4.編寫(xiě)serviceManifest.xml描述服務(wù)端口等信息

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="Catalog.APIPkg"
     Version="1.0.3"
     xmlns="http://schemas.microsoft.com/2011/01/fabric"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <ServiceTypes>
  <StatelessServiceType ServiceTypeName="Catalog.API" />
 </ServiceTypes>
 <!-- Code package is your service executable. -->
 <CodePackage Name="Code" Version="1.0.3">
 <EntryPoint>
  <ExeHost>
  <Program>Catalog.API.exe</Program>
  <WorkingFolder>CodePackage</WorkingFolder>
  </ExeHost>
 </EntryPoint>
 <EnvironmentVariables>
  <EnvironmentVariable Name="ASPNETCORE_ENVIRONMENT" Value="Development"/>
 </EnvironmentVariables>
 </CodePackage>

 <ConfigPackage Name="Config" Version="1.0.1" />
 <Resources>
 
 <Endpoints> 
 
  <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="5101" />
 </Endpoints>
 </Resources>
</ServiceManifest>

5.修改AppcationManifest.xml增加幾個(gè)服務(wù)的描述信息

添加ServiceImport節(jié)

<ServiceManifestImport>
 <ServiceManifestRef ServiceManifestName="Catalog.APIPkg" ServiceManifestVersion="1.0.3" />
 <ConfigOverrides />
 </ServiceManifestImport>

在DefaultService中描述Service

<Service Name="Catalog.API" ServiceDnsName="catalog.fabric.api">
  <StatelessService ServiceTypeName="Catalog.API" InstanceCount="[Catalog.API_InstanceCount]">
  <SingletonPartition />
  </StatelessService>
 </Service>

這樣我們就可以將Catalog這個(gè)服務(wù)改造成可以通過(guò)Service Fabric來(lái)管理的微服務(wù)了。通過(guò)Publish,我們可看到幾個(gè)服務(wù)都已經(jīng)在Service Fabric下面接受管理和編排了。

image

訪問(wèn)localhost:5100

image

以上這篇利用Service Fabric承載eShop On Containers的實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Ubuntu16.04系統(tǒng)搭建.Net Core開(kāi)發(fā)環(huán)境

    Ubuntu16.04系統(tǒng)搭建.Net Core開(kāi)發(fā)環(huán)境

    本文詳細(xì)講解了Ubuntu系統(tǒng)搭建.Net Core開(kāi)發(fā)環(huán)境的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • Elasticsearch.Net使用入門(mén)教程(1)

    Elasticsearch.Net使用入門(mén)教程(1)

    這篇文章主要為大家詳細(xì)介紹了Elasticsearch.Net使用入門(mén)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • ASP.NET小結(jié)之MVC, MVP, MVVM比較以及區(qū)別(一)

    ASP.NET小結(jié)之MVC, MVP, MVVM比較以及區(qū)別(一)

    MVC, MVP和MVVM都是用來(lái)解決界面呈現(xiàn)和邏輯代碼分離而出現(xiàn)的模式。以前只是對(duì)它們有部分的了解,沒(méi)有深入的研究過(guò),對(duì)于一些里面的概念和區(qū)別也是一知半解。現(xiàn)在一邊查資料,并結(jié)合自己的理解,來(lái)談一下對(duì)于這三種模式思想的理解,以及它們的區(qū)別。歡迎各位高手拍磚。
    2014-05-05
  • 一個(gè)簡(jiǎn)單的自定義程序日志小樣例

    一個(gè)簡(jiǎn)單的自定義程序日志小樣例

    前面一篇文章大概說(shuō)了下自己對(duì)日志的一點(diǎn)理解,可能不太直觀,這里再附上一個(gè)簡(jiǎn)單的使用例子,以作為對(duì)之前的補(bǔ)充,例子比較簡(jiǎn)單,所以直接看注釋即可。
    2009-07-07
  • asp.net利用HttpModule實(shí)現(xiàn)防sql注入

    asp.net利用HttpModule實(shí)現(xiàn)防sql注入

    關(guān)于sql注入,已經(jīng)被很多人討論過(guò)了。這篇沒(méi)有新意功能也不夠通用,nnd,不想引起口水,就是覺(jué)得簡(jiǎn)單而且思路有參考性才貼出來(lái)。
    2009-12-12
  • ASP.NET中的幾種彈出框提示基本實(shí)現(xiàn)方法

    ASP.NET中的幾種彈出框提示基本實(shí)現(xiàn)方法

    NET程序的開(kāi)發(fā)過(guò)程中,常常需要和用戶進(jìn)行信息交互,對(duì)話框的出現(xiàn)將解決了這些問(wèn)題,下面是本人對(duì)常用對(duì)話框使用的小結(jié),希望對(duì)大家有所幫助
    2013-03-03
  • jenkins部署.net平臺(tái)自動(dòng)化構(gòu)建的方法步驟

    jenkins部署.net平臺(tái)自動(dòng)化構(gòu)建的方法步驟

    這篇文章主要介紹了jenkins部署.net平臺(tái)自動(dòng)化構(gòu)建的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • ASP.NET Core設(shè)置URLs的五種方法

    ASP.NET Core設(shè)置URLs的五種方法

    這篇文章主要介紹了ASP.NET Core設(shè)置URLs的五種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 很實(shí)用的NLog配置分享

    很實(shí)用的NLog配置分享

    這篇文章主要給大家分享介紹了關(guān)于NLog配置的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • .Net Core使用MongoDB的詳細(xì)教程

    .Net Core使用MongoDB的詳細(xì)教程

    這篇文章主要給大家介紹了關(guān)于.Net Core使用MongoDB的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論