如何利用Kubernetes编排实现Node.js程序的微服务化

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文着重介绍了微服务架构的某些细节,微服务其实也适用于Node.js应用程序。本文还介绍了如何利用容器和编排来实现Node.js的微服务化。

前言
本文着重介绍了微服务架构的某些细节,微服务其实也适用于Node.js应用程序。本文还介绍了如何利用容器和编排来实现Node.js的微服务化。

如今,大家都在谈论调度,微服务,Docker,以及Kubernetes如何改变编排领域。那么,在生产中部署Node.js应用程序意味着什么?有哪些是值得关注的?

Node.js微服务化

为了理解为什么每个人都想谈论微服务,我们需要了解应用程序开发的前身——The Monolith。

单体应用
如果你的应用程序是单体应用形式的,那么系统的所有代码都在一个代码库中运行,并生成一个入口。一个简单的npm start就可以启动应用程序,Monolith的核心是保持一切在一起运行。

它仍然是应用程序敏捷开发的好选择,但这样做的缺点是当你想要经常发布时,你将不得不重新部署整体,而无法通过仅更换组件来完成部署的更新。

微服务
开发应用程序的另一种方法是将你的代码库分解成较小的块。每个块都是一个服务。所有这些服务将一起为最终用户提供与单块相同的功能。

启动应用程序不仅仅是简单的npm start,你需要独立启动每个服务。当你将你的整体拆分成更小的块或你的应用程序是由不同的服务组成,这就是微服务架构。

至于上行方式,微服务器允许你经常发布,并仅重新部署系统的更改部分。但还存在一个问题,就是如何编排。有效的编排可以使整个流程变得完整而高效。

非单体应用的编排问题
如果你的Node.js应用程序正在使用非单体方法,将多个服务组合到单个应用程序中,则需要一种编排方式。Docker的优势就在这里凸显了!使用容器,你可以隔离每个进程(= service = npm start)并给每个进程自己的事件循环。

Node上的事件循环
所有的Magic 节点都发生在Node的事件循环中。Node正在使用事件驱动的范例来执行事件循环中的所有Magic节点。

在计算机编程中,事件驱动编程是一种编程范例,程序的流程由诸如用户动作,传感器输出或来自其他程序/线程的消息等事件决定。事件驱动的编程是用于图形用户界面和其他应用程序中的主要范例,其中以执行响应输入的某些动作为中心。

一旦检测到事件,就有一个中心机制来侦听事件并调用一个回调函数。这是Node的事件循环的基本原理。

这里有一些伪代码来演示Node的事件循环如何:
11

Node的事件循环是单线程事件循环。这可能会导致性能问题。例如,当你处于负载状态或负载大量CPU工作时,如何使我们的Node应用程序更具性能?这时候就需要微服务和容器来进行抢救了!

集中化每个服务
在生产中运行微服务的第一步是集中化每个服务。以此Express.JS为例:
22

要在一个孤立的过程中运行它,我们需要一个Dockerfile来容纳程序:
33

这时容器最大的好处是你可以通过启动更多容器并在集群周围进行调度来扩展服务和Node的事件循环的方式。例如,如果你的API部分负载较重,则可以扩展该部分并更有效地利用资源。如果压力正常,你可以缩小。

解决方案
正如我们之前所说的那样,将整体拆分成面向服务的体系结构的好处是,每个服务都可以有一个隔离的事件循环。因为每个Node进程都在容器中运行隔离!

当你希望在IT架构的改造中成功使用Node.js,以下四个阶段可以为你提供思路:

编码你的服务并提交更改;
建立并测试你的服务;
配置你的基础架构;
在生产中部署,运行和维护你的服务。

