分类目录编程

微服务框架

两大配方

网关 [Zuul] Spring Cloud Gateway

1:阿里系

Dubbo
Nacos Zookeeper
SpringBoot /SpringMVC
采用服务端发现
Sentinel流控
链路监控 Pinpoint

2:Spring Cloud

Spring Cloud Netflix Eureka 服务注册发现
SpringBoot
Ribbon 客户端负载均衡器 RestTemplate/feign / Zuul
Hystrix流控
链路监控 Spring Cloud Sleuth & Zipkin

Eureka线上环境至少两台相互注册,三台两两相互注册以达到高可用,采用客户端发现,REST异构时常用的Nodejs有eureka-js-client客户端.

服务注册与发现对比 AP

如果要求一致性,则选择zookeeper、Consul,如金融行业 CP设计,保证了一致性,集群搭建的时候,某个节点失效,则会进行选举行的leader,或者半数以上节点不可用,则无法提供服务,因此可用性没法满足
如果要求可用性,则Eureka,如电商系统 AP原则,无主从节点,一个节点挂了,自动切换其他节点可以使用,去中心化
Nacos:
Nacos是阿里开源的,Nacos 支持基于 DNS 和基于 RPC 的服务发现。在Spring Cloud中使用Nacos,只需要先下载 Nacos 并启动 Nacos server,Nacos只需要简单的配置就可以完成服务的注册发现。
Nacos除了服务的注册发现之外,还支持动态配置服务。动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

微服务可见性

Metrics 跟踪所有可以用数字来表示的信息内容,用于度量
Tracing 跟踪单次请求中发生了什么,用于优化,提优
Logging 跟踪零散的文字描述,用于日志

Prometheus 采取拉取数据
ELK解决方案 采集离合零散的信息的处理,索引等
LogStash 离散的日志收集,处理,过滤,格式转换
ElasticSearch 搜索引擎,进行索引,方便检索
Kibana 展示数据

消息中间

RabbitMQ 集成
Kafka
ActiveMQ

综合对比:

  1. ActiveMQ: 历史悠久的开源项目,已经在很多产品中得到应用,实现了JMS1.1规范,可以和spring-jms轻松融合,实现了多种协议,不够轻巧(源代码比RocketMQ多),支持持久化到数据库,对队列数较多的情况支持不好。
  2. RabbitMq:
    它比kafka成熟,支持AMQP事务处理,在可靠性上,RabbitMq超过kafka,在性能方面超过ActiveMQ。
  3. Kafka:
    Kafka设计的初衷就是处理日志的,不支持AMQP事务处理,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性,Kafka的性能(吞吐量、tps)比RabbitMq要强,如果用来做大数据量的快速处理是比RabbitMq有优势的

综合使用

网关:[Zuul]
网关流控:spring-cloud-zuul-ratelimit
服务与配制: Nacos
身份认证:Spring Cloud OAuth2
消息中间:RabbitMQ Kafka
服务流控:Sentinel

express

apt install node-express-generator
npm install -g express-generator
npm -g install express
express -V

错误:在项目目录执行 npm install express 或 npm link express

npm -g install serve-index
npm -g install socket.io
npm install -g forever

运维
npm i pm2 -g
pm2 init
pm2 start ecosystem.config.js

pm2 list
pm2 restart xxxx
pm2 log

mediasoup安装

下载

git clone https://github.com/versatica/mediasoup-demo.git

cd mediasoup-demo

git checkout v3

 app客户端
broadcasters广播推流
server服务器端,媒体服务(管道通信)与信令服务

配置服务器

cd server

npm install

cp config.example.js config.js

