NET-Microservices-Architecture-for-Containerized-NET-Applications-(Microsoft-e Book)[131-200].en.es PDF

Title NET-Microservices-Architecture-for-Containerized-NET-Applications-(Microsoft-e Book)[131-200].en.es
Course Ingenieria De Software Inf
Institution Universidad Mayor de San Andrés
Pages 70
File Size 2.8 MB
File Type PDF
Total Downloads 68
Total Views 121

Summary

Microservicios en .NET...


Description

RabbitMQ: imagen: RabbitMQ: 3-gestión Los valores en el archivo de base de cargador de muelle-compose.yml no deben cambiar debido a los diferentes entornos de despliegue de destino.

Si se centra en la definición del servicio webmvc, por ejemplo, se puede ver lo que la información es la misma sin importar qué entorno que podría estar apuntando. Usted tiene la siguiente información: •

El nombre del servicio: webmvc.



imagen personalizada del contenedor: eshop / webmvc.



El comando para construir la imagen del estibador personalizada, indicando qué Dockerfile de usar.



Dependencias de otros servicios, por lo que este contenedor no empieza hasta que los otros recipientes de dependencia han comenzado.

Usted puede tener una configuración adicional, pero el punto importante es que en el archivo dockercompose.yml base, lo que desea es establecer la información que es común a través de entornos. Luego, en la ventana acoplable-compose.override.yml o archivos similares para la producción o puesta en escena, se debe colocar de configuración específica para cada entorno.

Por lo general, la ventana acoplable-compose.override.yml se utiliza para su entorno de desarrollo, como en el siguiente ejemplo de eShopOnContainers: # estibador-compose.override.yml (config extendido para env de desarrollo.)

versión: '3.4' servicios: # número simplificada de servicios aquí:

basket.api: ambiente: - ASPNETCORE_ENVIRONMENT = Desarrollo - ASPNETCORE_URLS = http: //0.0.0.0: 80 - ConnectionString ConnectionString ConnectionString ConnectionString ===$=$${${ESHOP_AZURE_REDIS_BASKET_DB: {ESHOP_AZURE_REDIS_BASKET_DB: {ESHOP_AZURE_REDIS_BASKET_DB: ESHOP_AZURE_REDIS_BASKET_DB: -basket.data -basket.data -basket.data -basket.data }}}} - identityUrl = http: //identity.api - IdentityUrlExternal IdentityUrlExternal IdentityUrlExternal === http: http: http://////$$$ {{{ ESHOP_EXTERNAL_DNS_NAME_OR_IP ESHOP_EXTERNAL_DNS_NAME_OR_IP ESHOP_EXTERNAL_DNS_NAME_OR_IP }}} :::5105 5105 5105 - EventBusConnection EventBusConnection EventBusConnection EventBusConnection====$$$${{{{ESHOP_AZURE_SERVICE_BUS: ESHOP_AZURE_SERVICE_BUS: ESHOP_AZURE_SERVICE_BUS: ESHOP_AZURE_SERVICE_BUS:-rabbitmq -rabbitmq -rabbitmq -rabbitmq}}}} - EventBusUserName EventBusUserName EventBusUserName EventBusUserName = =$ =${ =$ ESHOP_SERVICE_BUS_USERNAME {$ ESHOP_SERVICE_BUS_USERNAME { ESHOP_SERVICE_BUS_USERNAME { ESHOP_SERVICE_BUS_USERNAME }}}} - EventBusPassword EventBusPassword EventBusPassword EventBusPassword ==$=$={${ESHOP_SERVICE_BUS_PASSWORD ${ESHOP_SERVICE_BUS_PASSWORD {ESHOP_SERVICE_BUS_PASSWORD ESHOP_SERVICE_BUS_PASSWORD }}}} - AzureServiceBusEnabled = False - ApplicationInsights__InstrumentationKey = $ { INSTRUMENTATION_KEY } OrchestratorType == $$ {{ ORCHESTRATOR_TYPE ORCHESTRATOR_TYPE }} - OrchestratorType - UseLoadTest UseLoadTest UseLoadTest UseLoadTest ===$ =$${${{USE_LOADTEST: {USE_LOADTEST: USE_LOADTEST: USE_LOADTEST: es es es es falsa falsa falsa falsa }}}} puertos:

