Docker容器硬盘热扩容-centos6

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

前面已介绍了docker很多知识点的操作记录,今天这里梳理下docker容器空间扩展的操作。默认情况下,docker容器的空间是10G。在实际生产环境下,对docker容器进行热扩容(动态扩容)是非常重要的一个需求。

Docker容器动态扩展的优点:
1)不需要修改docker配置,不需要重启docker服务;
2)可以直接对运行中的容器进行动态扩展(只能增,无法缩);Docker容器动态扩展的条件:
1)docker所在宿主机分区的格式必须是ext2、ext3、ext4;
2)docker存储引擎必须是devicemapper
---------------------------------------------------------------------------------------------------------------------------
这里需要说明一下我在实际操作中遇到的问题:
以下Docker容器动态扩容的操作步骤,我在centos7上操作是不可行的!
xfs是CentOS7的默认文件系统类型,可以在centos7系统安装时手动指定所在分区为ext4格式。但即使这样,创建容器后,发现容器的/分区仍然是xfs格式!
就是说centos7下宿主机分区已改为ext4,但容器还是xfs。这就导致后面的容器扩展失败!(使用resize2fs或xfs_growfs都不行)
具体原因不明

 

下面的操作均是在centos6下操作的:

 

宿主机分区的格式是ext4
[root@localhost ~]# df -hT
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda3      ext4   193G  103G   80G  57% /
tmpfs          tmpfs   32G     0   32G   0% /dev/shm
/dev/sda1      ext4   194M   79M  106M  43% /boot
/dev/sda2      ext4   721G  136G  549G  20% /home1)下载私有仓库里的镜像(centos6和centos7下的docker命令和配置还是有所不同的)
[root@localhost ~]# vim /etc/sysconfig/docker
......
other_args='--insecure-registry=192.168.1.23:5000'
.....[root@localhost ~]# service docker restart
Stopping docker:                                           [  OK  ]
Starting docker:                                           [  OK  ][root@localhost ~]# docker pull 192.168.1.23:5000/tomcat7
latest: Pulling from 192.168.1.23:5000/tomcat7
3690474eb5b4: Pull complete
0a444b299d5a: Pull complete
a04895de1996: Pull complete
08e1d80f2b80: Pull complete
fa7cc393f68b: Pull complete
Digest: sha256:b28f263bb8d5de3c93d64e85a5e9ee5cd6a1042f45ecbb951888d897d99e14e2
Status: Downloaded newer image for 192.168.1.23:5000/tomcat7:latest[root@localhost ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
192.168.1.23:5000/tomcat7   latest              fa7cc393f68b        2 weeks ago         562.3 MB2)创建容器
[root@localhost ~]# docker run -ti -d --name my-test -p 8998:8080 192.168.1.23:5000/tomcat7 /bin/bash
813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS                    NAMES
813389572d7f        192.168.1.23:5000/tomcat7   "/bin/bash"         29 seconds ago      Up 28 seconds       0.0.0.0:8998->8080/tcp   my-test[root@localhost ~]# docker exec -ti my-test /bin/bash
[root@813389572d7f /]# df -HT
Filesystem                                                                                      Type   Size  Used Avail Use% Mounted on
/dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 ext4    9.9G  703M  8.7G   8% /
tmpfs                                                                                           tmpfs   34G     0   34G   0% /dev
shm                                                                                             tmpfs   68M     0   68M   0% /dev/shm
/dev/sda3                                                                                       ext4   207G  111G   86G  57% /etc/hosts注意
容器my-test的大小为默认的10G。
上面命令结果中的/dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3文件就是my-test容器存储的文件名。3)--------------下面开始进行容器空间的动态扩容------------------使用dmsetup查看该文件扇区信息.下面命令结果中的第二个数字(即20971520)是设备的大小,表示有多少个 512-bytes 的扇区. 这个值略高于 10GB 的大小。
[root@localhost ~]# dmsetup table /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3
0 20971520 thin 253:0 13计算20G所需扇区数目
[root@localhost ~]# echo $((20*1024*1024*1024/512))
41943040精简快照目标的一个神奇的特点是它不会限制卷的大小。当创建它的时候,一个精简的卷使用0个块,当开始往块里面写入的时候,它们会从共用的块池中进行分配。
可以写0个块,或者是10亿个块,这个和精简快照目标没关系。文件系统的大小只和Device Mapper表有关系。
只需要装载一个新的表,这个完全和之前的是一样的,但是有更多的扇区。仅此而已。将新的扇区大小写入,注意只是改变旧表中的第二个数字20971520的数字,其他数字不变!
[root@localhost ~]# echo 0 41943040 thin 253:0 13 | dmsetup load /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3将修改后的容器存储文件激活
[root@localhost ~]# dmsetup resume /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3重新查看文件信息
[root@localhost ~]# dmsetup table /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3
0 41943040 thin 253:0 13更改文件系统大小,使变更生。
[root@localhost ~]# resize2fs /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 is mounted on /var/lib/docker/devicemapper/mnt/813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 to 5242880 (4k) blocks.
The filesystem on /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 is now 5242880 blocks long.------------------------------------------------------------------------------------------------------------------
如果这一步出现下面报错:
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: 设备或资源忙 当尝试打开 /dev/mapper/docker-253:0-268868570-2163383f446357876b301fb3942b706436b5eea111c06a3acba0006ec5272372 时找不到有效的文件系统超级块.原因是resize2fs仅能支持ext2、ext3、ext4,不支持xfs。将docker服务器的文件系统格式调整为ext4即可。
本文操作机是centos6系统,分区都是ext4格式,故不会出现这个报错
------------------------------------------------------------------------------------------------------------再次登录my-test容器,发现容器大小已经更新为20G!
[root@localhost ~]# docker exec -ti my-test /bin/bash
[root@813389572d7f /]# df -hT
Filesystem                                                                                      Type   Size  Used Avail Use% Mounted on
/dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 ext4    20G  708M   18G   4% /
tmpfs                                                                                           tmpfs   32G     0   32G   0% /dev
shm                                                                                             tmpfs   64M     0   64M   0% /dev/shm
/dev/sda3                                                                                       ext4   193G  103G   80G  57% /etc/hosts------------------------------------------------------------
扩容后可能出现的问题:停止该容器后,无法重新启动-
当容器扩容之后,由于dm认为设备块大小仍然为之前设置的初始大小,所以会发生无法起启动的情况,这时只要重新操作即可。
1)必须要先启动一下,让其生成dm文件才能修改
[root@localhost ~]# docker start my-test
#此时会报错,不要理会,执行以下操作即可
[root@localhost ~]# echo 0 41943040 thin 253:3 725 | dmsetup load /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3
[root@localhost ~]# dmsetup resume /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3
---------------

 

