网速,带宽,并发量的关系

字节B 和位b的关系

一个字节(Byte)等于8位(bit)
例如 : 0001 0001 这就是一个字节,里面有8位0或1组成
1Byte = 8bit
网络运营商所说的多少兆宽带,1Mbps : 每秒钟传输1Mb的数据 。注意这里用到的是小b 而不是B
而我们通常所说的网速是 多少kB/s 或者多少MB/s 这里用的是B
所以带宽和网速的关系就是 : 带宽是网速的八倍
1Mb = 1024kb = 1024/8 kB = 128kB
一兆带宽是理论 上是 1Mb/s= 128KB/s

带宽 和并发的关系

首先我们要明白, 50兆的带宽即 50Mbps 带宽使用率并不是
完全占满才效果更好,而是像我们的电脑cpu 如果使用率越高,
电脑越来卡,同样带宽也是,带宽占用越多就会越拥挤或者说越堵塞,
经验来说,大约70%的使用率是稳定的网络

50Mbps 0.7 = 35Mbps (70%的使用是稳定的网络)
35Mbps = 35
1024kb/s = 35 * 1024 / 8 kB/s = 4480kB/s
假设我们一个数据包的大小是10kB 那么我们的并发量 : 4480KB/s / 10KB = 448 /s
当然这里只是做的一个假设,具体的并发量还是跟数据包的大小有关的

推算一下公式 :
并发量 = 带宽(Mbps) 0.7 (1024 / 8) / 数据包(KB)

MAC 安装docker,docker使用方法

mac 安装

brew cask install docker

成功后目录 /Applications/Docker.app/Contents/Resources/bin/docker

设置环境变量

sudo vim /etc/profile (在文档最后,添加: export PATH="/Applications/Docker.app/Contents/Resources/bin:$PATH")
保存,退出,然后运行: source /etc/profile

查看安装版本 : docker --version

镜像加速 Docker for mac 应用图标 -> Perferences… -> Daemon -> Registry mirrors 添加 网易的镜像地址:http://hub-mirror.c.163.com

点击 Apply & Restart 按钮 最后用 docker info 查看 出现 : Registry Mirrors: http://hub-mirror.c.163.com 代表配置成功

docker 基本操作

docker run ubuntu:15.10 /bin/echo "Hello world"

各个参数解析:
    docker: Docker 的二进制执行文件。
    run:与前面的 docker 组合来运行一个容器。
    ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
    /bin/echo "Hello world": 在启动的容器里执行的命令  

运行交互式的容器 我们通过docker的两个参数 -i -t,让docker运行的容器实现"对话"的能力

docker run -i -t ubuntu:15.10 /bin/bash

各个参数解析:
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。

启动容器(后台模式)

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

查看正在运行的 docker

docker ps

查看所有的历史 docker

docker ps -a 注: 不用每次使用都重新启动一个容器,这个命令可以查找上次使用过的容器

查看容器类标准输出 两种方式

docker logs 2b1b7a428627 (容器ID)
docker logs festive_bose (docker分配的容器名称)

停止容器

docker stop 2b1b7a428627

开始容器

docker start 2b1b7a428627

重启容器

docker restart 2b1b7a428627

重新进去已经拉起的容器

docker attach 2b1b7a428627

运行一个web应用

docker pull training/webapp  //载入镜像
docker run -d -P training/webapp python app.py   //后台运行一个Python应用
参数说明:
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。系统分配

docker info 查看信息

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。
这里可以通过浏览器访问 : 127.0.0.1:32768 输出 : hello world

可以用 -p 设置不一样的端口 多个-p 可以映射多个端口

docker run -d -p 5000:5000 training/webapp python app.py

指定端口查看容器 docker port NAMES

日志查看 -f 类似于tail -f

docker logs -f NAMES

docker top 来查看容器内部运行的进程

docker top NAMES

使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息

docker inspect bf08b7f2cd89

查看docker上所有的容器

docker ps -a

删除一个不需要的容器

docker rm NAMES

docker 镜像使用

显示本机上的所有镜像

docker images

获取新的镜像

docker pull ubuntu:15.10

查找镜像, 可以从 Docker Hub 上查找 网址为: https://hub.docker.com

也可以用docker search 命令来查找
例 : docker search httpd

删除本地镜像

docker rmi -f 29e03e314ace (从最新版本开始删除,否则会报错)

