介绍

     平民软件官网上线(http://www.onexsoft.com)
  OneProxy是由原支付宝首席架构师楼方鑫开发,目前由楼方鑫创立的杭州平民软件公司(@平民架构)提供技术支持。目前已有多家公司在生成环境中使用,其中包括了支付、电商等行业。
 
     OneProxy的主要功能有:
1. 垂直分库
2. 水平分表
3. Proxy集群
4. 读高可用
5. 读写分离(master不参与读)
6. 读写分离(master参与读)
7. 写高可用
8. 读写随机
 
 
 
如需技术支持,请添加微信号:onesoft007  
 
重要概念
     Server Group
     在OneProxy中,一组主从复制的MySQL集群被称为Server Group。如图. A所示,有Server Group A和Server Group B。
     
                                                            图. A
     在OneProxy中,垂直分库和水平分表的实现思路都是建立在Server Group的概念上。为了更好地说明,我们假设以下场景。
     A)Server Group A中有三张表table X, table Y, table Z,其中应用对table X操作非常频繁,占用大量I/O带宽,严重影响了应用对tableY, tableZ的操作效率。
              
                                                                      图. B
     解决方案1.0:把table X移到另一组数据库,即Server Group B中(如图C所示),然后通过修改OneProxy的配置来改变table X的路由规则,无须改动应用。
 
                                                                      图. C
     B)在使用了解决方案1.0后,系统的I/O压力得到缓解。由于后期业务越来越多,Server Group B的写入压力越来越大,响应时间变慢。
     解决方案2.0 : 把Server Group B中的table X水平拆分,将X_00, X_01留在Server Group B中,把X_02,X_03留在Server Group C中,如图D所示
 
                                                                                图. D
 
 
支持的平台
     Redhat5.x_X64,Redhat6.x_X64
 
安装步骤
  1)下载最新版OneProxy: http://www.onexsoft.cn/software/oneproxy-rhel6-linux64-v5.8.3-ga.tar.gz
          本文档写作时,最新版本为oneproxy-rhel6-linux64-v5.8.3-ga.tar.gz
     2)上传到目标主机的目录:/usr/local 
     3)cd /usr/local/
    tar zxvf oneproxy-rhel6-linux64-v5.8.3-ga.tar.gz
     4)cd oneproxy/
     5)修改demo.sh
###############################

#/bin/bash
#
export ONEPROXY_HOME=/usr/local/oneproxy/

# valgrind --leak-check=full \
${ONEPROXY_HOME}/bin/oneproxy --defaults-file=${ONEPROXY_HOME}/conf/proxy.conf

#####################################
注:
红色部分是需要根据自己的环境,需要更改的地方
 
   6)创建相关数据库,用户名和密码
        假设已经安装配置好MySQL,如果未安装请参考(http://dev.mysql.com/doc/refman/5.6/en/installing.html)
   mysql -uroot
   mysql> create database if not exists test character set utf8 ;
   mysql> grant insert, update, delete, select on test.* to test@'10.0.0.%' identified by 'test'; 
     7)chmod +x ./demo.sh
    ./demo.sh
     8)检查是否成功启动。
          ps aux | grep mysql-proxy | grep -v grep
          如有输出,则启动成功。
          若无输出,请检查运行日志/usr/local/oneproxy/log/oneproxy.log
     注:目前OneProxy有个限制,如果/etc/hosts文件有IPv6地址,则无法启动,因此需要注释掉
          [root@oneproxy oneproxy]# vim /etc/hosts

    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    #::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

    9)通过mysql client连接OneProxy
        mysql -u test -h 10.0.0.9 -P3307 -p
    注:-h 后加上IP(最好不要是 localhost或者127.0.0.1,这种写法可能导致其使用unix socket连接而无法连接上)
 
应用场景与配置范例
     下面给出在以下几种场景下,如何正确的配置OneProxy
     1. 垂直分库
     以图. E为例,
 
                                                                      图. E
OneProxy的配置文件conf/proxy.conf:
###############################

