分类目录归档:研发dev

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之所以能够作为大规模数据存储系统在于读性能可以通过其他方式来提高,比如读取性能更多的依赖于内存/缓存命中率而不是磁盘读取。 阅读全文

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版本证书)

教娃学编程—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. 不建议使用私有、非标准化的加解密方式。

史上最详细的iptables说明

iptables基本概念

iptables动作总结

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

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个分片,互为主从。 阅读全文