- "5103: 80" catalog.api: ambiente: - ASPNETCORE_ENVIRONMENT = Desarrollo - ASPNETCORE_URLS = http: //0.0.0.0: 80 - ConnectionString = $ { ESHOP_AZURE_CATALOG_DB: Servidor = sql.data; Database = Microsoft.eShopOnContainers.Services.CatalogDb; User Id = sa; Password = Correcto @ palabra } - PicBaseUrl PicBaseUrl PicBaseUrl = =$=${ $ESHOP_AZURE_STORAGE_CATALOG_URL: { ESHOP_AZURE_STORAGE_CATALOG_URL: { ESHOP_AZURE_STORAGE_CATALOG_URL: ---

122

Diseño y Desarrollo de recipientes múltiples y aplicaciones .NET MICROSERVICE-Basado

http: http: //// localhost: localhost: 5202 5202 // api api // v1 v1 // Catálogo Catálogo // artículos artículos // [0] [0] // pic pic // }} EventBusConnection EventBusConnection EventBusConnection====$$$${{{{ESHOP_AZURE_SERVICE_BUS: ESHOP_AZURE_SERVICE_BUS: ESHOP_AZURE_SERVICE_BUS: ESHOP_AZURE_SERVICE_BUS:-rabbitmq -rabbitmq -rabbitmq -rabbitmq}}}} - EventBusConnection - EventBusUserName EventBusUserName EventBusUserName EventBusUserName = =$ =${ =$ ESHOP_SERVICE_BUS_USERNAME {$ ESHOP_SERVICE_BUS_USERNAME { ESHOP_SERVICE_BUS_USERNAME { ESHOP_SERVICE_BUS_USERNAME }}}} - EventBusPassword EventBusPassword EventBusPassword EventBusPassword ==$=$={${ESHOP_SERVICE_BUS_PASSWORD ${ESHOP_SERVICE_BUS_PASSWORD {ESHOP_SERVICE_BUS_PASSWORD ESHOP_SERVICE_BUS_PASSWORD }}}} - AzureStorageAccountName AzureStorageAccountName AzureStorageAccountName AzureStorageAccountName ==$=$={${$ ESHOP_AZURE_STORAGE_CATALOG_NAME {ESHOP_AZURE_STORAGE_CATALOG_NAME {ESHOP_AZURE_STORAGE_CATALOG_NAME ESHOP_AZURE_STORAGE_CATALOG_NAME }}}} - AzureStorageAccountKey AzureStorageAccountKey AzureStorageAccountKey AzureStorageAccountKey====$$$${{{{ESHOP_AZURE_STORAGE_CATALOG_KEY ESHOP_AZURE_STORAGE_CATALOG_KEY ESHOP_AZURE_STORAGE_CATALOG_KEY ESHOP_AZURE_STORAGE_CATALOG_KEY}}}} -

UseCustomizationData = True AzureServiceBusEnabled = False AzureStorageEnabled = False ApplicationInsights__InstrumentationKey = $ { INSTRUMENTATION_KEY } OrchestratorType OrchestratorType == $$ {{ ORCHESTRATOR_TYPE ORCHESTRATOR_TYPE }}

puertos:

