新建项目和工程

为了管理方便,在DevOps中将系统分级为两层,项目、工程。 在演示用例中,我们建立一个项目,samples, 里面包含若干工程,hellowar, hellojar, hellohtml等。

以hellowar为例,建立Tomcat项目的自动化部署。

关于hellowar

hellowar是一个简单的tomcat项目,源代码可以在gikoluo/java-tomcat-example-app找到。部署成功后,访问项目首页,会得到一个WEB页面: hello world。

Jenkins项目框架

 HOME  #根
|-- samples #项目名
| |-----builds #这里放置编译任务
| |---- hellowar
| |---- hellojar
| |---- hellowar #这是一个带有pipeline的发布任务
| |---- hellojar
|-- sa #SA项目,用于管理DevOps环境及设备
|---- playbooks 这是一个发布+ant编译的项目。

对于工程,我们把编译和发布分离,一个pipeline中仅关联一次编译,这样有助于减少编译次数,并保证各环境下的部署内容一致。

Playbook项目框架

ROOT
|-- samples #项目名
|-- 22-tomcat8.yml #基础包。用数字作为前缀,表明依赖的先后顺序。
|-- hellowar.yml #工程包。以工程为名。

配置文件结构

ROOT
|-- projects
| |-- samples
| | |-- vars
| | | |-- main.yml #通用配置
| | | |-- uat.yml #环境特殊配置,比如环境IP,数据库IP等
| | |-- hellowar #应用配置模板文件,可以使用vars中的变量
| | | #在发布时进行变量替换。
| | | |-- application.xml

Tomcat基础包部署文件

---
# filename: 22-tomcat8.yml

- hosts: "&samples:hellowar"
become: True
become_user: root
pre_tasks:
- name: include Globals
include: "{{ playbook_dir }}/../includes/global_vars.yml"
vars:
project_name: "samples"
roles:
- app.tomcat
vars:
project_name: "hellowar"
service_name: "{{ hellowar.tomcat.service_name }}"
jdk_home: "{{ jdk8_home }}"
tomcat_version: '8.5.38'
tomcat_env_catalina_home: "{{ opt_root }}/{{ service_name }}/"
tomcat_redis_filename: "apache-tomcat-{{ tomcat_version }}.tar.gz"
tomcat_default_override_uri_encoding: UTF-8
tomcat_service_allow_restart: true
system_type: "systemd"
tomcat_instances:
- name: "{{ service_name }}"
service_name: "{{ service_name }}"
service_file: "{{ service_name }}"
port_ajp: 8009
port_connector: "{{ hellowar.tomcat.port }}"
port_redirect: 8443
port_shutdown: -1
path: "{{ opt_root }}/{{ service_name }}"
tomcat_service_allow_restart: true
tomcat_default_override_uri_encoding: UTF-8

项目部署文件

---
# filename: hellowar.yml

- hosts: &samples:hellowar
pre_tasks:
- name: include Globals
include: "{{ playbook_dir }}/../includes/global_vars.yml"
tags: "always"
roles:
- role: app.config
- role: app.war
vars:
type: "tomcat"
vars:
project_name: "samples"
service_name: "{{ hellowar.tomcat.service_name }}"
workspace: "{{ app_root }}/war/{{ service_name }}"
container:
type: "tomcat"
service_name: "{{ service_name }}"
jdk_home: "{{ jdk8_home }}"
warfile: "hello.war"
TARGET_FILE: "hello-0.0.1-SNAPSHOT.war" #this file path will be replace by jenkins
war_unachive: false
target_type: "war"
configurations_files: "{{ hellowar.configurations_files }}"
service:
name: "{{ service_name }}"
port: "{{ hellowar.tomcat.port }}"

服务器设备配置

#filename: uat/samples

[jdk8]
192.168.10.50 default_link=1

[hellowar]
192.168.10.50

[samples:children]
hellowar

配置文件

---
#repo: configs
#filename: configs/projects/vars/main.yml

hellowar:
tomcat:
service_name: "tomcat-hellowar"
port: 8080
configurations_files: []
log:
home: "{{ log_root }}/tomcat-hellowar"
level: INFO

提交并在Jenkins中发布Playbooks,configs代码

进入发布机,将项目的设备资源及环境进行初始化

ansible-playbook jkt/22-tomcat7.yml -i $INVERNTORY
ansible-playbook jkt/crm.yml -i $INVERNTORY --tags=setup
ansible-playbook jkt/appserver.yml -i $INVERNTORY --tags=setup

配置Jenkins

在Jenkins WEB页面中,如上框所示的目录架构,新建文件夹任务,samples; 再建立文件夹任务builds。

建立hellowar工程,类型为maven项目,配置如下:

源代码: https://github.com/gikoluo/java-tomcat-example-app.git
Build:
ROOT POM: pom.xml
Goals and options: compile war:war
归档成品: target/hellowar.war

保存,编译,等待hellowar.war编译完成

在samples内,建立任务hellowar,类型为 流水线。配置如下:

Prepare an environment for the run: True
Properties Content内填入以下内容:

PROJECT_NAME=samples
SERVICE_NAME=hellowar
BUILD_JOB=${PROJECT_NAME}/builds/hellowar
TARGET_FILE=target/hellowar.war
AUTO_BUILD=true