// Listening hostname (just for gulp live task).
domain : process.env.DOMAIN || ‘localhost‘,
// Signaling settings (protoo WebSocket server and HTTP API server).
https :
{
listenIp : ‘0.0.0.0’,
// NOTE: Don’t change listenPort (client app assumes 4443).
listenPort : process.env.PROTOO_LISTEN_PORT || 4443,
// NOTE: Set your own valid certificate files.
tls :
{
cert : process.env.HTTPS_CERT_FULLCHAIN || ${__dirname}/certs/<strong><span style="color: #ff0000;">fullchain.pem</span></strong>,//证书
key : process.env.HTTPS_CERT_PRIVKEY || ${__dirname}/certs/<span style="color: #ff0000;"><strong>privkey.key</strong></span> //证书
}
},

// See https://mediasoup.org/documentation/v3/mediasoup/api/#WebRtcTransportOptions
webRtcTransportOptions :
{
listenIps :
[
{
ip : process.env.MEDIASOUP_LISTEN_IP || ‘1.2.3.4′,  //服务器IP或0.0.0.0,浏览器的传输
announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP
}
],
initialAvailableOutgoingBitrate : 1000000,
minimumAvailableOutgoingBitrate : 600000,
maxSctpMessageSize : 262144,
// Additional options that are not part of WebRtcTransportOptions.
maxIncomingBitrate : 1500000
},

// See https://mediasoup.org/documentation/v3/mediasoup/api/#PlainRtpTransportOptions
plainRtpTransportOptions :
{
listenIp :
{
ip : process.env.MEDIASOUP_LISTEN_IP || ‘1.2.3.4‘, //普通的传输
announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP
},
maxSctpMessageSize : 262144
}

/启动server
npm start

//客户端安装 app目录
npm install
npm install -g gulp-cli
gulp live //客户端
gulp dist //生成发布目录/server/public

启动nodejs服务
node app.js
nohup node app.js &
forever start app.js 推荐此方式

调试
node –inspect-brk server.js
chrome://inspect
再根据需要设置断点

用n升级nodejs

# 全局安装n
$ npm install -g n
# 升级到最新稳定版
$ n stable
# 升级到最新版
$ n latest
# 升级到定制版
$ n v12.13.1
# 切换使用版本
$ n 7.10.0 (ENTER)

安装完之后node -v 之后发现还是之前的版本呢,那么看下面

输入单独一个n 回车,通过控制上下键来选择你想要使用的node版本噢

有些小伙伴通过上面三步已经成功得到自己想要的版本了,但是有些小伙伴还是不行,那么不要着急,究极绝招来了,就是改node的环境变量,哈哈哈,一听到环境变量是不是一点都不陌生,那么接着往下看吧

a. 首先which node 找到node的安装目录,并复制我这里用默认目录代替哈 /usr/local/n/versions/node/10.0.0

b. 然后vim /etc/profile 在环境变量最后结尾部分加上
export NODE_HOME=/usr/local/n/versions/node/10.0.0
export PATH=NODE_HOME/bin:PATH

c. 最后记得source /etc/profile 让环境变量生效就可以了噢

Nodejs 卸载

