如何用ServBay快速构建下一代GraphQL应用

在本指南中,我们将深入探讨如何利用ServBay一站式环境和Docker,构建可扩展的GraphQL微服务。我们将从微服务架构和GraphQL的基础知识入手,逐步深入到如何利用现代工具和技术构建、容器化并部署我们的微服务。

理解微服务架构

微服务架构是一种将应用程序构建为一组小服务的方法,每个服务运行在其自己的进程中,并通过轻量级机制(通常是HTTP资源API)进行通信。这些服务围绕业务能力构建,可以独立部署,由完全自治的团队维护。在我们深入构建微服务的过程之前,了解 GraphQL 在此架构中的作用非常重要。

什么是GraphQL?

GraphQL是由Facebook开发的一种数据查询和操作语言,用于API,并作为运行时用于执行这些查询的服务器端软件的一种方式。它提供了一种更高效、强大和灵活的替代REST的方法。

主要功能包括

声明式数据获取:使用 GraphQL,客户端可以在查询中精确指定所需的数据,包括字段和关系。这消除了传统 REST API 经常出现的数据过度获取和获取不足的问题。

高效的类型系统: GraphQL 拥有强大的类型系统,可以在 API 中定义数据的结构和关系。

高效的数据加载功能: GraphQL 使客户端能够在单个请求中检索多个资源。这减少了到服务器的往返次数,提高了效率并减少了延迟。

如何构建GraphQL微服务

在构建GraphQL微服务时,我们将遵循以下步骤:

第1步:使用ServBay设置环境

不同于传统的手动安装Node.js,ServBay提供了预配置的环境,包括各个版本的Node.js,使得开发者可以快速启动项目。

去ServBay官网下载并创建账户。

创建一个新项目,选择Node.js环境。ServBay将自动为您的项目配置所需的Node.js环境。Node.js安装部署指南

第2步:初始化Apollo服务器

Apollo Server是一个开源的、与GraphQL规范兼容的服务器,它简化了GraphQL API的构建。安装Apollo Server和所需依赖:

npm install apollo-server graphql

然后,创建一个简单的Apollo Server实例:

const { ApolloServer, gql } = require('apollo-server');// 定义schema
const typeDefs = gql`type Query {hello: String}
`;// 定义resolver
const resolvers = {Query: {hello: () => 'Hello world!',},
};// 创建Apollo服务器实例
const server = new ApolloServer({ typeDefs, resolvers });// 启动服务器
server.listen().then(({ url }) => {console.log(`🚀 Server ready at ${url}`);
});

第3步:配置Sequelize ORM

Sequelize是一个基于Promise的Node.js ORM,支持Postgres、MySQL、MariaDB、SQLite和Microsoft SQL Server。它具有强大的事务支持、关联关系、预加载和惰性加载、读取复制等功能。

const { Sequelize } = require('sequelize');// 连接数据库
const sequelize = new Sequelize('database', 'username', 'password', {host: 'localhost',dialect: /* 选择 'mysql' | 'mariadb' | 'postgres' | 'mssql' 其中之一 */
});// 测试连接
try {await sequelize.authenticate();console.log('Connection has been established successfully.');
} catch (error) {console.error('Unable to connect to the database:', error);
}

第4步:创建数据模型

在Sequelize中定义模型,模型是代表数据库中表的抽象:

const User = sequelize.define('User', {// 定义模型属性firstName: {type: DataTypes.STRING,allowNull: false},lastName: {type: DataTypes.STRING// allowNull 默认为 true}
}, {// 其他模型选项
});

第5步:定义GraphQL模式

GraphQL模式是你的数据和操作(查询和变更)的类型系统的描述。它是客户端和服务器之间通信的基础。

type Query {users: [User]
}type User {id: ID!firstName: String!lastName: String
}

第6步:为GraphQL API创建解析器

解析器是一个函数,它负责为每个从客户端发来的GraphQL查询提供响应。

const resolvers = {Query: {users: async () => await User.findAll(),},
};

使用Docker容器化

Docker是一个开源开发平台,提供容器化技术,用于构建应用程序及其依赖项并将其打包到可移植映像中。

然后,无论底层基础设施如何,这些映像都可以作为独立的组件在隔离的容器环境中执行,并配备所需的计算资源。

使用 Docker(或任何其他容器化技术),您可以将每个微服务封装在其自己的容器中,从而提供高级别的隔离。

