node

部署Docker swarm集群(一)

十年热恋 提交于 2019-12-27 21:01:13
一、Docker swarm简介 Docker swarm与 docker-compose 一样,都是docker官方推出的docker容器的编排工具。但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。 Docker swarm: 其作用就是把若干个Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。 从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。 Docker swarm中有三种角色: Manager node:负责执行容器的编排和集群的管理工作,保持并维护swarm处于期望的状态,swarm可以有多个manager node,他们会自动协商选举出一个leader执行编排任务;但相反,不能没有manager node; Worker node:接受并执行由manager

Node之文件的完整读写

无人久伴 提交于 2019-12-27 20:10:41
文件的完整读写 文件的读写需要引入node核心模块fs let fs=require('fs') readFile(filename, [options], callback)异步读取文件 fs.readFile(filename, [options], callback) 在readFile方法中,使用三个参数,其中filename参数与callback参数为必须指定的参数,options参数为可选参数。filename参数用于指定读取文件的完整文件路径及文件名,options参数值为一个对象,在其中指定读取文件时需要使用的选项,在该参数值对象中可以使用flag属性指定对该文件采取什么操作,默认值为’r’(如果指定读取的文件不存在,则抛出异常) options配置文件中flag(权限)可选值如下 ‘r’:读取文件,如果文件不存在则抛出异常。 ‘r+’:读取并写入文件,如果文件不存在则抛出异常。 ‘rs’:以同步方式读取文件并通知操作系统忽略本地文件系统缓存,如果文件不存在则抛出异常。由于该属性值的使用将使操作系统忽略本地文件系统缓存机制,因此在操作网络文件系统时建议使用该属性值,但由于其对性能产生一定的负面影响,所以在其他场合下不建议使用。 ‘w’:写入文件。如果文件不存在则创建该文件,如果该文件已存在则清空文件内容。 ‘wx’:作用与’w’类似,但是以排他方式写入文件。 ‘w+

如何使用NPM?CNPM又是什么?

左心房为你撑大大i 提交于 2019-12-27 19:25:34
背景介绍 什么是npm? npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等), NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,它是 Node 获得成功的重要原因之一。常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用。 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。 由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 "npm -v" 来测试是否成功安装 为啥我们需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码。如果我们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用,非常繁琐。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上,如果要使用,直接通过npm安装就可以直接用,不用管代码存在哪,应该从哪下载。 更重要的是,如果我们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错。 什么是cnpm?

K8s中Volume

廉价感情. 提交于 2019-12-27 16:38:59
容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃 时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在 Pod 中同时运行多个容器时,这些容器之间通常需要共享文件。Kubernetes 中的 Volume 抽象就很好的解决了这些问题 背景 Kubernetes 中的卷有明确的寿命 —— 与封装它的 Pod 相同。所f以,卷的生命比 Pod 中的所有容器都长,当这 个容器重启时数据仍然得以保存。当然,当 Pod 不再存在时,卷也将不复存在。也许更重要的是,Kubernetes 支持多种类型的卷,Pod 可以同时使用任意数量的卷卷的类型。 emptyDir 一个emptyDir 第一次创建是在一个pod被指定到具体node的时候,并且会一直存在在pod的生命周期当中,正如它的名字一样,它初始化是一个空的目录,pod中的容器都可以读写这个目录,这个目录可以被挂在到各个容器相同或者不相同的的路径下。当一个pod因为任何原因被移除的时候,这些数据会被永久删除。注意:一个容器崩溃了不会导致数据的丢失,因为容器的崩溃并不移除pod. emptyDir 磁盘的作用: scratch space, such as for a disk-based mergesortcw

二叉树排序树的创建

霸气de小男生 提交于 2019-12-27 16:34:48
_declspec(dllexport) Node::TNODE* create_binary_sort_tree(Node::RECORD TEST[], int maxlen); //二叉排序树的创建 Node::TNODE* tree::create_binary_sort_tree(Node::RECORD TEST[], int maxlen) //二叉排序树的创建 { int i; Node::TNODE *head, *s, *p, *q; head = NULL; for (i = 0; i < maxlen; i++) { s = (Node::TNODE*)malloc(sizeof(Node::TNODE)); s->lchild = NULL; s->rchild = NULL; s->data = TEST[i].k; if (head == NULL) head = s; else { p = head; q = p; while (p != NULL) { q = p; if (p->data > s->data) p = p->lchild; else p = p->rchild; } if (q->data > s->data) q->lchild = s; else q->rchild = s; } } return head; 来源:

nodejs 调试 debug

