关于Rest和RPC
在设计API的时候,很多人会拿 REST 与 RPC 相比较,发现自己对这两者并不是很理解,于是查阅了网上相关资料加上自己的理解写下本篇文章以加深印象。
在设计API的时候,很多人会拿 REST 与 RPC 相比较,发现自己对这两者并不是很理解,于是查阅了网上相关资料加上自己的理解写下本篇文章以加深印象。
安装 Ubuntu 虚拟机
通过 Parallels Desktop 安装了 3 台虚拟机,并对虚拟机进行如下规划:
Hostname | IP | OS | Specs |
---|---|---|---|
k8s-master-01 | 192.168.11.190 | Ubuntu 20.04 | 2GB Ram, 2vcpus |
k8s-node-01 | 192.168.11.191 | Ubuntu 20.04 | 2GB Ram, 2vcpus |
k8s-node-02 | 192.168.11.192 | Ubuntu 20.04 | 2GB Ram, 2vcpus |
科学上网
关闭swap
计算机中储存的信息都是用二进制数表示的,位(bit)是指计算机里存放的二进制值(0/1),而 8 个位组合成的“位串”称为一个 字节
字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
字符编码(Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8 位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。
尝试在自己的笔记本搭建 Kubernetes 环境,于是用 minikube 搭建一个单节点集群,我的系统是ubuntu20.04,安装步骤可以查看官方文档:Install Minikube。
1 | SELECT * FROM table_name where key_part1 > 1 and key_part1 < 90; |
如果使用 heap 表并且 where 条件中不用=索引列,其他 > 、 < 、 >= 、 <= 均不使 用索引(MyISAM 和 innodb 表使用索引);
使用 or 分割的条件,如果 or 前的条件中的列有索引,后面的列中没有索引,那么涉及到的索引都不会使用。
如果创建复合索引,如果条件中使用的列不是索引列的第一部分;(不是前缀索引)
如果 like 是以%开始;
对 where 后边条件为字符串的一定要加引号,字符串如果为数字 mysql 会自动转 为字符串,但是不使用索引。
如果索引正在工作, Handler_read_key 的值将很高,这个值代表了一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引并不经常使 用。
Handler_read_rnd_next 的值高则意味着查询运行低效,并且应该建立索引补救。这个值的含义是在数据文件中读下一行的请求数。如果你正进行大量的表扫描,
该值较高。通常说明表索引不正确或写入的查询没有利用索引。
语法:
1 | show status like 'Handler_read%'; |
平均负载(Load Average)是指一段时间内,系统处于可运行状态和不可中断状态的平均进程数,这个一段时间一般取 1 分钟、5 分钟、15 分钟。
CPU 使用率是单位时间内 CPU 繁忙情况的统计,跟平均负载并不完全对应,平均负载不仅包括正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O的进程,比如:
超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为 HTTP over TLS,HTTP over SSL 或 HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。
HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 协议来加密数据包。
TLS 协议位于传输层之上,应用层之下,使用了两种加密技术,分别为:对称加密和非对称加密。使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使用对称密钥加密进行通信来保证通信过程的效率。
移动互联网时代,面对市场变化,产品必须不停迭代,而在升级中我们业务需求可能不断在更新,但是我们势必又要保证原来功能的可用性,不能因为用户不升级而导致旧版本无法使用,只能引导用户去更新,而不是强制用户升级。所以我们需要对产品多版本做兼容,解决的核心方向在于服务端API的多版本管理。
这几天检查日志,每天总会有大量上游的调用请求出现400错误(Expected type array but found type object), 这个API Get请求参数如下:
1 | ?arr[]=value1&arr[]=value2&arr[]=value3... |
进一步分析日志发现,上游的查询参数中数组是有指定索引的,比如
1 | ?arr[0]=value1&arr[1]=value2&arr[2]=value3... |
而且奇怪的是并非所有的请求都有问题,只有当arr[]
超过20个才会出现,第一反应是Express的query parser问题,将查询字符串数组解析为对象,
原来Express已经不包含大部分的请求解析中间件了,如json、urlencoded、cookie等中间件都变成可配置的了,只有查询字符串解析中间件还是内置的,其中解析函数默认为qs模块的,可以通过app上的query parse设置。