stellar指南

Stellar是一个连接银行、支付系统以及广大民众的平台

LUMEN

Lumen是Stellar网络的内置资产,一个lumen是一种类似数字货币单位,就像一个比特币一样,XLMlumen的简称。2014年,Stellar网络发行了1000亿个stellar,这是该网络内置资产的原名。

  • 为什么Stellar网络需要一种内置资产?

    Stellar网络提供了分布式数据库上共享公共账本的所有创新功能,分布式数据库通常指的是区块链技术。Stellar网络的内置货币lumen有两种用途:

    首先,lumen起到了一定的过滤垃圾邮件的作用。
    每笔交易都会收取少部分的费用——0.00001lumen。该费用可防止恶意用户充斥网络(也称为)“DoS攻击”)。Lumen是一种安全的代币,可以缓和DOS攻击,这种攻击不仅会在账本中生成大量的交易,还会占据大量的空间。

    同样,Stellar网络要求所有账户至少持有20个lumen的余额,因为这可以确保账户的真实性,从而让网络形成无缝的交易流。

    其次,lumen可以促进多币种交易。
    有些情况下,lumen可以促进没有直接的大型市场的货币对之间的交易,充当桥梁的作用。当lumen和相关的每种货币之间存在流动性市场时,这种功能就不可或缺了。

  • 我只有用lumen才能使用Stellar网络吗?

    Stellar网络可免费使用。其代码是开源的,拥有Apache许可证。

    如果你想在在线网络上进行交易,就要用lumen来支付这些交易的费用。正是因为这种设计,Stellar上的交易成本很低。截止2016年,一个lumen可以支付10万比交易,目前一个lumen的价格大概CNY¥1.34。

参考链接

分享到

jenkins部署springboot应用

最近在项目中使用持续交付(CI)工具jenkins部署spring-boot应用,碰到不少问题,特以此文记录

jenkins配置

  • 插件配置
  • java,maven,git配置

部署脚本

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
27
#!/usr/bin/env bash

BUILD_ID=dontKillMe

PROJ_NAME="backend-web-service"
LOG_PATH="/mnt/data01/logs"
MODULE_JAR_PATH="${WORKSPACE}/backend-web-service/target/${PROJ_NAME}.war"