别来无恙 提交于 2019-12-27 14:05:42
整理一下node的debug方式 ====================================================== 之前网上搜索到资料是在终端中使用以下命令运行js: node debug index.js node --debug index.js node --debug-brk index.js 三者的区别可以自行搜索,但是我用的node版本是12,运行以上命令会有以下提示: DeprecationWarning: `node debug` is deprecated. Please use `node inspect` instead. `node --debug` and `node --debug-brk` are invalid. Please use `node --inspect` and `node --inspect-brk` instead. ======================================================== 可见debug要么弃用要么无效,已经被inspect取代了,对应着以下命令: node inspect index.js node --inspect index.js node --inspect-brk index.js node --inspect 与 node -

淘宝镜像 cnpm 不是内部命令

本小妞迷上赌 提交于 2019-12-27 13:50:57
作为一个前端人员,node已经是必备。 1、下载 下载地址:https://nodejs.org/zh-cn/download/ 选择相应的版本下载 2、解压缩 将文件解压到要安装的位置,并新建两个目录 node-global :npm全局安装位置 node-cache:npm 缓存路径 3、配置 配置环境变量: 将node.exe 所在的目录添加到path环境变量,这样我们在使用命令行时就可以在任意路径使用node命令了,同时该目录下有一个npm.cmd文件,打开文件其实就i是将我们的npm命令映射到node.exe npm-cli.js,由于存在该映射所以只要把node.exe 所在的目录添加到path环境变量,也可以在任何目录下执行npm install了。 如我的路径: D:\software\node-v8.9.3-win-x86 D:\software\node-v8.9.3-win-x86\node-global D:\software\node-v8.9.3-win-x86\node-cache 写到这里其实node就算已经装好了。 在命令行中输入如下命令测试 node -v npm -v 那么node-global :npm全局安装位置,node-cache:npm 缓存路径 又是怎么与npm发生关系呢? 通过如下命令进行配置: npm config set

Nodejs资料之web服务器

爱⌒轻易说出口 提交于 2019-12-27 11:29:29
◆ 创建web服务器示例: // 引用系统模块 const http = require('http'); // 创建web服务器 const app = http.createServer(); // 当客户端发送请求的时候 app.on('request', (req, res) => { // 响应 res.end('<h1>hi, user</h1>'); }); // 监听3000端口 app.listen(3000); console.log('服务器已启动,监听3000端口,请访问 localhost:3000') ◆ 请求信息获取方法: app.on('request', (req, res) => { req.headers // 获取请求报文 req.url // 获取请求地址 req.method // 获取请求方法 }); ◆ GET请求处理: 参数被放置在浏览器地址栏中,获取参数需要使用系统模块url来处理url地址 // 引入创建网站服务器的模块 const http = require('http'); // 用于处理url地址 const url = require('url'); // app对象就是网站服务器对象 const app = http.createServer(); // 当客户端有请求来的时候 app.on('request',

java核心数据结构总结

こ雲淡風輕ζ 提交于 2019-12-27 11:02:31
  JDK提供了一组主要的数据结构的实现,如List、Set、Map等常用结构,这些结构都继承自java.util.collection接口。 List接口   List有三种不同的实现,ArrayList和Vector使用数组实现,其封装了对内部数组的操作。LinkedList使用了循环双向链表的数据结构,LinkedList链表是由一系列的链表项连接而成,一个链表项包括三部分:链表内容、前驱表项和后驱表项。   LinkedList的表项结构如图:   LinkedList表项间的连接关系如图:      可以看出,无论LinkedList是否为空,链表都有一个header表项,它即表示链表的开头也表示链表的结尾。表项header的后驱表项便是链表的第一个元素,其前驱表项就是链表的最后一个元素。   对基于链表和基于数组的两种List的不同实现做一些比较:   1、增加元素到列表的末尾:   在ArrayList中源代码如下: 1 public boolean add(E e) { 2 ensureCapacityInternal(size + 1); // Increments modCount!! 3 elementData[size++] = e; 4 return true; 5 }   add()方法性能的好坏取决于grow()方法的性能: 1 private

Nodejs资料之异步编程

一曲冷凌霜 提交于 2019-12-27 10:59:42
◆ 同步API和异步API: 1、同步API: 只有当前API执行完成后,才能继续执行下一个API for (var i = 0; i < 100000; i++) { console.log(i); } console.log('for循环后面的代码'); 2、异步API: 当前API的执行不会阻塞后续代码的执行 console.log('代码开始执行'); setTimeout(() => { console.log('2秒后执行的代码')}, 2000); setTimeout(() => { console.log('"0秒"后执行的代码')}, 0); console.log('代码结束执行'); 3、区别: 同步API可以从返回值中拿到API执行的结果, 但是异步API是不可以的 // 同步 function sum (n1, n2) { return n1 + n2; } const result = sum (10, 20); // 30 // 异步 function getMsg () { setTimeout(function () { return { msg: 'Hello Node.js' } }, 2000); } const msg = getMsg (); // undefined ◆ 代码执行顺序分析: 代码: console.log(