<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Architecture Archives - Blog IT</title>
	<atom:link href="https://blogit.create.pt/category/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>https://blogit.create.pt/category/architecture/</link>
	<description>Create IT blogger community</description>
	<lastBuildDate>Mon, 07 Nov 2022 11:39:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>
	<item>
		<title>Entity Framework &#8211; Update Database using Azure Pipelines</title>
		<link>https://blogit.create.pt/vini/2022/11/07/entity-framework-update-database-using-azure-pipelines/</link>
					<comments>https://blogit.create.pt/vini/2022/11/07/entity-framework-update-database-using-azure-pipelines/#respond</comments>
		
		<dc:creator><![CDATA[Vinícius Biavatti]]></dc:creator>
		<pubDate>Mon, 07 Nov 2022 11:18:06 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Microsoft Azure]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[entity framework]]></category>
		<category><![CDATA[migrations]]></category>
		<category><![CDATA[pipelines]]></category>
		<category><![CDATA[sql database]]></category>
		<guid isPermaLink="false">https://blogit.create.pt/?p=12770</guid>

					<description><![CDATA[<p>Introduction The pipelines bring to us the opportunity to create automatic tasks to execute development operations, like deploys, migrations, tests, etc. Focused in the deploy routine, some applications need other operations to ensure the stability between the application and other resources, like the database. During the development process, the developers usually customize and improve the [&#8230;]</p>
<p>The post <a href="https://blogit.create.pt/vini/2022/11/07/entity-framework-update-database-using-azure-pipelines/">Entity Framework &#8211; Update Database using Azure Pipelines</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Introduction</h2>



<p>The pipelines bring to us the opportunity to create automatic tasks to execute development operations, like deploys, migrations, tests, etc. Focused in the deploy routine, some applications need other operations to ensure the stability between the application and other resources, like the database.</p>



<p>During the development process, the developers usually customize and improve the application database in the development environment scope, and it can be made easily by using frameworks that contains routines to create source files that have the responsability to keep the history of changes and are used to update the database for determinated version. These files are known as migrations.&nbsp;</p>



<p>In this post, we will see how to apply migrations for the databases that are located in different environments (staging, production, etc.), using the Code-First entity concept, and the Entity Framework Core.</p>



<h2 class="wp-block-heading">Migrations</h2>



<p>To generate database migrations, we can execute the &#8220;Add-Migraton &lt;name&gt;&#8221; command from the Entity Framework. This command will generate some source files that will contain the code to apply the migration to the database. To execute these migration files, you just need to execute the &#8220;Update-Database&#8221; command. But,&nbsp;<a href="https://learn.microsoft.com/en-us/ef/core/managing-schemas/migrations/applying?tabs=dotnet-core-cli#sql-scripts" target="_blank" rel="noreferrer noopener">Microsoft recommends</a>&nbsp;to create a SQL file individually, and suggest to execute this file direct to the database, without need to execute an intermediary software (C# + EF) to access the database. To do this, we will have to follow the steps below:</p>



<ul class="wp-block-list">
<li>1. Create a Pipeline in Azure Devops;</li>



<li>2. Install dotnet-ef-tool;</li>



<li>3. Generate SQL script;</li>



<li>4. Execute SQL script to the database;</li>



<li>5. Script File as a Pipeline Artifact.</li>
</ul>



<p><em><strong>NOTE</strong>: We don&#8217;t need to worry about which migration need to be applyed to the database. The dotnet-ef-tool command will generate a script cantaining the needed logic. Check the third step for more details.</em></p>



<h2 class="wp-block-heading">1. Create a Pipeline in Azure Devops</h2>



<p>We will create a common deployment pipeline in Azure Devops for ASP.NET Core backend applications. Check the end of the post to see the full result of the pipeline.</p>



<h2 class="wp-block-heading">2. Install dotnet-ef-tool</h2>



<p>To execute tool commands of Entity Framework, we have to install a package named dotnet-ef-tool. This needs to be available into the pipeline&#8217;s context to be used for the SQL script generation. To install this tool by a pipeline task, we can use the task below:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: yaml; title: ; notranslate">
- task: DotNetCoreCLI@2
  displayName: &#039;Install EF tool&#039;
  inputs:
    command: &#039;custom&#039;
    custom: &#039;tool&#039;
    arguments: &#039;install --global dotnet-ef&#039;
</pre></div>


<h2 class="wp-block-heading">3. Generate SQL script</h2>



<p>To generate the SQL script containing the logic to apply migrations, we will use the dotnet-ef-tool. By default, the command does not generate the logic to check which migration should be applied, so we have to enable this behavior using the parameter: &#8211;idempotent. By using this behavior, we don&#8217;t need to worry about the migrations that will be applyed to the database since the generated script already has it. Below, you can see the task that could be used to generate the script file:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: yaml; title: ; notranslate">
- task: DotNetCoreCLI@2
  displayName: &#039;Generate SQL Script&#039;
  inputs:
    command: &#039;custom&#039;
    custom: &#039;ef&#039;
    arguments: &#039;migrations script --idempotent --project $(Build.SourcesDirectory)\Data.csproj --output $(System.ArtifactsDirectory)/script.sql&#039;
</pre></div>


<p><em><strong>NOTE</strong>: We don&#8217;t need to stablish any database connection for the script generation, since we are following the Code First concept for entity creation, so, the command will just look at the entities source code of the project to generate the SQL file. If we don&#8217;t use the &#8211;idempotent argument, the script will generate the SQL without the conditional logic to determinate which migration should be applied, causing an error if the database already exists.</em></p>



<h2 class="wp-block-heading">4. Execute SQL script to the database</h2>



<p>Now, with the SQL script available, we just need to execute this file to the database. In this post, we will use a common Azure Database as an example, so for this case, we can use the following task to accomplish this requirement:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: yaml; title: ; notranslate">
- task: SqlAzureDacpacDeployment@1
  displayName: &#039;Update Database&#039;
  inputs:
    azureSubscription: &#039;&lt;Service Connection Identifier&gt;&#039;
    AuthenticationType: &#039;connectionString&#039; # You can use other method to authenticate to the database if you want
    ConnectionString: &#039;&lt;Database Connection String&gt;&#039;
    deployType: &#039;SqlTask&#039;
    SqlFile: &#039;$(System.ArtifactsDirectory)/script.sql&#039;
</pre></div>


<h2 class="wp-block-heading">5. Script File as a Pipeline Artifact</h2>



<p>Well done. The last task will only be used to make the file available to be accessed by the pipeline runner user. To do this, you can use the task below to add the generated script.sql file to the file bundle (artifacts). To check the artifacts, just access the artifacts option from the pipeline details after the job&#8217;s execution.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: yaml; title: ; notranslate">
- task: PublishBuildArtifacts@1
  displayName: &#039;Publish Artifacts&#039;
  inputs:
    PathtoPublish: &#039;$(System.ArtifactsDirectory)/script.sql&#039;
    ArtifactName: &#039;$(artifactName)&#039;
    publishLocation: &#039;Container&#039;
</pre></div>


<h2 class="wp-block-heading">Conclusion</h2>



<p>In this post, we could learn an easy way to apply the database migrations to the remote environment by using automation (pipelines) to accomplish it. This method is simple, and does not have any database validation before script execution. So, if you have an active and sensitive environment, be sure that the needed validations are considered before the database update, to ensure that the database will not be update wrongly.</p>



<h2 class="wp-block-heading">Pipeline Result</h2>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: yaml; title: ; notranslate">
trigger:
- none

pool:
  vmImage: windows-latest

variables:
  solution: &#039;**/*.sln&#039;
  buildPlatform: &#039;AnyCPU&#039;
  buildConfiguration: &#039;Release&#039;
  artifactName: &#039;artifacts&#039;
  environment: &#039;Development&#039;

- task: NuGetToolInstaller@1
  displayName: &#039;NuGet Installation&#039;

- task: NuGetCommand@2
  displayName: &#039;NuGet Restore&#039;
  inputs:
    restoreSolution: &#039;$(solution)&#039;

- task: VSBuild@1
  displayName: &#039;Build Project&#039;
  inputs:
    solution: &#039;backend/WebAPI&#039;
    msbuildArgs: &#039;/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=&quot;$(build.artifactStagingDirectory)&quot;&#039;
    platform: &#039;$(buildPlatform)&#039;
    configuration: &#039;$(buildConfiguration)&#039;

- task: PublishSymbols@2
  displayName: &#039;Publish Symbols&#039;
  inputs:
    SearchPattern: &#039;**/bin/**/*.pdb&#039;
    SymbolServerType: &#039;FileShare&#039;
    CompressSymbols: false

- task: PublishBuildArtifacts@1
  displayName: &#039;Publish Artifacts&#039;
  inputs:
    PathtoPublish: &#039;$(Build.ArtifactStagingDirectory)&#039;
    ArtifactName: &#039;artifacts&#039;
    publishLocation: &#039;Container&#039;

- task: DownloadBuildArtifacts@0
  displayName: &#039;Build Artifacts&#039;
  inputs:
    buildType: &#039;current&#039;
    downloadType: &#039;single&#039;
    artifactName: &#039;$(artifactName)&#039;
    downloadPath: &#039;$(System.ArtifactsDirectory)&#039;

- task: DotNetCoreCLI@2
  displayName: &#039;Install EF tool&#039;
  inputs:
    command: &#039;custom&#039;
    custom: &#039;tool&#039;
    arguments: &#039;install --global dotnet-ef&#039;

- task: DotNetCoreCLI@2
  displayName: &#039;Generate SQL Script&#039;
  inputs:
    command: &#039;custom&#039;
    custom: &#039;ef&#039;
    arguments: &#039;migrations script --idempotent --project $(Build.SourcesDirectory)\Data.csproj --output $(System.ArtifactsDirectory)/script.sql&#039;

- task: SqlAzureDacpacDeployment@1
  displayName: &#039;Update Database&#039;
  inputs:
    azureSubscription: &#039;&lt;Service Connection Identifier&gt;&#039;
    AuthenticationType: &#039;connectionString&#039;
    ConnectionString: &#039;&lt;Connection String&gt;&#039;
    deployType: &#039;SqlTask&#039;
    SqlFile: &#039;$(System.ArtifactsDirectory)/script.sql&#039;

- task: AzureRmWebAppDeployment@4
  displayName: &#039;Deploy Application&#039;
  inputs:
    ConnectionType: &#039;AzureRM&#039;
    azureSubscription: &#039;&lt;Service Connection Identifier&gt;&#039;
    appType: &#039;webApp&#039;
    WebAppName: &#039;armazemlegalapi&#039;
    deployToSlotOrASE: true
    ResourceGroupName: &#039;&lt;Resource Group Identifier&gt;&#039;
    SlotName: &#039;production&#039;
    packageForLinux: &#039;$(System.ArtifactsDirectory)/Project.zip&#039;

- task: PublishBuildArtifacts@1
  displayName: &#039;Publish Artifacts&#039;
  inputs:
    PathtoPublish: &#039;$(System.ArtifactsDirectory)/script.sql&#039;
    ArtifactName: &#039;$(artifactName)&#039;
    publishLocation: &#039;Container&#039;
</pre></div>


<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li><a href="https://learn.microsoft.com/en-us/ef/core/managing-schemas/migrations/applying?tabs=dotnet-core-cli#sql-scripts">Microsoft Managing Schemas Article</a></li>
</ul>
<p>The post <a href="https://blogit.create.pt/vini/2022/11/07/entity-framework-update-database-using-azure-pipelines/">Entity Framework &#8211; Update Database using Azure Pipelines</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/vini/2022/11/07/entity-framework-update-database-using-azure-pipelines/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Getting Started with CloudEvents and AsyncAPI</title>
		<link>https://blogit.create.pt/davidpereira/2021/09/16/getting-started-with-cloudevents-and-asyncapi/</link>
					<comments>https://blogit.create.pt/davidpereira/2021/09/16/getting-started-with-cloudevents-and-asyncapi/#respond</comments>
		
		<dc:creator><![CDATA[David Pereira]]></dc:creator>
		<pubDate>Thu, 16 Sep 2021 12:26:26 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[AsyncAPI]]></category>
		<category><![CDATA[CloudEvents]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[event-driven architecture]]></category>
		<guid isPermaLink="false">https://blogit.create.pt/?p=12557</guid>

					<description><![CDATA[<p>In the previous blog post we went over a case study for Azure Service Bus. In this article we&#8217;ll look at two specs, CloudEvents and AsyncAPI, that you can use to solve some problems of your event-driven architectures. Introduction At the moment, there are quite a few tools and products that have adopted CloudEvents or [&#8230;]</p>
<p>The post <a href="https://blogit.create.pt/davidpereira/2021/09/16/getting-started-with-cloudevents-and-asyncapi/">Getting Started with CloudEvents and AsyncAPI</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>In the previous blog post we went over a <a href="https://blogit.create.pt/davidpereira/2021/06/02/case-study-azure-service-bus-and-event-driven-architectures/" target="_blank" rel="noreferrer noopener">case study for Azure Service Bus</a>. In this article we&#8217;ll look at two specs, CloudEvents and AsyncAPI, that you can use to solve some problems of your event-driven architectures.</p>



<h2 class="wp-block-heading">Introduction</h2>



<p>At the moment, there are quite a few tools and products that have adopted CloudEvents or AsyncAPI. <a href="https://knative.dev/docs/eventing/accessing-traces/#" target="_blank" rel="noreferrer noopener">Knative Eventing</a> is a tool that helps developers in a serverless context, Azure Event Grid <a href="https://docs.microsoft.com/en-us/azure/event-grid/cloud-event-schema" target="_blank" rel="noreferrer noopener">natively supports CloudEvents</a>. More recently, Jenkins added <a href="https://cd.foundation/blog/2021/09/02/jenkins-interoperability-with-cloudevents" target="_blank" rel="noreferrer noopener">integration with CloudEvents</a> with a new plugin. It allows users to configure Jenkins as a source and a sink for CloudEvents. There is also interesting integrations between Kubernetes and Azure Event Grid that are compliant with the CloudEvents v1.0 spec. Checkout the <a href="https://github.com/tomkerkhove/k8s-event-grid-bridge" target="_blank" rel="noreferrer noopener">GitHub repository</a> or this <a href="https://blog.tomkerkhove.be/2021/01/19/introducing-kubernetes-event-grid-bridge/" target="_blank" rel="noreferrer noopener">blog post</a> and learn more about it.</p>



<p>Postman has <a href="https://blog.postman.com/asyncapi-joins-forces-with-postman-future-of-apis/" target="_blank" rel="noreferrer noopener">joined forces with AsyncAPI</a> along with organizations such as Salesforce, Slack and Solace. Postman in particular is publishing <a href="https://www.postman.com/postman/workspace/postman-open-technologies-asyncapi/example/12959542-7624bf1e-2e63-4e1f-a573-45598722af74" target="_blank" rel="noreferrer noopener">public collections</a> related to AsyncAPI. For example a list of companies adopting AsyncAPI, with links to those resources (GitHub repositories, websites, etc).</p>



<p style="margin-bottom:40px">I hope these projects have got you excited to learn more about these specs. Let&#8217;s dive into some of their details!</p>



<h2 class="wp-block-heading">CloudEvents</h2>



<p>The CloudEvents specification is under the <a href="https://github.com/cncf/wg-serverless" target="_blank" rel="noreferrer noopener">CNCF Serverless working group</a> since 2018. The spec&#8217;s purpose is describing event data in a common way. This is useful in many scenarios, for example, routing events to the appropriate subscribers depending on the&nbsp;<em>type</em>&nbsp;of the event. Since applications can use a lot of different transports to send and receive events, the CloudEvents spec is protocol-agnostic so it defines&nbsp;<strong>protocol bindings</strong>&nbsp;in order for the metadata to be correctly mapped for HTTP, AMQP, Kafka, etc.</p>



<p>There are many use cases in using the CloudEvents spec, but perhaps the main one would be&nbsp;<strong>interoperability</strong>. Imagine applications across clouds, being able to communicate in an event-driven architecture. Where there are producers of all sources, and consumers using all kinds of protocols (e.g. HTTP, AMQP, WebSockets). We can have middleware that connects these applications, adds E2E tracing and more with the use of CloudEvents. Of course we could connect the same applications without a common format, but it requires mapping between event formats (cloud providers use different schemas). Middleware would also need to parse the event data to get specific information.</p>



<p style="margin-bottom:30px">Another use case is SaaS (Software-as-a-service) that publishes events that clients are interested in to integrate with their own systems. For example, hooking into the checkout flow in a Shopify storefront to add extra checks. By leveraging CloudEvents these events can be&nbsp;<strong>consistent</strong>, opening the door for numerous integrations between 3rd party software.</p>



<h3 class="wp-block-heading">Extensions</h3>



<p style="margin-bottom:30px">There are a few extensions worth mentioning, one of them is for&nbsp;<a href="https://github.com/cloudevents/spec/blob/v1.0/extensions/distributed-tracing.md" target="_blank" rel="noreferrer noopener">distributed tracing</a>. However, it seems there is some discussion around removing this extension from the spec (check this&nbsp;<a href="https://github.com/cloudevents/spec/pull/751" target="_blank" rel="noreferrer noopener">PR on GitHub</a>). There are open issues on some SDKs to support it, and others have already made changes to remove it. The future isn&#8217;t clear, but I&#8217;d argue it&#8217;s interesting to follow this closely for any updates, since tracing events is very important in an event-driven architecture.</p>



<p style="margin-bottom:30px">The <a href="https://github.com/cloudevents/spec/blob/v1.0.1/extensions/partitioning.md" target="_blank" rel="noreferrer noopener">Partioning extension</a> is another interesting extension,&nbsp;it defines a field to be handled by message brokers that can separate load via a partition key. This is used for example in the Kafka protocol binding that requires implementations to map the  <code>partitionKey</code> attribute to the&nbsp;<code>key</code>&nbsp;of the Kafka message. In Kafka the concept of a partition is well known, so this maps out really well.</p>



<h3 class="wp-block-heading">Relation with Serverless computing</h3>



<p style="margin-bottom:40px">Serverless computing has increased in popularity and use in the industry, especially for it&#8217;s cost model. But many FaaS (Functions-as-a-service) providers have their own function interface. Which means developers can&#8217;t write a function in JavaScript, and deploy them in two cloud providers without making changes. This specification improves <strong>portability </strong>between FaaS platforms, so that developers receive an event in the same format and can reuse libraries for handling the event.</p>



<h2 class="wp-block-heading">AsyncAPI</h2>



<p>I’ll start with a description of what AsyncAPI is: <strong>a specification that describes and documents event-driven APIs in a machine-readable format</strong>. It&#8217;s protocol-agnostic like CloudEvents, so it can be used for APIs that work over many protocols, including MQTT, WebSockets, and Kafka.</p>



<p>The following is AsyncAPI&#8217;s vision stated on their&nbsp;<a href="https://www.asyncapi.com/roadmap" target="_blank" rel="noreferrer noopener">website</a>:</p>



<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img fetchpriority="high" decoding="async" src="https://blogit.create.pt/wp-content/uploads/2021/09/133161353-a0a65fde-d3fc-4984-9ba7-6eb855bd9590.png" alt="asyncapi description - AsyncAPI becomes the #1 API specification for defining and developing APIs. Any kind of APIs." class="wp-image-12559" width="969" height="674" srcset="https://blogit.create.pt/wp-content/uploads/2021/09/133161353-a0a65fde-d3fc-4984-9ba7-6eb855bd9590.png 886w, https://blogit.create.pt/wp-content/uploads/2021/09/133161353-a0a65fde-d3fc-4984-9ba7-6eb855bd9590-300x209.png 300w, https://blogit.create.pt/wp-content/uploads/2021/09/133161353-a0a65fde-d3fc-4984-9ba7-6eb855bd9590-768x534.png 768w, https://blogit.create.pt/wp-content/uploads/2021/09/133161353-a0a65fde-d3fc-4984-9ba7-6eb855bd9590-696x484.png 696w, https://blogit.create.pt/wp-content/uploads/2021/09/133161353-a0a65fde-d3fc-4984-9ba7-6eb855bd9590-604x420.png 604w, https://blogit.create.pt/wp-content/uploads/2021/09/133161353-a0a65fde-d3fc-4984-9ba7-6eb855bd9590-100x70.png 100w" sizes="(max-width: 969px) 100vw, 969px" /><figcaption>Photo taken from AsyncAPI website&#8217;s roadmap</figcaption></figure></div>



<p>I find this vision to be very interesting, mainly because of the part:&nbsp;<strong>Any kind of APIs</strong>. At first, you might wonder if this means the AsyncAPI spec will define rules and more concepts for other types of APIs like GraphQL or OpenAPI. But this is not at all the case, the goal is to&nbsp;<strong>integrate with existing tools and specs</strong>! This is valuable for developers because usually enterprise architectures consist of a mix of technologies, each for it&#8217;s appropriate use case. Developers nowadays don&#8217;t just interact with RESTful APIs in a request/response model. There are different demands and considerations for the ever increasing devices users can use, the software we build needs to match these demands and still maintain manageable. Where we can evolve and create new applications that leverage the numerous APIs that exist internally or from a 3rd party.</p>



<h3 class="wp-block-heading">Concepts</h3>



<p>The spec version 2.1.0 defines a few concepts apart from the common Producer, Consumer and Message. A&nbsp;<strong>Channel</strong>&nbsp;can be seen as a topic/exchange or queue, an application can send messages to a channel and consumers can subscribe to it to receive them. The&nbsp;<strong>Operation</strong>&nbsp;object indicates if it&#8217;s a publish or a subscribe operation and how an application can send or receive messages. A&nbsp;<strong>Binding</strong>&nbsp;(or &#8220;protocol binding&#8221;) is a mechanism to define protocol-specific information or query parameters for the channel bindings. For example, for the AMQP protocol we can specify the channel is an exclusive queue like this:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
&quot;bindings&quot;: {
    &quot;amqp&quot;: {
      &quot;is&quot;: &quot;queue&quot;,
      &quot;queue&quot;: {
        &quot;exclusive&quot;: true
      }
    }
}
</pre></div>


<p style="margin-bottom:30px">Each protocol has it&#8217;s own JSON schema and we can have bindings for Messages, Servers, Channels, Operations and others.</p>



<h3 class="wp-block-heading">Components</h3>



<p>You can define&nbsp;<strong>components</strong>&nbsp;to re-use in multiple AsyncAPI documents and we can&nbsp;<strong>reference</strong>&nbsp;other AsncAPI documents. Let&#8217;s say you have two publishers who publish the same message, but with different values in one of the message properties. We&#8217;d have two AsyncAPI documents specifying the publishers, referencing a 3rd document specifying the common message with it&#8217;s properties. The&nbsp;<code>$ref</code>&nbsp;field is a string that can be the path to the other file, or a URL for an external file where the schema we want is defined. This reference object uses the same rules and format of JSON Reference, which opens the door for many possibilites (<a href="https://www.asyncapi.com/docs/specifications/v2.1.0#referenceObject" target="_blank" rel="noreferrer noopener">check the docs</a>&nbsp;to know more).</p>



<p style="margin-bottom:30px">When we start to have a lot of apps that depend on each other&#8217;s schemas, we can take a look at some solutions to scale out AsyncAPI documents. Perhaps we use&nbsp;<a href="https://docs.confluent.io/platform/current/schema-registry/index.html">Confluent&#8217;s Sche</a><a href="https://docs.confluent.io/platform/current/schema-registry/index.html" target="_blank" rel="noreferrer noopener">ma Registry</a>&nbsp;for our JSON schemas and setup a&nbsp;<strong>catalog of events</strong>&nbsp;in our organization. This empowers new developers seeking for ways to integrate with existing systems and event producers. We can also just store these components in a GitHub repository, and reference them in our AsyncAPI documents.</p>



<h3 class="wp-block-heading">Tooling</h3>



<p style="margin-bottom:30px">There is already quite a few tools and the&nbsp;<a href="https://www.asyncapi.com/docs/community/tooling" target="_blank" rel="noreferrer noopener">tooling ecosystem</a>&nbsp;is increasing! I&#8217;ve recently seen a&nbsp;<a href="https://github.com/fmvilas/asyncapi-to-postman" target="_blank" rel="noreferrer noopener">repository</a>&nbsp;that enables the creation of Postman collections from an AsyncAPI spec. I&#8217;ve also seen&nbsp;<a href="https://github.com/asyncapi/cupid" target="_blank" rel="noreferrer noopener">architecture documents being generated</a>&nbsp;from multiple AsyncAPI specs too, having a tool that can understand relations between applications and then output a diagram is pretty cool.</p>



<h3 class="wp-block-heading">Generators for AsyncAPI</h3>



<p>One piece of tooling that is often used are generators that produce documentation and code. For example gRPC tools have this capability using the protocol buffer compiler. AsyncAPI generators can take an AsyncAPI document and generate client/server code or documentation in HTML and markdown. Currently, it depends on the template we use to generate server-side code, for example the&nbsp;<a href="https://github.com/asyncapi/nodejs-ws-template" target="_blank" rel="noreferrer noopener">Node.js WebSocket template</a>&nbsp;generates both server and client code. This can be improved and extended overtime, especially because of the way the&nbsp;<a href="https://github.com/asyncapi/generator" target="_blank" rel="noreferrer noopener">generator</a>&nbsp;is designed, enabling&nbsp;<strong>extensibility</strong>&nbsp;so we can have templates for many other languages that support more protocols, etc. For example, there is only a&nbsp;<a href="https://github.com/asyncapi/dotnet-nats-template" target="_blank" rel="noreferrer noopener">NATS generator for .NET Core</a>&#8230; but perhaps in the future there could be more protocols supported for .NET Core and examples built for Azure&nbsp;😃.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>There is a lot of exciting stuff happening in the event-driven architectures world&nbsp;😄. We have only touched the surface in this post. In the CloudEvents space there are new specs being designed and worked on: Discovery; Subscription and Schema Registry APIs. Since AsyncAPI defines a document that you can use to describe your API, it&#8217;d be interesting to see how these correlate to each other, and using them together. </p>



<p>I encourage you to join these communities and contribute to their open source projects, CloudEvents&nbsp;and&nbsp;AsyncAPI, both specs are very community-driven. Collaboration between everyone is the way forward, with  <a href="https://hacktoberfest.digitalocean.com/" target="_blank" rel="noreferrer noopener">Hacktoberfest</a> and <a href="https://www.asyncapi.com/blog/events2021" target="_blank" rel="noreferrer noopener">AsyncAPI&#8217;s Hackathon</a>&nbsp;coming up, searching good first issues is a great way to start and to contribute&nbsp;👍!</p>



<p>Let us know in the comments if you&#8217;re using these specs and what are your thoughts on them. The next blog post will be about a practical example for .NET Core, Azure and AMQP messaging using CloudEvents and AsyncAPI, so stay tuned!</p>



<p></p>



<h2 class="wp-block-heading">Additional Links</h2>



<p>Here are some links to talks, docs and blog posts that you may find useful if you&#8217;re interested to know more about CloudEvents and AsyncAPI:</p>



<ul class="wp-block-list" style="max-width:1015px"><li><a href="https://www.youtube.com/watch?v=TZPPjAv12KU" target="_blank" rel="noreferrer noopener">The Serverless and Event-Driven Future &#8211; Austen Collins, Serverless (Intermediate Skill Level)</a></li><li><a href="https://docs.openfaas.com/reference/triggers/#cloudevents" target="_blank" rel="noreferrer noopener">OpenFaaS supports CloudEvents</a></li><li><a href="https://www.postman.com/postman-galaxy/the-future-of-api-specifications/" target="_blank" rel="noreferrer noopener">The Future of API Specifications talk by Fran Méndez</a></li><li><a href="https://tech.ebayinc.com/engineering/asyncapi-2-0-enabling-the-event-driven-world/" target="_blank" rel="noreferrer noopener">AsyncAPI 2.0: Enabling the Event-Driven World</a></li></ul>
<p>The post <a href="https://blogit.create.pt/davidpereira/2021/09/16/getting-started-with-cloudevents-and-asyncapi/">Getting Started with CloudEvents and AsyncAPI</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/davidpereira/2021/09/16/getting-started-with-cloudevents-and-asyncapi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Case Study: Azure Service Bus and Event-Driven Architectures</title>
		<link>https://blogit.create.pt/davidpereira/2021/06/02/case-study-azure-service-bus-and-event-driven-architectures/</link>
					<comments>https://blogit.create.pt/davidpereira/2021/06/02/case-study-azure-service-bus-and-event-driven-architectures/#respond</comments>
		
		<dc:creator><![CDATA[David Pereira&nbsp;and&nbsp;Francisco Grilo]]></dc:creator>
		<pubDate>Wed, 02 Jun 2021 11:02:12 +0000</pubDate>
				<category><![CDATA[Azure Service Bus]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[event-driven architecture]]></category>
		<guid isPermaLink="false">https://blogit.create.pt/?p=12291</guid>

					<description><![CDATA[<p>Introduction In&#160;this&#160;article&#160;we&#160;will&#160;talk&#160;about&#160;Event-Driven&#160;Architectures.&#160;We&#160;choose&#160;to&#160;use&#160;the&#160;Azure&#160;Cloud&#160;Infrastructure.Service&#160;Bus&#160;provides&#160;reliable,&#160;secure&#160;asynchronous&#160;messaging&#160;at&#160;scale.&#160;This&#160;article&#160;is&#160;written&#160;by&#160;the&#160;engineering&#160;team&#160;at&#160;CreateIT and&#160;it&#160;is&#160;intended&#160;to&#160;show&#160;you&#160;a&#160;case&#160;study in one of our projects for a client. We&#8217;ll&#160;take&#160;a&#160;deeper&#160;dive&#160;into&#160;the&#160;Service&#160;Bus&#160;technology,&#160;architecture,&#160;and&#160;design&#160;choices.&#160;The&#160;post&#160;will&#160;cover&#160;both&#160;conceptual&#160;material&#160;as&#160;well&#160;as&#160;implementation&#160;details.&#160;Most&#160;importantly,&#160;we&#160;will&#160;discuss&#160;design&#160;and&#160;implementation&#160;of&#160;some&#160;of&#160;the&#160;features&#160;that&#160;provide&#160;secure&#160;and&#160;reliable&#160;messaging&#160;at&#160;scale,&#160;while&#160;minimizing&#160;operational&#160;cost. Service&#160;Bus&#160;Entities When we are working with Azure Service Bus, we can choose two Entities: Topics or Queues. You can have multiple Topics or Queues per Service Bus Namespace, but firstly you need to differ one from another. If you want a FIFO queue and only have one Consumer, then Queues are the way to go. If you need multiple Consumers, then the Topic is the better option. In this specific case we will create a Subscription per Consumer (Topics are only available from the Standard Pricing Tier). Event-driven architectures Benefits&#160;with&#160;event-driven&#160;architectures What&#160;are&#160;the&#160;benefits&#160;of&#160;using&#160;a&#160;queue&#160;in&#160;the&#160;middle&#160;of&#160;these&#160;systems? We can decide to load balance the input from Customer Services. Let&#8217;s say there are a lot of updates being made to a customer, meaning a [&#8230;]</p>
<p>The post <a href="https://blogit.create.pt/davidpereira/2021/06/02/case-study-azure-service-bus-and-event-driven-architectures/">Case Study: Azure Service Bus and Event-Driven Architectures</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading" id="Introduction">Introduction</h2>



<p>In&nbsp;this&nbsp;article&nbsp;we&nbsp;will&nbsp;talk&nbsp;about&nbsp;Event-Driven&nbsp;Architectures.&nbsp;We&nbsp;choose&nbsp;to&nbsp;use&nbsp;the&nbsp;Azure&nbsp;Cloud&nbsp;Infrastructure.<br>Service&nbsp;Bus&nbsp;provides&nbsp;reliable,&nbsp;secure&nbsp;asynchronous&nbsp;messaging&nbsp;at&nbsp;scale.&nbsp;This&nbsp;article&nbsp;is&nbsp;written&nbsp;by&nbsp;the&nbsp;engineering&nbsp;team&nbsp;at&nbsp;CreateIT and&nbsp;it&nbsp;is&nbsp;intended&nbsp;to&nbsp;show&nbsp;you&nbsp;a&nbsp;case&nbsp;study in one of our projects for a client. </p>



<p>We&#8217;ll&nbsp;take&nbsp;a&nbsp;deeper&nbsp;dive&nbsp;into&nbsp;the&nbsp;Service&nbsp;Bus&nbsp;technology,&nbsp;architecture,&nbsp;and&nbsp;design&nbsp;choices.&nbsp;The&nbsp;post&nbsp;will&nbsp;cover&nbsp;both&nbsp;conceptual&nbsp;material&nbsp;as&nbsp;well&nbsp;as&nbsp;implementation&nbsp;details.&nbsp;Most&nbsp;importantly,&nbsp;we&nbsp;will&nbsp;discuss&nbsp;design&nbsp;and&nbsp;implementation&nbsp;of&nbsp;some&nbsp;of&nbsp;the&nbsp;features&nbsp;that&nbsp;provide&nbsp;secure&nbsp;and&nbsp;reliable&nbsp;messaging&nbsp;at&nbsp;scale,&nbsp;while&nbsp;minimizing&nbsp;operational&nbsp;cost.</p>



<h4 class="wp-block-heading" id="Service-Bus-Entities">Service&nbsp;Bus&nbsp;Entities</h4>



<p>When we are working with Azure Service Bus, we can choose two Entities: <strong>Topics</strong> or <strong>Queues</strong>. You can have multiple Topics or Queues per Service Bus Namespace, but firstly you need to differ one from another. If you want a FIFO queue and only have one Consumer, then Queues are the way to go. If you need multiple Consumers, then the Topic is the better option. In this specific case we will create a Subscription per Consumer (Topics are only available from the Standard Pricing Tier).</p>



<h2 class="wp-block-heading" id="Event-Driven-Architectures">Event-driven architectures</h2>



<h3 class="wp-block-heading" id="Benefits-with-event-driven-architectures">Benefits&nbsp;with&nbsp;event-driven&nbsp;architectures</h3>



<p>What&nbsp;are&nbsp;the&nbsp;benefits&nbsp;of&nbsp;using&nbsp;a&nbsp;queue&nbsp;in&nbsp;the&nbsp;middle&nbsp;of&nbsp;these&nbsp;systems?</p>



<ul class="wp-block-list" style="max-width:991px;margin-top:0px;margin-bottom:0px"><li>We can decide to <strong>load balance the input</strong> from Customer Services. Let&#8217;s say there are a lot of updates being made to a customer, meaning a lot of events being published. We scale the number of consumers and user the <strong>competing pattern</strong></li><li>We can <strong>throttle the input</strong>. If on black Friday there are a ton of events and in case our Audit Log system is down. We simply store these events on the queue and consume them when the service is back online again. Of course we&#8217;d need to implement some logic for this behavior, but adding this &#8220;middleware&#8221; buys us options.</li></ul>



<p>In our use case, we wanted to move to an implementation where the Web API doesn&#8217;t get affected by any changes on these external systems. But in order to change the implementation, we must first figure out what are the challenges associated with this change.</p>



<h3 class="wp-block-heading" id="Challenges-with-event-driven-architectures"><strong>Challenges&nbsp;with&nbsp;event-driven&nbsp;architectures</strong></h3>



<h4 class="wp-block-heading" id="Message/Event-order"><strong>Message/Event&nbsp;order</strong></h4>



<p>Azure Service Bus has a feature called <strong>sessions</strong>. A session provides a context to send and retrieve messages that will preserve ordered delivery. However, in our use case we chose not to use it.</p>



<h4 class="wp-block-heading" id="Message-Lock-Duration"><strong>Message&nbsp;Lock&nbsp;Duration</strong></h4>



<p>When we are using Queues, every message has a lock Duration. During this time the consumer needs to process it. But if this consumer needs to contact multiple external systems this time may rise and our messages could stop in the Dead-Letter. So the best practice is to change it accordingly to your needs. We recommend you to set this time extremely high in the beginning, and then do some tests to calculate the average.</p>



<p>After that add 30% more of its value, in case of some lengthy  requests (in this case if we have outliers, they might stop in the Queue). If you are using a Topic, you will have a Lock Duration per Subscription. So make sure to adjust this time accordingly to its functions.</p>



<h2 class="wp-block-heading" id="Implementation"><strong>Implementation</strong></h2>



<p>In the Figure 1 you can see the initial architecture for the Customer Management system. It was responsible to make the requests to the other systems.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="612" src="https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-10-1024x612.png" alt="" class="wp-image-12299" srcset="https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-10-1024x612.png 1024w, https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-10-300x179.png 300w, https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-10-768x459.png 768w, https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-10-696x416.png 696w, https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-10-703x420.png 703w, https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-10.png 1063w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figure 1 &#8211; Initial architecture diagram </figcaption></figure>



<p>With the new implementation, a message broker was introduced and we&nbsp;used&nbsp;the <a href="https://martinfowler.com/articles/201701-event-driven.html#Event-carriedStateTransfer" target="_blank" rel="noreferrer noopener">event-carried state transfer pattern</a>, meaning our events&nbsp;had&nbsp;all&nbsp;the&nbsp;information&nbsp;the&nbsp;consumer&nbsp;needed&nbsp;in&nbsp;order&nbsp;to&nbsp;do&nbsp;their&nbsp;job.&nbsp;We&nbsp;took&nbsp;in&nbsp;consideration&nbsp;the&nbsp;<strong>event&nbsp;notifications&nbsp;pattern</strong>,&nbsp;where&nbsp;the&nbsp;consumer&nbsp;would&nbsp;have&nbsp;to&nbsp;make&nbsp;a&nbsp;request&nbsp;to&nbsp;the&nbsp;API&nbsp;that&nbsp;originated&nbsp;the&nbsp;event,&nbsp;in&nbsp;order&nbsp;to&nbsp;get&nbsp;more&nbsp;information.&nbsp;But&nbsp;this&nbsp;brings&nbsp;new&nbsp;problems&nbsp;to&nbsp;the&nbsp;table.&nbsp;What&nbsp;if&nbsp;when&nbsp;the&nbsp;consumer&nbsp;code&nbsp;runs,&nbsp;the&nbsp;information&nbsp;for&nbsp;that&nbsp;customer&nbsp;ID&nbsp;changed?&nbsp;What&nbsp;if&nbsp;the&nbsp;event&nbsp;was&nbsp;<code>CUSTOMER_CREATED</code>&nbsp;but&nbsp;in&nbsp;the&nbsp;meanwhile&nbsp;the&nbsp;customer&nbsp;was&nbsp;deleted?</p>



<h3 class="wp-block-heading" id="Retries-with-Polly"><strong>Retries&nbsp;with&nbsp;Polly</strong></h3>



<p>In a distributed system, many things can go wrong. The network can fail or have additional latency, systems may be temporarily down, etc. We use the <code>Azure.ServiceBus.Messaging</code> NuGet package so we are able to check if the exception is a transient fault or not (more information on <a href="https://github.com/Azure/azure-sdk-for-net/blob/Azure.Messaging.ServiceBus_7.1.1/sdk/servicebus/Azure.Messaging.ServiceBus/README.md#exception-handling)" target="_blank" rel="noreferrer noopener">these docs</a>), then use <a href="https://github.com/App-vNext/Polly" target="_blank" rel="noreferrer noopener">Polly</a> to setup retry logic and fallbacks. There are other options to implement retry policies, for example we took in consideration the <a href="https://docs.microsoft.com/en-us/azure/architecture/best-practices/retry-service-specific#service-bus" target="_blank" rel="noreferrer noopener">Retry guidance for Azure Services</a> documentation from Microsoft. Since we use the latest Azure SDK,  the appropriate class would be <a href="https://docs.microsoft.com/en-us/dotnet/api/azure.messaging.servicebus.servicebusretrypolicy?view=azure-dotnet" target="_blank" rel="noreferrer noopener">ServiceBusRetryPolicy</a>.<br>We configured Polly to retry to publish a message three times (this configuration is on <code>appsettings.json</code>), with exponential times between each attempt.<br>If after the third retry we can&#8217;t publish the message we need to save it, because it has crucial information. So to solve this issue we created a Fallback Gateway, to write these messages to a Container inside an Azure Storage Account.</p>



<h3 class="wp-block-heading" id="Filters-for-message-routing"><strong>Filters&nbsp;for&nbsp;message&nbsp;routing</strong></h3>



<p>This section only applies for Topics Entities on the Azure Service Bus.<br>We can add <a href="https://docs.microsoft.com/en-us/azure/service-bus-messaging/topic-filters" target="_blank" rel="noreferrer noopener">Filters</a> on our Subscriptions to help us with routing each message to its specific Consumer. We considered two filter types:</p>



<ul class="wp-block-list" style="max-width:1003px;margin-top:-19px;margin-bottom:49px"><li>SQL Filter</li><li>Correlation Filter</li></ul>



<p style="margin-bottom:12px">Using the Correlation Filter you can configure Custom Properties and create Filters for your needs. You just need to make sure the producer of the messages, includes the header, that you are currently using to filter, on the message.</p>



<p>With SQL Filters you can create conditional expression to evaluate the current message. Just make sure that all the system properties are prefixed with <em>sys</em>. in the expression. Either way, both filters work just choose one that suits you the most!</p>



<h3 class="wp-block-heading" id="Dead-Letter-Queue"><strong>Dead-Letter&nbsp;Queue</strong></h3>



<p class="has-text-align-left">In case the consumer application can&#8217;t process the message after the <strong>Max Delivery Count</strong> attempts, instead of returning it to the queue it will be sent automatically to the Dead-Letter queue. If you are using the Topic, each subscriber has its own Dead-Letter queue. You can also, configure different Max Delivery Counts Values for each Subscriber. </p>



<p>All messages that are published to the Service Bus have a TTL (Time-To-Live). After this time ends the message will be transferred automatically to the Dead-Letter. So make sure you adjust this time accordingly to your needs.</p>



<p class="has-text-align-left">With&nbsp;this&nbsp;we&nbsp;are&nbsp;able&nbsp;to&nbsp;save&nbsp;messages&nbsp;that&nbsp;weren&#8217;t&nbsp;processed&nbsp;by&nbsp;the&nbsp;consumer&nbsp;application,&nbsp;but&nbsp;we&nbsp;should&nbsp;always&nbsp;strive&nbsp;to&nbsp;have&nbsp;an empty&nbsp;dead-letter&nbsp;queue.</p>



<h2 class="wp-block-heading" id="Conclusion">Conclusion</h2>



<p>Our&nbsp;first&nbsp;steps&nbsp;into&nbsp;an&nbsp;Event-Driven&nbsp;Architecture&nbsp;was&nbsp;a&nbsp;truly&nbsp;success!<br>We&nbsp;were&nbsp;able&nbsp;to&nbsp;expand&nbsp;our&nbsp;previous&nbsp;solution&nbsp;to&nbsp;be&nbsp;compatible&nbsp;with&nbsp;multiple&nbsp;external&nbsp;systems&nbsp;and&nbsp;instead&nbsp;of&nbsp;having&nbsp;the&nbsp;API&nbsp;sending&nbsp;a&nbsp;HTTPS&nbsp;request&nbsp;for&nbsp;each&nbsp;one&nbsp;we&nbsp;had&nbsp;this&nbsp;Application&nbsp;sending&nbsp;one&nbsp;message&nbsp;to&nbsp;a&nbsp;Topic&nbsp;in&nbsp;the&nbsp;Service&nbsp;Bus.<br>One&nbsp;of&nbsp;our&nbsp;goals&nbsp;was&nbsp;to&nbsp;have&nbsp;load&nbsp;balance&nbsp;in&nbsp;the&nbsp;Publisher&nbsp;Application.&nbsp;We&nbsp;went&nbsp;from&nbsp;a&nbsp;1-&gt;3&nbsp;dependency&nbsp;to&nbsp;a&nbsp;1-&gt;&nbsp;1, as you can see in the Figure 2.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="269" src="https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-11-1024x269.png" alt="" class="wp-image-12300" srcset="https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-11-1024x269.png 1024w, https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-11-300x79.png 300w, https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-11-768x202.png 768w, https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-11-1536x403.png 1536w, https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-11-696x183.png 696w, https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-11-1068x280.png 1068w, https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-11-1600x420.png 1600w, https://blogit.create.pt/wp-content/uploads/2021/05/MicrosoftTeams-image-11.png 1840w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figure 2 &#8211; Architecture Diagram with Azure Service Bus</figcaption></figure>



<p>Which&nbsp;is&nbsp;great&nbsp;and&nbsp;keeps&nbsp;the&nbsp;system&nbsp;scalable&nbsp;and&nbsp;future&nbsp;proof. Our&nbsp;solution&nbsp;became&nbsp;more&nbsp;decoupled&nbsp;in&nbsp;order&nbsp;to&nbsp;keep&nbsp;the&nbsp;Application&nbsp;agnostic&nbsp;to&nbsp;these&nbsp;changes.<br>If&nbsp;you&nbsp;have&nbsp;a&nbsp;similar&nbsp;situation&nbsp;with&nbsp;an Event-Driven Architecture then we totally recommend you to check more about this technology and it&#8217;s features.</p>



<p>We would like to share a link to <a href="https://github.com/Azure/azure-service-bus" target="_blank" rel="noreferrer noopener">Microsoft Azure Service Bus GitHub</a>. Most of the implementations of either the publisher or the subscriber were&nbsp;inspired&nbsp;by&nbsp;this&nbsp;documentation,&nbsp;so&nbsp;make&nbsp;sure&nbsp;you&nbsp;check&nbsp;it&nbsp;out!<br>If&nbsp;you&nbsp;have&nbsp;any&nbsp;questions,&nbsp;please&nbsp;write&nbsp;them&nbsp;down&nbsp;below.</p>



<h2 class="wp-block-heading" id="Additional-Links"><strong>Additional&nbsp;Links</strong></h2>



<p><a href="https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-exceptions" target="_blank" rel="noreferrer noopener">Service&nbsp;Bus&nbsp;Exceptions</a><br><a href="https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview" target="_blank" rel="noreferrer noopener">Service&nbsp;Bus&nbsp;Basic&nbsp;Steps</a><br><a href="https://docs.microsoft.com/pt-pt/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues" target="_blank" rel="noreferrer noopener">Tutorial&nbsp;with&nbsp;DotNet</a></p>
<p>The post <a href="https://blogit.create.pt/davidpereira/2021/06/02/case-study-azure-service-bus-and-event-driven-architectures/">Case Study: Azure Service Bus and Event-Driven Architectures</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/davidpereira/2021/06/02/case-study-azure-service-bus-and-event-driven-architectures/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Send Email In AWS Using SQS, SNS and Lambda Function</title>
		<link>https://blogit.create.pt/guilhermeperuzzi/2019/10/21/send-email-in-aws-using-sqs-sns-and-lambda-function/</link>
					<comments>https://blogit.create.pt/guilhermeperuzzi/2019/10/21/send-email-in-aws-using-sqs-sns-and-lambda-function/#respond</comments>
		
		<dc:creator><![CDATA[Guilherme Peruzzi]]></dc:creator>
		<pubDate>Mon, 21 Oct 2019 16:08:29 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[SNS]]></category>
		<category><![CDATA[SQS]]></category>
		<guid isPermaLink="false">https://blogit.create.pt/?p=11611</guid>

					<description><![CDATA[<p>This post explains how to build an AWS infrastructure so you can send an email from AWS to a subscribed email account. We will use SQS, SNS and Lambda Function for this example. Introduction In AWS the main ways that we have to send an email are: Using Amazon Simple Email Service (SES) Using Amazon [&#8230;]</p>
<p>The post <a href="https://blogit.create.pt/guilhermeperuzzi/2019/10/21/send-email-in-aws-using-sqs-sns-and-lambda-function/">Send Email In AWS Using SQS, SNS and Lambda Function</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>This post explains how to build an AWS infrastructure so you can send an email from AWS to a subscribed email account. We will use SQS, SNS and Lambda Function for this example.</p>



<h2 class="wp-block-heading">Introduction</h2>



<p>In AWS the main ways that we have to send an email are:</p>



<ul class="wp-block-list"><li>Using Amazon Simple Email Service (SES)</li><li>Using Amazon Simple Notification Service (SNS)</li></ul>



<p>For this example we are going to use Amazon Simple Notification Service.</p>



<p>You can check the main differences between SES and SNS <a href="https://chaosgears.com/aws-ses-and-sns-your-first-notification-service/">here</a></p>



<h2 class="wp-block-heading">The components</h2>



<p>Now i&#8217;m going to explain the components that we are going to use.</p>



<h3 class="wp-block-heading">Amazon Simple Queue Service (SQS)</h3>



<p style="text-align:justify">Amazon Simple Queue Service (SQS) is a fully managed message queuing service that enables you to decouple and scale microservices, distributed systems, and serverless applications. SQS eliminates the complexity and overhead associated with managing and operating message oriented middleware, and empowers developers to focus on differentiating work. Using SQS, you can send, store, and receive messages between software components at any volume, without losing messages or requiring other services to be available. </p>



<p>More Info: <a href="https://aws.amazon.com/sqs/">SQS</a></p>



<h3 class="wp-block-heading">Amazon Simple Notification Service (SNS)</h3>



<p style="text-align:justify">Amazon Simple Notification Service (SNS) is a highly available, durable, secure, fully managed pub/sub messaging service that enables you to decouple microservices, distributed systems, and serverless applications. Amazon SNS provides topics for high-throughput, push-based, many-to-many messaging. Using Amazon SNS topics, your publisher systems can fan out messages to a large number of subscriber endpoints for parallel processing, including Amazon SQS queues, AWS Lambda functions, and HTTP/S webhooks. Additionally, SNS can be used to fan out notifications to end users using mobile push, SMS, and email.</p>



<p>More Info: <a href="https://aws.amazon.com/sns/">SNS</a></p>



<h3 class="wp-block-heading">AWS Lambda</h3>



<p style="text-align:justify">AWS Lambda lets you run code without provisioning or managing servers. You pay only for the compute time you consume &#8211; there is no charge when your code is not running.</p>



<p style="text-align:justify">With Lambda, you can run code for virtually any type of application or backend service &#8211; all with zero administration. Just upload your code and Lambda takes care of everything required to run and scale your code with high availability. You can set up your code to automatically trigger from other AWS services or call it directly from any web or mobile app.</p>



<p>More Info:  <a href="https://aws.amazon.com/lambda/">Lambda</a></p>



<h2 class="wp-block-heading">Objective</h2>



<p style="text-align:justify">We are going to build a system using a SQS queue where we are going to send the body of the email. The lambda that long pools the queue will be triggered when the message is sent to the queue and will publish the message to the SNS topic so we can send an email with the message body. </p>



<p>More Info:<a href="https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html#sqs-long-polling"> Long Pooling</a></p>



<h2 class="wp-block-heading">Lets Go</h2>



<p style="text-align:justify">Create a SQS Queue where we are going to send the email body message. This queue will be a Standard Queue. This example will not have a deadletter queue configurated, but is always good to have one.</p>



<figure class="wp-block-image"><img decoding="async" width="1892" height="690" src="https://i1.wp.com/blogit.create.pt/wp-content/uploads/2019/10/image.png?fit=696%2C254&amp;ssl=1" alt="queue" class="wp-image-11623" srcset="https://blogit.create.pt/wp-content/uploads/2019/10/image.png 1892w, https://blogit.create.pt/wp-content/uploads/2019/10/image-300x109.png 300w, https://blogit.create.pt/wp-content/uploads/2019/10/image-768x280.png 768w, https://blogit.create.pt/wp-content/uploads/2019/10/image-1024x373.png 1024w, https://blogit.create.pt/wp-content/uploads/2019/10/image-696x254.png 696w, https://blogit.create.pt/wp-content/uploads/2019/10/image-1068x389.png 1068w, https://blogit.create.pt/wp-content/uploads/2019/10/image-1152x420.png 1152w" sizes="(max-width: 1892px) 100vw, 1892px" /></figure>



<p>We need to create a SNS Topic. An Amazon SNS topic is a logical access point which acts as a communication channel.</p>



<figure class="wp-block-image"><img decoding="async" width="1853" height="676" src="https://i0.wp.com/blogit.create.pt/wp-content/uploads/2019/10/image-1.png?fit=696%2C254&amp;ssl=1" alt="topic" class="wp-image-11624" srcset="https://blogit.create.pt/wp-content/uploads/2019/10/image-1.png 1853w, https://blogit.create.pt/wp-content/uploads/2019/10/image-1-300x109.png 300w, https://blogit.create.pt/wp-content/uploads/2019/10/image-1-768x280.png 768w, https://blogit.create.pt/wp-content/uploads/2019/10/image-1-1024x374.png 1024w, https://blogit.create.pt/wp-content/uploads/2019/10/image-1-696x254.png 696w, https://blogit.create.pt/wp-content/uploads/2019/10/image-1-1068x390.png 1068w, https://blogit.create.pt/wp-content/uploads/2019/10/image-1-1151x420.png 1151w" sizes="(max-width: 1853px) 100vw, 1853px" /></figure>



<figure class="wp-block-image"><img decoding="async" width="1842" height="665" src="https://i2.wp.com/blogit.create.pt/wp-content/uploads/2019/10/image-2.png?fit=696%2C251&amp;ssl=1" alt="topic" class="wp-image-11625" srcset="https://blogit.create.pt/wp-content/uploads/2019/10/image-2.png 1842w, https://blogit.create.pt/wp-content/uploads/2019/10/image-2-300x108.png 300w, https://blogit.create.pt/wp-content/uploads/2019/10/image-2-768x277.png 768w, https://blogit.create.pt/wp-content/uploads/2019/10/image-2-1024x370.png 1024w, https://blogit.create.pt/wp-content/uploads/2019/10/image-2-696x251.png 696w, https://blogit.create.pt/wp-content/uploads/2019/10/image-2-1068x386.png 1068w, https://blogit.create.pt/wp-content/uploads/2019/10/image-2-1163x420.png 1163w" sizes="(max-width: 1842px) 100vw, 1842px" /></figure>



<p style="text-align:justify">Create a subscription to that topic. The subscription resource subscribes an endpoint to an Amazon Simple Notification Service (Amazon SNS) topic. For a subscription to be created, the owner of the endpoint must confirm the subscription. The protocol of the subscription will be Email. The endpoint will be the email address that will receive the email. For this example i used a temporary mail so that i didn&#8217;t fill my personal inbox with emails. </p>



<p>More Info: <a href="https://temp-mail.org/en/">Temp-Mail</a></p>



<figure class="wp-block-image"><img decoding="async" width="1834" height="747" src="https://i0.wp.com/blogit.create.pt/wp-content/uploads/2019/10/image-3.png?fit=696%2C283&amp;ssl=1" alt="subscription" class="wp-image-11626" srcset="https://blogit.create.pt/wp-content/uploads/2019/10/image-3.png 1834w, https://blogit.create.pt/wp-content/uploads/2019/10/image-3-300x122.png 300w, https://blogit.create.pt/wp-content/uploads/2019/10/image-3-768x313.png 768w, https://blogit.create.pt/wp-content/uploads/2019/10/image-3-1024x417.png 1024w, https://blogit.create.pt/wp-content/uploads/2019/10/image-3-696x283.png 696w, https://blogit.create.pt/wp-content/uploads/2019/10/image-3-1068x435.png 1068w, https://blogit.create.pt/wp-content/uploads/2019/10/image-3-1031x420.png 1031w" sizes="(max-width: 1834px) 100vw, 1834px" /></figure>



<p style="text-align:justify">After you configure the subscription you will receive an email with a link to confirm the subscription.</p>



<figure class="wp-block-image"><img decoding="async" width="1127" height="734" src="https://i1.wp.com/blogit.create.pt/wp-content/uploads/2019/10/image-4.png?fit=696%2C453&amp;ssl=1" alt="email" class="wp-image-11627" srcset="https://blogit.create.pt/wp-content/uploads/2019/10/image-4.png 1127w, https://blogit.create.pt/wp-content/uploads/2019/10/image-4-300x195.png 300w, https://blogit.create.pt/wp-content/uploads/2019/10/image-4-768x500.png 768w, https://blogit.create.pt/wp-content/uploads/2019/10/image-4-1024x667.png 1024w, https://blogit.create.pt/wp-content/uploads/2019/10/image-4-696x453.png 696w, https://blogit.create.pt/wp-content/uploads/2019/10/image-4-1068x696.png 1068w, https://blogit.create.pt/wp-content/uploads/2019/10/image-4-645x420.png 645w" sizes="(max-width: 1127px) 100vw, 1127px" /></figure>



<p>When you click on the link you will be redirected to the subscription confirmation page</p>



<figure class="wp-block-image"><img decoding="async" width="844" height="442" src="https://blogit.create.pt////wp-content/uploads/2019/10/image-5.png" alt="confirmed" class="wp-image-11628" srcset="https://blogit.create.pt/wp-content/uploads/2019/10/image-5.png 844w, https://blogit.create.pt/wp-content/uploads/2019/10/image-5-300x157.png 300w, https://blogit.create.pt/wp-content/uploads/2019/10/image-5-768x402.png 768w, https://blogit.create.pt/wp-content/uploads/2019/10/image-5-696x364.png 696w, https://blogit.create.pt/wp-content/uploads/2019/10/image-5-802x420.png 802w" sizes="(max-width: 844px) 100vw, 844px" /></figure>



<p style="text-align:justify">Create the lambda that will use long pooling to check if there are new messages in the queue and publish the messages to the SNS Topic.</p>



<p style="text-align:justify">In this example i used Python to develop the lambda and called it &#8220;EmailLambda&#8221;. Note: you need to set the role of the lambda so that the lambda has permissions to long pool the sqs queue and publish a message to the SNS topic.</p>



<p>More Info: <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html">SNS IAM Roles</a>  <a href="https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-using-identity-based-policies.html">SQS IAM Roles</a> </p>



<figure class="wp-block-image"><img decoding="async" width="1849" height="870" src="https://i1.wp.com/blogit.create.pt/wp-content/uploads/2019/10/image-6.png?fit=696%2C328&amp;ssl=1" alt="lambda" class="wp-image-11629" srcset="https://blogit.create.pt/wp-content/uploads/2019/10/image-6.png 1849w, https://blogit.create.pt/wp-content/uploads/2019/10/image-6-300x141.png 300w, https://blogit.create.pt/wp-content/uploads/2019/10/image-6-768x361.png 768w, https://blogit.create.pt/wp-content/uploads/2019/10/image-6-1024x482.png 1024w, https://blogit.create.pt/wp-content/uploads/2019/10/image-6-696x327.png 696w, https://blogit.create.pt/wp-content/uploads/2019/10/image-6-1068x503.png 1068w, https://blogit.create.pt/wp-content/uploads/2019/10/image-6-893x420.png 893w" sizes="(max-width: 1849px) 100vw, 1849px" /></figure>



<p>Here is the lambda code that i used.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: python; title: ; notranslate">
#!/usr/bin/python3
import json
import boto3
import os

def lambda_handler(event, context):
    batch_processes=&#x5B;]
    for record in event&#x5B;&#039;Records&#039;]:
        send_request(record&#x5B;&quot;body&quot;])
		

def send_request(body):
    # Create an SNS client
    sns = boto3.client(&#039;sns&#039;)

    # Publish a simple message to the specified SNS topic
    response = sns.publish(
        TopicArn=os.environ&#x5B;&#039;email_topic&#039;],    
        Message=body,    
    )

    # Print out the response
    print(response)
 
</pre></div>


<p>Set the lambda enviroment variable email_topic to the ARN of the SNS Topic we created earlier.</p>



<figure class="wp-block-image"><img decoding="async" width="1687" height="409" src="https://i1.wp.com/blogit.create.pt/wp-content/uploads/2019/10/image-7.png?fit=696%2C169&amp;ssl=1" alt="topic" class="wp-image-11631" srcset="https://blogit.create.pt/wp-content/uploads/2019/10/image-7.png 1687w, https://blogit.create.pt/wp-content/uploads/2019/10/image-7-300x73.png 300w, https://blogit.create.pt/wp-content/uploads/2019/10/image-7-768x186.png 768w, https://blogit.create.pt/wp-content/uploads/2019/10/image-7-1024x248.png 1024w, https://blogit.create.pt/wp-content/uploads/2019/10/image-7-696x169.png 696w, https://blogit.create.pt/wp-content/uploads/2019/10/image-7-1068x259.png 1068w" sizes="(max-width: 1687px) 100vw, 1687px" /></figure>



<p>Add the lambda trigger and set it with the sqs queue that will receive the body of the email.</p>



<figure class="wp-block-image"><img decoding="async" width="1859" height="875" src="https://i1.wp.com/blogit.create.pt/wp-content/uploads/2019/10/image-8.png?fit=696%2C328&amp;ssl=1" alt="trigger" class="wp-image-11632" srcset="https://blogit.create.pt/wp-content/uploads/2019/10/image-8.png 1859w, https://blogit.create.pt/wp-content/uploads/2019/10/image-8-300x141.png 300w, https://blogit.create.pt/wp-content/uploads/2019/10/image-8-768x361.png 768w, https://blogit.create.pt/wp-content/uploads/2019/10/image-8-1024x482.png 1024w, https://blogit.create.pt/wp-content/uploads/2019/10/image-8-696x328.png 696w, https://blogit.create.pt/wp-content/uploads/2019/10/image-8-1068x503.png 1068w, https://blogit.create.pt/wp-content/uploads/2019/10/image-8-892x420.png 892w" sizes="(max-width: 1859px) 100vw, 1859px" /></figure>



<h3 class="wp-block-heading">Lets Test it !!!</h3>



<p>Now the only thing that we need to do is send a new message to the SQS queue with the email body that we want.</p>



<figure class="wp-block-image"><img decoding="async" width="1917" height="875" src="https://i0.wp.com/blogit.create.pt/wp-content/uploads/2019/10/image-9.png?fit=696%2C317&amp;ssl=1" alt="send message" class="wp-image-11633" srcset="https://blogit.create.pt/wp-content/uploads/2019/10/image-9.png 1917w, https://blogit.create.pt/wp-content/uploads/2019/10/image-9-300x137.png 300w, https://blogit.create.pt/wp-content/uploads/2019/10/image-9-768x351.png 768w, https://blogit.create.pt/wp-content/uploads/2019/10/image-9-1024x467.png 1024w, https://blogit.create.pt/wp-content/uploads/2019/10/image-9-696x318.png 696w, https://blogit.create.pt/wp-content/uploads/2019/10/image-9-1068x487.png 1068w, https://blogit.create.pt/wp-content/uploads/2019/10/image-9-920x420.png 920w" sizes="(max-width: 1917px) 100vw, 1917px" /></figure>



<figure class="wp-block-image"><img decoding="async" width="980" height="898" src="https://blogit.create.pt////wp-content/uploads/2019/10/image-10.png" alt="Send message" class="wp-image-11634" srcset="https://blogit.create.pt/wp-content/uploads/2019/10/image-10.png 980w, https://blogit.create.pt/wp-content/uploads/2019/10/image-10-300x275.png 300w, https://blogit.create.pt/wp-content/uploads/2019/10/image-10-768x704.png 768w, https://blogit.create.pt/wp-content/uploads/2019/10/image-10-696x638.png 696w, https://blogit.create.pt/wp-content/uploads/2019/10/image-10-458x420.png 458w" sizes="(max-width: 980px) 100vw, 980px" /></figure>



<p>Now we will receive an email from  no-reply@sns.amazonaws.com with the body of the queue message.</p>



<figure class="wp-block-image"><img decoding="async" width="1101" height="407" src="https://i0.wp.com/blogit.create.pt/wp-content/uploads/2019/10/image-11.png?fit=696%2C258&amp;ssl=1" alt="Email" class="wp-image-11635" srcset="https://blogit.create.pt/wp-content/uploads/2019/10/image-11.png 1101w, https://blogit.create.pt/wp-content/uploads/2019/10/image-11-300x111.png 300w, https://blogit.create.pt/wp-content/uploads/2019/10/image-11-768x284.png 768w, https://blogit.create.pt/wp-content/uploads/2019/10/image-11-1024x379.png 1024w, https://blogit.create.pt/wp-content/uploads/2019/10/image-11-696x257.png 696w, https://blogit.create.pt/wp-content/uploads/2019/10/image-11-1068x395.png 1068w" sizes="(max-width: 1101px) 100vw, 1101px" /></figure>



<p>And there you have it. An email notification in AWS using SQS, SNS and Lambda.</p>



<p>Thanks for reading this post and have an&#8230;</p>



<figure class="wp-block-image"><img decoding="async" src="https://d2cnjxvu6pstmv.cloudfront.net/2016/03/14165712/awesomeday1.jpg" alt="Image result for aws awesome day" /></figure>



<p></p>
<p>The post <a href="https://blogit.create.pt/guilhermeperuzzi/2019/10/21/send-email-in-aws-using-sqs-sns-and-lambda-function/">Send Email In AWS Using SQS, SNS and Lambda Function</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/guilhermeperuzzi/2019/10/21/send-email-in-aws-using-sqs-sns-and-lambda-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>NoSQL First Act &#8211; a historical introduction</title>
		<link>https://blogit.create.pt/goncalomelo/2019/08/13/nosql-first-act-a-historical-introduction/</link>
					<comments>https://blogit.create.pt/goncalomelo/2019/08/13/nosql-first-act-a-historical-introduction/#respond</comments>
		
		<dc:creator><![CDATA[Gonçalo Melo]]></dc:creator>
		<pubDate>Tue, 13 Aug 2019 17:57:42 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Sql]]></category>
		<category><![CDATA[Cluster]]></category>
		<category><![CDATA[Database history]]></category>
		<category><![CDATA[Database model]]></category>
		<category><![CDATA[Horizontal scale]]></category>
		<category><![CDATA[impedance mismatch]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[Relational database]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Vertical scale]]></category>
		<guid isPermaLink="false">https://blogit.create.pt/?p=9739</guid>

					<description><![CDATA[<p>NoSQL databases introduction and dominant features. A historical perspective to their appearance in a world dominated by relational model databases.</p>
<p>The post <a href="https://blogit.create.pt/goncalomelo/2019/08/13/nosql-first-act-a-historical-introduction/">NoSQL First Act &#8211; a historical introduction</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>NoSQL gets a lot of &#8220;heat&#8221; about not having a good direct definition. And the term NoSQL only gives somes clues of what this is not. </p>



<p>NoSQL is like a new definition of something that is a database but is different than the usual relational model. Likewise, making a parallel by going back 30 years ago. Back then probably no one knew what a relational database was also. Let&#8217;s use this and start with a small historical and motivational point of view for NoSQL. PS: I was not a developer back then.</p>



<p>This article will be a first part of a series of articles. The goal will be to unite some knowledge about this topic. </p>



<h2 class="wp-block-heading">Starting in the 1980&#8217;s</h2>



<p>Relational databases emerged bringing ACID properties &#8211; Atomicity, Consistency, Isolation and Persistency. Properties taken for granted nowadays. Also, they also brought the SQL language. SQL is common enough across different systems for one to use. Although there are different flavors, can almost be considered a standard.</p>



<p>Relation databases also allowed for a simple and very common integration mechanism between 2 or more systems. Data can be easily shared by reading or writing data in a table on a shared relational database. This is today still a very common integration pattern.</p>



<h2 class="wp-block-heading">In the 1990&#8217;s</h2>



<p>Object database&#8217;s started to appear with more strength. They had been around for some time. Most important, they implement a different database paradigm model. This new paradigm tried to solve the impedance mismatch problem. The impedance mismatch was caused by relational databases. It emerges from the need to map objects used in memory in our application model to tables in a relational database. This page <a href="https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch">https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch</a> is a good reference for this issue.</p>



<p>Saving an application object into these database model should be a direct operation. Conceptually no mapping would be necessary when an object database type was used. Albeit, these gains, object databases were not able to substitute relational databases. </p>



<h2 class="wp-block-heading">In the 2000&#8217;s</h2>



<p>As internet availability grows 2 things started to have a big impact:</p>



<ul class="wp-block-list"><li>Generation of enormous amount of data that had to be stored and processed;</li><li>Accesses from anywhere in the globe became more and more frequent. Therefore latency was an issue to consider. And even speed of light limitation can contribute significantly to this. Data can now be stored far from where we are. For example, a distance of 10.000 km will add about 100 ms on each round trip. Therefore, data needs to spread around the globe to provide a quick access.</li></ul>



<p>In this environment,
relational databases do not always solve customer needs, either because of
flexibility, price or performance issues:</p>



<ul class="wp-block-list"><li>Relational databases enforces a ridged set of rules in the relational model. These will impact the flexibility of the application development;</li><li>Price because of the need for more powerful machines and also the software licenses that go with this;</li><li>Performance, because relational databases do not naturally meet the increasing workload. Huge CPU, memory, storage and throughput is needed to be perform in this environment. And for relational model, vertical scaling can only get you so far.</li></ul>



<h2 class="wp-block-heading">Scaling Vertically versus Horizontally</h2>



<p>Relational databases usual scaling method is a vertical one. As a result whenever the workload incresses we will use a bigger machine with more hardware resources. </p>



<p>On the other hand, the big internet companies adopted an horizontal scaling paradigm. This is a cluster type environment with lots and lots of machines. In other words, this means that more machines will be used to handle bigger workloads.</p>



<p>Relational databases do not thrive very well in this paradigm. They hardly take any benefit of using more machines. Hence, NoSQL like databases arises to take advantage of the horizontal scale paradigm. Also companies like Google and Amazon started researching in this area. As a result, Google created BigTable and Amazon DynamoDB.</p>



<h2 class="wp-block-heading">Relational databases dominated the market, why are NoSQL databases being used now?</h2>



<p>I think this is important. Dominance and usage factors are usually a combination of several aspects. What has been changing:</p>



<ul class="wp-block-list"><li>Developers hide databases behind integration layers. This makes it simpler to use. And in addition, easier to replace one database or persistence method per other; </li><li>Cloud growth in some cases means we can try different approaches with less effort regarding infrastructure;</li><li>Handling big quantities of data introduced new needs. NoSQL provides a good development flexibility. And in addition can also take advantage of cluster solutions.</li></ul>



<p>Finally, what is NoSQL?</p>



<h2 class="wp-block-heading">Common NoSQL databases characteristics</h2>



<p>NoSQL doesn’t have a clear direct meaning. The term alludes to something like &#8220;Not Only SQL&#8221;. A more exact explanation should be &#8220;Non Relational database&#8221;. This would reinforce the new model paradigm and not the SQL language itself. The fact that some NoSQL databases actually supports some form of SQL language adds even more to the confusion.</p>



<p>But, the name is catchy and so common that will probably stay. The point is: defining NoSQL is hard. Therefore, we will do the next best thing. Introduce the dominant traits of these database systems:</p>



<ul class="wp-block-list"><li>Non relational;</li><li>Usually (not all) cluster-friendly;</li><li>Most of them are open source;</li><li>No-schema / schema-less;</li><li>Have a big internet drive (cluster and bigdata friendly).</li></ul>



<p>By these common traits, almost any non relational database can be a NoSQL database! Also, there are probably published studies in all these areas dating back 30 or 40 year ago. Out of curiosity, the name NoSQL itself is referred to being born by the end of 2009. The term emerged as a twitter hashtag for a meetup were people talked about these subjects. Even though some of these traits were not new at the time.</p>



<h2 class="wp-block-heading">Next steps</h2>



<p>NoSQL has a lot to explore. It will provide a more direct paradigm that will make simpler specific needs like this ones to <a href="https://blogit.create.pt////diogoguiomar/2018/02/26/query-a-json-array-column-in-sql/">query Json objects inside Sql Server</a> and <a href="https://blogit.create.pt////goncalomelo/2018/12/20/query-performance-for-json-objects-inside-sql-server/">performance considerations</a>.</p>



<p>My plan for the next article(s) will be to:</p>



<ul class="wp-block-list"><li>Present some of the NoSQL data models; </li><li>Talk about the no schema or the schema less feature;</li><li>Discuss the aggregate concept. And how this relates to the CAP theorem.</li></ul>



<h2 class="wp-block-heading">Further reads</h2>



<p>There is a lot of information online. For me, I like Martin Fowler approach. Some of these information&#8217;s are from his content. You can check his website here: <a href="https://martinfowler.com/nosql.html">https://martinfowler.com/nosql.html</a>. He also has a book: <a href="https://martinfowler.com/books/nosql.html">https://martinfowler.com/books/nosql.html</a>.</p>



<p></p>
<p>The post <a href="https://blogit.create.pt/goncalomelo/2019/08/13/nosql-first-act-a-historical-introduction/">NoSQL First Act &#8211; a historical introduction</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/goncalomelo/2019/08/13/nosql-first-act-a-historical-introduction/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SharePoint Scenarios &#8211; Online, On-Premises or Hybrid!?</title>
		<link>https://blogit.create.pt/fabiocarvalho/2017/02/19/sharepoint-scenarios-online-on-premises-or-hybrid/</link>
					<comments>https://blogit.create.pt/fabiocarvalho/2017/02/19/sharepoint-scenarios-online-on-premises-or-hybrid/#comments</comments>
		
		<dc:creator><![CDATA[Fábio Carvalho]]></dc:creator>
		<pubDate>Sun, 19 Feb 2017 13:19:05 +0000</pubDate>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[Hybrid Solution]]></category>
		<category><![CDATA[SharePoint 2013]]></category>
		<category><![CDATA[SharePoint 2016]]></category>
		<category><![CDATA[SharePoint Architecture]]></category>
		<category><![CDATA[SharePoint Hybrid Solution]]></category>
		<guid isPermaLink="false">http://blogit.create.pt/fabiocarvalho/?p=1891</guid>

					<description><![CDATA[<p>Hey Everyone!!! Today i&#8217;m going to talk about SharePoint Scenarios and what are the main difference between this three types of scenarios and what scenario should be the option for your environment&#8230; So, the three types of architecture scenario that you can have on your SharePoint environment are the following: What should you choose?! Well in [&#8230;]</p>
<p>The post <a href="https://blogit.create.pt/fabiocarvalho/2017/02/19/sharepoint-scenarios-online-on-premises-or-hybrid/">SharePoint Scenarios &#8211; Online, On-Premises or Hybrid!?</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Hey Everyone!!!</p>
<p>Today i&#8217;m going to talk about <strong>SharePoint Scenarios</strong> and what are the main difference between this <strong>three types of scenarios</strong> and what scenario should be the option for your environment&#8230;</p>
<p>So, the <strong>three</strong> types of <strong>architecture</strong> scenario that you can have on your <strong>SharePoint environment</strong> are the following:</p>
<p><img decoding="async" class="size-full wp-image-1981 aligncenter" src="http://blogit.create.pt/fabiocarvalho/wp-content/uploads/sites/271/2017/02/ee.png" alt="" width="687" height="276" srcset="https://blogit.create.pt/wp-content/uploads/2017/02/ee.png 687w, https://blogit.create.pt/wp-content/uploads/2017/02/ee-300x121.png 300w" sizes="(max-width: 687px) 100vw, 687px" /></p>
<p>What should you choose?! Well in fact there are<strong> so many question</strong> that you need answered <strong>before take an decision</strong>!?</p>
<p><img decoding="async" class="aligncenter size-full wp-image-2031" src="http://blogit.create.pt/fabiocarvalho/wp-content/uploads/sites/271/2017/02/Capture-2.png" alt="" width="797" height="356" srcset="https://blogit.create.pt/wp-content/uploads/2017/02/Capture-2.png 797w, https://blogit.create.pt/wp-content/uploads/2017/02/Capture-2-300x134.png 300w, https://blogit.create.pt/wp-content/uploads/2017/02/Capture-2-768x343.png 768w, https://blogit.create.pt/wp-content/uploads/2017/02/Capture-2-696x311.png 696w" sizes="(max-width: 797px) 100vw, 797px" /></p>
<p>&nbsp;</p>
<p>It isn&#8217;t easy take a <strong>decision</strong>, let&#8217;s analyse <strong>what are the main benefits each architecture</strong>:</p>
<h4><strong><span style="color: #800000">SharePoint On-Premises:</span></strong></h4>
<ul>
<li><span class="tx">Private Cloud</span></li>
<li><span class="tx">Dedicated environment</span></li>
<li><span class="tx">Internally hosted</span></li>
<li><span class="tx">Internally managed</span></li>
<li><span class="tx">Internal designed</span></li>
</ul>
<table border="0" width="400" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td style="text-align: center" valign="top" width="200"><span style="color: #008000"><strong> Pros</strong></span></td>
<td style="text-align: center" valign="top" width="200"><strong><span style="color: #ff0000">Cons</span></strong></td>
</tr>
<tr>
<td valign="top" width="200">Control Performance</td>
<td valign="top" width="200">Cost of internal resources (staff, hardware, software, etc)</td>
</tr>
<tr>
<td valign="top" width="200">Scale Up and Scale Out</td>
<td valign="top" width="200">Additional Geographic redundancy costs</td>
</tr>
<tr>
<td valign="top" width="200">Reduces Bandwidth requirements</td>
<td valign="top" width="200">Disaster Recovery dependent on internal capabilities</td>
</tr>
<tr>
<td valign="top" width="200">Full Customization</td>
<td valign="top" width="200">Scale Up/Out Cost( SW/HW)</td>
</tr>
<tr>
<td valign="top" width="200">Full Server and SQL Database</td>
<td valign="top" width="200">Patching Servers/farms</td>
</tr>
<tr>
<td valign="top" width="200">Migrate as Needed</td>
<td valign="top" width="200">Extra configurations for External Collaboration</td>
</tr>
<tr>
<td valign="top" width="200">Seamless Single Sign on with Corporate Active Directory</td>
<td valign="top" width="200"></td>
</tr>
</tbody>
</table>
<ul>
<li>Migration Flow:</li>
</ul>
<p><img decoding="async" class="size-full wp-image-2081 aligncenter" src="http://blogit.create.pt/fabiocarvalho/wp-content/uploads/sites/271/2017/02/Capture-3.png" alt="" width="249" height="73" /></p>
<h4><span style="color: #800000"><strong>SharePoint Online:</strong></span></h4>
<ul>
<li><span class="tx">Public Cloud</span></li>
<li>Partially or fully dedicated</li>
<li>Externally hosted</li>
<li>Externally or Internally managed</li>
<li><span class="tx">Internally managed</span></li>
<li>Minimal customization</li>
</ul>
<p><span style="color: #800000">Cloud benefits according to cloud users?</span></p>
<ul>
<li><strong>Increase efficiency (55 %)</strong></li>
<li><strong>Improved employee mobility (49 %)</strong></li>
<li><strong>Increased ability to Innovate (32 %)</strong></li>
<li><strong>Freed current IT staff for other projects (31 %)</strong></li>
<li><strong>Reduce IT operation costs (25 %)</strong></li>
<li><strong>Enabled us to offer new products/ services (24 %)</strong></li>
</ul>
<table border="0" width="400" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td style="text-align: center" valign="top" width="200"><span style="color: #008000"><strong> Pros</strong></span></td>
<td style="text-align: center" valign="top" width="200"><strong><span style="color: #ff0000">Cons</span></strong></td>
</tr>
<tr>
<td valign="top" width="200">Uptime 99.99%</td>
<td valign="top" width="200">More ISP Bandwidth</td>
</tr>
<tr>
<td valign="top" width="200">Multiple Data centers</td>
<td valign="top" width="200">Limited Customizations</td>
</tr>
<tr>
<td valign="top" width="200">Shorted release cycle</td>
<td valign="top" width="200">Recovery SLAs</td>
</tr>
<tr>
<td valign="top" width="200">Geographically redundant and Scalability</td>
<td valign="top" width="200">No Server access</td>
</tr>
<tr>
<td valign="top" width="200">Managed Services ( SaaS)</td>
<td valign="top" width="200"></td>
</tr>
<tr>
<td valign="top" width="200">Pay as you go ( Low Cost )</td>
<td valign="top" width="200"></td>
</tr>
<tr>
<td valign="top" width="200">Reduced impact on internal IT resources</td>
<td valign="top" width="200"></td>
</tr>
</tbody>
</table>
<ul>
<li>Migration Flow:</li>
</ul>
<p><img decoding="async" class="aligncenter size-full wp-image-2131" src="http://blogit.create.pt/fabiocarvalho/wp-content/uploads/sites/271/2017/02/Capture-4.png" alt="" width="211" height="164" /></p>
<h4><strong><span style="color: #800000">SharePoint Hybrid Solution:</span></strong></h4>
<p><img decoding="async" class="aligncenter size-full wp-image-2191" src="http://blogit.create.pt/fabiocarvalho/wp-content/uploads/sites/271/2017/02/Picture2.png" alt="" width="422" height="147" srcset="https://blogit.create.pt/wp-content/uploads/2017/02/Picture2.png 422w, https://blogit.create.pt/wp-content/uploads/2017/02/Picture2-300x105.png 300w" sizes="(max-width: 422px) 100vw, 422px" /></p>
<p><span style="color: #800000">What is Hybrid SharePoint?</span></p>
<blockquote><p>&#8220;Productivity services in <strong>SharePoint Online (Office 365)</strong> which are securely integrated with on-premises <strong>SharePoint Server 2016</strong> to provide unified functionality and access to data.”</p></blockquote>
<p><span style="color: #800000">Why considering a Hybrid SharePoint Solution?</span></p>
<ul>
<li>Large existing investments (customized SP deployments w/lots of data and settings,custom solutions, LOB systems, etc…)</li>
<li>Functionalities I can’t do in the Cloud that i can do on premises;</li>
<li>Keep Sensitive Data on Premise</li>
<li>Collaboration with External Partners</li>
<li>Capacity Flexibility</li>
<li>Intranet – Extranet</li>
<li>Geo Location</li>
</ul>
<p><span style="color: #800000">Same Benefits of Hybrid SharePoint Solution?</span></p>
<p><img decoding="async" class="aligncenter size-full wp-image-2171" src="http://blogit.create.pt/fabiocarvalho/wp-content/uploads/sites/271/2017/02/Capture-5.png" alt="" width="506" height="254" srcset="https://blogit.create.pt/wp-content/uploads/2017/02/Capture-5.png 506w, https://blogit.create.pt/wp-content/uploads/2017/02/Capture-5-300x151.png 300w" sizes="(max-width: 506px) 100vw, 506px" /></p>
<p><strong>SharePoint Business to Business Collaboration: Extranet for Partners with Office 365</strong></p>
<blockquote><p><i>“on-premises</i> extranet site involves complex configuration to establish security measures and governance, including granting access inside the corporate firewall, and expensive initial and on-going cost….SharePoint Online, partners connect directly to a members-only site in Office 365, without access to the corporate on-premises environment or any other Office 365 site. Office 365 Extranet sites can be accessed anywhere…”</p></blockquote>
<p><strong>SharePoint hybrid sites and search</strong></p>
<blockquote><p>“A hybrid environment can help your company get started in the cloud, taking a first step to explore the cloud functionality at own your pace. It also enables enterprise users to be connected from almost anywhere to the resources and content they need&#8230; SharePoint hybrid features, you can consolidate search results between SharePoint Server and Office 365, consolidate user profiles in Office 365, and offload your users&#8217; personal storage to the cloud…”</p></blockquote>
<ul>
<li>Migration/Interactions Flow:</li>
</ul>
<blockquote><p><img decoding="async" class="aligncenter size-full wp-image-2201" src="http://blogit.create.pt/fabiocarvalho/wp-content/uploads/sites/271/2017/02/Capture-6.png" alt="" width="278" height="169" /></p></blockquote>
<p>Thanks</p>
<p><strong>Fábio Carvalho</strong><br />
SharePoint Consultant<br />
<strong>|create|</strong><span style="color: #ff0000"><strong>it</strong></span><strong>|</strong></p>
<p>&nbsp;</p>
<p>The post <a href="https://blogit.create.pt/fabiocarvalho/2017/02/19/sharepoint-scenarios-online-on-premises-or-hybrid/">SharePoint Scenarios &#8211; Online, On-Premises or Hybrid!?</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/fabiocarvalho/2017/02/19/sharepoint-scenarios-online-on-premises-or-hybrid/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>ITARC15 Architecting a Large Software Project &#8211; Lessons Learned</title>
		<link>https://blogit.create.pt/jota/2015/05/22/itarc15-architecting-a-large-software-project-lessons-learned/</link>
					<comments>https://blogit.create.pt/jota/2015/05/22/itarc15-architecting-a-large-software-project-lessons-learned/#respond</comments>
		
		<dc:creator><![CDATA[Jota]]></dc:creator>
		<pubDate>Fri, 22 May 2015 12:30:04 +0000</pubDate>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Software Estimation]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[#itarc15]]></category>
		<guid isPermaLink="false">http://blogit.create.pt/joaomartins/?p=5061</guid>

					<description><![CDATA[<p>This morning I presented my “Lessons Learned” workshop at ITARC 2015 in Stockholm, Sweden. This session had previously been presented at Netponto, and was improved with more content targeted at software architects and also updated with more current information. The goal of the workshop (3,5 hours!) is to share experiences and discuss approaches in developing [&#8230;]</p>
<p>The post <a href="https://blogit.create.pt/jota/2015/05/22/itarc15-architecting-a-large-software-project-lessons-learned/">ITARC15 Architecting a Large Software Project &#8211; Lessons Learned</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>This morning I presented my “Lessons Learned” workshop at ITARC 2015 in Stockholm, Sweden. This session had previously been presented at Netponto, and was improved with more content targeted at software architects and also updated with more current information. The goal of the workshop (3,5 hours!) is to share experiences and discuss approaches in developing complex software projects. I had great feedback from the participants, and provocative and relevant questions. </p>
<p>One issue that did come up is the definition of “Large”: this was a large project for Portugal’s standards, plus it was complex and took a long time until release. But for local Swedish standards, it wasn’t that “large” <img decoding="async" class="wlEmoticon wlEmoticon-smile" style="border-top-style: none;border-bottom-style: none;border-right-style: none;border-left-style: none" alt="Smile" src="http://blogit-create.com/wp-content/uploads/2015/05/wlEmoticon-smile.png">. Even so, the contents are general enough to be interesting, or so I was told. Also it was interesting to learn about some cultural differences between Portugal and Sweden – and those were much less than would be expected.</p>
<p>Great session, loved doing it. Here’s the <a href="http://www.slideshare.net/slidejota/20150522-w05-architecting-a-large-software-project-lessons-learned-joo-pedro-martins-distribution-version" target="_blank">slidedeck</a>, for those interested.</p>
<p>The post <a href="https://blogit.create.pt/jota/2015/05/22/itarc15-architecting-a-large-software-project-lessons-learned/">ITARC15 Architecting a Large Software Project &#8211; Lessons Learned</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/jota/2015/05/22/itarc15-architecting-a-large-software-project-lessons-learned/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>«Architecting a Large Software Project &#8211; Lessons Learned» @ Netponto 50th Meeting &#8211; Lisboa 22/Nov</title>
		<link>https://blogit.create.pt/jota/2014/12/01/architecting-a-large-software-project-lessons-learned-netponto-50th-meeting-lisboa-22nov-2/</link>
					<comments>https://blogit.create.pt/jota/2014/12/01/architecting-a-large-software-project-lessons-learned-netponto-50th-meeting-lisboa-22nov-2/#respond</comments>
		
		<dc:creator><![CDATA[Jota]]></dc:creator>
		<pubDate>Mon, 01 Dec 2014 14:35:58 +0000</pubDate>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design/Integration Patterns]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Create It]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[MsdnArquitecturaPT]]></category>
		<category><![CDATA[Netponto]]></category>
		<guid isPermaLink="false">http://blogit.create.pt/joaomartins/?p=4981</guid>

					<description><![CDATA[<p>Two weeks ago I presented a session at the 50th meeting of the Lisbon Netponto Group, the largest community of .Net development in Lisboa. This two-hour session, which was filled with real examples, described the lessons learned in a 3-year project I was involved in as a Software Architect, and which had its first release [&#8230;]</p>
<p>The post <a href="https://blogit.create.pt/jota/2014/12/01/architecting-a-large-software-project-lessons-learned-netponto-50th-meeting-lisboa-22nov-2/">«Architecting a Large Software Project &#8211; Lessons Learned» @ Netponto 50th Meeting &#8211; Lisboa 22/Nov</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Two weeks ago I presented a session at the 50th meeting of the Lisbon Netponto Group, the largest community of .Net development in Lisboa. This two-hour session, which was filled with real examples, described the lessons learned in a 3-year project I was involved in as a Software Architect, and which had its first release this last summer and has seen early success in the customer organization. The compilation of lessons include the feedback of the developers in the team, and was a huge learning experience.</p>
<p>The slides include architecture aspects, technical aspects, as well as negotiation and functional hints. It’s not meant to be an absolute best-practices architecture guide, it’s only the result of this very specific project.</p>
<p><a href="http://www.slideshare.net/slidejota/20141115-architecting-a-large-software-project-lessons-learned-joo-pedro-martins-dist" target="_blank">You can check/download the deck here</a>.</p>
<p>Special thanks to NetPonto for the invitation, and to the audience for the participation and great feeedback in this LONG session :).</p>
<p>The post <a href="https://blogit.create.pt/jota/2014/12/01/architecting-a-large-software-project-lessons-learned-netponto-50th-meeting-lisboa-22nov-2/">«Architecting a Large Software Project &#8211; Lessons Learned» @ Netponto 50th Meeting &#8211; Lisboa 22/Nov</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/jota/2014/12/01/architecting-a-large-software-project-lessons-learned-netponto-50th-meeting-lisboa-22nov-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Microsoft Developer TechRefresh (Lisboa 2013.09.24)–“Power your Website with Windows Azure”</title>
		<link>https://blogit.create.pt/jota/2013/10/02/microsoft-developer-techrefresh-lisboa-2013-09-24-power-your-website-with-windows-azure/</link>
					<comments>https://blogit.create.pt/jota/2013/10/02/microsoft-developer-techrefresh-lisboa-2013-09-24-power-your-website-with-windows-azure/#respond</comments>
		
		<dc:creator><![CDATA[Jota]]></dc:creator>
		<pubDate>Wed, 02 Oct 2013 10:32:41 +0000</pubDate>
				<category><![CDATA[Azure Web Sites]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Microsoft Azure]]></category>
		<category><![CDATA[MsdnArquitecturaPT]]></category>
		<category><![CDATA[Posts in English]]></category>
		<guid isPermaLink="false">http://blogcreate.azurewebsites.net/joaomartins/?p=121</guid>

					<description><![CDATA[<p>Last tuesday I presented a session at another local Microsoft event, this time focused on Azure Websites and the new features announced at Build 2013 (which I attended) and since then. The session was mostly demo-based, and included the “traditional” WebMatrix/WordPress demo, but with the added value of demoing a content migration from another blog [&#8230;]</p>
<p>The post <a href="https://blogit.create.pt/jota/2013/10/02/microsoft-developer-techrefresh-lisboa-2013-09-24-power-your-website-with-windows-azure/">Microsoft Developer TechRefresh (Lisboa 2013.09.24)–“Power your Website with Windows Azure”</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Last tuesday I presented a session at another local Microsoft event, this time focused on Azure Websites and the new features announced at <strong>Build 2013</strong> (which I attended) and since then.</p>
<p>The session was mostly demo-based, and included the “traditional” <strong>WebMatrix/WordPress demo</strong>, but with the added value of demoing a content migration from another blog engine. After this I did a <strong>continuous integration, test and automated deployment demo</strong>. Didn’t have the time to show custom deployment scripts, but it was the star of the show, in my opinion. It’s easy to get it working and covers a large percentage of Webdev use cases. The following demo was simply showing how to <strong>associate a custom domain</strong> to a web site, and what is possible in terms of SSL (both kinds, SNI&amp;IP).</p>
<p>The next demo was related to a request and the need to clarify that you can <strong>host wcf web services in an Azure WebSite</strong>, and for this demo I also showed , especially helpful for diagnostics and operations.</p>
<p>I ended the session talking about architecture, scaling, service tiers and pricing, and a Q&amp;A. There were several questions, perhaps the most relevant being about<strong> Azure Web Sites vs Azure Web Roles</strong>. The stronger scaling possibilities, and running setup scripts, are strong arguments for Web Roles, the simplicity and more focused web offering, for Web Sites. This would be my choice, in general.</p>
<p>Another interesting event, with good session feedback.</p>
<p>The post <a href="https://blogit.create.pt/jota/2013/10/02/microsoft-developer-techrefresh-lisboa-2013-09-24-power-your-website-with-windows-azure/">Microsoft Developer TechRefresh (Lisboa 2013.09.24)–“Power your Website with Windows Azure”</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/jota/2013/10/02/microsoft-developer-techrefresh-lisboa-2013-09-24-power-your-website-with-windows-azure/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AzureConf2013 Today!</title>
		<link>https://blogit.create.pt/jota/2013/04/23/azureconf2013-today/</link>
					<comments>https://blogit.create.pt/jota/2013/04/23/azureconf2013-today/#respond</comments>
		
		<dc:creator><![CDATA[Jota]]></dc:creator>
		<pubDate>Tue, 23 Apr 2013 12:37:55 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Microsoft Azure]]></category>
		<category><![CDATA[MsdnArquitecturaPT]]></category>
		<category><![CDATA[Posts in English]]></category>
		<guid isPermaLink="false">http://blogcreate.azurewebsites.net/joaomartins/?p=141</guid>

					<description><![CDATA[<p>AzureConf, and online free event on Windows Azure, will be held today, a few hours from now. More information at the events website here. I am especially looking forward to the IaaS, Mobile and Media Services sessions, where we have some customer scenarios ongoing. Also interesting and related to something I have in hands at [&#8230;]</p>
<p>The post <a href="https://blogit.create.pt/jota/2013/04/23/azureconf2013-today/">AzureConf2013 Today!</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>AzureConf, and online free event on Windows Azure, will be held <strong><font size="3">today</font></strong>, a few hours from now. More information at the events website <a href="http://www.windowsazureconf.net/schedule/">here</a>. I am especially looking forward to the IaaS, Mobile and Media Services sessions, where we have some customer scenarios ongoing.</p>
<p>Also interesting and related to something I have in hands at the moment is Nuno Godinho’s post “<a href="http://msmvps.com/blogs/nunogodinho/archive/2013/04/22/lessons-learned-taking-the-best-out-of-windows-azure-virtual-machines.aspx">Lessons Learned: Taking the best out of Windows Azure Virtual Machines</a>”. Interesting feedback from using IaaS. SharePoint Server has been implemented everywhere in the last few years. Azure IaaS is especially interesting for these scenarios.</p>
<p>The post <a href="https://blogit.create.pt/jota/2013/04/23/azureconf2013-today/">AzureConf2013 Today!</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/jota/2013/04/23/azureconf2013-today/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
