nodejs微服务:微服务集群

如何构建一个 NodeJS 影院微服务并使用 Docker 部署 微服务是一个单独的自包含单元,与其他许多单元一起构成一个大型应用程序。通过将应用程序拆分为小单元,每个部分都可以独立部署和扩展,可以由不同的团队和不同的编程语言编写,并且可以单独进行测试。微服务架构意味着应用程序由许多较小的、独立的应用程序组成,这些应用程序能够在自己的内存空间中运行,并且可以在可能的多个独立计算机上独立扩展。应用程序启动更快,这使得开发人员更具生产力,并加快了部署速度。每个服务可以独立于其他服务部署 — 更容易频繁部署服务的新版本。更容易扩展开发,也可能具有性能优势。 阅读详情

搭建Grpc微服务集群

  • 某单一的微服务,比如:micro_a, 部署在一台机器上挂掉后, 不管是微服务机器挂掉
  • 还是consul_client挂掉,都会导致整个微服务不可访问,这时候我们就需要进行微服务的集群
  • 也就是 micro_a 的微服务不能部署到一台机器上,比如拷贝出 micro_a_01, micro_a_02等
  • 同样,部署在不同机器上的 micro_a_01 的服务连的 consul_client 也不是一台机器
  • 而是多台(这里借助之前的consul集群实现)
  • Grpc微服务集群主要实现的是微服务的负载均衡,实现同样的微服务部署在不同的服务器的功能
    • 同一个微服务的不同应用使用同样的注册名
    • 同一个微服务的不同应用注册服务的时候使用不同的id,不同的端口或者ip
  • 微服务代码如下

1 )微服务1

consul.agent.service.register({
    id: "micro_a_01", // 这里id不同
    name: "micro_a", // 这里服务名保持相同
    address: "xx.xx.xx.xx", // 尽可能ip地址不同
    port: 8000,
    check: { // 配置健康检查
        tcp: "xx.xx.xx.xx:8000", // ip或端口不同,尽可能ip不同,部署在不同机器上
        interval: '10s',
        timeout: '5s',
    }
},(err)=>{
    if (err) throw err;
    console.log("micro_a服务注册consul成功 => micro_a_01")
})

2 ) 微服务2

consul.agent.service.register({
    id: "micro_a_02", // 这里id不同
    name: "micro_a", // 这里服务名保持相同
    address: "yy.yy.yy.yy", // 尽可能ip地址不同
    port: 8080,
    check: { // 配置健康检查
        tcp: "yy.yy.yy.yy:8080", // ip或端口不同,尽可能ip不同,部署在不同机器上
        interval: '10s',
        timeout: '5s',
    }
},(err)=>{
    if (err) throw err;
    console.log("micro_a服务注册consul成功 => micro_a_02")
})
  • 当一台微服务挂掉,我们怎么让服务仍然正常运行,需要在客户端调用微服务前进行负载均衡的处理

  • consul 负载均衡微服务代码如下

    // 下面用async await 写法更好,但仅仅作为一个演示, 就不改了
    consul.health.service("micro_a").then((services) => {
        const servicesList = []; // 过滤存活的微服务
        for (let i = 0; i < services.length; i++) {
            if(services[i].Checks[1].Status == "passing") {
                servicesList.push(services[i])
            }
        }
        if (!servicesList.length) {
          console.log('服务已经全部挂掉 ~')
          return
        }
        const index = Math.floor(Math.random() * servicesList.length) // 在存活的服务中,随机选择一个
        const { Address, Port } = servicesList[index].Service
        const host = Address + ":" + Port
        // 模拟调用微服务micro_a的某个接口
        const microAClient = new microAProto.microA(host, grpc.credentials.createInsecure())
        microAClient.getSomeOne({ id: 1 }, (err, data) => {
          if (err) throw err;
          console.log(data)
        })
    })
    
  • 这样,微服务集群已经配置好了,但是上述调用写法可以抽离出一个公共的方法包出来

  • 在调用前基于健康的服务进行随机选择微服务机器进行调用,实现了微服务集群的负载均衡

  • 我们同时借助了consul集群,保证了服务的稳定运行,但是我们还应当实现API网关的集群

  • 正常我们调用微服务,一种是前端直接调用,前端直接调用会走API网关,也就是提供一个接口,接口来调用微服务
  • 上面这个图示架构中,所有的微服务调用前都要设计一层API网关,由网关来调用微服务
  • 而consul的客户端集群也实现了,在consul客户端只进行了转发,而consul服务端涉及保存配置信息和查询服务
  • consul客户端一般不容易挂掉,但是我们也要实现它的集群,一般,一个micro_a服务和一个consul_client一一对应
  • 比如:micro_a_01 对应 consul_client_01, micro_a_02 对应 consul_client_02, 都是micro_a的服务,部署在01和02机器上
  • 都是consul_client也部署到不同的01和02机器上,只要一个链路挂掉,其他链路仍可保持访问畅通
  • 而且在API网关层也实现了集群,一个网关对应一个consul_client, 与consul_client与micro_a服务是同样的设计
  • 当客户端访问API网关前再加上一层Nginx,可以负载均衡不同的网关