创建镜像

当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对本地镜像进行更改。
1.从已经创建的容器中更新镜像,并且提交这个镜像
2.使用 Dockerfile 指令来创建一个新的镜像

更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。
runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash
root@e218edb10161:/#

在一系列骚操作后执行 : apt-get update 命令进行更新。
(如果当前版本已经过期 , 更新操作会报错
old-releases.ubuntu.com ,这是一个过期库的归档。因此,当Canonical支持的Ubuntu过期后,你必须把源切换到 old-releases.ubuntu.com
执行 :
sed -i -r 's/([a-z]{2}.)?archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
sed -i -r 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list

然后使用文本编辑器打开 /etc/apt/sources.list ,找到 extras.ubuntu.com,这个库也不再支持13.04。所以你需要使用 “#” 号注释掉 extras.ubuntu.com。
    #deb http://extras.ubuntu.com/ubuntu raring main
    #deb-src http://extras.ubuntu.com/ubuntu raring main

在完成操作之后,输入 exit命令来退出这个容器。
此时ID为e218edb10161的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。

docker commit -m="has update" -a="czc" e218edb10161 czc/ubuntu:v2

各个参数说明:

-m:提交的描述信息

-a:指定镜像作者

e218edb10161:容器ID

czc/ubuntu:v2:指定要创建的目标镜像名

构建镜像

我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
内容如下:
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
sudo docker build -t czc/centos:6.7 .
参数说明:
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

部署 nginx - php - mysql - phpMyAdmin

拉去相对应的镜像

docker pull php:7.2
docker pull nginx
docker pull mysql
docker pull phpmyadmin/phpmyadmin

注 : 由于编辑器bug,下面的 --name 和 --link 都是 两个'-' 显示成了一个

创建mysql 容器

sudo mkdir -p /Users/chuzhichao/docker/mysql/data /Users/chuzhichao/docker/mysql/logs /Users/chuzhichao/docker/mysql/conf
data 目录将映射为 mysql 容器配置的数据文件存放路径
logs 目录将映射为 mysql 容器的日志目录
conf 目录里的配置文件将映射为 mysql 容器的配置文件
命令 : docker run -p 3306:3306 --name chuzhichao-mysql -v /Users/chuzhichao/docker/mysql/logs:/logs -v /Users/chuzhichao/docker/mysql/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 mysql

进入容器:
docker exec -it chuzhichao-mysql bash
登录mysql :
mysql -u root -p 123456
添加远程用户 :
CREATE USER 'chuzhichao'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON . TO 'chuzhichao'@'%';

或者: ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

创建关联文件夹

mkdir -p /Users/chuzhichao/docker/nginx/conf.d && mkdir /Users/chuzhichao/www && cd /Users/chuzhichao/docker/nginx/conf.d && sudo touch default.conf

创建php-fpm 容器

命令 : docker run --name chuzhichao-php -d -v /Users/chuzhichao/www:/var/www/html:ro --link chuzhichao-mysql:db php:7.2-fpm

解释 : --name chuzhichao-php 是容器的名字。
/Users/chuzhichao/www 是本地 php 文件的存储目录,/var/www/html 是容器内 php 文件的存储目录,
:ro 表示只读。
--link chuzhichao-mysql:db 这个参数就是告诉docker容器需要使用chuzhichao-mysql 容器,并将其别名为db,
这样在这两个容器里就可以使用“db”来作为提供mysql数据库服务的机器名,
所以在最后启动参数里我们使用的是“mysql -h db -u root -p ”来连接mysql数据库的。

创建nginx 容器

首先: 修改 default.conf
server {
listen 80;
server_name localhost;

            location / {
                root   /usr/share/nginx/html;
                index  index.html index.htm;
            }

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   /usr/share/nginx/html;
            }

            location ~ \.php$ {
                fastcgi_pass   php:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
                include        fastcgi_params;
            }
        }   

解释 ; /var/www/html 是 chuzhichao-php 中 php 文件的存储路径,经 docker 映射,变成本地路径 /Users/chuzhichao/www

命令:
docker run --name chuzhichao-nginx -p 80:80 -d \
-v /Users/chuzhichao/www:/usr/share/nginx/html:ro \
-v /Users/chuzhichao/docker/nginx/conf.d:/etc/nginx/conf.d:ro \
--link chuzhichao-php:php \
nginx