- "5101: 80" marketing.api: ambiente: - ASPNETCORE_ENVIRONMENT = Desarrollo - ASPNETCORE_URLS = http: //0.0.0.0: 80 - ConnectionString ConnectionString == $$ {{ ESHOP_AZURE_MARKETING_DB: ESHOP_AZURE_MARKETING_DB: -Servidor = sql.data; Database = Microsoft.eShopOnContainers.Services.MarketingDb; User Id = sa; Password = Correcto @ palabra } MongoConnectionString MongoConnectionString - MongoConnectionString MongoConnectionString = =$ =${ = ESHOP_AZURE_COSMOSDB: ${ ESHOP_AZURE_COSMOSDB: ${ ESHOP_AZURE_COSMOSDB: { ESHOP_AZURE_COSMOSDB: -mongodb: -mongodb: -mongodb: -mongodb: //nosql.data //nosql.data //nosql.data //nosql.data }}}} - MongoDatabase = MarketingDb - EventBusConnection EventBusConnection EventBusConnection EventBusConnection====$$$${{{{ESHOP_AZURE_SERVICE_BUS: ESHOP_AZURE_SERVICE_BUS: ESHOP_AZURE_SERVICE_BUS: ESHOP_AZURE_SERVICE_BUS:-rabbitmq -rabbitmq -rabbitmq -rabbitmq}}}} - EventBusUserName EventBusUserName EventBusUserName EventBusUserName = =$ =${ =$ ESHOP_SERVICE_BUS_USERNAME {$ ESHOP_SERVICE_BUS_USERNAME { ESHOP_SERVICE_BUS_USERNAME { ESHOP_SERVICE_BUS_USERNAME }}}} - EventBusPassword EventBusPassword EventBusPassword EventBusPassword ==$=$={${ESHOP_SERVICE_BUS_PASSWORD ${ESHOP_SERVICE_BUS_PASSWORD {ESHOP_SERVICE_BUS_PASSWORD ESHOP_SERVICE_BUS_PASSWORD }}}} - identityUrl = http: //identity.api - IdentityUrlExternal IdentityUrlExternal IdentityUrlExternal === http: http: http://////$$$ {{{ ESHOP_EXTERNAL_DNS_NAME_OR_IP ESHOP_EXTERNAL_DNS_NAME_OR_IP ESHOP_EXTERNAL_DNS_NAME_OR_IP }}} :::5105 5105 5105 CampaignDetailFunctionUri CampaignDetailFunctionUri CampaignDetailFunctionUri ===$=$${${ESHOP_AZUREFUNC_CAMPAIGN_DETAILS_URI {ESHOP_AZUREFUNC_CAMPAIGN_DETAILS_URI {ESHOP_AZUREFUNC_CAMPAIGN_DETAILS_URI ESHOP_AZUREFUNC_CAMPAIGN_DETAILS_URI }}}} - CampaignDetailFunctionUri - PicBaseUrl PicBaseUrl PicBaseUrl===$$${{ESHOP_AZURE_STORAGE_MARKETING_URL: {ESHOP_AZURE_STORAGE_MARKETING_URL: ESHOP_AZURE_STORAGE_MARKETING_URL:http: http: http:////// localhost: localhost: 5110 5110 // api api // v1 v1 // campañas campañas // [0] [0] // pic pic // }} - AzureStorageAccountName AzureStorageAccountName AzureStorageAccountName AzureStorageAccountName === $= ${${$ESHOP_AZURE_STORAGE_MARKETING_NAME {ESHOP_AZURE_STORAGE_MARKETING_NAME {ESHOP_AZURE_STORAGE_MARKETING_NAME ESHOP_AZURE_STORAGE_MARKETING_NAME }}}} - AzureStorageAccountKey AzureStorageAccountKey AzureStorageAccountKey AzureStorageAccountKey====$$$${{{{ESHOP_AZURE_STORAGE_MARKETING_KEY ESHOP_AZURE_STORAGE_MARKETING_KEY ESHOP_AZURE_STORAGE_MARKETING_KEY ESHOP_AZURE_STORAGE_MARKETING_KEY}}}} - AzureServiceBusEnabled = False - AzureStorageEnabled = False - ApplicationInsights__InstrumentationKey = $ { INSTRUMENTATION_KEY } - OrchestratorType OrchestratorType == $$ {{ ORCHESTRATOR_TYPE ORCHESTRATOR_TYPE }} - UseLoadTest UseLoadTest UseLoadTest UseLoadTest ===$ =$${${{USE_LOADTEST: {USE_LOADTEST: USE_LOADTEST: USE_LOADTEST: es es es es falsa falsa falsa falsa }}}} puertos:

- "5110: 80" webmvc: ambiente: - ASPNETCORE_ENVIRONMENT = Desarrollo - ASPNETCORE_URLS = http: //0.0.0.0: 80 - PurchaseUrl = http: // webshoppingapigw - IdentityUrl = http: //10.0.75.1: 5105