流水线: Pipeline srcipt from SCM
GIT, Repositories: https://github.com/gikoluo/devops-utils.git
脚本路径: src/jenkinsfile/common/Jenkinsfile.groovy

  • Prepare an environment for the run: 为EnvInject提供的功能,将Properties Content的语法为Key/Value变量,申明内容将注入到全局变量,供Jenkins脚本使用。注意,内容中,不允许有注释。
    • PROJECT_NAME/SERVICE_NAME: 填项目、工程名称。
    • BUILD_JOB: 填上文建立的Maven项目名。形如${PROJECT_NAME}/builds/hellowar。
    • TARGET_FILE: 填BUILD_JOB中编译归档的文件名,注意带上路径。
    • PLAYBOOK: 填写Playbook名称,如不存在则将使用 ${PROJECT_NAME}/${SERVICE_NAME}。
    • AUTO_BUILD: true/false 。 #是否每次发布时都自动执行编译。默认True。
  • 流水线: gikoluo/devops-utils 提供了一些标准通用的流水线文件,可以直接使用,可以获得源代码滞后,将文件内容直接复制到流水线定义里。

保存,构建。顺利的话,你将得到一个如图所示的Pipeline:

确认发布UAT之后,将进入验收阶段。 在浏览器中键入: http://192.168.10.50:8080/hello/ , 得到Hello World。确认UAT验证完成。

接下来继续通过Pipeline,确认Production发布、Production验收阶段,完成上线的全部流程。

新增目标服务器

在完成服务器的上架工作后,对服务器进行初始化配置。

在Ansible发布机配置的章节,已经进行过类似的操作了。 这里作为运维新机器上架的操作,再列一次。

在机器建立之初,首先得通过项目属性,了解机器的用途。获得以下属性:

  • 项目组: samples。 项目组为服务组,或者一个工作组。可以共享部署配置。
  • 服务名:hellowar。 服务名为一个可独立部署的服务。
  • 环境:UAT。
  • 设备IP:192.168.10.50
  • 服务环境: Tomcat8
  • JAVA环境:JDK8
  • 服务类型:放置在Tomcat下的War服务包

建立机器配置

$ cd playbooks
$ vi uat/samples
[jdk8]
192.168.33.100 default_link=1

[hellowar]
192.168.33.100

[samples:children]
hellowar

提交代码到GIT,然后在Jenkins WEB界面中执行SA/playbooks发布操作,将更新推送到发布机。

进入到发布机中进行目标的Ansible推送操作。

ssh ANSIBLE-UAT

export IP=192.168.33.100
export INVERNTORY=uat
export KEY_PATH=~/.ssh/agent/id_rsa
#注入公钥
ansible-playbook setups/10-installkey.yml -i $INVERNTORY -l "$IP" --private-key=$KEY_PATH
#建立统一的初始化环境
ansible-playbook setups/00-setup.yml -i $INVERNTORY -l "$IP"
#安装JDK8
ansible-playbook setups/01-oracle-jdk8.yml -i $INVERNTORY -l "$IP"
#安装Tomcat
ansible-playbook samples/22-tomcat8.yml -i $INVERNTORY
#初始化项目框架
ansible-playbook samples/23-hellowar.yml -i $INVERNTORY --tags=setup