解释: -p 80:80 用于添加端口映射,把 chuzhichao-nginx 中的 80 端口暴露出来。
/Users/chuzhichao/www 是本地 html 文件的存储目录,/usr/share/nginx/html 是容器内 html 文件的存储目录。
/Users/chuzhichao/docker/nginx/conf.d 是本地 nginx 配置文件的存储目录,/etc/nginx/conf.d 是容器内 nginx 配置文件的存储目录。
--link chuzhichao-php:php 把 chuzhichao-php 的网络并入 chuzhichao-nginx,并通过修改 chuzhichao-nginx 的 /etc/hosts,把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm。

测试 : 在 /Users/chuzhichao/www 目录中添加index.php , index.html 访问 : http://127.0.0.1/index.php

创建 phpmyadmin 容器

docker run --name chuzhichao-myadmin -d --link chuzhichao-mysql:db -p 8080:80 phpmyadmin/phpmyadmin
测试 : 访问 http://127.0.0.1:8080/

配置swoole

拉取镜像 : docker hub上的环境为php7.1.30 + swoole4.4.3
docker pull easyswoole/easyswoole3

启动    : docker run -ti -p 9501:9501  -p 9502:9501    -v /Users/chuzhichao/easyswoole:/easyswoole        easyswoole/easyswoole3 
复制镜像内部代码 :  docker cp dfb920f228d5:/easyswoole  /Users/chuzhichao/    


-it 控制台启动容器
-p  配置映射端口, 可映射多个端口
-v  映射容器内文件到本地, 方便修改

备注 : 由于是控制台启动,所以不能用exit退出容器 , 直接关掉控制台就行  或者使用Ctrl+P+Q
       代码更新后重启容器  docker  restart 9422dbf0a863 

什么是网络代理

代理服务器英文全称是Proxy Server
代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,是直接联系到目的站点服务器,然后由目的站点服务器把信息传送回来。代理服务器是介于浏览器和Web服务器之间的另一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。

  大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。

  更重要的是:代理服务器是 Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联 (OSI) 模型的对话层,从而起到防火墙的作用。

  鉴于上述原因,代理服务器大多被用来连接INTERNET(局域网)和INTRANET(国际互联网)。在国内,所谓中国多媒体公众信息网和教育网都是独立的大型国家级局域网,是与国际互联网隔绝的。出于各种需要,某些集团或个人在两网之间开设了代理服务器,如果我们知道这些代理服务器的地址,就可以利用它到达网外网,例如从169到达163。代理服务器就象是连接两岸的桥梁,但是169与163之间的代理服务器一般的都被设置了访问密码,或者要收代理费用,阿Z搜索并提供的是完全免费的代理服务器地址,完全没有任何限制,不需缴交任何额外费用!
网络代理有两种:
1.局域网上,通过别人的计算机上网。这种,只要知道IP地址,用户,密码,在IE 选项-连接-局域网设置上把相应的东西填上就可以了。

2.突破上网限制,通过别的计算机来实现上网的无限制。设置就是在IE选项上相应网络连接点设置天上相应的地址,用户,密码就可以了。

3.国内的通通通,要下载软件。具体到通通通网站看吧。 什么是代理服务器?
代理服务器(Proxy server),从其名字上不难理解,就是做代理的,其作用与现在各种各样的代理商差不多。
作为教育网和169的用户来讲,他们不能直接访问国外的站点,而且网络速度也惊人的慢,这样很多网络功能就无法使用。最典型的例子就是不能用Icq了,因为Icq的服务器都在国外,直接连不上。因此在这个时候代理服务器就起了至关重要的作用。
通常我们访问网站都是直接与目的主机相连,使用了代理服务器,可先与代理服务器进行连接,然后把我们的请求(比如说我们想得到哪个网页的内容)告诉代理服务器,由代理服务器帮我们取下来。一般代理服务器都有一个很大的Cache,起缓冲的作用,它不断将新取得数据储存到它的存储器上;如果浏览器所请求的数据在它本机的存储器上已经存在,而且是最新的话,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著地提高浏览速度和效率了。
代理服务器通常有两种类型,Http代理和Socks5代理。Http代理是用来浏览网页用的,其端口一般是80和8080,不过也有3128等其它端口的;而socks5代理则可以看成是一种全能的代理,不管是telnet、ftp还是irc聊天都可以用它,这类代理的端口通常是1080。