-

MarketingUrl = http: // webmarketingapigw CatalogUrlHC = http: //catalog.api/hc OrderingUrlHC = http: //ordering.api/hc IdentityUrlHC = http: //identity.api/hc BasketUrlHC = http: //basket.api/hc MarketingUrlHC = http: //marketing.api/hc PaymentUrlHC = http: //payment.api/hc SignalrHubUrl = http: // $ { ESHOP_EXTERNAL_DNS_NAME_OR_IP } : 5202 UseCustomizationData = True ApplicationInsights__InstrumentationKey = $ { INSTRUMENTATION_KEY } OrchestratorType OrchestratorType == $$ {{ ORCHESTRATOR_TYPE ORCHESTRATOR_TYPE }} UseLoadTest UseLoadTest UseLoadTest UseLoadTest ===$ =$${${{USE_LOADTEST: {USE_LOADTEST: USE_LOADTEST: USE_LOADTEST: es es es es falsa falsa falsa falsa }}}}

puertos:

- "5100: 80"

123

Diseño y Desarrollo de recipientes múltiples y aplicaciones .NET MICROSERVICE-Basado

sql.data: ambiente: - Sa_password = Correcto @ palabra - ACCEPT_EULA = Y puertos:

- "5433: 1433" nosql.data: puertos:

- "27017: 27017" basket.data: puertos:

- "6379: 6379" RabbitMQ: puertos:

- "15672: 15672" - "5672: 5672" En este ejemplo, la configuración de anulación desarrollo expone algunos puertos para el anfitrión, define variables de entorno con direcciones URL de redirección, y especifica las cadenas de conexión para el entorno de desarrollo. Estos ajustes son sólo para el entorno de desarrollo. Cuando Cuando Cuando se ejecuta se ejecuta se ejecuta cargador cargador cargador de muelle-componer de muelle-componer de muelle-componer arriba arriba (o arriba lanzarlo ( o lanzarlo ( o lanzarlo desde desde Visual desde Visual Studio), Visual Studio), Studio), el comando el comando el comando lee las lee anulaciones las lee anulaciones las anulaciones de forma de forma deautomática forma automática automática como como sicomo estuviera si estuviera si estuviera fusionando ambos archivos.

Suponga que desea otro archivo de composición para el entorno de producción, con diferentes valores de configuración, los puertos o las cadenas de conexión. Puede crear otro archivo de sustitución, como archivo llamado cargador cargador de muelle-compose.prod.yml de muelle-compose.prod.yml con con diferentes diferentes opciones opciones y variables y variables de entorno. de entorno. Ese Ese archivo archivo puede puede ser almacenado ser almacenado en un enrepositorio un repositorio git git diferente o administrado y asegurado por un equipo diferente.

Cómo implementar con un archivo específico de anulación Para utilizar varios archivos de invalidación o anulación de un archivo con un nombre diferente, puede utilizar la opción -f con el comando de composición del cargador de muelle y especificar los archivos. Componer fusiona archivos en el orden en que se especifican en la línea de comandos. El siguiente ejemplo muestra cómo implementar con los archivos de anulación.

cargador de muelle-componer -f -f ventana acoplable-compose.prod.yml hasta -d ventana acoplable-compose.yml

El uso de variables de entorno en archivos de composición del Docker Es conveniente, especialmente en entornos de producción, para ser capaz de obtener información de configuración de las variables de entorno, como hemos mostrado en los ejemplos anteriores. Puede hacer referencia a una variable de entorno en los archivos de ventana acoplable-componer con la sintaxis $ {} my_var. La siguiente línea de un archivo de cargador de muelle-compose.prod.yml muestra cómo hacer referencia al valor de una variable de entorno.

