Een basisservice instellen

Voltooid

Omdat cloudeigen toepassingen geen specifieke technologieselectie vereisen voor hun afzonderlijke onderdelen, kunt u hun implementatiedetails baseren op uw voorkeuren. Bovendien kunt u met veel cloudaanbiedingen zoals Azure Database for PostgreSQL dezelfde opensource-versies van technologieën gebruiken waarmee u bekend bent. Ze gebruiken ook het onderliggende platform om administratieve overhead te minimaliseren die is gekoppeld aan hun gebruik.

U profiteert van deze voordelen bij het bouwen van uw oplossing. Om te beginnen implementeert u een express.js-webservice met REST API-routes die toegang bieden tot de zojuist geïmplementeerde PostgreSQL-database.

Wat zijn de voordelen van modulair ontwerp?

Het modularisatieprincipe van het servicesmodel biedt een hoge mate van scheiding tussen afzonderlijke services. U kunt elke service onafhankelijk upgraden, implementeren, schalen en opnieuw opstarten, zonder dat dit van invloed is op de beschikbaarheid of prestaties van andere services. Op zijn beurt bevordert dit de toepassing van DevOps-procedures voor de levenscyclus van uw toepassingen. Het resultaat is versnelde nieuwe functiereleases die worden gefaciliteerd door kleine, frequente en incrementele wijzigingen.

Door de losse koppeling van services kunt u de onderliggende technologie wijzigen zonder dat u belangrijke herschrijven van de code van de hele toepassing afdwingt. De Express.js-back-endservice kan bijvoorbeeld worden gecontaineriseerd en geïmplementeerd in een Kubernetes-cluster, zodat deze dynamisch kan worden geschaald op basis van de vraag. Een ander alternatief is het implementeren als een op containers gebaseerde of op code gebaseerde Azure-app Service-web-app, die ook ondersteuning biedt voor automatisch schalen.

Op dezelfde manier kunt u de back-endservice wijzigen om verbinding te maken met een andere database van keuze, mogelijk afhankelijk van dezelfde set bibliotheken. De meest voorkomende object-relationele mapper-bibliotheken die beschikbaar zijn met Node.js, zoals Prisma of Sequelize, ondersteunen een reeks relationele databaseproducten. Deze omvatten PostgreSQL, MariaDB en Microsoft SQL Server.

Een ander voordeel van het modulaire ontwerp is de uitbreidbaarheid. U hebt de mogelijkheid om een ander onderdeel toe te voegen, zoals een beheerservice die toegankelijk is met een Next.js-web-app en deze in een container te plaatsen zonder belangrijke wijzigingen in de bestaande toepassing.

The high-level architecture of the sample basic service.

Een basisservice implementeren

De twee architectuurpatronen die doorgaans fungeren als basis voor het bouwen en optimaliseren van services zijn domeingestuurd ontwerp (DDD) en Command and Query Responsibility Segregation (CQRS). Deze patronen beïnvloeden ook de manier waarop cloudeigen toepassingen worden gemodelleerd.

DDD is een softwareontwikkelingsbenadering die zich richt op de functionaliteit van de toepassing om grenzen tussen services te definiëren. CQRS wordt meestal gecombineerd met DDD. Het doel is om de traditionele op CRUD gebaseerde benadering (create, read, update en delete) te vervangen, die afhankelijk is van één interface voor alle gegevensbeheertaken. In plaats daarvan scheidt CQRS lees- en updatebewerkingen voor een gegevensarchief. Dit biedt een andere isolatielaag die overeenkomt met de premisse achter DDD.

Het doel is om de bestaande express.js-webservice te wijzigen om toegang te bieden tot een PostgreSQL-database. Express.js is een opensource-framework voor back-endwebtoepassingen voor Node.js. Het vereenvoudigt het bouwen van webtoepassingen en API's. Node.js is een JavaScript-runtime-engine voor het bouwen van client- en servertoepassingen. Express.js heeft een architectuur op basis van modules die de implementatie van een breed scala aan taken vereenvoudigt. Dit zijn onder andere traditionele webontwikkeling en toegang tot databases zoals MongoDB en PostgreSQL.

U kunt meerdere methoden gebruiken voor toegang tot een PostgreSQL-database vanuit Express.js-toepassingen. De populairste manieren zijn het gebruik van object-relationele mapper-bibliotheken, waarmee programmatische constructies worden toegewezen aan het bijbehorende databaseschema. Deze benadering vereenvoudigt de draagbaarheid en biedt een abstractielaag tussen de werkelijke databaseobjecten en hun servicegebaseerde weergave.

De methoden die door de Express.js-toepassing worden geïmplementeerd, worden weergegeven via routes, waarmee wordt gedefinieerd hoe de eindpunten van de toepassing reageren op clientaanvragen. Wanneer u deze implementeert, moet u overwegen de principes van CQRS toe te passen, hoewel dit mogelijk niet van toepassing is op basisservices vanwege een verhoogde complexiteit.