[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck

mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-slave-addresses.1 = 10.0.0.11:3306@A
proxy-master-addresses.2 = 10.0.0.12:3306@B

proxy-slave-addresses.2 = 10.0.0.13:3306@B

proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test

proxy-part-template = conf/template.txt
proxy-part-tables.1 = conf/part.txt
proxy-part-tables.2 = conf/part2.txt
proxy-charset = gbk_chinese_ci
proxy-group-policy.1       = A:master-only

proxy-group-policy.2 = B:master-only

proxy-table-map.1=X:B

proxy-table-map.2=Y:A

proxy-table-map.3=Z:A

proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default

#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0

 
#####################################
注:具体参数含义参考附录
 
     2. 水平分表
     以图. F为例
                                                                          图. F
OneProxy的配置文件conf/proxy.conf:
###############################

[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck

mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-slave-addresses.1 = 10.0.0.11:3306@A
proxy-master-addresses.2 = 10.0.0.12:3306@B

proxy-slave-addresses.2 = 10.0.0.13:3306@B

proxy-master-addresses.3 = 10.0.0.14:3306@C

proxy-slave-addresses.4 = 10.0.0.15:3306@C

proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test

proxy-part-tables.1 = conf/part.txt

proxy-charset = gbk_chinese_ci
proxy-group-policy.1       = A:master-only

proxy-group-policy.2 = B:master-only

proxy-group-policy.3 = C:master-only

proxy-table-map.2=Y:A

proxy-table-map.3=Z:A

proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default

#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0

#####################################
 
OneProxy分库分表配置文件conf/part.txt
####################################

[

  {
    "table" : "X",
    "pkey" : "id",
    "type" : "char",
    "method" : "crc32",
    "partitions" :     

      [
        { "suffix" : "_00", "group": "B" },
        { "suffix" : "_01", "group": "B" },
        { "suffix" : "_02", "group": "C" },
        { "suffix" : "_03", "group": "C"}
      ]

  }

]

####################################
 
 
注:具体参数含义参考附录
 
     3. Proxy集群
 
     4. 读高可用
     该方案是为了解决重要配置库的单点问题。在master不可用时,OneProxy会自动读取slave。
OneProxy的配置文件conf/proxy.conf:
###############################

[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck

mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-slave-addresses.1 = 10.0.0.11:3306@A

proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test

proxy-charset = gbk_chinese_ci
proxy-group-policy.1       = A:read_failover

proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default

#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0

#####################################
注:10.0.0.10为只读主库,10.0.0.11为只读丛库
 
     5. 读写分离(master不参与读)
     读写分离能有效的解决应用读负载较重且能忍受一定延迟的场景。此种模式下,读负载只能由slave承担,写与事务负载只能由master承担。
OneProxy的配置文件conf/proxy.conf:
###############################

[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck

mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-slave-addresses.1 = 10.0.0.11:3306@A

proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test

proxy-charset = gbk_chinese_ci
proxy-group-policy.1       = A:read_slave

proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default

#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0

#####################################
 
注:10.0.0.10为主库,10.0.0.11为丛库
 
     6. 读写分离(master参与读)
     这是另一种读写分离模式,所有类型的负载(读、写、事务)都有可能由master承担。
OneProxy的配置文件conf/proxy.conf:
###############################

[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck

mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-slave-addresses.1 = 10.0.0.11:3306@A

proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test

proxy-charset = gbk_chinese_ci
proxy-group-policy.1       = A:read_balance

proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default

#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0

#####################################
 
注:10.0.0.10为主库,10.0.0.11为丛库
 
     7. 写高可用
     这是专门针对XtraDB Cluster集群设计的一种模式。这种模式,只允许将一个节点作为写,而所有节点平均的承担所有的读负载。如图G所示。
 
                                                                      图. G
以图. G为例,若Node 1节点不可用,则任意选择另一台机器作为新的节点。如下图所示。
                                                                      图. H
     OneProxy在切换时,没有考虑数据的一致性,需要XtraDB Cluster本身来保证。其它类型的集群慎用。
OneProxy的配置文件conf/proxy.conf:
###############################

[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck

mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-master-addresses.2 = 10.0.0.11:3306@A
proxy-master-addresses.3 = 10.0.0.12:3306@A

proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test

proxy-charset = gbk_chinese_ci
proxy-group-policy.1       = A:write_other

proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default

#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0

#####################################
 
注:目前写入节点是由OneProxy自动选择的,无法手动指定。
 
     8. 读写随机
     这是专门针对XtraDB Cluster集群设计的一种模式。这种模式,所有的节点都平均的承担读写负载。
OneProxy的配置文件conf/proxy.conf:
###############################

[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck

mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-master-addresses.2 = 10.0.0.11:3306@A
proxy-master-addresses.3 = 10.0.0.12:3306@A

proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test

proxy-charset = gbk_chinese_ci
proxy-group-policy.1       = A:write_balance

proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default

#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0

#####################################
 

FAQ

1、口令加密

  此时可以启动oneproxy

  cd /usr/local/oneproxy

sh ./demo.sh

  进入管理端口,然后键入passwd <string>。

mysql -uadmin -pOneProxy -P4041 --protocol=TCP

passwd test

  输出为:

  1378F6CC3A8E8A43CA388193FBED5405982FBBD3

 
OneProxy管理
  介绍  
    OneProxy提供了目前两种管理功能。
第一,提供了查看配置信息(例如后端 DB情况等)与系统的动态变化信息(例如OneProxy与后端数据库建立的连接变化等)。
第二,提供了更改配置的功能。例如控制后端DB的上线或者下线。
   
  登录 
  OneProxy的默认管理端口是4041,用户名为admin,密码为OneProxy,可以使用如下命令登录:
mysql -u admin -h 10.128.130.237 -P4041 -pOneProxy
  
  使用方法
  输入list help查看管理接口提供的命令
命令 描述 例子
LIST HELP 列出所有命令 list help
LIST BACKEND 列出所有后端数据库 list backend
LIST GROUP 列出所有的server group,具体含义请参考重要概念 list group
LIST POOL 列出OneProxy与每个后端数据库建立的连接池大小与连接池配置 list pool
LIST QUEUE 列出每个队列里到达的请求数量与已处理完成的请求 list queue
LIST THREADS 列出每个线程处理过的请求数 list threads
LIST TABLEMAP 列出table与server group的对应关系 list tablemap
LIST USERS  列出用户 list users
LIST SQLSTATS  列出执行过的SQL统计 list sqlstats [hash]
LIST SQLTEXT 列出执行过的SQL与hashcode的对应关系 list sqltext [hash]
SET  MASTER 指定某后端DB为写库 set master '192.168.1.119:3306'
SET  SLAVE 指定某后端DB为读库 set slave '192.168.1.119:3306'
SET  OFFLINE 下线指定的后端数据库 set offline '192.168.1.119:3306'
SET  ONLINE 上线指定的后端数据库 set online '192.168.1.119:3306'
SET  GPOLICY 指定server group的策略。

预定义策略,0 代表由 Lua Script 来决定,默认为 Master Only;

1 代表 Read Failover;

2 代表Read/Write Split(Master 节点不参与读操作);

3 代表双 Master 结构,或者是 XtraDB Cluster结构,即多主对等的方式;

4 代表 Read/WriteSplit(Master 节点共同参与读操作);

5 代表读写随机。

set gpolicy default 1
SET  GMASTER 针对XtraDB Cluster,指定某个编号的数据库为写库 set gmaster default 1
SET  GACCESS

指定server group允许的sql类型。0:无任何限制,缺省值;

1:禁止 DDL 操作;
2:禁止不带 Where 条件的 Select、 Update 或 Delete。

set gaccess default 1
SET  POOLMIN 设置OneProxy与后端数据库连接池的最少连接数 set poolmin '192.168.1.119:3306' 5
SET  POOLMAX

设置OneProxy与后端数据库连接池的最大连接数,

实际的连接数可以超过这个数值,

set poolmax '192.168.1.119:3306' 300 
SET  SQLSTATS 打开、关闭或者清空SQL统计 set sqlstats {on|off|clear}
MAP 把某个表归属给某个server group map my_test1_0 default
UNMAP 删除表与server group的映射关系 unmap my_test1_0
SUSPEND 让event process停止指定秒数 suspend 10
SHUTDOWN 关闭proxy shutdown force
   
警告:在使用红色标记的命令前,需要了解命令对系统的含义,否则可能导致数据不一致或者系统不可用
 
附录
  参数列表

参数名

含义

proxy-address

Proxy Server自身监听地址

proxy-master-addresses

Master节点地址(可写入节点)

proxy-slave-addresses

Slave节点地址(可读取节点)

proxy-user-list

Proxy用户列表(用户名:口令)

proxy-table-map

为某张表指定“Server Group”

proxy-sql-review

为某张表指定Where条件中必须的列

proxy-database

Proxy对应的后端数据库,默认: test

proxy-charset

Proxy字符集,默认:utf8_general_ci

proxy-lua-script

Proxy功能脚本(非常重要)

proxy-group-policy

预定义策略,0代表由Lua Script来决定,默认为Master Only;1代表Read Failover;2代表Read/Write Split(Master节点不参与读操作);3代表双Master结构,或者是XtraDB Cluster结构,即多主对等的方式;4代表Read/Write Split(Master节点共同参与读操作);5代表读写随机。

proxy-security-level

安全级别,0默认值,1禁止DDL,2禁止不带条件的查询语句,3只允许SELECT。

proxy-group-security

为特定Server Group设置安全级别。

安全级别,0默认值,1禁止DDL,2禁止不带条件的查询语句,3只允许SELECT。

event-threads

并发线程数,最大允许48个线程。

  解释

A)  --proxy-master-addresses

重命名了MySQL Proxy里的参数(proxy-backend-addresses),觉得这个名字更容易记,所有允许写操作的Master节点。格式如下:

格式:ip:port@groupname

其中“groupname”指的是“Server Group”的名字,如果不指定,则默认为“default”。

B)  --proxy-slave-addresses

重命名了MySQL Proxy里的参数(proxy-read-only-backend-addresses),觉得这个名字更容易记,所有允许只读操作的Slave节点。格式如下:

格式:ip:port@groupname

其中“groupname”指的是“Server Group”的名字,如果不指定,则默认为“default”。

C)  --proxy-user-list

OneProxy止前接管了客户端的登录验证,即客户端在登录验证时不再需要和后端的MySQL数据库通信了,这就要求OneProxy必须有一个完整的用户列表,用来验证客户端登录,可以通过这个参数来指定允许访问的用户名和口令列表,所有后端的数据库都必须存在同样用户名和口令的登录账号。

可以用“bin/mysqlhash”来生成加密后的口令,例如:

[root@ANYSQLSRV1 oneproxy]# bin/mysqlhash test

A94A8FE5CCB19BA61C4C0873D391E987982FBBD3

然后在命令行参数里指定这个用户名和口令:

--proxy-user-list=test:A94A8FE5CCB19BA61C4C0873D391E987982FBBD3

如果有多个用户需要指定,多次指定此选项即可。也可以指定用户连接后端MySQL时的默认数据库,如果不指定,则连接到“proxy-database”指定的默认数据库。指定的格式如下:

--proxy-user-list=username:password@default_db

要求OneProxy后端所有的数据库都有同名用户、同名的数据库,及相应的访问权限,在OneProxy端并不支持改变一个会话的默认后端数据库,即传统的“USE”命令在OneProxy里有其他的含义。

D)  --proxy-database

OneProxy基于现有连接池机制的考虑,并不支持切换数据库的功能,通过OneProxy连接的会话,只能对应到此参数指定的数据库里,“use”命令在OneProxy中也是被禁用的,原因是现有的代码里每一次获得连接池中的连接后,都会多发一个“use”命令,在高并发环境中会影响性能(后续版本将会对此作出改进),这是在使用OneProxy时需要注意的地方。

此选项默认值是“test”,这个库在默认安装时都会创建好的。

E)  --proxy-charset

通过OneProxy来管理多个数据库时,要求所有的数据库字符集是一致的,同样是基于现有连接池机制的考虑,可以选的值在README文件里有,默认值是“utf8_general_ci”,为了防止连接池中不同的连接出现不同的设置,“set”命令在OneProxy里也是不生效的。

F)     --proxy-group-policy

使用OneProxy时可以透时地对下层的数据架构做改造,可以通过Lua脚本来实现的,出于对性能及便捷性(许多人不是很懂Lua)的考虑,将简单的Failover及读写分离的方案固化到OneProxy里,使用C语言来实现,即不需要写任何Lua代码也可以透明地使用Failover和读写分离方案了。指定格式:

--proxy-group-policy=<servergroup>:<policy_value>

对于复杂的分库分表,则还需要编写Lua脚本来实现,在“lua”子目录下有一个示例脚本“oneproxy.lua”就是用来做分库分表的。其中“servergroup”表示针对哪个“Server Group”进行设置。

此选项可以设置的“policy_value”值有:

0

默认值,什么也不做,依赖于Lua脚本来实现。

1

Read Failover功能,对于读操作,首先从Master读取,如果Master不可用,则从Slave端读取。

2

Read/Write Split功能,对于读操作,首先从Slave读取,如果Slave端不可用,则从Master端读取。除非所有的Slave都不可用,否则Master不参与读操作。

3

针对XtraDB Cluster群集环境的Read/Write Split功能,从集群中固定地选择一台作为写入节点,其他的节点作为读节点;如果选中的写入节点不可用,则重新选一台作为写入节点,其他可用的节点继续提供读,这个策略提供了写入节点的自动漂移,在双Master节点上也可以设置成这种策略。

4

Read/Write Split功能,对于读操作,从Master和Slave中随机选一台进行查询操作,写入操作则从在Master上进行。

5

随机读写功能,对于读操作,从Master和Slave中随机选一台进行查询操作,写入操作则是随机选一台Master进行操作。

后续会继续内置更多的策略进去,以及不断优化已有的策略,为大家透明地做MySQL架构改造而努力。

G)  --proxy-security-level