IdentityUrl = http: // $ { ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP } : 5105 Las variables de entorno se crean e inicializan de diferentes maneras, dependiendo de su entorno de acogida (cluster Linux, Windows, Nube, etc.). Sin embargo, un enfoque conveniente es utilizar un archivo .env. Los archivos ventana acoplable de composición del apoyo a la declaración de variables de entorno por defecto en el archivo .env. Estos valores de las variables de entorno son los valores por defecto. Sin embargo, pueden ser anulados por los valores que haya podido definir en cada uno de sus ambientes (SO anfitrión o variables de entorno de clúster). Se coloca este archivo .env en la carpeta donde se ejecuta la orden de composición del cargador de muelle de.

El El siguiente ejemplo muestra un archivo como el .env .env .envpresentar presentar presentarpara para para la la la aplicación aplicación aplicación eShopOnContainers. eShopOnContainers. eShopOnContainers. Elsiguiente siguiente ejemplo ejemplo muestra muestra un un archivo archivo como como el el.env .env.env

124

Diseño y Desarrollo de recipientes múltiples y aplicaciones .NET MICROSERVICE-Basado

# .

archivo de env

ESHOP_EXTERNAL_DNS_NAME_OR_IP = localhost ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP = 10.121.122.92 Cargador de muelle de composición de espera que cada línea de un archivo .env a estar en el formato = .

Tenga en cuenta que los valores establecidos en el entorno de ejecución siempre anulan los valores definidos en el archivo .env. De manera similar, los valores pasados a través de argumentos de comandos de línea de comandos también invalidar los valores predeterminados establecidos en el archivo .env.

Recursos adicionales •

Visión general de Docker Componer

https://docs.docker.com/compose/overview/ •

Componer archivos múltiples

https://docs.docker.com/compose/extends/#multiple-compose-files

La construcción de imágenes optimizadas ASP.NET Core Docker

Si usted está explorando acoplable y .NET Core de fuentes en Internet, encontrará Dockerfiles que demuestran la simplicidad de la construcción de una imagen de Docker copiando su fuente en un recipiente. Estos ejemplos sugieren que mediante el uso de una configuración simple, puede tener una imagen acoplable con el medio ambiente empaquetado con la aplicación. El siguiente ejemplo muestra un Dockerfile simple en este sentido.

DESDE mcr.microsoft.com/dotnet/core/sdk:2.2 WORKDIR WORKDIR WORKDIR//aplicación /aplicación aplicación

ENV ENV ASPNETCORE_URLS ASPNETCORE_URLS http: http: //// +: +: 80 80 EXPONER EXPONER 80 80

DUPDO DUPDO .. .. CORRER dotNET restaurar PUNTO PUNTO PUNTO PUNTO PUNTO PUNTO PUNTO DE DE DE DE ENTRADA DE ENTRADA DE ENTRADA DE ENTRADA ENTRADA ENTRADA ENTRADA [ ["["[punto "[punto "[punto "[punto "punto "punto punto net" net" net" net" net" ,net" ,"correr" net" ,"correr" ,"correr" ,"correr" ,"correr" ,"correr" "correr" ]]]]]]]

Un Dockerfile como esto va a funcionar. Sin embargo, puede optimizar sustancialmente sus imágenes, especialmente las imágenes de producción.

En el modelo de contenedor y microservicios, usted está comenzando constantemente contenedores. La forma típica de la utilización de contenedores no se reinicia un recipiente de dormir, porque el contenedor es desechable. Orchestrators (como Kubernetes y Azure Servicio Tela) simplemente crean nuevas instancias de imágenes. Lo que esto significa es que usted necesita para optimizar por precompilar la aplicación cuando se construye de modo que el proceso de creación de instancias será más rápido. Cuando se inicia el contenedor, debe estar listo para funcionar. No se se sedebe debe deberestaurar restaurar restauraryyycompilar compilar compilaren en entiempo tiempo tiempode de deejecución, ejecución, ejecución,utilizando utilizando utilizandodotNET dotNET dotNETrestaurar restaurar restauraryyyacumulación acumulación acumulacióndotnet dotnet dotnetlos los loscomandos comandos comandosde de dela la laCLI CLI CLIdotnet dotnet dotnetque, que, que,como como comose se se ve en muchas Artículos sobre .NET Core y acoplable.

