分布式期货行情交易系统-环境搭建

一 硬件系统相关

硬件:阿里云ECS 4台(3台kafka + 1台各种服务主服务器)  8G内存+2核CPU

操作系统:Ubuntu 16.04 64位

带宽:16M(行情数据比较大,外网带宽太小可能会影响kafka的使用)

二 软件系统

2.1 消息中间件Kafka

kafka集群搭建

官方资料:
http://kafka.apache.org/documentation.html#quickstart

由于kafka集群分区与副本设计的特点,选取最小完备集群服务器数量3台ECS安装Kafka

安装步骤

创建/kfkData/kafka目录
上传kafka文件,解压:tar -zxvf **.tar.gz -C /kfkData/kafka
修改配置文件
vim config/zookeeper.properties
在zookeeper这是的服务器列表中有server.X为ID
需要在dataDir所在目录建立一个文件myid内容为这个ID
vim config/server.properties
先启动zookeeper服务:sudo bin/zookeeper-server-start.sh config/zookeeper.properties &
启动kafka服务:sudo bin/kafka-server-start.sh config/server.properties & #后台运行
也可通过编写脚本kafka.sh管理启动和停止

测试:
创建主题:bin/kafka-topics.sh --create --zookeeper 192.168.0.2:2181 --replication-factor 1 --partitions 1 --topic test
生产者:bin/kafka-console-producer.sh --broker-list 192.168.0.2:9092,192.168.0.3:9092 --topic test
消费者:bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.2:9092,192.168.0.3:9092 --topic test --from-beginning

zookeeper.properties修改要点
tickTime=2000
dataDir=/kfkData/zkData
clientPort=2181
maxClientCnxns=0
initLimit=20
syncLimit=5
# 如果是云服务器,要设置为内网IP
server.1=172.16.61.99:2888:3888
server.2=172.16.61.98:2888:3888
server.3=172.16.61.97:2888:3888

server.properties修改要点:
broker.id=0 #0表示本机broker的编号,每个broker唯一值
listeners=PLAINTEXT://192.168.0.2:9092 #设置内部IP
advertised.listeners=PLAINTEXT://61.139.2.69:9092 #设置外部IP
# 在zookeeper中设置的地址
zookeeper.connect=172.16.61.99:2181,172.16.61.98:2181,172.16.61.97:2181

启动与重启

如果重启服务后,zookeeper自动重启,只需要启动kafka:
sudo ./kadmin.sh start kafka normal
如果要手动启动zookeeper:
sudo ./kadmin.sh start zookeeper normal

如果在线重启kafka,需要先关闭kafka,再关闭zookeeper:
sudo ./kadmin.sh stop kafka
sudo ./kadmin.sh stop zookeeper

2.2 TDGengine(涛思数据库)

官方资料

https://www.taosdata.com/cn/getting-started/

官方教程很详细,单台使用默认配置,不再详细介绍安装配置步骤。

主要介绍一下TDgengine特殊的用法-超级表。我们系统中对K线数据的存储很适合这种模式:存储的是不同的合约及不同的周期,但是拥有相同的K线数据结构。

创建超级表

一个物联网系统,往往存在多种类型的设备,比如对于电网,存在智能电表、变压器、母线、开关等等。为便于多表之间的聚合,使用TDengine, 需要对每个类型的数据采集点创建一超级表。以表一中的智能电表为例,可以使用如下的SQL命令创建超级表:

  1. CREATE TABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupdId int);

与创建普通表一样,创建表时,需要提供表名(示例中为meters),表结构Schema,即数据列的定义。第一列必须为时间戳(示例中为ts),其他列为采集的物理量(示例中为current, voltage, phase),数据类型可以为整型、浮点型、字符串等。除此之外,还需要提供标签的schema (示例中为location, groupId),标签的数据类型可以为整型、浮点型、字符串等。采集点的静态属性往往可以作为标签,比如采集点的地理位置、设备型号、设备组ID、管理员ID等等。标签的schema可以事后增加、删除、修改。具体定义以及细节请见 TAOS SQL 一节。 每一种类型的数据采集点需要建立一个超级表,因此一个物联网系统,往往会有多个超级表。对于电网,我们就需要对智能电表、变压器、母线、开关等都建立一个超级表。在物联网中,一个设备就可能有多个数据采集点(比如一台风力发电的风机,有的采集点采集电流、电压等电参数,有的采集点采集温度、湿度、风向等环境参数),这个时候,对这一类型的设备,需要建立多张超级表。一张超级表里包含的采集物理量必须是同时采集的(时间戳是一致的)。 一张超级表最多容许1024列,如果一个采集点采集的物理量个数超过1024,需要建多张超级表来处理。一个系统可以有多个DB,一个DB里可以有一到多个超级表。

创建表

TDengine对每个数据采集点需要独立建表。与标准的关系型数据一样,一张表有表名,Schema,但除此之外,还可以带有一到多个标签。创建时,需要使用超级表做模板,同时指定标签的具体值。以表一中的智能电表为例,可以使用如下的SQL命令建表:

  1. CREATE TABLE d1001 USING meters TAGS ("Beijing.Chaoyang", 2);

其中d1001是表名,meters是超级表的表名,后面紧跟标签Location的具体标签值”Beijing.Chaoyang",标签groupId的具体标签值2。虽然在创建表时,需要指定标签值,但可以事后修改。详细细则请见 TAOS SQL。 TDengine建议将数据采集点的全局唯一ID作为表名(比如设备序列号)。但对于有的场景,并没有唯一的ID,可以将多个ID组合成一个唯一的ID。不建议将具有唯一性的ID作为标签值。

自动建表:在某些特殊场景中,用户在写数据时并不确定某个数据采集点的表是否存在,此时可在写入数据时使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表。比如:

  1. INSERT INTO d1001 USING METERS TAGS ("Beijng.Chaoyang", 2) VALUES (now, 10.2, 219, 0.32);

上述SQL语句将记录(now, 10.2, 219, 0.32) 插入进表d1001。如果表d1001还未创建,则使用超级表meters做模板自动创建,同时打上标签值“Beijing.Chaoyang", 2。

2.3 Redis

在 Ubuntu 系统安装 Redis 可以使用以下命令:

# sudo apt update
# sudo apt install redis-server

启动 Redis

# redis-server

查看 redis 是否启动?

# redis-cli

以上命令将打开以下终端:

redis 127.0.0.1:6379>

127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。

redis 127.0.0.1:6379> ping
PONG

以上说明我们已经成功安装了redis。

三 编程语言

3.1 python

版本python3.6,编程工具:pycharm professional2008.1.1

编写服务:

  • K线采集入库服务
  • K线请求服务
  • 前置服务
  • 用户管理服务

3.2 C++

编程工具:visual studio2017

编写服务:

  • 交易管理
  • 交易实例

PC交易行情客户端

3.3 Java

编程工具:Android Studio 

安卓端交易行情客户端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值