卸载:
for MAC:
  1. 在终端输入以下命令:sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}
    1. 删除/usr/local/lib中的所有node和node_modules
    2. 删除/usr/local/lib中的所有node和node_modules的文件夹
    3. 如果是从brew安装的, 运行brew uninstall node
    4. 检查~/中所有的local, lib或者include文件夹, 删除里面所有node和node_modules
    5. 在/usr/local/bin中, 删除所有node的可执行文件
    6. 最后运行以下代码:(可能具体安装路径会有区别 ,find ~ -name “node”   可以找到所有
  2. sudo rm /usr/local/bin/npm
    sudo rm /usr/local/share/man/man1/node.1
    sudo rm /usr/local/lib/dtrace/node.d
    sudo rm -rf ~/.npm
    sudo rm -rf ~/.node-gyp
    sudo rm /opt/local/bin/node
    sudo rm /opt/local/include/node
    sudo rm -rf /opt/local/lib/node_modules

for Ubuntu:
sudo apt-get remove –purge npm
sudo apt-get remove –purge nodejs
#手动删除 npm 相关目录
rm -r /usr/local/bin/npm
rm -r /usr/local/lib/node-moudels
find / -name npm
rm -r /tmp/npm*

npm/cnpm安装

npm 是 JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系

允许用户从NPM服务器下载别人编写的第三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 “npm -v” 来测试是否成功安装。命令如下,出现版本提示表示安装成功:
没有的话 apt install npm
https://www.npmjs.cn/
http://www.runoob.com/nodejs/nodejs-npm.html

安装cnpm
执行命令 sudo npm install -g cnpm –registry=https://registry.npm.taobao.org
使用npm的国内镜像(npm 国内镜像 https://npm.taobao.org/)cnpm 命令代替默认的npm命令,增加依赖包加载速度且避免资源限制。

更新
sudo npm i -g npm

安装
# 安装但不写入package.json; 
$ npm install xxx

# 安装并写入package.json的"dependencies"中;
$ npm install xxx –S 

# 安装并写入package.json的"devDependencies"中;
$ npm install xxx –D

# 全局安装
$ npm install xxx -g

# 安装特定版本
$ npm install xxx@1.0.0

 -S(等同于--save)表示项目打包时会将该依赖包一并打包;-D(等同于--save-dev)表示该依赖包仅在开发环境下使用,正式打包不会加到项目中。

删除
# 删除xxx模块;
$ npm uninstall xxx 

# 删除全局模块xxx;
npm uninstall -g xxx

更新
检查可以更新的模块,可以使用命令行:

$ npm outdated
需要更新模块,首先得更新package.json文件,可使用npm-check-updates依赖包:

# 安装"npm-check-updates"模块
$ npm install -g npm-check-updates

# 安装后,检查可更新的模块
$ ncu
# 或
$ npm-check-updates

# 更新package.json的依赖包到最新版本
$ ncu -u
package.json 更新后,为了保险起见,可删除整个node_modules目录并重新初始化项目。

不建议一次全部更新所有依赖包,可根据实际需求更新即可。全部更新有可能导致项目不稳定,甚至运行不起来,开发项目以稳定合适优先。

如若只需更新某个单一依赖包,可使用命令行:
# 可根据包作用范围在后面加上 -D、-S 或 -g
$ npm update xxx
该更新命令,只能按照package.js中标注的版本号进行更新,故更新前记得先修改package.json中所需更新的依赖包版本号。

快速删除项目中node_modules目录
# 安装"rimraf"模块
$ npm install rimraf -g

# 删除操作
$ rimraf node_modules

Nodejs安装

API http://nodejs.cn/api

  • 下载地址
    https://nodejs.org/en/download/
    http://nodejs.cn/download
    二进制安装 ubuntu/Mac/centos
    apt/brew/yum install nodejs
    apt/brew/yum install npm
    查找是否安装
    apt-cache search nodejs
    下载二进制安装
    tar -zvxf node-v12.13.0.tar.gz
    sudo mv node_v12.13.0-linux-x64 /usr/local/nodejs/

  • 添加环境变量
    /etc/profile #全局环境变量配置文件
    ~/.bashrc #当前用户环境变量配置文件
    #node
    export NODE_HOME=/opt/nodejs
    export PATH=$NODE_HOME/bin:$PATH
    #npmexport NODE_PATH=/opt/nodejs/lib/node_modules
    source 你配置的那个文件让他生效

或者通过软连接的形式将node和npm链接到系统默认的PATH目录下,以下仅介绍软链接方式;
分别执行
sudo ln -s /opt/node/bin/node /usr/local/bin/node
sudo ln -s /opt/node/bin/npm /usr/local/bin/npm

源码安装
wget -c https://npm.taobao.org/mirrors/node/v12.13.0/node-v12.13.0.tar.gz
tar -zvxf node-v12.13.0.tar.gz
生成makefile
./configure –prefix=/user/local/nodejs//要安装的路径
python tools/gyp_node.py –no-parallel -f make-linux
make -j 4 && sudo make install
个性环境变量
vi ~/.bashrc
使生效
source ~/.bashrc
确认环境变量
env | grep PATH

在后台执行
npm install forever -g
forver start/stop server.js