本文用实例演示如何把自己的python代码库打包上传pypi,以使用pip进行安装。
分类目录归档:研发dev
Tmux
简单点说,这个工具能解决nohup python faceswap.py train & 报cannot connect to X server的问题,即远端的程序不能后台运行,但是你的网络又经常会断开,用Tmux就好了
视频与图片互转工具:ffmpeg使用说明
一个非常方便的视频<->图片互转工具:视频截帧、帧图片合成视频、添加水印/字幕等。
如何使用gdb分析c++ core
一、概述
使用c++开发程序时,经常会遇到运行中core的情况,如果是偶发的就更加难以定位,本文讲解如何使用gdb进行core位置的分析定位。
Jupyter Notebook支持多python版本
jupyter notebook里的代码有py2.7也有py3.0的,本文讲解如何使jupyter同时支持多个python版本(python2.7.5 + python3.6.2)。
Keras: 基于 Python 的深度学习库
Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。
python skimage图像处理
skimage即是Scikit-Image。基于python脚本语言开发的数字图片处理包,比如PIL,Pillow, opencv, scikit-image等。 PIL和Pillow只提供最基础的数字图像处理,功能有限;opencv实际上是一个c++库,只是提供了python接口,更新速度非常慢。scikit-image是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,与matlab一样。
LSM VS B-Tree
LSM树整个结构不是有序的,所以不知道数据在什么地方,需要从每个小的有序结构中做二分查询,找到了就返回,找不到就继续找下一个有序结构。所以说LSM牺牲了读性能。但是LSM之所以能够作为大规模数据存储系统在于读性能可以通过其他方式来提高,比如读取性能更多的依赖于内存/缓存命中率而不是磁盘读取。
TiDB 开源分布式关系型数据库
概述:https://blog.csdn.net/D_Guco/article/details/80641236
MySQL vs RocksDB vs TiDB 完全版性能测试:http://liky.farbox.com/post/tidb
三大主流软件负载均衡器对比(LVS vs Nginx vs Haproxy)
三大主流软件负载均衡器对比(LVS vs Nginx vs Haproxy)
nginx配置https
最近做点小程序,服务端api必须是https域名,配置方法如下:
创建ssh证书
自己生成CA证书:(自己生成的根证书浏览器不认,会提示不安全,但https可访问)
cd /home/openssl
openssl genrsa -des3 -passout pass:123456 -out test.pem 2048 #生成RSA私钥
openssl rsa -passin pass:123456 -in test.pem -out test.key #提取密钥中的公钥
openssl req -new -key test.key -out test.csr -subj /C=CN/ST=beijing/L=beijing/O=YAN/CN=www.yanjingang.com #生成证书请求文件
openssl x509 -req -days 365 -in test.csr -signkey test.key -out test.crt #生成自签名证书
openssl x509 -in test.crt -noout -text #查看证书文件
阿里云、百度云有免费的单域名DV证书(下载注意选择nginx版本证书)
深入理解PHP7内核之zval
PHP7已经发布, 如承诺, 我也要开始这个系列的文章的编写, 主要想通过文章让大家理解到PHP7的巨大性能提升背后到底我们做了什么, 今天我想先和大家聊聊zval的变化.
教娃学编程—1.入门概念、int变量、if判断、函数
程序概念、int变量、if判断、函数概念
#include <stdio.h>
int main()
{
/* YJY */
int num = 1;
printf("%d\n", num);
if(num == 1){
printf("YJY\n");
}else{
printf("YAN\n");
}
/* jiafa lianxi */
int num1 = 89;
int num2 = 107689;
int result = sum(num1, num2);
printf("%d\n", result);
return 0;
}
/* sum */
int sum(int num1, int num2){
return num1+num2;
}
2018.10.20
安全加密算法选择指南
用途 | 推荐使用的安全的密码算法 | 常见的不安全的密码算法 |
对称加密 | AES(密钥长度>=128bits) | DES、3DES、RC2、RC4 |
哈希算法 | SHA256或以上 | MD5、SHA1 |
非对称加密 | RSA(密钥长度>=2048bits) | RSA(密钥长度<=1024bits) |
数字签名 | RSA(密钥长度>=2048bits) | RSA(密钥长度<=1024bits) |
密钥交换 | DH(密钥长度>=2048bits) | DH(密钥长度<=1024bits) |
备注:
1. AES不建议使用ECB(同样的明文总是会产生相同的密文),推荐使用CBC模式。
2. 应注意编码及加密的区别,例如base64属于编码而不属于加密。
3. 加解密中建议使用安全随机数,如java.security.SecureRandom,类Unix系统 (包括OS X): /dev/random;不安全随机数如C标准函数random(),java.util.Random()。
4. 不建议使用私有、非标准化的加解密方式。
密码保护:压测工具uload
小猪学AI—线性回归之房价预测
上次我们进行了简单的环境安装和模型应用尝试,今天开始通过paddlepaddle的房价预测看一下简单的线性回归有监督模型是怎么训练出来的。
matplotlib绘图学习 Mark
Jupyter Notebook 快速入门
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。在本文中,我们将介绍 Jupyter notebook 的主要特性,以及为什么对于希望编写漂亮的交互式文档的人来说是一个强大工具。
史上最详细的iptables说明
# 限制redis端口只能被制定ip访问
vim /etc/sysconfig/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#-A INPUT -p icmp -j ACCEPT
#-A INPUT -i lo -j ACCEPT
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited
# 除127.0.0.1、10.10.67.77这两台机器外禁止链接本机redis 6379端口
-A INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT
-A INPUT -s 10.10.67.77 -p tcp --dport 6379 -j ACCEPT
-A INPUT -p TCP --dport 6379 -j REJECT
COMMIT
service iptables restart
service iptables status
小猪手把手教你搭建MongoDB分片+副本集群
分片为应对高吞吐量与大数据量提供了方法。使用分片减少了每个分片需要处理的请求数,因此,通过水平扩展,集群可以提高自己的存储容量和吞吐量。
MongoDB内置了非常棒的分片与副本集机制以及无结构文档的特性,并迅速崛起为最受欢迎的Nosql数据库(db ranking),尤其是它的分片机制非常值得学习(MongoDB官方文档)。
MongoDB Shard分片:
mongodb分片可以非常方便的实现大规模存储集群并易于扩展。
mongo的分片集群架构设计:
(1)mongos :前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
(2)config server:mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。
(3)shard:用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障。
同库内分片表与非分片表共存 :
根据分片键值 划分为 多个块区间,块内数据超过指定大小后单块区间会裂变为多个块区间:(MongoDB在超出配置的块大小时会拆分块。插入和更新都可以触发块拆分。)
块划分到不同分片,默认规则为每个分片保持相同的块数:(需要多地域机房部署,建议分片键前缀稳定的地域字段,这样可以使数据存储和请求发送到对应地域的分片中)
分片数据不均匀时,均衡器负责在分片间移动块,并修改分片块配置。(均衡器一次只迁移一个块,但依然可能会对性能有一定影响)
MongoDB Replica副本集:
可以非常方便的实现主从复制和故障自动切换。
mongo副本集特性:
(1)N 个节点的集群
(2)任何节点可作为主节点
(3)所有写入操作都在主节点上
(4)自动故障转移
(5)自动恢复
mongo副本集节点包含以下三类角色:
(1)主节点(Primary):是 Replica Set 中唯一接收写请求的节点,并将写入指令记录到 oplog 上。副本节点通过复制 oplog 的写入指令同步主节点的数据。Secondary。一个 Replica Set 有且只有Primary 节点,当Primar挂掉后,其他 Secondary 或者 Arbiter 节点会重新选举出来一个主节点。应用程序的默认读取请求也是发到 Primary节点处理的。
(2)副本节点(Secondary):通过复制主节点 oplog 中的指令与主节点保持同样的数据集,当主节点挂掉的时候,参与主节点选举。需要注意副本节点不建议用于读写分离,同步延迟时会有数据不一致的情况,建议只用于HA故障快速切换、数据备份、非时效性数据分析等。读写分离问题通过shard分散压力解决。
(3)仲裁者(Arbiter):不存储实际应用数据。与其他members保持心跳连接,持有一个投票配额(在members为偶数时增加arbiter节点为奇数可以加快primary多少派意见达成),只投票参与选取主节点,但不会被选举成为主节点。
副本集的最小的部署单位可以为“primary + secondary + arbiter”,或者为“primary + 2*secondaries”,已经基本可以满足HA的需要。建议3个meembers即可,如确实需要更多,需要尽可能保证members个数为奇数,且至少有2个member保存数据。一个复制集集群内最多支持50个members,但是最多只能有7个可以投票。
典型的“Primary主 + Secondary从+ Arbiter辅助投票”:
典型的“Primary主 + 2*Secondary从”故障转移:
下边主要讲解一下实际搭建mongodb分片+副本集集群的具体过程。
一、下载mongodb
mkdir -p /home/work/mongodb/bin/
cd /home/work/mongodb/bin/
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.22.tgz
tar zxvf mongodb-linux-x86_64-3.2.22.tgz
二、mongodb集群配置
测试集群拓扑结构:
server0作为route入口;后置server1/server2/server3为数据存储及仲裁服务器,各3个分片,互为主从。