El equipo .NET ha estado haciendo un trabajo importante para hacer .NET y ASP.NET Core Core un marco containeroptimized. No sólo es .NET Core un marco ligero, con una pequeña huella de memoria; el equipo se ha centrado en imágenes Docker optimizados para tres escenarios principales y las ha publicado en el registro del estibador en el Hub dotnet / núcleo, partir de la versión 2.1:

24.24. Desarrollo: 24. Desarrollo: Desarrollo: Donde Donde Donde la prioridad la prioridad la prioridad es es la capacidad es la capacidad la capacidad de de implementarlos de implementarlos implementarlos rápidamente rápidamente rápidamente y cambios y cambios y cambios de de depuración, de depuración, depuración, y donde y donde y donde tamaño es secundario.

125

Diseño y Desarrollo de recipientes múltiples y aplicaciones .NET MICROSERVICE-Basado

25. 25. 25.Construir: Construir: Construir:La La Laprioridad prioridad prioridadestá está estácompilando compilando compilandola la laaplicación aplicación aplicacióneeeincluye incluye incluyebinarios binarios binariosyyyotras otras otrasdependencias dependencias dependenciasaaa optimizar los binarios. 26. 26. 26.Producción: Producción: Producción:Donde Donde Dondeel el elenfoque enfoque enfoquees es esrápido rápido rápidodespliegue despliegue despliegueyyypuesta puesta puestaen en enmarcha marcha marchade de delos los loscontenedores, contenedores, contenedores,por por porlo lo loque que queestas estas estasimágenes imágenes imágenesson son son

limitado a los binarios y el contenido necesario para ejecutar la aplicación. Para Para Paralograr lograr lograresto, esto, esto,el el elequipo equipo equipo.NET .NET .NETestá está estáproporcionando proporcionando proporcionandocuatro cuatro cuatrovariantes variantes variantesbásicas básicas básicasen en endotnet dotnet dotnet///núcleo núcleo núcleo(En (En (Enacoplable acoplable acoplableHub): Hub): Hub):

27.

SDK: SDK:para paraeleldesarrollo desarrolloy yconstrucción construcciónde deescenarios escenarios

28. 28. 28.Red Red RedPEA: PEA: PEA:para para paralos los losescenarios escenarios escenariosde de deproducción producción producciónde de deASP.NET ASP.NET ASP.NET

29.

tiempo de ejecución: para los escenarios de producción .NET

30. tiempo de ejecución-deps: los escenarios de producción de tiempo tiempo tiempo dede ejecución-deps: de ejecución-deps: ejecución-deps: para para para lospara los escenarios los escenarios escenarios dede producción de producción producción dede aplicaciones de aplicaciones aplicaciones aplicaciones autónomas autónomas autónomas autónomas . . . . Para un arranque más rápido, las imágenes en tiempo de ejecución también se ajustan automáticamente aspnetcore_urls al puerto 80 y utilizan Ngen para crear un caché de imágenes nativas de las asambleas.

Recursos adicionales •

La construcción de imágenes optimizadas acoplables con ASP.NET Core

https://blogs.msdn.microsoft.com/stevelasker/2016/09/29/building-optimized-docker-imageswith-asp-net-core/



Edificio Docker Imágenes en aplicaciones .NET Core https://docs.microsoft.com/dotnet/core/docker/building-net-docker-images

El uso de un servidor de base de datos se ejecuta como un contenedor Usted puede tener sus bases de datos (SQL Server, PostgreSQL, MySQL, etc.) en servidores individuales regulares, en grupos de correo locales, o en PaaS servicios en la nube como Azure SQL DB. Sin embargo, para los entornos de desarrollo y pruebas, que tiene sus bases de datos se ejecuta ejecuta como como contenedores contenedores es es conveniente, conveniente, porque porque no no tiene tiene ninguna ninguna dependencia dependencia externa externa yy simplemente simplemente ejecuta ejecuta el el cargador cargador de de muelle-componer muelle-componer hasta hastacomando comandoinicia iniciatoda todalalaaplicación. aplicación.Tener Teneresas esasbases basesde dedatos datoscomo comorecipientes recipienteses estambién tambiéngrande grande...


Similar Free PDFs