NodeJS 集群模块: 为App创建集群实例 Node.js默认情况下是单线程的运行时。这意味着运行中的 Node.js 仅利用计算机的一个核心(CPU 单元),即使任何一台计算机都有多个处理器。例如,如果您在一台有 4 个处理器的计算机上运行 Node.js 应用程序,则只使用其中一个。然而,Node.js 允许您使用集群,充分利用多核处理器,并将您的 Node.js 应用程序扩展到新的水平。 阅读详情

相关推荐

[Kubernetes]2. k8s集群中部署基于nodejs golang的项目以及Pod、Deployment详解

k8s集群中部署基于nodejs golang的项目以及Pod、Deployment详解

资深系统架构,深耕高并发研发与 AI 大模型工程化落地。技术栈以 Python (AI/NLP/RAG/Agent) 与 Golang (高并发架构) 为双核心,兼具 PHP 大型应用经验。专注算法落地、复杂系统设计及团队技术赋能 2399

在 Node JS 中实现微服务架构

🙂正如我们在之前的博客“单体与微服务:一种实用方法”中讨论的那样。但是今天我们要在 NodeJS 中实现微服务架构。👉您可以使用任何技术,如 Spring、Python 等。但我们将使用 NodeJS 进行演示。📍。

u010291330的博客 2724

使用nodejs 搭建微服务网关

淘宝镜像源: npminstall-gcnpm--registry=http://registry.npm.taobao.org node.js 是一个基于Chrome浏览器的V8引擎开发的高性能JavaScript引擎。 nodejs 提供了“事件驱动”模型,可将当前事件加入到事件队列中去轮询。 nodejs 提供了“异步非阻塞I/O”模型. ...

phpfzh的博客 6812

nodejs微服务:单体架构与微服务架构

微服务是微服务架构具体的实现方案,是通过微服务架构设计方法拆分出来的一个独立的组件化的小应用。

Wang的专栏 1657

保姆级教程:用HFSS 2023 R2搞定GPS右旋圆极化微带天线(从建模到优化全流程)

本文提供了一份详细的HFSS 2023 R2教程,指导读者从零开始设计GPS右旋圆极化微带天线。涵盖建模、仿真和优化全流程,特别关注圆极化特性的实现与优化,帮助工程师快速掌握天线设计的关键技术。

weixin_42557830的博客 171

STM32独立实现CANOpen主机功能:从零构建轻量级控制方案

本文详细介绍了如何在STM32上不依赖CanFestival库,从零构建一个轻量级的CANOpen主机方案。文章深入剖析了CANOpen主机的三大核心功能——NMT网络管理、SDO参数配置与PDO过程数据交换,并提供了从硬件准备、驱动层构建到协议实现的完整代码实战。该方案代码精简,资源占用低,特别适合在资源受限的STM32平台上实现工业控制、电机驱动等场景的稳定通信。

potato的博客 1072

nodejs微服务:Consul集群

Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置 Consul 是分布式的、高可用的、可横向扩展的, 完成consul的安装后,必须运行agent

Wang的专栏 843

哈密顿-雅可比不等式:连接最优控制与优化算法的自然物理原理

在控制理论与优化算法之间,存在一个深刻而实用的桥梁。最优控制理论旨在通过设计控制输入,使动态系统在时间维度上达到性能最优,其核心数学工具如庞特里亚金极大值原理和哈密顿-雅可比-贝尔曼方程,为解决连续时间系统的优化问题提供了优雅框架。然而,这些方法在高维非凸问题中面临求解难题。哈密顿-雅可比不等式作为一种松弛方法,通过构造李雅普诺夫函数并验证一个不等式条件,转而寻求性能有保障且易于实现的次优解,其本质是保证系统能量衰减和性能上界。这一原理与耗散性理论紧密相连,体现了自然物理系统(如阻尼振动)中能量耗散的普遍规

