Posts

定义

国际定义中,智慧楼宇概括为:通过将建筑物的结构-系统-服务-管理四项基本要求以及他们的内在关系进行优化,来提供一种投资合理,具有高效、舒适和便利环境的建筑物。

基于个人观点,我所理解的智慧楼宇概括为:通过物联网技术,打通楼宇的人、物、日常办公、安防、监控等全部数据,实现楼宇的智能化、科技化,让楼宇充满感知力和生命力,更好的服务于人,且能达成节能提效、便捷管理的目的。

智慧楼宇分类

建筑根据其功能属性、归属属性,可将楼宇分为以下5类:

  • 智慧写字楼——独立办公楼,可租赁给各个公司;
  • 智慧园区——由多个写字楼组成园区,且有停车场、餐饮等配套设施;
  • 智慧联合办公空间——服务于创业型企业,企业间共用会议室、打印机等公共设施与空间;
  • 智慧酒店——服务于独立用户,实现更加智慧化的入住、离店等;
  • 智慧政企——政府企业等现代化智能管理办公大楼。

协议

BACnet是用于智能建筑的通信协议,是国际标准化组织(ISO)、美国国家标准协会(ANSI)及美国采暖、制冷与空调工程师学会(ASHRAE)定义的通信协议

智能建筑设计标准

智能建筑设计标准

git bash$ winpty docker run -it ubuntu /bin/bash

