五个最佳案例带你解读node.js的前后之道

HiddlestonCloud      2022-02-13     396

关键词:

Node.js 是什么?

Node.js采用C++语言编写而成,浏览器内核V8做为执行引擎;Node不是JS应用、而是一个Javascript的运行环境。Node保留了前端浏览器js的接口,没有改写语言本身的任何特性,依旧基于作用域和原型链。

Node.js 是一个为实时Web(Real-time Web)应用开发而诞生的平台,它从诞生之初就充分考虑了在实时响应、超大规模数据要求下架构的可扩展性。这使得它摒弃了传统平台依靠多线程来实现高并发的设计思路,而采用了单线程、异步式I/O、事件驱动式的程序设计模型。这些特性不仅带来了巨大的性能提升,还减少了多线程程序设计的复杂性,进而提高了开发效率。


Node.js的特点

1、一个Javascript运行环境

2、依赖于Chrome V8引擎进行代码解释

3、事件驱动

4、非阻塞I/O

5、轻量、可伸缩,适于实时数据交互应用

6、单进程,单线程


Node.js能做什么?

1、具有复杂逻辑的网站

2、基于社交网络的大规模 Web 应用;

3、Web Socket 服务器(页游,web IM);

4、TCP/UDP 套接字应用程序;

5、命令行工具;

6、交互式终端程序;

7、带有图形用户界面的本地应用程序;

8、单元测试工具;

9、客户端 JavaScript 编译器


Node.js架构


技术分享

事件循环

技术分享

NodeJs执行模型: 单线程Event Loop

 当应用请求发生时,首先进入V8引擎,然后进入到事件队列,可以理解为他们在不断地在循环,看是否有任务,产生任务就去执行。上图是单线程模型。

NPM

后端在开发其他语言时,都有一些模块的概念或者第三方提供了很实用的小模块。同样,Node.js当时出来的时候也有这样一个仓库。这个仓库就是专门用来管理中国开发者的一个贡献的模块,而且发展非常的快。同样,前端有一些脚手件,在服务器这边运行的有debug,express,express-session,thrift,依托这个插件做thrift相关的事情,images其他的一些你想的到的插件,都是可以从它找到。


架构体系

技术分享


上图是个推部分WEB平台的架构体系,个推有一套云组进资源,通过Nginx作为一个分发,Node可以有多个节点,通过session进入。每一个Node都有模式,相信大家在部署的时候肯定不可能部署一个节点,部署一个节点,否则这个节点挂了就是挂了。

Thrift使用

定义接口

技术分享

2、编译,生成对应的包,并上传到相应的库中

3、在Node中使用,如下:

技术分享

注意:这里有个坑

thrift 中有个基本类型叫做 double (64位浮点数)。当定义成这个类型时,数据从 java 过来到 Node 会变成全是0。

解决方案

定义成 string 类型,之后特事特办,如必要则在 Node处再转成浮点数,或者直接由页面端处理。

IP负载(IP Load Balance)

负载均衡

分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

原生中其并没有负载均衡的机制,但我们可以采用动态代理的设计模式,基于thrift client,利用JS的原型链来实现。

均衡的方式有很多种,我们使用轮询机制来实现访问多个Java节点。

session管理

Node本身并无session机制,我们可以使用express-session包来实现,同时通过redis来存储session。

连接池

传统读取数据库方式:

技术分享

连接池需要做什么?

1、连接预热 (启动时自动打开n个连接以供使用)

2、使用 例如 轮转法 均匀分发 连接请求

3、当池中的连接即将耗尽得时候动态产生新的连接

4、当池中的连接一段时间没有被调用的时候,自动释放连接

5、自动丢弃 已经坏掉的 连接

6、系统关闭的时自动释放所有连接

基于此,我们也可以借助几个插件包(如generic-pool(node-pool)、node-thrift-pool,当然,如果你直接Node连接的DB,基本上那个包里面也会支持连接池)在Node使用连接池。