weixin_30582943的博客 314

amazon-ecs-nodejs-microservices部署教程:从本地开发到AWS ECS集群完整流程

amazon-ecs-nodejs-microservices是一个参考架构,展示了如何将Node.js应用程序容器化,并作为微服务部署在Amazon Elastic Container Service上。本教程将带你完成从本地开发到AWS ECS集群部署的完整流程,帮助你快速掌握容器化和微服务部署的核心技能。 ## 架构演进:从单体到微服务的完整路径 在开始部署前,让我们先了解应用架构的演进

gitblog_00784的博客 274

CASS3D实战:高效三维房屋与地形采集绘制技巧

本文详细介绍了CASS3D在三维房屋与地形采集绘制中的高效技巧,包括智能绘房功能、不规则结构处理、特殊构件快速绘制及地形数据采集策略。通过实战案例和进阶操作指南,帮助用户快速掌握CASS3D的核心功能,提升三维采集与绘制效率。

weixin_29216049的博客 869

基于STM32的多普勒雷达测速

基于多普勒雷达传感器,以STM32单片机为主控芯片,根据不同模块检测距离的不同,使用不同多普勒雷达传感器实现对远近距离车辆行驶速度及方向的测量。 1、基础知识 无线电探测和测距,是用无线电(电磁波)方法发现目标并测定其空间位置的装置。随着雷达技术的发展,现代雷达不仅可以对目标进行定位,还可以测量目标的速度、对目标进行成像甚至测量目标的大小和材料特性。所有利用雷达波来检测物体速度的原理,其理论基础皆源自于“多普勒效应”,...

weixin_52801934的博客 6315

amazon-ecs-nodejs-microservices基础设施详解:ECS集群与CloudFormation模板使用指南

amazon-ecs-nodejs-microservices是一个展示如何将Node.js应用容器化并作为微服务部署在Amazon Elastic Container Service(ECS)上的参考架构。本指南将深入解析其基础设施架构,重点介绍ECS集群配置与CloudFormation模板的使用方法,帮助开发者快速掌握基于AWS的容器化部署流程。 ## 从单体到微服务:架构演进全解析 现

gitblog_00767的博客 220

大模型——CoPaw:阿里云通义推出的个人智能体工作台,让 AI 助理真正落地

阿里云通义实验室于2026年2月发布CoPaw个人智能助理,采用"本地+云端"双部署模式,支持多平台接入和技能扩展。该产品基于AgentScope多智能体生态构建,具备极简部署、长期记忆系统和灵活的技能插件体系三大核心特性。用户可通过简单命令快速安装,并通过记忆文件系统实现个性化交互体验。CoPaw还支持钉钉、飞书等主流平台接入,并开源了模块化架构,允许本地模型接入。技术架构采用多频道对话网关与可插拔Skills系统,为用户提供真正的AI助理服务体验。

2134

amazon-ecs-nodejs-microservices代码实现揭秘:从单体应用到微服务拆分技巧

amazon-ecs-nodejs-microservices是一个展示如何将Node.js应用容器化并作为微服务部署在Amazon Elastic Container Service上的参考架构。本文将深入剖析其从单体应用到微服务架构的演进过程,为新手开发者提供实用的拆分技巧和最佳实践。 ## 微服务架构的核心优势 为什么要将传统单体应用拆分为微服务?amazon-ecs-nodejs-mi

gitblog_00135的博客 355

【大语言模型 14】Transformer权重初始化策略:从Xavier到GPT的参数初始化演进之路

权重初始化是深度学习训练成功的隐秘基石,特别是在Transformer这样的深层架构中,合适的初始化策略能够决定模型的训练稳定性和收敛速度。本文从经典的Xavier和He初始化出发,深入解析Transformer特有的初始化策略,通过数学推导、代码实现和实验分析,揭示不同初始化方法对大语言模型训练的深层影响。我们将探讨为什么GPT系列模型采用特定的初始化方案,以及如何针对不同层设计最优的初始化策略。