每个容器作为一个独立的单元运行,具有自己的依赖项和运行时环境。

此外,您可以轻松扩展微服务。您可以通过启动微服务的多个实例来水平扩展单个容器来处理增加的负载。

现在要开始使用 Docker,请在本地计算机上下载并安装Docker Desktop 。

Docker化您的应用程序意味着将其打包成一个容器,这个容器包含了应用程序运行所需的一切:代码、运行时、库、环境变量和配置文件。

Dockerizing GraphQL微服务

要使用 Docker 容器化您的 GraphQL API,您需要创建一个 Dockerfile。该文件包含 Docker 引擎构建 Docker 映像时所遵循的一系列指令,包括应用程序的源代码及其依赖项

创建一个Dockerfile

FROM node:14
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
CMD ["node", "server.js"]

现在我们已经完成了容器化 GraphQL API 的第一步。下一步是配置数据源,即PostgreSQL数据库。

我们将利用现有的 PostgreSQL 数据库应用程序映像,而不是在本地安装和配置它,该映像将在单独的 Docker 容器上运行。

这种方法提供了多种好处,包括简化的依赖关系管理和确保跨各种开发环境的一致设置。

为了有效管理 GraphQL API 和 PostgreSQL 数据库容器,我们将使用Docker Compose。

version: '3'
services:web:build: .ports:- "4000:4000"db:image: postgresenvironment:POSTGRES_PASSWORD: example

此 Docker compose 配置将管理两个服务:服务器(GraphQL API 映像容器)和 db(PostgreSQL 数据库映像容器)。

服务器服务将使用提供的 Dockerfile 构建其映像,而数据库服务将使用官方 PostgreSQL 映像。

此配置的一个重要方面是服务之间的依赖关系。

具体来说,API 服务依赖于数据库服务——这确保服务器在开始允许 API 无缝连接到 PostgreSQL 数据库之前等待数据库完全初始化。

要构建映像并启动容器,请运行以下命令:

docker compose up

最后,您现在可以继续测试用户 API 服务的功能。为此,只需导航到 即可在浏览器中访问 Apollo Server API 沙箱http://localhost:<port>/graphql

进入沙箱后,您可以发送请求并观察响应。例如,您可以利用突变添加新用户的详细信息createUser

以下是用户 API 测试的示例:

通过执行这些步骤,您应该能够成功测试用户 API 服务的功能。

部署微服务

构建应用程序映像后,您可以将它们推送到 Docker Hub,它是一个类似于 GitHub 的集中存储库,但专门为 Docker 映像设计。

Docker Hub 为您的映像提供安全的存储解决方案,确保它们可以轻松地跨不同环境和平台进行部署。与 GitHub 类似,Docker Hub 与各种部署平台无缝集成,包括 AWS 等流行的云服务。

这种集成简化了部署过程,使您可以轻松地将 Docker 化应用程序部署到生产环境。

要将 Docker 映像推送到 Docker Hub,请按照以下步骤操作。

转至Docker Hub、注册并登录到您帐户的概述页面。

单击创建存储库按钮。为您的存储库提供名称并选择其可见性(公共或私有)。然后,单击“创建”

通过运行以下命令登录到您的 Docker 帐户:

docker login 出现提示时提供您的 Docker 用户名和密码。

更新 Docker 映像名称以匹配格式:<your docker username>/<repo name>通过运行以下命令。

docker tag <image-name> <your-docker-username>/<repo-name>

最后将Docker镜像推送到Docker Hub,

docker push <your-image-name>/<repo-name>

就是这样!您已成功将镜像推送到 Docker Hub。

容器编排平台

容器编排平台(例如 Kubernetes)可以简化容器化应用程序的管理。

它们提供了自动化容器部署、扩展和监控的工具。这简化了管理大规模微服务应用程序的复杂性。

它们的一些主要功能包括:

自动化部署:编排平台自动部署容器,无需人工干预,确保部署一致可靠。

动态扩展:根据需求动态调整容器数量,优化资源利用率,保证应用性能。

全面监控:这些平台提供对容器运行状况、性能和资源消耗的实时监控,使管理员能够主动识别和解决问题。

要了解更多信息,您可以首先浏览Kubernetes官方文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/620570.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

举个栗子!Tableau 技巧(270):用 Lookup 函数创建多 KPI 文本表