为了方便后续容器动态扩容,可以采用下面的Dynamic_Modify_Docker_Disk.sh脚本(经测试可以使用)

#!/bin/bash
#This script is dynamic modify docker container disk
#Author Deng Lei
if [ -z $1 ] || [ -z $2 ]; thenecho "Usage: container_name increase_capacity"echo "Example: I want increase 11G to test"echo "The command is:   sh `basename $0` test 11"exit 1fi
if [ `docker inspect $1 &>>/dev/null &&  echo 0 || echo 1` -eq 1 ];thenecho "The container $1 is no exist!"exit 1
fi
container_id=`docker inspect -f '{{ .Id }}' $1`
now_disk=`dmsetup table /dev/mapper/docker-*-$container_id|awk '{print $2}'`
disk=$(($2*1024*1024*1024/512))
if [ $disk -lt $now_disk ];thenecho "I can't shink container $1 from $(($now_disk*512/1024/1024/1024))G to ${2}G!I only modify contanier increase disk!"exit 1
fi
dmsetup table /dev/mapper/docker-*-$container_id|sed "s/0 [0-9]* thin/0 $disk thin/"|dmsetup load /dev/mapper/docker-*-$container_id
dmsetup resume /dev/mapper/docker-*-$container_id
resize2fs /dev/mapper/docker-*-$container_id
if [ $? -eq 0 ];thenecho "dynamic container $1 disk to ${2}G is success!"
elseecho "dynamic container $1 disk to ${2}G is fail!"
fi
比如给my-test容器动态扩容到30G[root@localhost ~]# chmod 755 Dynamic_Modify_Docker_Disk.sh
[root@localhost ~]# sh Dynamic_Modify_Docker_Disk.sh my-test 30
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 is mounted on /var/lib/docker/devicemapper/mnt/813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 2
Performing an on-line resize of /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 to 7864320 (4k) blocks.
The filesystem on /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 is now 7864320 blocks long.dynamic container my-test disk to 30G is success!登陆容器查看,已扩容至30G!
[root@localhost ~]# docker exec -ti my-test /bin/bash
[root@813389572d7f /]# df -hT
Filesystem                                                                                      Type   Size  Used Avail Use% Mounted on
/dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 ext4    30G  708M   28G   3% /
tmpfs                                                                                           tmpfs   32G     0   32G   0% /dev
shm                                                                                             tmpfs   64M     0   64M   0% /dev/shm
/dev/sda3
动态扩容后,对容器进行重启,会发生报错,此时再运行一次该脚本进行重新扩容(空间大小要等于或大于之前的设置,出现报错不用管),再启动容器即可(注意:docker容器目前是无法进行动态缩减的,仅能进行增加操作)。 --------------------------------------- 下面说下Docker镜像和容器存放目录修改方法------------------------------------------这里为了测试效果,将xfs格式的home分区盘卸载,格式化为ext4后重新挂载(当然也可以再用之前的xfs格式)。然后将Docker的镜像、容器存放目录由之前默认的/var/lib/docker修改为home分区下的路径。
(当然,也可以另外新建一个分区,格式化,然后直接挂载到/var/lib/docker目录下)
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs       150G  5.7G  145G    4% /
devtmpfs                devtmpfs   32G     0   32G    0% /dev
tmpfs                   tmpfs      32G     0   32G    0% /dev/shm
tmpfs                   tmpfs      32G  474M   31G    2% /run
tmpfs                   tmpfs      32G     0   32G    0% /sys/fs/cgroup
/dev/mapper/centos-home xfs          774G   33M  774G    1% /home
/dev/sda2               xfs       397M  120M  278M   31% /boot
tmpfs                   tmpfs     6.3G     0  6.3G    0% /run/user/0[root@localhost ~]# umount /home/         //卸载home分区盘
[root@localhost ~]# mkfs.ext4 /dev/mapper/centos-home        //格式化home盘为ext4文件格式
[root@localhost ~]# mount /dev/mapper/centos-home /home      //重新挂载
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs       150G  5.7G  145G    4% /
devtmpfs                devtmpfs   32G     0   32G    0% /dev
tmpfs                   tmpfs      32G     0   32G    0% /dev/shm
tmpfs                   tmpfs      32G  474M   31G    2% /run
tmpfs                   tmpfs      32G     0   32G    0% /sys/fs/cgroup
/dev/sda2               xfs       397M  120M  278M   31% /boot
tmpfs                   tmpfs     6.3G     0  6.3G    0% /run/user/0
/dev/mapper/centos-home ext4      762G   73M  723G    1% /home接着就可以移动Docker的数据到ext4格式的home磁盘上了:
先停止docker服务,保证移动的时候数据完整
[root@localhost ~]# service docker stop移动Docker的目录到一个备份的目录(可以mv改目录名,docker重启后会自动生成这个目录;也可以将目录下内容全部拷贝到别处,届时要想恢复docker数据,只需要将备份内容拷贝回来,然后重启docker服务即可)
[root@localhost ~]# mv /var/lib/docker /var/lib/docker_bak    //这样,再次启动docker服务后,镜像及容器数据都不在了。只有将拷贝内容移回来,数据才会恢复。修改开启自挂载配置,将home分区由之前的xfs改为ext4.
[root@localhost ~]# cat /etc/fstab#
# /etc/fstab
# Created by anaconda on Wed Oct 19 15:16:20 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                        xfs      defaults        0 0
UUID=349c9816-43e9-4c46-991a-e34e2370ab3f /boot  xfs      defaults        0 0
/dev/mapper/centos-home /home                    ext4     defaults        0 0
/dev/mapper/centos-swap swap                     swap     defaults        0 0[root@localhost ~]# mount -a    //这条命令是重新加载/etc/fstab文件,没有文件里定义的分区挂载没有挂,这条命令就会自动挂载上。
[root@localhost ~]# mount |grep home
/dev/mapper/centos-home on /home type ext4 (rw,relatime,seclabel,data=ordered)最后修改docker的镜像和容器存放路径,比如修改为/home/var/docker。
[root@localhost ~]# mkdir -p /home/var/docker
[root@localhost ~]# vim /etc/sysconfig/docker
......
OPTIONS='--selinux-enabled --log-driver=journald --graph=/home/var/docker'    //添加--graph=/home/var/docker参数然后启动docker服务,发现在新指定的目录/home/var/docker下产生了新数据
[root@localhost ~]# service docker start
[root@localhost ~]# ls /home/var/docker/
containers  devicemapper  image  network  tmp  trust  volumes接着恢复之前的镜像数据
[root@localhost ~]# service docker stop
[root@localhost ~]# rm -rf /home/var/docker/*
[root@localhost ~]# mv /var/lib/docker_bak/* /home/var/docker/
[root@localhost ~]# service docker start
[root@localhost ~]# docker images         //发现镜像数据已恢复到新目录/home/var/docker下了
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
192.168.1.23:5000/tomcat7      latest              47c5123914a1        8 days ago          562.3 MB
docker.io/redis                latest              83d6014ac5c8        13 days ago         183.6 MB
docker.io/ubuntu               latest              0ef2e08ed3fa        5 weeks ago         130 MB
docker.io/centos               latest              67591570dd29        3 months ago        191.8 MB
docker.io/tomcat               latest              ebb17717bed4        5 months ago        355.4 MB