安全级别,提升安全性,默认值为0,即没有任何设置。设成1禁止通过OneProxy来做DDL操作;设置为2则必须要有Where条件;设置为3只允许只读的操作。

H)  --proxy-group-security

可针对某一个“Server Group”来指定安全级别,指定格式:

--proxy-group-policy=<servergroup>:<policy_value>

安全级别,提升安全性,默认值为0,即没有任何设置。设成1禁止通过OneProxy来做DDL操作;设置为2则必须要有Where条件;设置为3只允许只读的操作。

I)  --event-threads

这个参数本身的意义没有变化,但内部的实现经过大幅优化,使得单个OneProxy实例可以支持20万以上的QPS转发。在已知的数据库Proxy中,OneProxy的转发能力一直是第一,此选项允许设置的最大值是48。

数十万的转发能力表示由OneProxy本身引起的时延增加基本可以忽略,这一点是OneProxy相对于MySQL Proxy而言的一个重大进步,解决了MySQL Proxy的并发处理能力。

通常这个值可以设为CPU Core数量的两倍,用8C或16C配备万兆网卡的机器来跑OneProxy可以达到最好的效果。

     

 
如需技术支持,请添加微信号:onesoft007    

OneProxy使用手册--致力于打造透明的数据层的更多相关文章

  1. 微信事业群WXG成立 致力于打造微信大平台

    今天,微信之父张小龙带领微信团队成立微信事业群(WeiXin Group,简称WXG),致力于打造微信大平台,由他们负责微信基础平台.微信开放平台.微信支付拓展.O2O等微信延伸业务的发展,并包括邮箱 ...

  2. Oracle中的带参数的视图--我们致力于打造人力资源软件

    创建包和包体 create or replace package pkg_pv is procedure set_pv(pv varchar2); function get_pv return var ...

  3. jQuery WIN 7透明弹出层效果

    jQuery WIN 7透明弹出层效果,点击可以弹出一个透明层的jquery特效,插件可以调弹出框的宽度和高度,很不错的一个弹出层插件. 适用浏览器:IE8.360.FireFox.Chrome.Sa ...

  4. Turtle Online:致力于打造超接地气的PC前端架构,组件+API,快速搭建前端开发

    架构创作初衷 每当新开一个项目时,都会绞尽脑汁去考虑采用哪种框架:requirejs/seajs.jquery/zepto.backbone.easeUI/Bootstrap/AngularJS……, ...

  5. Mysql完全手册(笔记二,使用数据与性能优化)

    一.使用数据 1.使用变量 MySQL也可以让我们以用户自定义的变量来存储select查询的结果,以便在将来select查询中使用.它们只会在客户会话期间存在,但是它们提供一个方便有效的方法来连接查询 ...

  6. 未来科技城 x 奇点云打造「企业数据大脑」,助力1.3万家企业服务

    “当前,政府数字化和数字政府建设已成为一种趋势.一种必然,并且有了一条水到渠成式的实现路径.” 上升为国家战略的数字中国建设加速了”智慧政务“的生动实践,杭州未来科技城的「企业数据大脑」就是一个典型. ...

  7. 面经手册 · 第4篇《HashMap数据插入、查找、删除、遍历,源码分析》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在上一章节我们讲解并用数据验证了,HashMap中的,散列表的实现.扰动函数.负载因 ...

  8. NGK乘势而上打造生态所,建立全方位的区块链生态系统

    当金融理财变成了生活的一部分,购买金融衍生品的眼光成为了影响生活质量重要组成部分.这是一个不缺少黄金的年代,一夜间实现财务自由的故事每天都在上演,但是由于太多人缺少发现黄金的眼睛,只能被财富和机遇拒之 ...

  9. 【转】 FineBI:自助式BI工具打造业务分析的“快与准”

    如今的企业经营方式,业务对于数据分析有极大的需求,但却苦于没有数据以及工具的有效支持,业务分析仍就依赖于IT报表制作.而IT方不断地按业务需求去调研.确认业务逻辑,然后取数做报表,其中还要忍受业务的需 ...