关于Ghostcloud
Ghostcloud(中文名:精灵云)坐落于成都天府软件园,是成都高新区重点扶持企业,国内首批从事容器虚拟化研发的企业,是西南地区唯一一家基于Docker的云计算服务商,为企业级行业客户提供针对互联网化、私有云管理平台、大数据业务基础架构的平台服务。
Ghostcloud因容器技术而生,以最新容器技术Docker为基础,为适应不同行业客户需求,全自主研发了一套调度引擎框架Newben,且全方位适配Kubernetes主流开源调度引擎,也是国内率先实现双调度引擎的企业,是一流的企业级容器云服务专家。Ghostcloud推出了企业级容器云PaaS/CaaS平台,命名为EcOS(EnterpriseContainer Operation System)。Ghostcloud将EcOS平台与微服务/DevOps相融合,运用至企业IT系统的全生命周期的开发、测试、运维及发布流程中,致力于为多个领域企业向“互联网+”转型提供针对互联网化、私有云管理平台、大数据业务基础架构的平台服务,帮助企业级客户降低成本、提升效率、简化运维及产品部署,并提升系统的可靠性和安全性。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
Prometheus Kubernetes Cloud Native
《Kubernetes 入门:构建、部署和管理你的第一个 K8s 集群》
《Kubernetes 入门:构建、部署和管理你的第一个 K8s 集群》
649 0
|
7月前
|
消息中间件 监控 JavaScript
Node.js中的微服务架构:构建与实践
【4月更文挑战第30天】本文探讨了在Node.js中构建微服务的实践,包括定义服务边界、选择框架(如Express、Koa或NestJS)、设计RESTful API、实现服务间通信(HTTP、gRPC、消息队列)、错误处理、服务发现与负载均衡,以及监控和日志记录。微服务架构能提升应用的可伸缩性、灵活性和可维护性。
|
7月前
|
JavaScript NoSQL Redis
深入浅出:使用 Docker 容器化部署 Node.js 应用
在当今快速发展的软件开发领域,Docker 作为一种开源的容器化技术,已经成为了提高应用部署效率、实现环境一致性和便于维护的关键工具。本文将通过一个简单的 Node.js 应用示例,引导读者从零开始学习如何使用 Docker 容器化技术来部署应用。我们不仅会介绍 Docker 的基本概念和操作,还会探讨如何构建高效的 Docker 镜像,并通过 Docker Compose 管理多容器应用。此外,文章还将涉及到一些最佳实践,帮助读者更好地理解和应用 Docker 在日常开发和部署中的强大功能。
1375 0
|
敏捷开发 运维 资源调度
手把手搞定渐进式 Node FaaS
手把手搞定渐进式 Node FaaS
311 0
BXA
|
存储 弹性计算 Kubernetes
解析Kubernetes的设计与实现原理
Kubernetes 是一种用于自动化部署、扩展和管理容器化应用程序的开源平台。它通过提供跨主机集群的容器协调和管理服务,实现了高可用性和弹性伸缩的容器集群管理。
BXA
210 0
|
Kubernetes 安全 虚拟化
KUBERNETES01_部署方式的变迁、为什么用Kubernetes、工作原理、组件交互原理、动画演示(一)
KUBERNETES01_部署方式的变迁、为什么用Kubernetes、工作原理、组件交互原理、动画演示(一)
140 0
KUBERNETES01_部署方式的变迁、为什么用Kubernetes、工作原理、组件交互原理、动画演示(一)
|
Kubernetes Cloud Native 前端开发
前端云原生,以 Kubernetes 为基础设施的高可用 SSR(Vue.js) 渲染微服务初探(开源 Demo)
前端云原生,以 Kubernetes 为基础设施的高可用 SSR(Vue.js) 渲染微服务初探(开源 Demo)
294 0
前端云原生,以 Kubernetes 为基础设施的高可用 SSR(Vue.js) 渲染微服务初探(开源 Demo)
|
存储 Kubernetes 调度
Kubernetes 有如下几个核心的功能:
Kubernetes 有如下几个核心的功能:
123 0
|
Kubernetes 前端开发 Docker
KUBERNETES01_部署方式的变迁、为什么用Kubernetes、工作原理、组件交互原理、动画演示(五)
KUBERNETES01_部署方式的变迁、为什么用Kubernetes、工作原理、组件交互原理、动画演示(五)
118 0
KUBERNETES01_部署方式的变迁、为什么用Kubernetes、工作原理、组件交互原理、动画演示(五)
|
Kubernetes 监控 前端开发
KUBERNETES01_部署方式的变迁、为什么用Kubernetes、工作原理、组件交互原理、动画演示(四)
KUBERNETES01_部署方式的变迁、为什么用Kubernetes、工作原理、组件交互原理、动画演示(四)
154 0
KUBERNETES01_部署方式的变迁、为什么用Kubernetes、工作原理、组件交互原理、动画演示(四)