关于如何写sample/*.yml, 在下一篇文章中会介绍。

Ansible发布机

上接Jenkins部署,现在分别在三个环境下,构建三台Ansible发布机器,机器将作为Jenkins的部署节点。
现在将Jenkins机器作为临时的Ansible节点,分别推送三个环境的Ansible部署机器的安装工作。
以UAT环境为例,操作如下

建立Playbook发布项目

进入Jenkins:
新建任务,添加文件夹,任务名: SA;
进入SA目录,新建任务,添加自由风格的软件项目,任务名: playbook,配置如下:

项目类型: 自由风格的软件项目
描述: 将Absible Playbooks 发布到 发布机
源码管理: git, Repository URL: https://github.com/gikoluo/playbooks2.git
构建:Invoke Ant
Ant version: ant or default
Target: build
构建后操作:
Send build artifacts over SSH
SSH Server: 192.168.10.45
Transfers Set:
Source file: dist/playbooks.tar.gz
Remote directory: playbooks/
Exec command: cd /data/playbooks && tar zxvf playbooks.tar.gz && rm playbooks.tar.gz
Flatten files: TRUE

SSH Server: 192.168.33.10
Transfers Set:
THE SAME AS BELOW.

SSH Server: 10.0.1.12
Transfers Set:
THE SAME AS BELOW.

归档成品:
用于存档的文件: dist/playbooks.tar.gz

保存,然后发布, 检查日志输出、目标文件夹代码是否正常。

安装Ansible

#进入Jenkins机器
$ ssh jenkins
#安装pip & ansbile。 通过pip安装可以保证ansible的版本较新。
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py
$ pip install ansible
#克隆ansible剧本
$ cd /data
$ git clone https://github.com/gikoluo/playbooks2.git playbook
$ git clone https://github.com/gikoluo/ansible-config.git configs
#配置IP
$ cd playbooks
$ vi uat/sa

[ansible]
192.168.10.45
[jdk8]
192.168.10.45 default_link=1

#将Jenkins登录公钥注入部署机器
$ export IP=192.168.10.45
$ export INVERNTORY=uat
$ export KEY_PATH=~/.ssh/agent/id_rsa
$ ansible-playbook setups/10-installkey.yml -i $INVERNTORY -l "$IP" --private-key=$KEY_PATH #如果使用证书登录,使用本行
$ ansible-playbook setups/10-installkey.yml -i $INVERNTORY -l "$IP" -kK #如果使用密码登录,可以使用本行,输入密码和SUDO密码
$ ssh $IP ip a #测试是否可直接登录成功,如果返回正常,则说明安装密钥正常。
#将Jenkins登录公约注入部署机器
$ ansible-playbook setups/00-setup.yml -i $INVERNTORY -l "$IP" #初始化机器环境
$ ansible-playbook provo/01-ansible.yml -i $INVERNTORY -l "$IP" #安装Ansible
$ ansible-playbook setups/01-oracle-jdk8.yml -i $INVERNTORY -l "$IP" #安装JDK环境,将Ansible机器作为Jenkins节点时需要
$ ansible-playbook setups/01-open-jdk8.yml -i $INVERNTORY -l "$IP" #或安装openJDK环境,将Ansible机器作为Jenkins节点时需要

将发布机器配置为Jenkins节点

进入Jenkins -> 系统管理 -> 节点管理 -> 新建节点 -> 填写下方配置后保存。

节点名称:ansible-uat
节点类型:固定节点
远程工作目录: /data/playbooks
主机: 192.168.10.45
Credentials: 自行配置私钥

保存后,Jenkins会自动启动节点服务。如启动失败,可根据日志检查问题。

部署其他节点

与上方操作相同,完成三台发布机初始化工作,在JENKINS节点中分别命名为ANSIBLE-TEST,ANSIBLE-UAT,ANSIBLE-PROD。

Jenkins部署

使用Docker部署

$ git clone https://github.com/gikoluo/devops-jenkins.git
$ cd devops-jenkins
$ docker-compose up

使用K8S部署

$ git clone https://github.com/gikoluo/devops-jenkins.git
$ cd devops-jenkins
$ kubectl apply -f jenkins-home-pvc.yaml
$ kubectl apply -f jenkins-deployment.yaml
$ kubectl apply -f jenkins-service.yaml

传统部署

$ yum install jenkins

安装组件

微服务部署时,组件已经完成部署。传统部署模式下,需要手动运行以下脚本安装组件。

 
$ export JENKINS_USER_ID=luochunhui
$ export JENKINS_API_TOKEN=123456
$ export JENKINS_SERVER=http://192.168.30.200:8080/
$ cd devops-jenkins
$ wget "${JENKINS_SERVER}jnlpJars/jenkins-cli.jar"
$ xargs java -jar jenkins-cli.jar -s $JENKINS_SERVER install-plugin $i < plugins.txt

OpenLdap管理

一、服务器部署

使用DockerComposer部署

$ git clone https://github.com/gikoluo/openldap
$ cd openldap
$ docker-compose up

使用K8S部署

$ git clone https://github.com/gikoluo/openldap
$ cd openldap
$ kubectl apply -f openldap-etc-pvc.yaml
$ kubectl apply -f openldap-lib-pvc.yaml
$ kubectl apply -f openldap-deployment.yaml
$ kubectl apply -f openldap-service.yaml

# Check services
$ kubectl get deployments openldap
$ kubectl get services openldap
$ kubectl describe services openldap
$ kubectl get pods

# Open a temporary port to manage
$ kubectl port-forward openldap-XXXXXX-XXXX 8389:389

使用Helm部署

helm install --name openldap -f helm.yaml stable/openldap

使用传统Yum部署

详细流程参见页面: https://linuxtechlab.com/openldap-complete-guide-install-configure

$ yum install openldap-server

二、管理使用

验证:

$ ldapsearch -x -W -D 'cn=Manager,dc=greenlandfinancial,dc=com' -b "" -s base
Enter LDAP Password:
# extended LDIF
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: ALL
#

#
dn:
objectClass: top
objectClass: OpenLDAProotDSE

# search result
search: 2
result: 0 Success
numResponses: 2
numEntries: 1

使用ApacheDirectoryStudio进行管理

从 https://directory.apache.org/studio/ 下载并安装ADS。 适用于MAC,Windows,Linux。

新建LDAP连接,使用以下配置:

Hostname: 127.0.0.1
Port: 389
Encryption method: No encryption
Provider: Apache Directory LDAP Client API
BindDN or user: cn=Manager,dc=greenlandfinancial,dc=com
Bind password: password set in deploy

建立组织和用户结构

建立组织结构,结果按图示:

ou=inner         #内部产品
- ou=jenkins #某产品,也用来管理用户和产品之间权限管理
ou=people #用户列表
- cn=luochunhui@greenlandfinancial.com #用户

管理用户和组关系

在需要的授权的组中,增加member属性,其值为用户的DN地址。示例如下图:

十二月读书简报

《咨询学》- 余阳明 

简评: 读完了第一章,放弃。写得太马克思了。

《成为百万美元咨询师》- 艾伦*韦斯 第四版

本书对咨询师如何成为更优秀地咨询师地指导,本身文字具有很强的咨询性质。比如一些要点:放弃底部15%;强调结果和效果;一分钟精确阐述自己地价值等等。其中1%解决方案也挺富有哲理。本书的语句,精辟短小,可以作为咨询师进行语言摘录的重要来源。

《区块链平台调研与分析报告》

《区块链平台调研与分析报告》 – FISCO-BCOS/Wiki

〇、概要

本文从8个维度,包括架构、核心技术组件、应用功能、技术能力、安全机制、适用性、开发及工具、维护支持能力,围绕Ethereum、Fabric、Corda、BCOS 4个区块链技术平台展开分析。

四个区块链平台介绍

  • Ethereum:以太坊,最早提出,可建立去中心化应用
  • Fabric:超级账本
  • Corda:是一个分布式账本;第二,Corda是一个去中心化数据库;第三,Corda是一个“受区块链启发的”技术平台
  • BCOS:名字取至BlockChainOpenSource,是深圳前海微众银行股份有限公司、上海万向区块链股份公司、矩阵元技术(深圳)有限公司三方共同研发并且完全开源的区块链底层技术平台。

一、架构

  • 数据层:数据链式结构、数字签名、哈希函数、非对称加密等算法和技术。主要实现了网络数据存储、账户和交易的实现与安全两个功能。
  • 网络层:P2P网络机制、数据传输机制和数据验证机制,实现网络节点的连接和通讯。
  • 共识层:封装网络节点的各类共识机制算法。常见:Pow、PoS、BFT等。
  • 激励层:实现代币的发行和分配。激励遵守规则的节点、惩罚不规则节点。
  • 合约层:封装脚本、算法、智能合约,赋予账本可编程的特性。
  • 应用层:各类应用场景和案例,如DAPP。

架构灵活性

  • Ethereum:分片机制,未实现。
  • Fabric:松耦合设计,将共识机制、身份验证等组件模块化;支持不同主体间交易的多通道结构,提升业务隔离、安全性方面。
  • Corda:共识机制设计为可插拔的独立性服务。通过独立服务(验证使用,不必证明合法)提高了扩展性、分账系统的兼容性和算法敏捷性。
  • BCOS:共识算法采用插件化设计,实现在多个联盟链里使用不同的共识机制,参与到同一个联盟链的所有节点必须采用同一种共识配置。

节点分类

  • Ethereum:从Pow到PoS共识,依据资产的多寡分配记账权重,更好的利用计算资源
  • Fabric:验证节点、非验证节点。通过授权和证书管理节点。
  • Corda:普通节点、公证节点(有效性共识、金融凭证流运行和签发)、管理节点。
  • BCOS:共识节点和观察节点。共识节点参与运算,成为记账者,观察节点只同步数据。

二、核心技术组件

共识机制

  • Ethereum:PoW+PoS混合机制
  • Fabric:主要为PBFT。
  • Corda:一般选择BTF为公证算法,也可以使用Raft。
  • BCOS:PBFT、Raft作为联盟链的共识算法,参与到联盟链的所有节点必须选用同一种共识配置。

通讯/P2P技术

  • Ethereum:标准加密货币协议,“幽灵”协议的最基础部门
  • Fabric:Google PRC,功能包括双向流,流控制,多路复用要求。能与网络基础设施结合,包括防火墙,代理服务器以及安全保护,提供点对点的多路传送的定义
  • Corda:AMPQ/1.0消息中间件,适合嵌入式应用。TLS加密协议。
  • BCOS:AMOP系统,联盟链内区块链节点,无论是共识节点还是观察节点,均可使用AMOP进行通讯。

存储

  • Ethereum:使用Merkle树存放交易散列。区块头记录状态快照。但回收剔除的历史区块的方法,特别是其存储方式,存在争议,主要争议点为历史数据会导致数据中心点。
  • Fabric:同Ethereum
  • Corda:数据仅存储在合约执行者的节点。
  • BCOS:支持分组多副本方式存储,支持分布式数据存储,企业可使用现有分布式存储方法,如数据仓库、数据库集群等。

计算效率

Ethereum、Corda的交易可被并行验证以提高计算效率

  • Ethereum:通过分区解决合约持久化问题和分区间并行, 但尚未实现。
  • Fabric:低效率
  • Corda:因为存储仅在合约执行节点,因此计算可并行。
  • BCOS:利用集群化、分片机制,使交易按一定的规则互相隔离,可被并行处理,且数据量可以通过垂直切分的方式,分布存储在不同的存储设备上,以满足性能和容量平行扩容的需求。

三、应用功能

身份认证

  • Ethereum:匿名身份认证。
  • Fabric:数字证书,基于PKI。
  • Corda:数字证书。存在全网身份服务节点。
  • BCOS:数字证书。使用CA证书准入机制。

账户设计

  • Ethereum:余额账户机制。
  • Fabric:无代币,可以通过ChainCode实现本币发行和账户功能。
  • Corda:无余额,所有余额通过UTXO计算得出。
  • BCOS:无代币。

私钥保护

  • Ethereum:用户本地存储
  • Fabric:用户本地存储
  • Corda:证书与私钥绑定
  • BCOS:采用加密机,与节点分离存储

智能合约

  • Ethereum:图灵完备,采取合约和共识相连
  • Fabric:Docker计算
  • Corda:JVM运行。交易、智能合约、流架构。
  • BCOS:运用Solodity合约开发语言。同Ethereum。

监管相关功能

  • Ethereum:公有链特性,监管可接入,但身份匿名,监管接入意义不大
  • Fabric:监管机构可按照规定规则来审计全部或部分总账分录,利用密钥的层级赋予权限,审计员通过“基于时间的证书”来获得总账查看权限
  • Corda:许可、运营
  • BCOS:支持监管部门和审计部门作为特殊节点接入,同步数据。提供可监管、可审计的数据接口

特权机制的实现

特权机制主要包括两类:暂停、回滚或者取消交易;改正数据。

  • Ethereum:无。理论上可“隐性地”实现暂停、回滚或取消交易以及改正数据的特权,采用硬分叉、反向交易方式。
  • Fabric:同上
  • Corda:同上
  • BCOS:BCOS可以针对特定的业务场景,制定特定的权限集合,如监管方可以是联盟链的规则制定者和实施者,通过参与准入审核,智能合约编写、部署和升级,以及事前中后的检测和干预对业务实施监管。

四、技术能力

吞吐量

  • Ethereum:当前交易限制在10TPS或者更低。
  • Fabric:1000TPS或更高
  • Corda:与交易复杂程度正相关。总吞吐量与Fabric相当
  • BCOS:数千TPS,并支持平行扩展

确认时间

  • Ethereum:确认时间12秒左右。
  • Fabric:3-6秒确认交易
  • Corda:实时
  • BCOS:1秒出块,出块即达成共识

可用性

  • Ethereum:PoW提供较高的灵活性和可用性。
  • Fabric:记账节点必须在线提供服务而不能推出网络,三分之一的节点停机将变得不可用
  • Corda:节点必须自身保证
  • BCOS:PBFT共识与Fabric一直;Raft超过1/2数量时网络不可用

五、安全机制

从总体上看,理想的隐私保护策略,如零知识证明、同态加密等大都基于较为复杂的密码学技术,目前在各平台实际应用中有待进一步完善并丰富应用场景。

六、平台适用性

  • Ethereum:Ethereum可利用图灵完备的智能合约,适应金融应用、物联网、供应链管理、社交网络、去中心化自治组织(DAO)、预测市场等场景。
  • Fabric:Fabric具备了多通道的架构设计以及共识节点的独立性,可以在保证平台上交易多方隐私性的同时,提高共识节点的效率,从而在技术上推动区块链和分布式账本技术在跨行业应用场景中的应用,使其可满足金融服务、供应链管理、智能制造、文化娱乐、医疗健康、社会公益、教育就业等领域的应用。
  • Corda:Corda定位为面向非公有链的场景,其架构设计如可插拔的共识算法、灵活可配的节点权限、凭据流概念的引入,使得Corda更接近于受监管的金融机构的应用。
  • BCOS:PBFT共识与Fabric一直;Raft超过1/2数量时网络不可用。
  • 与外部数据对接的角度上看,Ethereum、Fabric、Corda和BCOS在架构上均预留了身份、策略、数据、过程等应用模块,

七、开发及工具

编程语言

  • Ethereum:Go、C++、Python,通过编译器转成EVM语言。Solidity为首选。
  • Fabric:容器技术,支持Go、Java。
  • Corda:Java,Koltin,也支持SQL。原则上DApp支持JVM任何语言。
  • BCOS:支持C++,Java,Python,Javascript,Go。

配套开发工具

  • Ethereum:技术文档。Solidity语言。
  • Fabric:Fabric项目源码。
  • Corda:DorDapp-template,Samples。
  • BCOS:源码、SDK工具包。

接口完备程度

  • Ethereum:8545端口,JSON RPC API接口,可执行WEB3库的各种指令。
  • Fabric:灵活可扩展的模块,提供API接口,即插即用。
  • Corda:流程实时监控和展示接口,预留SQL,支持通用API接口。
  • BCOS:对业务层提供接口服务,HTTPS服务端口,JSON编码。SDK面向区块链底层功能接口的调用;SDK也面向业务,提供业务级别的接口。

智能合约的可编辑性

  • Ethereum:用户可创建自己的包含任意逻辑的合约。
  • Fabric:理论上Docker支持任何语言,但Docker架构存在资源消耗难以测定、通用性方面的问题。
  • Corda:可使用任何与JVM兼容的语言。
  • BCOS:支持Solidity,计划支持JVM。

八、维护支持能力

版本升级维护

  • Ethereum:主要由 Ethereum 基金会来负责运行,且有明确规划:Frontier(前沿)、Homestead(家园)、Metropolis(大都会)和Serenity(宁静)。
  • Fabric:由 Linux 基金会发起创建的,联盟主要成员来自大型金融机构、大型 IT 企业、大型咨询机构等不同的利益体,具备强大的资金和技术能力。源于IBM。
  • Corda:由 R3 CEV 联盟组织开发,其成员主要来自于全球知名的金融机构。
  • BCOS:BCOS由微众银行、万向区块链、矩阵元共同开发,有专业开发团队进行研发和维护。BCOS升级原则上保证向下兼容。BCOS平台借鉴COBIT模型,形成了一个三维治理体系结构,包括治理准则(Business Requirements)、治理对象(Resources)、及治理过程(Processes)。

九、总结表

社会形态的更迭

人类社会划分为五种社会形态,即原始社会、奴隶社会、封建社会、资本主义社会、共产主义社会。更迭方式:

  1. 原始社会 =》 奴隶社会。 上层社会的推进,事件为战争。 原始社会的部落首领,对于本部落的人员相对平等,通过战争所获得的异族人员成为了奴隶。
  2. 奴隶社会 =》 封建社会。 上层社会的推进,事件为生产效率的提升。生产效率提升后,奴隶资源出现过剩并被自由化。奴隶主从对人员数量的控制,形态意识上转变为对土地资源的控制。奴隶之间的关系转变为对奴隶主的依附,更准确的说,是对可耕种土地的依附,形成了封建社会。
  3. 封建社会=》资本主义社会。 下层社会的推进,事件为工业革命及剩余生产力所导致的贸易发展。封建社会严格控制了农业土地资源,分封制的等级制度为上层社会提供了牢固的利益保障。因此,上层社会缺少变革的动力。随着工业革命、贸易商业的发展,一方面需要打破地域的分封限制,另一方面使得土地不再是唯一重要的生产资料,农民转向至对工业生产资料,即资本,的依赖。而资本家们,在任何一个封建社会都属于不入流的社会底层。不论是欧洲对犹太人的歧视,还是中国重农抑商的政策,
  4. 资本主义社会 =》共产主义社会。 下层社会的推进,事件为经济发展及对自由的幻想。资本家们控制了社会财富,控制了生产资料。无产阶级需要依附于资本进行劳动才能创造价值。经济的发展保障了无产阶级的生理需求,吃饱了没事干想要自由,于是有了罢工、革命。无产阶级所获得的自由,是不稳定的,缘起与无产阶级还缺少一种更为高效的社会生产关系。个体的差异必然导致财富分配的差异,引起资本的集中化而形成新的资本主义。所以,革命之后的共产主义,未来也必发展为资本主义,不论他声称多么具有特色。

信息网络技术与组织变革

本文写自“中国社会科学院研究生院硕士课程论文 – 企业管理学课程”,论文作业交后,在本Blog发布。

摘要:信息网络技术推动着社会生产力的进步,外部信息环境的变化,对企业传统科层制的管理方式形成组织变革压力和动力。网络技术革新和信息革命、新零售的供应链、新世代的群体文化差异,从技术、效率、管理等多个维度影响着企业的组织管理方式,推动企业建设信息化技术,发展柔性组织变革。

关键字:信息网络技术 组织变革 新零售 柔性组织

一、    引言

全球信息网络技术的发展,不仅仅带来了技术的进步,同时也在不断地改造传统的商业模式,形成新的思维方式。中国“互联网+”在利用信息通信技术以及互联网平台技术发展推动下,将互联网与传统行业进行深度融合,创造出新的发展生态。互联网时代的人们思维方式,工作方式也在发生着改变,更为关键的是,在互联网环境下成长起来的八零、九零的职业新生代,其生活理念、工作方式、价值观和个人追求都发生了显著变化。这些变化给传统的企业管理带来的新的挑战。

企业的组织结构是指为了实现组织的目标,在组织理论指导下,经过组织设计形成的组织内部各个部门、各个层次之间固定的排列方式,即组织内部的构成方式。正如官僚制组织是工业革命时代的创造性产物一样,每个时代都会产生适应自己需要的组织形式。在互联网环境推动下,传统的组织管理理论在逐渐被颠覆,如直线制、职能制等传统的组织结构模式,具有职能分工细、管理层级多的特点,在信息时代呈现出内部消耗严重、协同效率低下、市场反应迟缓等现象,难以适应信息化市场的竞争要求。

信息时代,企业只有根据时代变化趋势,做出相应的组织变革,形成高效、灵活、创新的组织结构,才能在激烈的市场竞争中获得生存和发展。

二、    信息时代的环境变化

(一)、   信息技术革新

信息时代最直接的影响就是技术革新。20世纪90年代以来,IT技术革新先后经历了计算机系统、数据库与网络、决策支持系统、信息资源系统、电子商务时代。当前蓬勃发展的大数据及人工智能技术即将带来新一代科技革命的萌芽。随着信息技术的集成化、网络化、数字化的发展,人类社会已进入真正的信息时代。

21世纪是信息大爆炸的世纪。相比传统的信息获取方式而言,人们可以更快的获得信息,但相对于海量数据而言,每一个个体获得的信息却又不是充分的。因此,对于信息技术的掌握和运用,正在成为公司的重要战略力量,企业获取、甄别、处理信息的手段的效率直接影响企业的市场地位。为了更快的获得市场竞争环境动态、传导执行战略,企业开始利用信息技术的处理能力,重新改造结构、提高技能、组织资源,将信息技术与生产经营的各个活动融为一体。

(二)、   新零售发展

不论传统零售,还是新零售,其活动中都包含三个要素,场、货、人,即交易场所和场景、货物或服务、人或机构[1]。过去的企业经营方式是产品导向型的经济特征,工厂生产了商品、找到最旺的商铺、卖给最多的人。新零售经济下的三个要素没变,但其表现形式已经发生不同程度的变化:

  • 人:信息化使得消费者变的可识别,可分析,可触达。通过互联网手段可以在不见面的情况下和消费者发生互动并直接形成交易,在大数据驱动下的,企业对消费者的信息了解更精确,触达方式更为广泛。
  • 货:货物不再是单纯的商品及商品信息的展示。与大规模的定制生产的工厂不同,新零售下的工厂生产方式表现出柔性供应链的生产方式,借助于信息的快速流动及大数据的信息处理能力,缩短整个供应链的响应速度,统一接单,统一出货,缩短从产品生产到消费的流转时间,提高企业经营效率。
  • 场:未来在整个大数据驱动的新零售模式下,场不再受限于实体商铺,也不仅仅表现为纯粹的线上电商。用户可以到店支付取货,也可以线上交易,线下取货,也可以到店下单,物流快递取货。通过线上技术和线下服务之间的相互结合、交融,消费者和企业的互动更为频繁,提升了消费者满意度。

信息技术能帮助商品的生产者与服务者,能更好的识别与理解消费者,在对消费者需求的洞察之上,指导商品的生产与服务的优化,进而在所有合适的场景里(包括线上和线下)提供给消费者。零售的三要素发生了重构,从原先的“货-场-人”,转变为“人-货-场”,这是就是与“零售”相似,而又不同的“新零售”。企业的经营方式以用户需求为导向,为用户提供个性化的服务。

(三)、   组织及组织成员的需求升级

以“人-货-场”的生产经营方式,需要企业具备快速的市场响应能力。工业经济时代的企业强调规模经济,大规模生产和销售需要精确和可量化管理,科层制的组织以其强有力的控制能力,完美并高效地适应了这样的时代要求,促进了这一时期企业组织的发展。而到信息时代,科层制组织的弊端则逐渐显现,表现为:组织规模越来越大,组织成本则越来越高,组织效率日益低下,组织磨擦越来越大,官僚体制阻碍组织创新,降低员工士气。另外企业组织的生产方式、经营内容、效率标准和成员结构都发生了变化,而科层制的刚性结构不能适应这种变化,因而组织必须进行变革。

信息时代组织成员的需求层次也不断提高,员工不单追求物质经济方面的满足,也不只追求在社会方面和心理方面的满足,而是更加强调自我价值的实现,因此工作的性质、工作的责任感、工作的挑战性及工作得到他人认可的程度就成了影响员工积极性的最重要因素,在组织设计时需要考虑这些因素,以便充分发挥出员工的自主决策积极性、创造力和想象力。同时,组织员工的需求呈现出差异化、个性化的趋势,这就需要企业组织采用相应的措施来适应员工需求的变化。

三、    企业组织的信息变革

(一)、   拥抱信息技术,推进企业信息建设

信息技术影响了企业的竞争环境,同时也给企业提供了信息化建设、提升企业信息技术能力和生产管理效率的科技基础。信息化成长过程的学术研究对企业信息化集成的步骤有重要的参考价值,其中N.Hanna模型将信息技术在企业中的扩散分为了三个阶段[2]

图1 N.Hanna信息技术扩散模型[3]

  1. 替代阶段: 主要完成技术的替代, 即简单地利用信息技术来替代原有技术;
  2. 提高阶段:主要完成计算机系统的集成并提高效益;
  3. 转型阶段:主要完成管理流程和组织结构的再造, 使组织成长为一个学习型组织和知识型组织, 信息系统不但能为经营管理服务, 更能为战略决策服务, 从而大大提高组织的核心竞争力。
  4. 四个环节:上述的三个阶段中,每个阶段的内部又分别有四个环节组成:信息环节、分析环节、获取环节和利用环节。其中,信息环节是指企业获取信息技术的供给和需求;分析环节是指企业对信息技术的有关信息进行处理和分析;获取环节是指投资信息技术和建立信息系统;利用环节是指重组企业流程和组织,信息系统发挥作用。

随着信息技术在企业经营与管理过程中的扩散,并逐步渗透到企业总体素质中,企业信息化的中心问题逐渐从简单替代手工操作、单项管理、单纯计算机辅助设计(CAD)和计算机辅助制造(CAM),发展到建立企业管理信息系统。采用制造资源计划MRPII(Manufacturing Resources Planning)、企业资源规划ERP(Enterprises Resources Planning),再进入计算机集成制造总统CIMS(Computer Integrated Manufacturing System)阶段。在最终的转型阶段,信息和知识将成为企业的增值主体,企业在全社会范围内形成“虚拟企业”,企业将变成为知识型企业和学习型组织。

(二)、   发展柔性组织管理

柔性组织是指与动态竞争条件相适应的具有不断适应环境和自我调整能力的组织。无论是在管理体制上,还是在机构的设置上柔性组织都具有较大的灵活性,对企业的经营环境有较强的应变能力的组织,它是在废除科室制和推广项目小组形式的热潮中逐渐形成的。

信息技术的高速发展的外部环境影响、对需求高效率执行的内部环境要求,使企业必须变革传统的刚性组织管理,实现柔性组织管理。企业要实施柔性管理,必须注意构建以下几个关键要素[4]

1、以满足顾客的需求和偏好为经营生产导向,形成柔性供应链体系。零售“人货场”三个核心要素是不能被割裂的,柔性供应链不仅要为顾客提供物品,而且要丰富顾客的价值,使顾客在消费一种物品时能够获得更多的超值感受。传统的批量生产型企业的观念是“供给创造需求”。只要能生产,就会有顾客购买,企业的利润由市场和生产能力决定。柔性管理则是将顾客的需求与偏好放在首位,利润蕴含于顾客对物品需求和满足顾客偏好之中,只要能将顾客的需求与偏好转化为物品或服务,利润就是这种转化的一种自然结果。因此,柔性管理的关键在于确定如何创造丰富顾客价值的方案、如何解决顾客所关注的问题的方案,以及如何将顾客感知到的但并没有完全清楚表达出的愿望或需求转化为顾客可明确说出的“这正是我想要的”产品的方案。全程快速柔性供应链体系还包括:全程可视化、智能预测、智能预警、智能铺货、智能补货、智能翻单、智能定价、智能促销、高效协同。

2、以促进学习、激发灵感和洞察未来作为管理的最基本职能。科学管理时代管理的最基本职能是决策,而信息时代管理的最基本职能是寻求知识转化的路径与结点。信息时代不确定的市场变化已经把管理的核心作用转变成一种委托:促进学习、激发灵感和洞察未来。激励、综合、协调一线人员的努力与贡献,以更高的视野兼顾全局,并将一线人员的全新理念整合到企业发展的统一战略框架之中,从而使企业的发展、进化过程成为由发达的部件以最优化的方式组合的有机体。

3、以虚拟实践社团作为创新的源泉。虚拟实践社团或虚拟企业指两个或两个以上独立的经济实体之间,在一定的时间和范围内,为了共同开发一种或几种新技术产品,而形成的一种暂时性的组织联盟形式。它的特点是借助于外部力量对外部的资源进行整合来创造自己的竞争优势。它突破了传统企业组织有形的界限,保持了企业生产、财务、经营等必要的功能,但企业内并不具有完成这些功能的组织。单一主体只从事自己最有优势的功能和业务,其他功能和业务由组织中的其他主体来完成,即将其他的功能虚拟化。在市场的需求结构瞬息万变的信息时代,只有通过发挥各方面创新力量,才能造就成功的智能化企业,才能不断获得新的竞争优势。因此,组建多样化的虚拟实践社团,努力为企业的发展提供创新性的建议与方案,增强企业的适时学习能力,使企业成为一个真正的学习型企业,是企业立于不败之地的保证。

4、以网络式组织科层制组织。工作团队实质上是自主性和合作性在更高层次上统一起来的一种组织。网络式组织的各个部分相对独立,各部分之间是一种融合共生的关系,不存在划定的边界。成员通常用共同参与、并行工作的办法来完成过去由不同部门、不同时间分散完成的工作。它不是按照传统的计划、命令和控制原则来运作,而是按照满足客户需要并实现企业价值增殖的原则来进行。以网络式的扁平化组织结构代替金字塔型的组织结构,提高了信息传递的效率和工作效率,加强了部门之间的相互沟通,增加和助长了企业与市场反馈的触角,提高了企业的整体反应灵敏度,从而使企业能够更迅速地抓住市场机会,形成了一种自主、灵活、高效的机制。

5、以企业再造为手段。企业再造关注的是企业经营模式的调整这为企业实现柔性管理提供了机会。因为,企业再造是在更高层次上确定企业如何对市场作出反应,如何识别潜在市场与创造新市场并在这种识别与创造中重新定位企业在市场中的角色。在信息技术特别是网络技术飞速发展带动下,企业的生产效率、生产方式和手段发生了很大变化。柔性制造系统(FMS)、计算机辅助设计(CDA)、并行工程(CE)、精益生产(LP)、灵捷制造(AM)等技术日渐成熟。企业再造通过建设学习型组织,重视培养人的学习能力,增强企业从员工个人到整个组织对瞬息万变的环境的适应能力。企业再造包括企业战略再造、企业文化再造、市场营销再造、企业组织再造、企业生产流程和质量控制系统再造。

四、    企业组织的信息变革

信息网络技术推动了新的工业经济发展,从内外部多角度推动了企业的组织变革。企业唯有勇于打破既有的传统科层制管理方式,引进先进的信息科学技术,发展自我学习型组织,进行企业再造,才能获得持续的生产竞争能力,在新的技术革命中取得成功。

 

参考文献:

[1] 张勇.新网商峰会[R]. : https://36kr.com/p/5060505.html, 2016. -.

[2] 左美云,陈蔚珠,胡锐先.信息化成熟度模型的分析与比较[J].管理学报,2005.2(3):340-346.

[3] 畅想空间.信息化发展阶段模型分析[EB/OL]. http://blog.vsharing.com/radiumblog/A572469.html.2007-6-22-.

[4] 郭咸纲.企业全面再造模式[M]. 北京:清华大学出版社, 2005. 55-66.

 

10 advices to make good APIs

API is the communication language between systems.  Good APIs can profoundly influence the developer experience. Because it describes what services an application programming interface offers and how to use those services, your documentation will inevitably create an impression about your product – for better or for worse.

Here’s my list of 10 of the most useful API advices for developers:

继续阅读10 advices to make good APIs