----------------------------------------------------温馨提示------------------------------------------------

1)无法卸载分区
[root@localhost ~]# umount /home/
umount: /home: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))如上,卸载分区时提示无法卸载,则是有进程占用/home。
可以使用下面命令来终止占用进程:
[root@localhost ~]# fuser -m -k /home
/home: 1409 1519ce 1531e 1532e 1533e 1534e 1535e 1536e 1537e 1538e 1539e 1541e 1543e 1544e 1545e 1546e 1547e 1548e 1549e 1550e 1601m再次卸载home分区就成功了。
[root@localhost ~]# umount /home/-k 表示自动把霸占home分区的进程kill掉!
如果你不是很明确是否要杀死所有霸占设备的程序,还可以加一个-i 参数,这样每杀死一个程序前,都会询问!(即fuser -m -v -i -k /home)2)如按照上面步骤,将docker的存放目录更换到/home/var/docker下。
如果后续再对home分区进行强制卸载,然后再重新挂载或格式化的时候,会发现有报错:
[root@localhost ~]# fuser -m -k /home
[root@localhost ~]# mkfs.xfs -f /dev/mapper/centos-home
mkfs.xfs: /dev/mapper/centos-home contains a mounted filesystem
[root@localhost ~]# mount/dev/mapper/centos-home
mount: /dev/mapper/centos-home is already mounted or /home busy这是因为docker数据还占用着home分区,需要将docker服务停了才可以。