熵数实验室 1688

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Node.js微服务容器化最佳实践:基于amazon-ecs-nodejs-microservices的性能优化

amazon-ecs-nodejs-microservices项目提供了从非容器化单体应用到基于Amazon Elastic Container Service (ECS)的容器化微服务架构的完整参考实现。本文将分享该项目中体现的Node.js微服务容器化最佳实践,帮助开发者实现性能优化和架构升级。 ## 微服务架构演进:从单体到容器化微服务 ### 传统单体架构的局限 在项目的`1-no-

gitblog_00160的博客 497

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

新手必看:amazon-ecs-nodejs-microservices项目结构与文件功能全解析

amazon-ecs-nodejs-microservices是一个完整的参考架构项目,展示了如何将Node.js应用程序从无容器化部署逐步演进到基于Amazon ECS的微服务架构。本指南将帮助新手快速理解项目结构、核心文件功能及架构演进路径,轻松掌握容器化与微服务部署的关键知识。 ## 项目整体架构:从单体到微服务的演进之路 🚀 项目通过三个主要阶段展示应用架构的演进过程,每个阶段对应独

gitblog_01153的博客 266

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

如何快速上手amazon-ecs-nodejs-microservices:Node.js应用容器化部署实战

amazon-ecs-nodejs-microservices是一个参考架构,展示了如何将Node.js应用程序容器化并作为微服务部署到Amazon Elastic Container Service上。本指南将帮助新手快速掌握从单体应用到容器化微服务的完整部署流程,通过实战案例了解Amazon ECS的核心功能与最佳实践。 ## 🌟 为什么选择容器化与微服务架构? 现代应用开发中,容器化和

gitblog_00419的博客 789

构建 NodeJS 影院微服务并使用 docker 部署【01/4】

构建一个微服务的电影网站,需要Docker、NodeJS、MongoDB,这样的案例您见过吗?如果对此有兴趣,您就继续往下看吧。

gongdiwudu的专栏 5236

nodejs 实践项目_NodeJS:最佳生产实践

nodejs 实践项目by Saurabh Rayakwar 通过索拉比·雷阿克瓦尔 NodeJS:最佳生产实践 (NodeJS: Best Practices for Production) This is an attempt to enlist the most important practices for developing and deploying on NodeJs. 这是为...

cumi6497的博客 653

探索BlueOak Server:构建高效RESTful API的NodeJS框架

探索BlueOak Server:构建高效RESTful API的NodeJS框架 在现代Web开发领域,构建高效、可维护的RESTful API是每个开发者追求的目标。今天,我们将深入介绍一个强大的NodeJS框架——BlueOak Server,它以其独特的功能和优雅的设计,为开发者提供了一个构建RESTful API的理想平台。 项目介绍 BlueOak Server是一个基于NodeJS的...

gitblog_00595的博客 938

necrobrowser:浏览器自动化微服务,助力红队自动化任务

necrobrowser:浏览器自动化微服务,助力红队自动化任务 项目介绍 在现代网络攻防领域,自动化工具对于提高效率、降低操作成本具有重要意义。necrobrowser 是一款基于 NodeJS 开发的浏览器自动化微服务,利用 Puppeteer 库控制 Chrome 或 Firefox 浏览器实例,支持在无头和 GUI 模式下运行。这款工具的核心思想是利用钓鱼活动中收集的 Web 会话(如 M...

gitblog_00758的博客 721

flatend部署指南:如何在2美元/月的服务器上运行生产级P2P微服务

flatend 是一个基于 P2P 网络的微服务框架,支持 NodeJS 和 Go 两种语言,能让你用一台 2美元/月的廉价云服务器,快速搭建并部署生产级 P2P 微服务集群。本文将为你提供一份完整的 flatend 部署指南,从购买服务器、编译网关、编写服务到配置自动 HTTPS,一步步带你完成生产环境搭建,全程无需复杂运维经验。 ## 什么是 flatend?为什么它适合低成本部署? fl

gitblog_01039的博客 353

部署consul+nodejs+docker集群

Jenkins安装:https://www.jianshu.com/p/845f267aec52 JenkIns配置:https://www.cnblogs.com/vipzhou/p/7890016.html Consul配置:http://www.imooc.com/article/289385

Nodejs 1666
上一篇: nodejs微服务:Consul集群
下一篇: Vue3源码梳理:reactive的响应性核心实现
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值