使用示例

技术分享

利用Node可以做的事情

1、做一些灰色地带的事情

利用Node可以做一些灰色地带的事情,因为它拥有前端的优点,可以异步,发起异步请求。给开发者带来很大的好处。不过,你需要管理好你的类型。如果说类型自己如果没有管理好就是会出现一些问题。同时它也可以做后端的一些事情。比如说连接池等等。

2、模块更加分明

3、可前可后便于分工

从浏览器过来的数据,通过Node把这一层数据转化成java需要的一种数据结构,就可以使得分工更加明晰。

4、共用表单输入验证

如果你在写系统的时候,出于安全考虑,无论浏览器这边做了多少验证,你都要做输入验证。传统模式下是需要java同学写一份,前端同学写一份。因为Node跟java都是部署在服务器集群或者一个区域,你可以相信这两边之间一个数据。来自浏览器的验证,就可以共用表单输入验证,达到节省成本的目的。

 

以上内容来自个推web服务首席架构师姜季廷在3月12日SegmentFault D-Day 北京:后端的演讲整理而成。




















❤️一个聊天室案例带你了解node.js+ws模块是如何实现websocket通信的!(代码片段)

文章目录🔥1、前言 🔥2、项目结构分析🔥3、操作步骤🔥4、查看效果 🔥5、往期好文推荐🔥1、前言 大家好,我是纸飞机。倘若每天都是无尽的知识点,那这样的学习想必会很枯燥无味吧。今... 查看详情

❤️一个聊天室案例带你了解node.js+ws模块是如何实现websocket通信的!(代码片段)

文章目录🔥1、前言 🔥2、项目结构分析🔥3、操作步骤🔥4、查看效果 🔥5、往期好文推荐🔥1、前言 大家好,我是纸飞机。倘若每天都是无尽的知识点,那这样的学习想必会很枯燥无味吧。今... 查看详情

10个最佳node.js企业应用案例:从uber到linkedin

译者按:Node.js8已经发布了,NPM模块每周下载量早已超过10亿,从Uber到LinkedIn都在使用Node.js,谁说JavaScript不能写后台?原文:10bestNode.jsappexamplesforenterprises,withmetrics译者:Fundebug为了保证可读性,本文采用意译而非直译。另外,本文... 查看详情

一文带你认识nodejs

​node.js初探Node.js是一个JS的服务端运行环境,简单的来说,它是在JS语言规范的基础上,封装了一些服务端的运行时对象,让我们能够简单实现非常多的业务功能。如果我们只使用JS的话,实际上只是能进行一些简单的逻辑运算... 查看详情

node.jsrequire()源码解读

时至今日,Node.js的模块仓库npmjs.com,已经存放了15万个模块,其中绝大部分都是CommonJS格式。这种格式的核心就是require语句,模块通过它加载。学习Node.js,必学如何使用require语句。本文通过源码分析,详细介绍require语句的内部... 查看详情

带你开发一个完整的node.js项目

「他们根本不知道,现在的电商大促有多么依赖Node.js」任职阿里的架构师朋友这么说。 说真的,我倒并不意外。作为一个定位明确的高性能Web服务器,Node.js非常火热,几乎霸占了前端生态。各种脚手架、前端打... 查看详情

厉害了!阿里p8架构师用4大技术文档带你深入解读爆火的中台战略

前言根据百度指数搜索“中台”,可以发现中台这个概念从2019年5月21日起突然火了起来,并持续火爆。如果对2019.5-2020.7进行一次关键词盘点的话,中台绝对要算一个。从概念的认知,到实战经验的分享,再到中台战略引起的思... 查看详情

一文带你吃透jsp,增删改查实战案例详细解读(代码片段)