转自:https://www.cnblogs.com/kevingrace/p/6667063.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[个人网站搭建]·Django增加评论功能(Python3)

[个人网站搭建]Django增加评论功能 个人主页--> https://xiaosongshine.github.io/ 个人网站搭建github地址:https://github.com/xiaosongshine/djangoWebs 安装django插件 pip install django-contrib-comments配置settings.py INSTALLED_APP(#...,django_com…

【转载文章】记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案...

问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死。严重影响业务。 问题前提:老系…

50期权趋势卖方

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np from copy import * import pandas as pd #设定持仓细节数据表 #g.df = {}g.df = pd.DataFrame(columns = [date,code,price,volume,stoploss,iv]) print(type(g.…

一周工作60个小时并不值得骄傲,这是个问题!

本文由 极客范 - yesky 翻译自 Jeff Archibald。欢迎加入极客翻译小组,同我们一道翻译与分享。转载请参见文章末尾处的要求。当我们声称自己在这周,上周或是上个月超负荷地工作了多少时间时,一种自豪感便会油然而生。 我之所以这么说是因为…

Linux查看文件大小的几种方法

转自:https://blog.csdn.net/xiongyangg/article/details/54809810 stat命令stat filepathxanarryThinkPad:/$ stat ~/Downloads/jdk-8u60-linux-x64.tar.gzFile: /home/xanarry/Downloads/jdk-8u60-linux-x64.tar.gzSize: 181238643 Blocks: 353984 IO B…

2019.03.27【GDOI2019】模拟 T3

题目大意 给出$n$, $p$, 求有多少长度为$n$的排列可以被分成三个上升子序列, 数量对$p$取模, 数据范围 $3 \leq n \leq 500$. 思路 首先让我们考虑如果有一个排列,如何判断这个排列合法,我可以考虑贪心,维护三个上升序列的末尾(最大值),从左到右依次将数插入序列,把这个数贪心的…

