Paul Jiang's Blog

  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

分布式系统设计-支付系统

发表于 2018-12-10 | 更新于 2020-05-17 | 分类于 分布式

分布式系统设计-秒杀系统

发表于 2018-12-10 | 更新于 2020-05-17 | 分类于 分布式

Linux常用命令-awk

发表于 2018-11-18 | 更新于 2020-05-17 | 分类于 运维

awk命令形式

1
2
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
awk '{print $0}' /etc/passwd
参数名 描述
[-F\ -f\ -v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
‘ ‘ 引用代码块
BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
// 匹配代码块,可以是字符串或正则表达式
{} 命令代码块,包含一条或多条命令
; 多条命令使用分号分隔
END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

常用 awk 内置变量

变量名 描述
$0 当前记录
$1-$n 当前记录的第n个字段
FS 输入字段分隔符,默认是空格
RS 输入记录分隔符,默认是换行符
NF 当前记录中的字段个数
NR 已经读出的记录数
OFS 输出字段分隔符,默认是空格
ORS 输出的记录分隔符,默认是换行符

BEGIN设置

1
awk 'BEGIN{FS=":"}{print $1","$2","$3}' hello.txt

正则应用

规则表达式

awk '/REG/{action} ' file,/REG/为正则表达式,可以将$0 中,满足条件的记录送入到:action 进行处理

1
awk '/root/{print $0}' passwd

布尔表达式

awk '布尔表达式{action}' file仅当对前面的布尔表达式求值为真时, awk 才执行代码块。

1
awk -F: '$1=="root"{print $0}' passwd

Ansible

发表于 2018-11-18 | 更新于 2020-05-17 | 分类于 运维

WSSH

发表于 2018-11-18 | 更新于 2020-05-17 | 分类于 运维

WSSH

wssh 是一个 SSH 到 WebSockets 的桥,可以让你通过 HTTP 调用远程服务器的 SHELL 命令。
wssh 可以让我们通过 HTTP 来调用远程的一个 shell,也就是说我们可以用浏览器来访问某个 Linux 服务器/虚拟机的终端(只要这个服务器上运行了 wsshd 服务器端)。

安装

操作系统:CentOS 7
python:2.7

1
2
yum install gcc python-devel openssl-devel
pip install gevent flask paramiko gevent-websocket

下载jquery-1.12.3.js和term.js到本地
修改/wssh-0.1.0/wssh/templates/index.html
修改前:

1
2
3
4
<script type="application/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">
</script>
<script type="application/javascript" src="https://raw.github.com/chjj/tty.js/36717df8e96f35f4e2bd3fd585e9361f1439fc7e/static/term.js">
</script>

修改后:

1
2
3
4
<script type="application/javascript" src="{{url_for('static', filename='jquery-1.12.3.js')}}">
</script>
<script type="application/javascript" src="{{url_for('static', filename='term.js')}}">
</script>

python setup.py install

启动wsshd

wsshd

FAQ

报错:
/usr/lib/python2.7/site-packages/wssh-0.1.0-py2.7.egg/EGG-INFO/scripts
修改前:

1
from geventwebsocket import WebSocketHandler

修改为:

1
from geventwebsocket.handler import WebSocketHandler

FLV格式解析

发表于 2018-11-18 | 更新于 2020-05-17 | 分类于 多媒体

FLV文件由FLV Header和FLV Body组成

1 FLV Header

字段 类型 备注
标签 UI8,1字节 F,0x46
标签 UI8,1字节 L,0x4C
标签 UI8,1字节 V,0x56
版本号 UI8,1字节 文件版本(目前版本是1)
预留标记 UB[5],5bit 必须是0
音频标记 UB[1],1bit 是否存在音频
预留标记 UB[1],1bit 必须是0
视频标记 UB[1],1bit 是否存在视频
数据偏移 UI32,4字节 从文件开始到文件body的偏移(文件头的大小)

2 FLV Body

字段 类型 备注
PreviousTagSize0 UI32,4字节 0
Tag1 FLVTAG 第1个tag
PreviousTagSize1 UI32,4字节 第1个tag大小(tag header+tag body)
Tag2 FLVTAG 第2个tag
…
PreviousTagSizeN-1 UI32,4字节 第N-1个tag大小
TagN FLVTAG 第N个tag
PreviousTagSizeN UI32,4字节 第N个tag大小

3 FLV Tags

字段 类型 备注
tag类型 UI8 8:音频 9:视频 18:脚本数据 其他为保留
数据大小 UI24 数据区大小
时间戳 UI24 毫秒为单位,第一个tag为0
扩展时间戳 UI8 放在高8位,前面的时间戳在低24位
StreamID UI24 一直是0
数据 tag 类型 == 8,AUDIODATA TAG TYPE ==9,VIDEODATA TAG TYPE ==18 SCRIPTDATAOBJECT tag body

OpenVPN

发表于 2018-11-18 | 更新于 2020-05-17 | 分类于 运维
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
docker run --cap-add NET_ADMIN -p 2294:2294 -d centos:7 /bin/bash -lc "tail -f /dev/null"

yum install -y epel-release
yum install -y openvpn easy-rsa

cd /usr/share/easy-rsa/3
./easyrsa init-pki
./easyrsa build-ca
./easyrsa build-server-full server nopass
./easyrsa build-client-full client nopass
./easyrsa gen-dh
openvpn --genkey --secret ./pki/ta.key
cp -pR /usr/share/easy-rsa/3/pki/{issued,private,ca.crt,dh.pem,ta.key} /etc/openvpn/server/

# https://github.com/OpenVPN
curl -O -L https://github.com/OpenVPN/openvpn/archive/v2.4.8.tar.gz
cp /root/openvpn-2.4.8/sample/sample-config-files/server.conf /etc/openvpn/server/
vi /etc/openvpn/server/server.conf

10.8.0.0/24,下一跳为VPN服务器的内网地址192.168.60.113

mkdir /dev/net -pv
mknod /dev/net/tun c 10 200
chmod 666 /dev/net/tun

openvpn --config /etc/openvpn/server/server.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# line 32: change if need (listening port of OpenVPN)
port 1194
# line 35: change if need
proto tcp
;proto udp
# line 78: specify certificates
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/issued/server.crt
key /etc/openvpn/server/private/server.key
# line 85: specify DH file
dh /etc/openvpn/server/dh.pem
# line 101: specify network to be used on VPN
server 10.8.0.0 255.255.255.0
# line 143: uncomment and change to your local network
push "route 172.17.0.0 255.255.255.0"
# line 244: specify TLS-Auth key
tls-auth /etc/openvpn/server/ta.key 0
# line 263: uncomment (enable compress)
comp-lzo
# line 287: change log path
status /var/log/openvpn-status.log
# line 296: change log path
log /var/log/openvpn.log
log-append /var/log/openvpn.log
# Notify the client that when the server restarts so it
explicit-exit-notify 0
1
2
3
4
5
6
7
8
docker pull python:3.8.2
docker run -d --net=host python:3.8.2 /bin/bash -lc "tail -f /dev/null"
git clone https://github.com/dounine/obfsproxy.git
apt-get update
apt-get install -y python-twisted python-pyptlib python-crypto python-yaml

./bin/obfsproxy obfs3 --dest=127.0.0.1:2294 server 0.0.0.0:3394
./bin/obfsproxy obfs3 --dest=REMOTE:3394 client 0.0.0.0:9999
1
2
3
4
cp /etc/openvpn/server/ca.crt ./
cp /etc/openvpn/server/ta.key ./
cp /etc/openvpn/server/issued/client.crt ./
cp /etc/openvpn/server/private/client.key ./
1
2
3
4
5
6
7
8
9
remote 192.168.0.1 1194
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
comp-lzo
dhcp-option DNS 8.8.8.8
dhcp-option DNS 8.8.4.4
redirect-gateway def1

OPNsense

发表于 2018-11-18 | 更新于 2020-05-17 | 分类于 运维

1 软路由

软路由是指利用台式机或服务器配合软件形成路由解决方案,主要靠软件的设置,达成路由器的功能;而硬路由则是以特用的硬设备,包括处理器、电源供应、嵌入式软件,提供设定的路由器功能。

2 OPNsense

OPNsense 是一个开源易用,而且易于构建的基于 FreeBSD 的防火墙和路由平台。包括大多数商业防火墙的特性。提供功能完整却易用的 GUI 管理界面。

3 安装步骤

3.1 新建虚拟机

  • 操作系统
    选择"其他"-"FreeBSD"
    
  • 网络连接
    选择“使用桥接网络”
    
  • 自定义硬件
    选择"添加"-“网络适配器”-"桥接模式"
    
  • 其他保持默认
  • CD/DVD中装入ISO文件
  • 3.2 启动虚拟机

    默认安装后,重新启动

3.3 配置OPNsense

账号:root
密码:opnsense

Solr整合mmseg4j搭建全文搜索引擎

发表于 2018-11-18 | 更新于 2020-05-17 | 分类于 搜索

下载

solr:http://lucene.apache.org/solr/
mmseg4j:https://code.google.com/p/mmseg4j/
oracle
tomcat-7.0.39:http://tomcat.apache.org/

简介

Solr

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。
Solr是一个高性能,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

mmseg4j

mmseg4j用Chih-Hao Tsai 的MMSeg算法实现的中文分词器,并实现lucene的analyzer和solr的TokenizerFactory以方便在Lucene和Solr中使用。 MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j已经实现了这两种分词算法。

zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。

配置

将solr-4.5.0.zip解压开后,复制/example/webapps/solr.war复制到tomcat/webapp目录下

  • 配置solr/home
    /conf/Catalina/localhost/solr.xml

    1
    2
    3
    <Context docBase="../solr/solr.war" debug="0" crossContext="true">
    <Environment name="solr/home" type="java.lang.String" value="../solr" override="true"/>
    </Context>
  • 配置数据库信息
    /solr/collection1/conf/solrconfig.xml

    1
    2
    3
    4
    5
    6
    <lib dir="../../../../dist/" regex="solr-dataimporthandler-.*\.jar" />
    <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
    <str name="config">db-data-config.xml</str>
    </lst>
    </requestHandler>

增加业务数据库相应信息
/solr/collection1/conf/db-data-config.xml

  • 配置分词信息
    /solr/collection1/conf/schema.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <field name="SUMMARY" type="text_cn" indexed="true" stored="true"/>
    <!-- Chinese -->
    <fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
    <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/>
    </analyzer>
    <analyzer type="query">
    <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/>
    </analyzer>
    </fieldType>
  • 配置solr cloud信息
    /tomcat/solr/solr.xml

    1
    2
    3
    4
    5
    6
    7
    <solrcloud>
    <str name="host">127.0.0.1</str>
    <int name="hostPort">5080</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:15000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
    </solrcloud>

到/tomcat/bin目录下。编辑catalina.bat文件。在文件最开始增加:

1
set JAVA_OPTS=-Dbootstrap_confdir=../solr/collection1/conf -Dcollection.configName=clusterconf -DzkRun=127.0.0.1:9001 -DzkHost=127.0.0.1:9001,127.0.0.1:9002,127.0.0.1:9003 -DnumShards=1

1
set JAVA_OPTS=-Dbootstrap_confdir=../solr/collection1/conf -Dcollection.configName=clusterconf -DzkRun=127.0.0.1:9002 -DzkHost=127.0.0.1:9001,127.0.0.1:9002,127.0.0.1:9003 -DnumShards=1
1
set JAVA_OPTS=-Dbootstrap_confdir=../solr/collection1/conf -Dcollection.configName=clusterconf -DzkRun=127.0.0.1:9003 -DzkHost=127.0.0.1:9001,127.0.0.1:9002,127.0.0.1:9003 -DnumShards=1
  • 配置zookeeper信息
    /tomcat/solr/zoo.cfg
    修改zoo.cfg文件,增加如下内容:
    1
    2
    3
    4
    5
    6
    # the port at which the clients will connect
    clientPort=9001
    # NOTE: Solr sets this based on zkRun / zkHost params
    server.1=127.0.0.1:2888:2889
    server.2=127.0.0.1:3888:3889
    server.3=127.0.0.1:4888:4889

tomcat 5080设为9001
tomcat 6080设为9002
tomcat 7080设为9003

  • 新建myid
    /tomcat/solr/oo_data目录下,新建文件myid
    tomcat 5080设内容为1
    tomcat 6080设内容为2
    tomcat 7080设内容为3

Elasticsearch-介绍

发表于 2018-11-18 | 更新于 2020-05-17 | 分类于 搜索

Elasticsearch是一个基于Lucene构建的开源、分布式、RESTful的搜索引擎。

索引词
文本
分析
集群
节点
路由
分片
主分片
副本分片
复制
索引
类型
文档

1…456…22

Paul Jiang

212 日志
26 分类
26 标签
Links
  • 褚霸
  • 章亦春
  • Martin Fowler
© 2020 Paul Jiang
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Gemini v6.5.0