Prefixing the path with a double slash (//bin//bash) or

set MSYS_NO_PATHCONV=1

http://stackoverflow.com/questions/7250130/how-to-stop-mingw-and-msys-from-mangling-path-names-given-at-the-command-line#34386471

https://github.com/git-for-windows/git/issues/577#issuecomment-166118846

LevelDB 是一基于内存+SSD的键值存储引擎。

  • 内存存储最新的更改和热数据(缓存)
  • SSD持久化所有数据

LevelDB经常使用代理+主从模式构建集群。 与REDIS协议保持兼容,可以被REDIS客户端访问。

内存结构

LevelDB在内存维护两个跳表:MemTable, 一个只读,一个可写。

序列号(Sequence number)是全局自增的,每次的修改序列号都会加1。 每个主键保存多个版本的键值。LevelDB用serial number标识键值对 的版本。最大的serial number代表最新的键值对。

键值对有两种更新操作:

  • Put = 1
  • Delete = 0

当可写的MemTable的大小超过阈值,会把所有的键值转移到只读的MemTable。 同时会创建一个新的可写的MemTable。只读的MemTable会被一个线程异步的 写入SSD。读操作会先查询可写的MemTable,然后查询只读的MemTable,最后 去查询SSD.

对可写的MemTable支持多线程操作,所以需要并发控制。

只读的MemTable存在时间很短,被创建后就会把异步写入SSD,然后清空。 当可写的MemTable增长很快,只读的MemTable会很快被填满。如果只读 的MemTable还没有别完全写入SSD,写入线程就会被阻塞。

内存结构操作日志

最近的MemTable的写入操作都会有一个对应的日志文件记录。 日志文件也有两份,对应两个跳表。

SSD数据结构

SST

LevelDB在SSD上存储了许多SST(Sorted String Table)文件, 每个文件对应一个级别,每个级别有多个SST文件。 SST文件的大小是相同的,不同的是每个级别文件数目不同。 主键在每个SST文件都是有序的。 级别0的文件和其他级别的文件有一个明显的区别:其他级别的SST 文件之间的主键不会重叠,但级别0的SST文件之间的主键可能重叠, 因为级别0的SST文件之间从MemTable直接转存过来。

为了防止在级别0的SST文件进行键值读取的读放大,LevelDB默认 级别0有4个文件。

MANIFEST

所有文件的主键范围,级别和其他的元信息存储在MANIFEST文件。 MANIFEST有版本号,通过文件名后缀标识,例如MANIFEST-000031。 每次打开数据库,一个新的版本号的MANIFEST就好被创建,旧版本 的文件就会被删除。

CURRENT

CURRENT文件内容记录了当前版本的MANIFEST文件名字。LevelDB首先读 CURRENT文件内容知道合法的MANIFEST文件。

LOCK

LevelDB数据库目录不允许被多个进程同时访问,当一个进程打开数据库, 一个排他的文件锁就创建。

log

日志文件,记录操作日志,例如次要整理和主要整理日志

数据整理

从只读MemTable到0级的SST文件的转移叫次级整理。从SST文件向 更低级转移交主要整理。

文件合并

跳表介绍 Skip lists are a data structure that can be used in place of balanced trees. Skip lists use probabilistic balancing rather than strictly enforced balancing and as a result the algorithms for insertion and deletion in skip lists are much simpler and significantly faster than equivalent algorithms for balanced trees. 跳表是一种可以用来代替平衡树的数据结构,跳表使用概率平衡而不是严格执行的平衡, 因此,与等效树的等效算法相比,跳表中插入和删除的算法要简单得多,并且速度要快得多。 跳表是由包含多个级别的链表组成,最低级别的链表存储了所有的主键并且按序链接 java跳表 https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html 跳表结构 多条链构成,是关键字升序排列的数据结构; 包含多个级别,一个head引用指向最高的级别,最低(底部)的级别,包含所有的key; 每一个级别都是其更低级别的子集,并且是有序的; 如果关键字key在级别level=i中出现,则level<=i的链表中都会包含该关键字key; ConcurrentSkipListMap和TreeMap类似,它们虽然都是有序的哈希表。但是,第一,它们的线程安全机制不同,TreeMap是非线程安全的,而ConcurrentSkipListMap是线程安全的。第二,ConcurrentSkipListMap是通过跳表实现的,而TreeMap是通过红黑树实现的 跳表分为许多层(level),每一层都可以看作是数据的索引,这些索引的意义就是加快跳表查找数据速度。每一层的数据都是有序的,上一层数据是下一层数据的子集,并且第一层(level 1)包含了全部的数据;层次越高,跳跃性越大,包含的数据越少。跳表包含一个表头,它查找数据时,是从上往下,从左往右进行查找。 ConcurrentSkipListMap优点:

IN VPC 更新前VPC 更新后VPC While Hyperplane still uses a cross account network interface, it provides the following benefits for Lambda within a VPC: Reduced latency when a function is invoked by using pre-created network interfaces. The network interface is created when the Lambda function is initially created. Network interfaces are shared across functions with the same security group:subnet combination Function scaling is no longer bound to the number of network interfaces While the new changes make it more conducive for developers to connect Lambda functions to VPCs, the basic architecture doesn’t change in terms of your VPC.

Machine learning is the study of powerful techniques that can learn from experience. As a machine learning algorithm accumulates more experience, typically in the form of observational data or interactions with an environment, its performance improves

计算

尽管函数计算和容器的快速崛起,EC2依然是AWS的业务焦点,

主要的新功能包括:

  • 基于Nitro平台的针对HPC和机器学习的负载的实例

  • 基于定制芯片Inferencia针对机器学习实例

  • 标准实例支持100Gb网络带宽

网络

  • 传输网关支持多播

  • 加速的网络到网络的VPN链接

存储和数据分析

  • S3 Access Points和数据湖

  • ES搜索支持S3

  • 联合查询支持关系数据库,REDSHIFT数据仓库,S3数据湖,而不需要移动数据

  • AQUA查询加速器

  • 数据湖导出(REDSHIFT数据仓库查询结果能直接导出到S3,并以Parquet格式存放)

  • 托管的Cassandra服务

函数计算

先锋基金IT迁移架构图

第一阶段私有云架构包括4千万行的单体应用,hadoop数据仓库(20PB)和PaaS(2015年) 第一阶段数据仓库和PaaS迁移到AWS 第二阶段PaaS实施基于EDA架构的改造 第三阶段PaaS迁移到Fargate 结果

Provisioned Concurrency for Lambda Functions To provide customers with improved control over their mission-critical app performance on serverless, AWS introduces Provisioned Concurrency, which is a Lambda feature and works with any trigger. For example, you can use it with WebSockets APIs, GraphQL resolvers, or IoT Rules. This feature gives you more control when building serverless applications that require low latency, such as web and mobile apps, games, or any service that is part of a complex transaction.

aws sts get-caller-identity

aws s3control list-access-points --account-id 46569194568

aws s3control create-access-point --name my-access-point --account-id 46569194568 --bucket wubigo

aws s3control get-access-point --account-id "46569194568" --name my-access-point
{
    "Name": "my-access-point",
    "PublicAccessBlockConfiguration": {
        "IgnorePublicAcls": true,
        "BlockPublicPolicy": true,
        "BlockPublicAcls": true,
        "RestrictPublicBuckets": true
    },
    "CreationDate": "2019-12-04T14:24:38Z",
    "Bucket": "wubigo",
    "NetworkOrigin": "Internet"
}

JAVA 这两年最重要的项目就是GRAAL的正式版发布。 GRAAL能做什么? 让解释性程序例如JAVA, JS 运行的更快: AOT编译为宿主二进制可执行文件, 启动时间小于100ms, 像C, GO, ERLANG一样的执行速度 更低的内存占用:只占用传统的JVM应用20%的内存 听起来是不是该项目为函数计算做准备的? 是,但不完全是。 GRAAL的官方目标是提供一个统一的虚拟机执行平台,支持如下运行环境: JavaScrip Python Ruby R JVM 语言(Java, Scala, Groovy, Kotlin, Clojure) LLVM语言 (C , C++) 而且不同语言之间零成本互相调用 安装 wget https://github.com/oracle/graal/releases/download/vm-19.2.1/graalvm-ce-linux-amd64-19.2.1.tar.gz tar zxvf graalvm-ce-linux-amd64-19.2.1.tar.gz export PATH=$PATH:$GRAAL_HOME/bin 检查 js --version GraalVM JavaScript (GraalVM CE Native 19.2.1) 安装native-image gu install native-image gu available Downloading: Component catalog from www.graalvm.org ComponentId Version Component name Origin -------------------------------------------------------------------------------- llvm-toolchain 19.

第一代 2003年, jBPM 1.0发布。 运行环境:J2EE 过程定义语言:jPDL(当时工作流厂商都有各自的过程定义语言和建模工具) 当时的主流的技术: applets, Swing桌面和EJB 第二代 2004年,jBPM 2.0发布 同时jBPM加入JBoss基金会. 运行环境:任何JAVA环境(POJO实现过程运行时),不需要应用服务器 第三代 2005年, jBPM 3.0发布,支持BPEL 过程定义语言:过程虚拟机 架构: 与二代相比,架构发生了巨大变化。可以操作的业务功能大范围扩展,不仅通 过JAVA实现状态机,而且支持建模 HIBERNETE作为持久机制并同时提供会话对象的概念, 工作流引擎所有的相关性交互都纳入contextual block范畴 这为以后的工作流命令设计模式和命令拦截设计模式的广泛应用打下良好的基础 第四代 2009年, jBPM 4.0 alpha版发布. 过程虚拟机成功工作流引擎的核心。 过程定义语言:BPMN, jPDL 和 BPEL 因为团队人员离开并启动Activiti,正式版没能发布。 主要改进: 无状态的服务API 运行时和历史数据的分离: 保证运行时持久的性能 第五代 2010年, Activiti 1发布 改变: 版权从LGPL转到APACHE. 过程定义语言:BPMN(唯一) 从性能和扩展性加强PVM 多租户支持 轻量级架构 第六代 2017年,flowable 6.0发布。 改变: 过程模型:放弃PVM,使用原生BPMN, 实现真正的动态过程执行和复杂的过程迁移 数据远完全抽象:支持NoSQL

心理学家:21世纪最重要的工作技能

专注是21世纪最重要的工作技能,

可是很多人没有意识到这一点。

1971年的时候心理学家西蒙就说过:“大量的信息

意味着另一种东西变得很稀缺:注意力”。 几十年之前这是个事实,

在21世纪,注意力变的更加珍贵。

工作环境正在发生快速的变化,在不远的将来,

在这个世界只存在两种人:

  • 一种注意力被别人完全控制和操纵的人

  • 一种注意力不可被打扰的人

研究人员告诉我们专注和注意力人们创新发展的原材料

下面是一些常见的工作干扰:

  • 聊天群

  • 会议

  • 电话

  • 邮件

  • 同事

uaa-on-serverless

在windows中使用docker有多种方式: docker WIN10 desktop WSL 本文主要介绍在WSL中使用docker 前提条件 Windows 10 Version 1803以上(支持cgroups) Ubuntu for WSL 16.0.4 LTS(WSL支持的最新版本) Docker 17.09 安装WSL install WSL WSL 命令行和默认 shell cmd:\>wsl wubigo:/tmp/docker-desktop-root/mnt/host/d/code#/etc# cat /etc/wsl.conf [automount] root = /mnt/host crossDistro = true options = "metadata" WSL DOCKER磁盘卷路径 cmd:\>docker volume inspect edgex_consul-config [ { "CreatedAt": "2022-03-07T08:04:34Z", "Driver": "local", "Labels": { "com.docker.compose.project": "edgex", "com.docker.compose.version": "2.2.3", "com.docker.compose.volume": "consul-config" }, "Mountpoint": "/var/lib/docker/volumes/edgex_consul-config/_data", "Name": "edgex_consul-config", "Options": null, "Scope": "local" } ] \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\

昨天看到AWS STEP FUNCTIONS支持嵌套的工作流 ,当时就被震惊了。 AWS早些年推出SWF框架提供工作流服务, 后来工作流服务就没有大的工作,SWF框架的核心开发者一部分 离职去了UBER开发Cadence。没想到沉寂了多年的AWS会在STEP FUNCTIONS 支持工作流,看来这个千亿规模的市场又快被颠覆了。 20多年来,工作流都是超大型企业的配置专利,而STEP function的推出 可以预计,高大上的工作流服务会很快走进很多中小企业工作台并被普及应用。 回顾一下自己的工作历史: 从以前的数据中心服务器SA(2006), 到虚拟主机ESX, 再到OPENSTACK(2010)搭建混合云, 然后利用K8S(2014)搭建PaaS,现在SERVERLESS, 计算架构正在发生快速的演进。本文梳理了算力演进历史和未来 内容 从虚拟主机到容器 从容器到unikernel 函数计算的蓬勃发展 什么是虚拟计算 hypervisor分类 Type-1 裸机 KVM, QEMU, VMWare, Virtualbox Type-2 托管 XenServer, Hyper-v, KVM, ESX, Xen 虚拟机的问题 贵 一台云主机(8G/4Core/500MBps)在2017年的超过6000元/年 操作慢 一个普通的镜像在2G左右,再加上JAVA应用,一个镜像需要10G. 启动,备份非常不便。 容器计算 |虚拟机| 容器 |:—|:—|:—| 构件| 完整的操作系统和应用| 微内核和应用 虚拟技术| 硬件虚拟化| 操作系统虚拟化 容器计算带来什么好处 容器镜像小 alpine的容量是2M

AWS Step Functions VS

Adds Support for Nested Workflows

https://news.ycombinator.com/item?id=20726906

ISP Starter Kit

http://www.wispa.org/Resources/HOW-TO-START-A-WISP

wireless fiber

5G mobile broadband

https://www.huawei.com/en/press-events/news/2019/1/huawei-releases-wireless-fiber-solution

https://www.techdirt.com/articles/20190904/08392642916/colorado-town-offers-1-gbps-60-after-years-battling-comcast.shtml

DOCKER DEAMON PROXY

  • systemd level

/etc/systemd/system/docker.service.d/https-proxy.conf

[Service]
Environment="http_proxy=http://127.0.0.1:8123" "https_proxy=https://127.0.0.1:8123" "NO_PROXY=registry-1.docker.io"
sudo systemctl daemon-reload
sudo systemctl restart docker
  • service level

/etc/default/docker

export http_proxy="http://127.0.0.1:3128/"
  • daemon level

/etc/docker/daemon

DOCKER CLIENT PROXY

~/.docker/config.json

       "proxies":{
                "default":{}
        }

[TOC] AWS领先的设计理念和强大的技术生态 使你身陷其中,学习你要用它,开发你要 用它,上线还要用它。 一年下来项目还没有 正式商用,已经有十几万的研发费用。 今天向你推荐 localstack(与openstack啥关系?私有云+公有云), 让你使用AWS免费,至少在项目POC或开发测试阶段免费。 有了它, 你不用再焦急的等待老板审批公有云的 计算,存储,数据库资源开发申请。 是不是这个项目听起来很激动? 那如何使用localstack呢? 安装localstack localstack是一个非常活跃的正在快速成长中的项目, 建议通过源代码安装 下载源代码 git clone [email protected]:localstack/localstack.git git fetch --all git checkout tags/v0.10.3 -b v0.10.3 启用需要使用的AWS服务 修改配置文件,启用你需要使用的AWS服务:ec2,s3,iot,kafka等。 注意服务的名字必须来自服务名字列表, 否则不识别 启用服务就是修改下边的配置文件 localstack\docker-compose.yml SERVICES=${SERVICES-ec2,ecs,stepfunctions,iam,lambda,dynamodb,apigateway,s3,sns} DATA_DIR=${DATA_DIR-/tmp/localstack/data } volumes: - "${TMPDIR:-d:/tmp/localstack}:/tmp/localstack" make sure driver D is shared in docker desktop daemon docker-compose up localstack_1 | Starting mock S3 (http port 4572)... localstack_1 | Starting mock SNS (http port 4575).

工业物联网OSI参考模型

软件接口	            OPC
应用层	              ModBus
数据链路层	          CAN,ProfiBus
物理层	              RS232,RS485

OPC服务器

OPC SERVER = OPC驱动器

OPC

简单来说,OPC是一套标准,其目的是把PLC特定的协议(如Modbus,Profibus等)抽象成为标准化的接口,作为“中间人”的角色把通用的OPC“读写”请求转换成具体的设备协议来与HMI/SCADA系统直接对接

When the standard was first released in 1996, its purpose was to abstract PLC specific protocols (such as Modbus, Profibus, etc.) into a standardized interface allowing HMI/SCADA systems to interface with a “middle-man” who would convert generic-OPC read/write requests into device-specific requests and vice-versa.