DOM的那些事

到底调用函数时要不要加()? 在html中,onclick后必须接字符串调用,而在js中则必须接函数进行调用。 addEventListener和click区别 onclick只是一个属性,且是唯一的。其只能绑定一个事件,容易在不…

真格量化-隐含波动率购买

# coding:utf-8 #!/usr/bin/env python from PoboAPI import * import datetime import numpy as np #50ETF 和 50ETF期权的对冲交易,当ETF隐含波动率较高时就买50ETF并做空50ETF看涨期权#开始时间,用于初始化一些参数 def OnStart(context) :print("system starting...…

能让你成为更优秀程序员的10个C语言资源

本文由 伯乐在线 - archychu 翻译自 mycplus。欢迎加入 技术翻译小组。转载请参见文章末尾处的要求。一些人觉得编程无聊,一些人觉得它很好玩。但每个程序员都必须紧跟编程语言的潮流。大多数程序员都是从C开始学习编程的,因为C是用来写操作系统、应用程…

解决 -- 代码没有问题时接口报错:Status Code: 404 Not Found

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 我能确定这个工程的接口代码肯定没有问题,这时请求接口依旧报 404。 如: 经过多方检查 最终确认问题原因&…

渗透测试学习

渗透学习路线:https://www.sec-wiki.com/skill/2 经常应该浏览的网站:www.freebuf.comdrops.wooyun.orgwww.sec-wiki.com/www.t00ls.net/www.91ri.orghttp://fex.baidu.com/blog/2014/05/what-happen/了解了web访问网页的基本过程http://www.qianxingzhe…

java版开源工作流引擎ccflow从表数据数据源导入设置

为什么80%的码农都做不了架构师?>>> 关键字驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow .net开源工作流 从表数据导入设置 概要说明在从表的使用中我一般都会用到从数据库引入一些数据到表单中,这时候就需要有一个功能能够查询…

真格量化——中性策略交易期权

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np from copy import *import pandas as pd #设定持仓细节数据表 #g.df = {}g.df = pd.DataFrame(columns = [date,code,price,volume,stoploss,iv]) g.a = [] g.b =…

一周消息树:程序员想找好工作?那就学好Linux!

摘要:从一小众化的系统发展到今天在国际上支撑着绝大部分公司的重量级系统,Liunx现在被越来越多的公司重视。而Linux人才却没有跟上,为此,MongoDB公司的副总裁Matt Asay给软件开发者们一个建议:要学好Linux。 近期&…

注解@Cacheable(value =“XXX“) 实现缓存 -- 失效原因

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一个项目中使用到了注解缓存,但无论怎么检查都不生效,反复确认缓存的使用本身应该没有出错。 最后确认原因&…

读书笔记011:《伤寒论》- 手厥阴心包经

手厥阴心主起胸,属包下膈三焦宫,支者循胸出胁下,胁下连腋三寸同。仍上抵腋循臑内,太阴、少阴两经中,指透中冲支者别,小指次指络相通。此经少气原多血,是动则病手心热,肘臂挛急腋下肿…

真格量化——做空波动率卖期权策略

# coding:utf-8 #!/usr/bin/env python # EmuCounter2 from PoboAPI import * import datetime import numpy as np#开始时间,用于初始化一些参数 def OnStart(context) :print "system starting..."#设定全局变量品种g.code1 = "m1901-C-3300.DCE" #豆粕…

支撑4.5亿活跃用户的WhatsApp架构概览

摘要:不顾谷歌CEO阻拦,WhatsApp最终以190亿美元的价格花落Facebook。能获如此天价与其月4.5亿的活跃用户是分不开的,同样不可或缺的还有支撑每日数百亿消息的高可靠架构。 【编者按】以190亿美元的价格出售给Facebook,交易谈判过…

C++ 常用函数总结

平时常用C刷一些算法题&#xff0c;C内置了许多好用的工具函数&#xff0c;但时间一长总是容易忘记&#xff0c;这里简单做一下总结&#xff0c;方便复习&#xff01; <stdlib.h> atoi(const char* str)将一串字符转换为int型atof(const char* str)同上&#xff0c;转换为…

注解驱动的 Spring cache 缓存介绍

概述 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Spring 3.1 引入了激动人心的基于注释&#xff08;annotation&#xff09;的缓存&#xff08;cache&#xff09;技术&#xff0c;…