###### Stop service
pid=`ps -ef | grep $PROJ_NAME | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
sudo kill -9 $pid
fi

###### Maven build package
cd ${WORKSPACE} && mvn clean package -Dmaven.test.skip=true

###### Start service
# Check Log Path
if [ ! -d ${LOG_PATH} ]; then
sudo mkdir -p ${LOG_PATH}
fi

sudo nohup java -jar ${MODULE_JAR_PATH} --spring.profiles.active=dev --logback.logdir=${LOG_PATH} 1>/dev/null 2>/dev/null &

echo "Log Path : ${LOG_PATH}"

碰到的问题

  • 由于jenkins构建完毕后会杀掉所有启动的进程,可以通过改变BUILD_ID的值来防止后台进程被杀死
  • 如果采用maven工程进行构建,修改BUILD_ID无效,后台进程随着jenkins构建完成后仍被杀死
分享到

jenkins安装

最近spring-boot项目用到了持续集成(CI)工具Jenkins进行部署,使用nginx作为反向代理

jenkins的安装

1
2
3
# ubuntu 16.04 LTS 安装
apt-get update
apt-get install -y jenkins

使用nginx配置jenkins

  • nginx反向代理配置
1
2
3
4
5
6
7
8
# jenkins
location ^~ /jenkins {
proxy_pass http://127.0.0.1:8080/jenkins;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
  • /etc/default/jenkins添加--prefix=$PREFIX配置

    1
    JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=$PREFIX"
  • 启动jenkins

    1
    service jenkins start

参考链接

分享到

nexus本地仓库搭建

nexus是可以搭建maven,npm,docker,pypi私有仓库的工具,本文记录本地nexus的安装配置

docker-compose安装nexus

  • 其中docker-compose.yml的配置:
1
2
3
4
5
6
7
8
9
10
11
version: '2'
# nexus
nexus:
image: sonatype/nexus3:3.2.0
restart: always
ports:
- "8081:8081"
volumes:
- /srv/docker/nexus/nexus-data:/nexus-data:Z
environment:
- NEXUS_CONTEXT=nexus
  • 配置挂载目录的权限:
1
mkdir -p /srv/docker/nexus/nexus-data && chown -R 200 /srv/docker/nexus/nexus-data

配置nexus的仓库组

nexus默认的仓库类型有以下3种:

  • group:组仓库,用于方便开发人员自己设定的仓库
  • hosted:宿主仓库,内部项目的开发仓库
  • proxy:代理仓库,从远程中央仓库中寻找数据的仓库

示例代码-github

参考链接

分享到

truffle开发入门

Truffle是以太坊最受欢迎的开发框架,在搭建第一个区块链程序的过程,由于truffle的版本更新为3.0以上,按照大部分部署教程无法运行,特以此记录。本文部署环境为macosx,采用homebrew套件进行部署,homebrew的安装可参考之前文章homebrew安装

Node环境配置
1
2
3
4
# Install node
brew install node
# Test
node -v
Truffle安装
1
2
3
4
5
6
# Install truffle v3.2.1
npm install -g truffle@3.2.1
# Install testrpc
npm install -g ethereumjs-testrpc
# Testrpc
testrpc
Webpack Truffle Box
1
2
3
4
5
6
7
8
# webpack
mkdir webpack && cd webpack
# Truffle init
truffle ubox webpack
# Compile and migrate
truffle compile && truffle migrate
# Serve
npm run dev
参考链接
分享到

区块链权威指南

区块链架构剖析

区块链权威指南读书笔记

区块链1.0架构:比特币区块链
  1. 比特币前端
    • 钱包:非决定性钱包,决定性钱包
    • HTTP/JSON RPC API
    • 命令行工具bitcoin-cli
    • 比特币浏览器bx
    • 图形开发工具(Qt)
  2. 比特币后端
    • 区块管理
    • 区块验证
    • 内存池管理
    • 邻接点管理
    • 共识管理
    • 规则管理
    • 密码模块
    • 签名模块
    • 脚本引擎
    • 挖矿
    • HTTP/JSON RPC服务端
    • Berkeley DB和LevelDB数据库
    • P2P网络管理
    • ZMQ队列管理
区块链2.0架构:以太坊区块链
  • EVM高级语言 :Solidity(Js)、Serpent(Python)、LLL(Lisp)、Mutan(C已废弃)
  • 主流脚手架:Go,Solidity(js), Truffle
分享到

cdh下Sqoop的使用

最近项目需要导出Hdfs的数据到mysql中,采用sqoop作为主要的导出方案,在使用sqoop2和sqoop1的过程中,碰到一些问题以及对应的一些解决方案。思绪来的快,去的也快,特此记录

项目中采用cdh搭建的hadoop大数据平台,其中cdh的版本为5.12.0,由于涉及到cdh中sqoop2的部署,使用sqoop2的Java api,sqoop2的源码修改以支持自定义分隔符以及如何采用sqoop1的Java api解决方案,故通过分小节来记录,主要小节分类如下:

Sqoop2的解决方案:

Sqoop1的解决方案:

  • cdh下Sqoop1的部署
  • Sqoop1 Java api解析
  • Sqoop1 remote ssh执行命令
分享到

cdh下Sqoop2的安装

本文中采用的cdh版本为5.12.0,如何部署cdh可以参考之前的博文cdh安装准备cdh5.12.0的安装

sqoop2配置

  • cdh安装sqoop2
  • 配置Drivers
  • 配置hadoop依赖

cdh安装sqoop2

cdh5.12.0下安装sqoop2,参见官方的安装手册,直接在搭建好的cdh管理界面添加Sqoop2服务组件,然后一路选择继续安装,等待Sqoop2服务启动完毕。

配置Drivers

由于本文是采用hdfs导出数据到mysql,故需配置mysql的connector的jar依赖包,参考官方的指南,下载mysql-connector-java.jar包,然后拷贝到对应的cdh的默认sqoop2的目录/var/lin/sqoop2目录中,最终的目录结构如下:

1
2
[~]ls /var/lib/sqoop2
mysql-connector-java.jar postgresql-9.0-801.jdbc4.jar repository tomcat-deployment
配置hadoop超链接
1
2
3
cd /opt/cloudera/parcels/CDH/lib/hadoop/client
sudo ln -s ../../hadoop-hdfs/lib/jackson-mapper-asl-1.8.8.jar .
sudo ln -s ../../hadoop-hdfs/lib/jackson-core-asl-1.8.8.jar .

Tips:配置完毕后在cdh管理界面重启Sqoop2组件服务,否则配置不生效

参考链接

分享到

Resource和Autowired注解区别

最近在使用Mybatis处理通用Mapper封装时,使用@Resource进行注入bean时,遇到一些问题,本文特此记录:

@Autowired默认按照类型进行装配,要求依赖对象必须存在,如果允许为null,可以设置required属性为false;可以结合@Qualifier注解使用名称装配。

@Resource主要有两种属性type和name。如果使用name属性,则使用byName进行注入;如果使用type属性,则使用byType进行注入;如果注入策略既不制定name也不指定type属性,将通过反射机制使用byName进行注入。其中@Resource的装配顺序如下:

  • 指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  • 指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  • 指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  • 既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配

在泛型装配时,@Resouce和@Autowired的区别:

1
2
3
4
5
6
7
8
/**
* 针对@Resouce会出现无法装配的情形
* @Autowired按照类型装配,在装配泛型是按照T的真实类型装配
*/
public abstract class AbstractService<T> implements IService<T> {
@Autowired
protected IMapper<T> IMapper;
}

参考链接

分享到

hexo布局

hexo布局

Hexo有三种默认布局:postpagedraft,他们分别对应不同的目录,而自定义的其他布局和post相同,都将存储到source/_posts目录。

布局 目录
post source/_posts
page source
draft source/_drafts

草稿

hexo的特殊布局:draft,这种布局建立时会被保存到source/_drafts文件夹,可通过publish命令将草稿移动到source/_posts目录下,该命令的使用方式与new类似,也可以通过layout指定布局。

1
$hexo publish [layout] <title>

草稿默认不会显示在页面中,可在执行时加上--draft参数,或是把render_drafts参数设置为true来预览草稿。

参考链接

分享到