随机推荐

  1. js实现元素边框闪烁功能

    <body> <input type="text" value="test" onclick="flash(this)"& ...

  2. 为Python添加默认模块搜索路径

    方法一:函数添加1 import sys2 查看sys.path3 添加sys.path.append("c:\\") 方法二:修改环境变量w用户可以修改系统环境变量PYTHONP ...

  3. Win8.1系统下搭建IIS8.5+php-5.6运行环境教程

    本文是在window 8.1 的IIS8.5 中搭建php环境 步骤: 1.下载php-5.6程序包 ,官网地址为:http://windows.php.net/download/     注意要下载 ...

  4. Xcode关闭ARC

    开启了ARC则不能显示调用dealloc/retain/release等手动内存管理操作,所以很多情况下需要关闭. Xcode中有两种途径可以关闭ARC. 1.创建项目时将ARC选项的勾取消掉. 2. ...

  5. css基本知识

    WANGJUN59451   css基本知识 1.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets),是一种用来表现 HTML 文档样式的语言,样式定义如何显示 HT ...

  6. [SAP ABAP开发技术总结]程序自己以JOB方式运行

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. hdu 1086(计算几何入门题——计算线段交点个数)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1086 You can Solve a Geometry Problem too Time Limit: 2 ...

  8. webview页面和壳通信的库(精简版)

    // PG精简版 (function() { var PG = { iosBridge: null, callbackId: 0, callbacks: [], commandQueue: [], c ...

  9. git学习笔记01-git最基本的工作原理分布式

    git学习的网站 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000  --廖雪峰老师 ...

  10. Java Abstract class and Interface

    Abstract Class 在定义class的时候必须有abstract 关键字 抽象方法必须有abstract关键字. 可以有已经实现的方法. 可以定义static final 的常量. 可以实现 ...