关于Rest和RPC

在设计API的时候,很多人会拿 REST 与 RPC 相比较,发现自己对这两者并不是很理解,于是查阅了网上相关资料加上自己的理解写下本篇文章以加深印象。

阅读更多

基于Ubuntu安装部署Kubernetes集群

环境准备

  1. 安装 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
  2. 科学上网

  3. 关闭swap

阅读更多

常用的字符编码

一、基础知识

计算机中储存的信息都是用二进制数表示的,(bit)是指计算机里存放的二进制值(0/1),而 8 个位组合成的“位串”称为一个 字节
字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
字符编码(Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8 位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。

阅读更多

ubuntu下minikube安装

尝试在自己的笔记本搭建 Kubernetes 环境,于是用 minikube 搭建一个单节点集群,我的系统是ubuntu20.04,安装步骤可以查看官方文档:Install Minikube

阅读更多

MySQL索引优化

不使用索引的情况

  1. 如果 mysql 估计使用索引比全表扫描更慢,则不使用索引。
    例如:如果 key_part 1 均匀分布在 1 和 100 之间,下列查询中使用索引就不是很好:
1
SELECT * FROM table_name where key_part1 > 1 and key_part1 < 90;
  1. 如果使用 heap 表并且 where 条件中不用=索引列,其他 > 、 < 、 >= 、 <= 均不使 用索引(MyISAM 和 innodb 表使用索引);

  2. 使用 or 分割的条件,如果 or 前的条件中的列有索引,后面的列中没有索引,那么涉及到的索引都不会使用。

  3. 如果创建复合索引,如果条件中使用的列不是索引列的第一部分;(不是前缀索引)

  4. 如果 like 是以%开始;

  5. 对 where 后边条件为字符串的一定要加引号,字符串如果为数字 mysql 会自动转 为字符串,但是不使用索引。

查看索引使用情况

如果索引正在工作, Handler_read_key 的值将很高,这个值代表了一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引并不经常使 用。

Handler_read_rnd_next 的值高则意味着查询运行低效,并且应该建立索引补救。这个值的含义是在数据文件中读下一行的请求数。如果你正进行大量的表扫描,

该值较高。通常说明表索引不正确或写入的查询没有利用索引。

语法:

1
show status like 'Handler_read%';
阅读更多

MySQL索引小结

索引的作用

索引的出现其实就是为了提高数据查询的效率,用于快速找出在某个列中有一特定值的行。

阅读更多

Linux平均负载

一、什么是平均负载

平均负载(Load Average)是指一段时间内,系统处于可运行状态和不可中断状态的平均进程数,这个一段时间一般取 1 分钟、5 分钟、15 分钟。

CPU 使用率是单位时间内 CPU 繁忙情况的统计,跟平均负载并不完全对应,平均负载不仅包括正在使用 CPU 的进程,还包括等待 CPU等待 I/O的进程,比如:

  • CPU 密集型进程,使用大量 CPU 回导致平均负载升高
  • I/O 密集型进程,等待 I/O 也会使平均负载升高,但 CPU 使用率不一定高
  • 大量等待 CPU 的进程调度也会导致平均负载升高,此时 CPU 使用率也会比较高
阅读更多

TSL握手小记

超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为 HTTP over TLS,HTTP over SSL 或 HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。

HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 协议来加密数据包。

TLS 协议位于传输层之上,应用层之下,使用了两种加密技术,分别为:对称加密非对称加密。使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使用对称密钥加密进行通信来保证通信过程的效率。

阅读更多

API多版本控制

现状

移动互联网时代,面对市场变化,产品必须不停迭代,而在升级中我们业务需求可能不断在更新,但是我们势必又要保证原来功能的可用性,不能因为用户不升级而导致旧版本无法使用,只能引导用户去更新,而不是强制用户升级。所以我们需要对产品多版本做兼容,解决的核心方向在于服务端API的多版本管理

阅读更多

Express查询字符串数组解析为对象的问题

这几天检查日志,每天总会有大量上游的调用请求出现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设置。

阅读更多