...境导入JSP依赖创建JSP页面编写代码测试JSP原理JSP脚本实战案例JSP缺点发展阶段EL表达式概述实战案例域对象JSTL标签用法1用法2前言不得不说,JSP现在已经是一门十分老旧的技术了,学习编程时,不仅要学习优秀的前言... 查看详情

带你入门nodejs第一天——node基础语法及使用(代码片段)

带你入门nodejs第一天——node基础语法及使用带你入门nodejs第二天——http模块化npmyarm带你入门nodejs第三天—express路由带你学习nodejs第四天——身份认证及缓存1node概述为什么要学习node.js为什么要学习服务端的开发?通过学习... 查看详情

10+最佳的node.js教程和实例

如果你正在找Node.js的学习资料及指南,那么请继续(阅读),我们的教程将会覆盖即时聊天应用、API服务编写、投票问卷应用、人物投票APP、社交授权、Node.jsonRaspberryPi等等。以下是Node.js入门的简单介绍,如果你对Node.js略有了... 查看详情

node.js 的最佳 Facebook 连接库是啥?

】node.js的最佳Facebook连接库是啥?【英文标题】:Whatisthebestfacebookconnectlibraryfornode.js?node.js的最佳Facebook连接库是什么?【发布时间】:2011-05-2722:56:55【问题描述】:我见过多种使用node.js和facebookconnect的工具。然而,其中许多似... 查看详情

《程序员修炼之道-从小工到专家》吐血解读

...对《程序员修炼之道:从小工到专家》一书的总结和解读。该书作者是AndrewHunt和DavidThomas。他们都是敏捷宣言的17个创始者之一。Andrew还是敏捷联盟(AgileAlliance)的创始人。David则是著名的DRY(Don’tRepeaseYourself)一词的... 查看详情

解读知名酒企数字化转型的成功之道

...了数据化转型之路,而数字化转型结果如何?今天,就来解读某大型酒企的数字化转型之道。客户背景客户为国内知名的大型现代化酒厂,员工过万人,年收入过100亿元。四大痛点是数字化转型必须要过的坎在技术变革和产业升... 查看详情

使用 Node.js 构建网站的最佳实践

】使用Node.js构建网站的最佳实践【英文标题】:BestpracticesofbuildingawebsiteusingNode.js【发布时间】:2012-07-0322:18:55【问题描述】:我想知道如何使用Node.js从头开始​​开发网站。我了解我如何可能做到这一点,但我对最佳设计实践... 查看详情

使用 Node.js 构建网站的最佳实践

】使用Node.js构建网站的最佳实践【英文标题】:BestpracticesofbuildingawebsiteusingNode.js【发布时间】:2012-07-0322:18:55【问题描述】:我想知道如何使用Node.js从头开始​​开发网站。我了解我如何可能做到这一点,但我对最佳设计实践... 查看详情

Heroku 最佳实践时钟与 node.js

】Heroku最佳实践时钟与node.js【英文标题】:Herokubestpracticeclockswithnode.js【发布时间】:2013-07-2808:50:25【问题描述】:我想知道在Heroku上设置时钟进程的最佳方法是什么。我的应用完全在Node中构建,我计划使用node-schedule来指定我... 查看详情

与 Node.js 一起使用的最佳测试框架是啥? [关闭]

】与Node.js一起使用的最佳测试框架是啥?[关闭]【英文标题】:WhatisthebesttestingframeworktousewithNode.js?[closed]与Node.js一起使用的最佳测试框架是什么?[关闭]【发布时间】:2011-05-1713:33:36【问题描述】:我在https://github.com/ry/node/wiki/m... 查看详情

Node.js 上 MongoDB 连接的最佳实践是啥?

】Node.js上MongoDB连接的最佳实践是啥?【英文标题】:What\'sthebestpracticeforMongoDBconnectionsonNode.js?Node.js上MongoDB连接的最佳实践是什么?【发布时间】:2012-08-0118:02:48【问题描述】:这对我来说有点不清楚(我刚刚开始使用Node和Mongo... 查看详情