网络性能指标

从网上收集的一些评估网络性能的指标。

带宽

带宽,表示链路的最大传输速率,单位是 b/s(比特 / 秒)。在你为服务器选购网卡时,带宽就是最核心的参考指标。常用的带宽有 1000M、10G、40G、100G 等。

吞吐量

吞吐量,表示没有丢包时的最大数据传输速率,单位通常为 b/s (比特 / 秒)或者 B/s(字节 / 秒)。吞吐量受带宽的限制,吞吐量 / 带宽也就是该网络链路的使用率。

延时

延时,表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。这个指标在不同场景中可能会有不同的含义。它可以表示建立连接需要的时间(比如 TCP 握手延时),或者一个数据包往返所需时间(比如 RTT)。

PPS

PPS,是 Packet Per Second(包 / 秒)的缩写,表示以网络包为单位的传输速率。PPS 通常用来评估网络的转发能力,而基于 Linux 服务器的转发,很容易受到网络包大小的影响(交换机通常不会受到太大影响,即交换机可以线性转发)。

网络可用性

网络可供用户使用的时间百分比。即网络稳定不出故障的时间 / 用户总的使用时间

并发连接数

是客户端向服务器发起请求,并建立了 TCP 连接,每秒钟服务器链接的总 TCP 数量

丢包率

测试中所丢失数据包数量占所发送数据组的比率。

重传率

重新发送信息的与全部的调用信息之间的比值。

响应时间(RT)

响应时间是指系统对请求作出响应的时间。

吞吐量(Throughput)

吞吐量是指系统在单位时间内处理请求的数量。

时区问题小结

修改基于 Alpine 的 Docker 容器的时区

在容器中修改

进入容器

1
# docker exec -it container_name /bin/sh

安装 timezone,列出安装的时区文件,验证是否下载成功。

1
2
# apk add -U tzdata
# ls /usr/share/zoneinfo

拷贝需要的时区文件到 localtime,国内需要的是 Asia/Shanghai:

1
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

验证时区

1
2
date
Wed Dec 12 19:09:09 CST 2018

CST 即为 中国标准时间。

移除时区文件:

1
# apk del tzdata

在 Dockerfile 指定时区

1
2
3
4
5
6
7
# Install base packages, set timezone
RUN apk update && apk add curl bash tree tzdata

# cp -r -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV TZ Asia/Shanghai

Node.Js 中 sequelize 时区的配置方法

sequelize 默认情况下,保存日期时会转换成 +00:00 时区

解决方式:

sequelize 时配置时区
timezone: ‘+08:00’

1
2
3
4
5
6
7
8
9
10
11
const sequelize = new Sequelize(config.database, config.username, config.password, {
host: config.host,
port: config.port,
dialect: 'mysql',
pool: {
max: 5,
min: 0,
idle: 10000,
},
timezone: '+08:00',
});

参考文档

Setting the timezone
Sequelize.html#instance-constructor-constructor

git操作失败小结

git process semms to be running in this repository

Git 提交的过程中突然显示 Another git process semms to be running in this repository, e.g. an editor opened by ‘git commit’. Please make sure all processes are terminated then try again. If it still fails, a git process remove the file manually to continue…
即是 git 被另外一个程序占用。

原因在于 Git 在使用过程中遭遇了奔溃,部分被上锁资源没有被释放导致的。

解决方案:进入项目文件夹下的 .git 文件中(显示隐藏文件夹或 rm .git/index.lock)删除 index.lock 文件即可。

阅读更多

Chrome下载文件出错

使用谷歌浏览器下载文件时发生浏览器崩溃,页面提示:
ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION

原因:

加载的资源名含有半角逗号(,)或者别的特殊符号

解决办法:

  1. 替换半角逗号等特殊符号
  2. 服务器端函数响应中若设置了“content-disposition”响应头,filename参数使用双引号包裹。
阅读更多

CAP定理、ACID模型、BASE模型

CAP 定理

在理论计算机科学中,CAP 定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性(Consistency):所有节点在同一时间具有相同的数据
  • 可用性(Availability):保证每个请求不管成功或者失败都有响应
  • 分隔容忍(Partition tolerance):系统中任意信息的丢失或失败不会影响系统的继续运作
    根据定理,分布式系统只能满足三项中的两项而不可能满足全部三项。

ACID 模型:

ACID,是指数据库管理系统(DBMS)在写入/异动资料的过程中,为保证交易(transaction)是正确可靠的,所必须具备的四个特性:

  • 原子性(Atomicity):要么整个事务成功,要么整个不成功
  • 一致性(Consistency):数据库在事务之间处于一个一致的状态中
  • 隔离性(Isolation):又称独立性,在其他事务结束之前,事务看不到被它们更改的数据
  • 持久性(Durability):一旦数据库系统通知用户事务成功,数据就永不丢失

BASE 模型

反 ACID 模型,完全不同 ACID 模型,牺牲高一致性,获得可用性或可靠性:

  • 基本可用(Basically Available):支持分区失败(e.g. sharding 碎片划分数据库)
  • 软状态(Soft state):状态可以有一段时间不同步,异步。
  • 最终一致(Eventually consistent):最终数据是一致的就可以了,而不是时时高一致。

BASE 思想的主要实现有:

  1. 按功能划分数据库
  2. sharding 碎片
阅读更多

MVC、MVP、MVVM联系和区别

MVC、MVP、MVVM 这些模式是为了解决开发过程中的实际问题而提出来的,目前作为主流的几种架构模式而被广泛使用。

阅读更多

理解并发和并行的区别

并发是什么?

并发是指同一时刻只能处理一个任务,但一个时间段内可以对多个任务交替处理 。一个例子就能很好地说明这一点。

我们可以想象一个人正在跑步。假如在他晨跑时,鞋带突然松了。于是他停下来,系一下鞋带,接下来继续跑。这个例子就是典型的并发。这个人能够一下搞定跑步和系鞋带两件事,即立即处理多个任务。

并行是什么?并行和并发有何区别?

并行是指同一时刻可以处理多个任务 。这听起来和并发差不多,但其实完全不同。

我们同样用这个跑步的例子来帮助理解。假如这个人在慢跑时,还在用他的 iPod 听着音乐。在这里,他是在跑步的同时听音乐,也就是同时处理多个任务。这称之为并行。