在 Tableau 中&#xff0c;文本表常用于呈现明细数据。但其实&#xff0c;数据粉如果想在同一视图中查看多个数据指标&#xff0c;也可以用到文本表。 如下示例&#xff0c;是不是很直观的就可以查看&#xff1a;不同区域随时间推移的数据指标情况呢&#xff1f; 如何在 Tablea…

前后端分离vue.js+nodejs新闻文章发布论坛网站系统44x94

Vue&#xff1a; Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的工具链以及…

数据库SQL语言实战(二)

目录 检索查询 题目一 题目二 题目三 题目四 题目五 题目六 题目七 题目八 题目九&#xff08;本篇最难的题目&#xff09; 分析 实现&#xff08;两种方式&#xff09; 模板 总结 检索查询 按照要求查找数据库中的数据 题目一 找出没有选修任何课程的学…

计算机毕业设计 工厂车间设备管理系统php+vue.js

该系统是以PHP为主要开发语言&#xff0c;集合MySQL数据库技术构建基于Web的以信息为目标的&#xff0c;动态的交互平台 PHP与Apache&#xff0c;MySQL的组合虽然有着诸多优势&#xff0c;但三种出自不同作者的开源软件要能很好的配合工作&#xff0c;需要很多手工配置&#x…

图解数学:拉格朗日松弛方法的直观理解

昨晚写了拉格朗日松弛方法的原理分析&#xff0c;今天意犹未尽&#xff0c;图解一下&#xff0c;从直观上进一步理解这种方法。 一、一个简单例子 我们先来看一个简单的例子&#xff0c;下面数学规划问题没有约束条件&#xff1a; min ⁡ f ( x ) − x 2 8 x − 10 \begin…

velero备份恢复k8s集群 —— 筑梦之路

官网&#xff1a;Velero 简介 Velero 是vmware开源的一个云原生的灾难恢复和迁移工具&#xff0c;它本身也是开源的,采用Go语言编写&#xff0c;可以安全的备份、恢复和迁移Kubernetes集群资源数据&#xff1b;官网https://velero.io/。 Velero 是西班牙语意思是帆船&#xf…

halcon 3.2标定相机

参考《solution_guide_iii_c_3d_vision.pdf》 3.2.2.2 Which Distortion Model to Use 选用何种畸变模型 对于面阵相机&#xff0c;halcon中两种畸变模型&#xff1a;The division model and the polynomial model&#xff08;差分模型和多项式模型&#xff09;&#xff0c;前…

电子元器件线上交易商城搭建的价值和必要性-加速度jsudo

随着科技的飞速发展&#xff0c;电子元器件行业正迎来前所未有的变革。为了满足市场对于电子元器件采购的便捷性、高效性和多样性的需求&#xff0c;电子元器件商城的开发显得尤为重要。本文将探讨电子元器件商城开发的重要性、主要功能以及它如何助力行业发展。 电子元器件商城…

更优性能与性价比,从自建 ELK 迁移到 SLS 开始

作者&#xff1a;荆磊 背景 ELK (Elasticsearch、Logstash、Kibana) 是当下开源领域主流的日志解决方案&#xff0c;在可观测场景下有比较广泛的应用。 随着数字化进程加速&#xff0c;机器数据日志增加&#xff0c;自建 ELK 在面临大规模数据、查询性能等方面有较多问题和挑…

3d动画如何连续渲染?云渲染批量渲染3d动画

在3D动画的生产过程中&#xff0c;从多个角度渲染同一场景既是时间消耗大户&#xff0c;也对设计人员的技术能力提出了高要求。好在云渲染技术的进步为这一挑战提供了高效的解决办法。通过利用云渲染服务进行批量渲染&#xff0c;设计师们可以大幅节约时间并提升工作效率。 3d动…

YooAsset快速入门

文章目录 YooAsset快速入门指南&#xff1a;YooAsset学习核心要掌握的要点主要包括以下几个方面&#xff1a;基于YooAsset进行游戏资源管理的应用实例 YooAsset快速入门指南&#xff1a; YooAsset是一款专为游戏开发设计的资产管理和分发系统&#xff0c;它能够帮助开发者高效…

探索顶级短视频素材库:多样化选择助力创作

在数字创作的浪潮中&#xff0c;寻找优质的短视频素材库是每位视频制作者的必经之路。多种短视频素材库有哪些&#xff1f;这里为您介绍一系列精选的素材库&#xff0c;它们不仅丰富多样&#xff0c;而且高质量&#xff0c;能极大地提升您的视频创作效率和质量。 1.蛙学网 蛙学…