其他
jsonrpc
rpc
客户端调用远程资源的一种方法
- 让远程调用变的像本地方法调用一样
- 从协议方面来看的话
- 可以是http协议
- 基于文本的SOAP(XML)
- Rest(JSON)
- 基于二进制Hessian(Binary
- gRPC
- 也可以是tcp协议
- dubbo一类的自定义报文的tcp协议
- 可以是http协议
- 理解 RPC VS REST 和 GraphQL
- 我们可以在http 上传输xml和json这样的文本协议,也可以是protobuf和thrift这样的二进制协议
- rpc框架是让你的远程调用更方便
- rpc是远端过程调用,其调用协议通常包含传输协议和序列化协议。
- 既然有 HTTP 请求,为什么还要用 RPC 调用?
- 搞清楚 http 1.1 使用的 tcp 协议,和我们自定义的 tcp 协议在报文上的区别。
- 自定义tcp协议的报文,精简了传输内容(相比较 HTTP 1.1 协议)
- http 1.1
- body是使用二进制编码协议
- 报头 header 是文本编码,非常占字节数,
- http 2.0 不存在 1.1 的问题了
- http2.0协议已经优化编码效率问题,像grpc这种rpc库使用的就是http2.0协议
- 成熟的rpc库相对http容器,更多的是封装了“服务发现”,"负载均衡",“熔断降级”一类面向服务的高级特性
- 单纯使用http调用则缺少了这些特性。
- 只要是远程调用都可以叫RPC,和是不是通过http没什么关系。
- 搞清楚 http 1.1 使用的 tcp 协议,和我们自定义的 tcp 协议在报文上的区别。
json-rpc
// 请求
{
"method": "updateMerchantInfo",
"params": [{
//必传,商户id
"id":"000656bd-2f8b-11e7-a244-7cd30ac33432",
//选填,商户手机号
"contact_cellphone":"1351312312321"}
],
"jsonrpc": "2.0",
"id": 0
}
// 响应
{
"jsonrpc": "2.0",
"id": 0,
"result": {
}
}
api-gateway
- 一种是 Kong 为代表的提供基础公共能力的通用型
- 一种是类似BFF,背靠一个业务中台
- kong
mysql 启用远程连接
- 默认是关闭的,只能 localhost 连接
- 修改配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
- 启用
mysql -u root -p
use mysql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Wangqi-1234' WITH GRANT OPTION;
flush privileges; // 刷新
select host, user from user;
devops
- 强调的是如何通过自动化的工具协作和沟通来完成软件的生命周期管理
- 从而更快、更频繁地交付更稳定的软件
写一个 cli
一个cli需要的 npm 包
- commander
- chalk
- ora Elegant terminal spinner
- rimraf ( rm -rf 文件路径 兼容win平台)
- tildify 替换绝对路径为tilde路径
- download-git-repo
- node内置process 交互式命令行
前端转后端基础知识
- 身份认证和授权,比如jwt, Oauth, session/cookie
- 数据库知识,不一定需要深入,起码要熟悉ORM. 注意死锁或防止某个部分一直挂起,导致行锁一直没被释放.
- Restful
- GraphQL
- 部署,包括pm2, docker
- 熟悉http框架, express/koa/egg等
- 接口测试
- RPC调用, 可选用一款RPC框架
- 异常捕捉,所有异常必须处理,开发模式下出现未捕捉的异常应该就退出进程,生产模式下打印日志
- 日志收集和处理和大小分块, 日志很重要,救命就靠它
- 性能监控,可集成第三方服务,或者自己撸一个. 性能出现问题及时发送邮件通知开发者
- http服务和数据库最好分2个, 给前端开发/测试用的一个,你自己用一个。省的一些 “xxx怎么又不行了得互怼”
极客时间 Node.js 开发实战
杨浩 - 腾讯高级工程师
学到什么
Node基础知识
- 模块
- 异步与事件
- 非阻塞 I/O
- 异步编程
- EventEmitter 模块实战
- HTTP
- HTTP 模块实战
- Koa 模块实战
- 常见的 Node.js 运维接入方式
- RPC 调用
- Buffer 模块实战
- net 模块实战
一个完整项目的重构
性能优化
- 性能测试工具
- 使用 Chrome 调试工具调试 Node.js
- Node.js CPU 占比分析
- Node.js 火焰图
- HTTP 服务的压力测试
- 内存篇
- V8 的垃圾回收与内存限制
- 查看内存使用情况
- 内存泄漏排查
- 多进程优化
- child_process 模块实战
- cluster 模块实战
- 进程守护与管理
- C++ 插件
- 使用缓存服务
- 性能测试工具
框架和工程化建设
- 框架搭建
- 构建 BFF 层
- 前端 Serverless
- 框架搭建