immudb是用于系统和应用程序的轻量级高速不可变数据库。使用immudb,您可以跟踪事务数据库中敏感数据的更改,然后将这些更改永久记录在防篡改的immudb数据库中。这样一来,您就可以保留借记/贷记交易的不可磨灭的历史记录。传统的事务日志很难扩展,并且并非一成不变。immudb是Apachev2.0许可下的开放源代码,因此无法确定您的数据是否已泄露。

  这个怎么运作

因此,immudb可以追溯性地提供无与伦比的洞察力,即使您的permiter受到损害,您的敏感数据也会发生什么。immudb通过内部使用Merkle树结构提供了不变性的保证。

immudb可以像使用传统区块链一样为您提供用SHA-256编写的数据完整性的密码验证,而无需像当今的区块链那样付出成本和复杂性。

immudb具有4个主要优点:

·immudb是不可变的。您只能添加记录,而不能更改或删除记录。

·像区块链一样,存储在immudb中的数据是加密一致且可验证的,而没有所有复杂性和高速性。

·任何人都可以在几分钟内开始使用immudb。可以使用node.js,Java,Python,Golang,.Net或任何其他语言。它非常易于使用,并且您可以在几分钟之内运行不可变数据库。

·最后,immudb是OpenSource。您可以在本地或云中运行它,它是完全免费的。immudb受Apache2.0许可的约束。

immudb当前在Linux,FreeBSD,Windows和MacOS以及从它们派生的其他系统上运行。

immudb高级

  组成部分

·immudb是服务器二进制文件,它侦听本地主机上的端口3322并提供gRPC接口

·immugw是连接到immudb的智能REST代理,并为应用程序提供RESTful接口。我们建议在单独的计算机上运行immudb和immugw以增强安全性

·immuadmin是immudb和immugw的管理CLI。您可以安装和管理两个组件的服务安装,并获取统计信息以及运行时信息。

入门

您可以基于GitHub存储库中最常用架构的Dockerfile构建Docker映像,也可以在Linux的Dockerhub上使用预构建的映像。

  自己建造

dockerbuild-tmyown/immudb:latest-fDockerfile.

dockerbuild-tmyown/immugw:latest-fDockerfile.immugw.

dockerbuild-tmyown/immuadmin:latest-fDockerfile.immuadmin.

immudbDockerhub

dockerrun-it-d-p3322:3322-p9497:9497—nameimmudbcodenotary/immudb:latest

immugwDockerhub

dockerrun-it-d-p3323:3323–nameimmugw–envIMMUGW_IMMUDB-ADDRESS=immudbcodenotary/immugw:latest

  独立二进制

如果要自己构建二进制文件,只需克隆此存储库并根据您的操作系统运行以下命令之一。

  #Linux

GOOS=linuxGOARCH=amd64makeimmuadmin-staticimmudb-staticimmugw-static#macOS

GOOS=darwinGOARCH=amd64makeimmuadmin-staticimmudb-staticimmugw-static#MicrosoftWindows

GOOS=windowsGOARCH=amd64makeimmuadmin-staticimmudb-staticimmugw-static

然后您可以运行immudbimmudb服务器

#runimmudbintheforeground

./immudb#runimmudbinthebackground

./immudb-d

将immudb安装为服务

安装服务时,请确保构建或下载immudb和immuadmin组件,并将它们保存在同一工作目录中。

#installimmudbservice

./immuadminserviceimmudbinstall#checkcurrentimmudbservicestatus

./immuadminserviceimmudbstatus#stopimmudbservice

./immuadminserviceimmudbstop#startimmudbservice

./immuadminserviceimmudbstart

immudlinux服务使用以下默认值:

·用户:immu

·组:immu

·配置:/etc/immudb

·数据:/var/lib/immudb

·日志:/var/log/immudb

·服务端口:3322(immudb),3323(immugw)

·普罗米修斯港:9497

您可以对immugwAPI网关执行相同的操作,出于安全原因,应将其安装在单独的系统上。

安装该服务时,请确保构建或下载immugw和immuadmin组件,并将它们保存在同一工作目录中。

#installimmugwservice

./immuadminserviceimmugwinstall#checkcurrentimmugwservicestatus

./immuadminserviceimmugwstatus#stopimmugwservice

./immuadminserviceimmugwstop#startimmugwservice

./immuadminserviceimmugwstart

  性能

由于经常将immudb与AmazonQLDB进行比较,我们使用简单的演示应用程序(不使用任何不公平的优化)编写数据来进行性能基准测试。

测试设置:

·4个CPU核心

·英特尔(R)至强(R)CPUE3–1275v6@3.80GHz

·64GB内存

·固态硬盘

immudb统计要随时查看统计信息,请使用immuadminstats访问文本

-t或视觉统计:

./immuadminstats-t

Databasepath:db/immudb

Uptime:1m38.64s

Numberofentries:12

LSMsize:701B

VLogsize:1.1kB

Totalsize:1.8kB

Numberofclients:1

Queriesperclient:

127.0.0.1:26

Lastquery:749.641765msago

Avg.duration(nbcalls):µs

ByIndex(0):0

ByIndexSV(0):0

ChangePassword(0):0

Consistency(0):0

Count(0):0

CreateUser(0):0

CurrentRoot(0):0

DeleteUser(0):0

Dump(0):0

Get(5):20

GetBatch(0):0

GetBatchSV(0):0

GetSV(0):0

Health(16):33

History(0):0

HistorySV(0):0

IScan(0):0

IScanSV(0):0

Inclusion(0):0

Login(0):0

Reference(0):0

SafeGet(0):0

SafeGetSV(0):0

SafeReference(0):0

SafeSet(0):0

SafeSetSV(0):0

SafeZAdd(0):0

Scan(0):0

ScanSV(0):0

Set(5):76

SetBatch(0):0

SetBatchSV(0):0

SetSV(0):0

ZAdd(0):0

ZScan(0):0

ZScanSV(0):0

orvisual(default)

  或视觉(默认)Prometheus和Grafana监控

immudb具有一个内置的prometheus导出器,默认情况下会在端口9497(:9497/metrics)上发布所有度量标准。在运行Prometheus实例时,可以像以下示例一样配置目标:

-job_name:'immudbmetrics'scrape_interval:60sstatic_configs:-targets:['my-immudb-server:9497']

  常见用例

我们已经从用户那里了解了以下用例:

·使用immudb不变地将每个更新存储到现有应用程序数据库的敏感数据库字段(信用卡或银行帐户数据);

·将CI/CD配方存储在immudb中以保护构建和部署管道;

·将公共证书存储在immudb中;

·使用immudb作为数字对象校验和的附加哈希存储;

·存储日志流防篡改。

  Opvizor—适用于VMwarevSphere的不可变日志解决方案

  API文档及其使用方法

您可以在此处找到immudb的灵活模式:

  /codenotary/immudb/blob/master/pkg/api/schema/schema.swagger.json

如果要运行SwaggerUI,只需在克隆此仓库后运行以下docker命令:

dockerrun-d-it-p8080:8080–nameswagger-immudb-v${PWD}/pkg/api/schema/schema.swagger.json:/openapi.json-eSWAGGER_JSON=/openapi.jsonswaggerapi/swagger-ui

或immugw。

一些过程,不同的模式:

dockerrun-d-it-p8081:8080–nameswagger-immugw-v${PWD}/pkg/api/schema/gw.schema.swagger.json:/openapi.json-eSWAGGER_JSON=/openapi.jsonswaggerapi/swagger-ui

  没有程序员吗?

实际上,如果您不是程序员,但仍想使用immudb只是为了在脚本中或脚本中玩游戏,则可以使用immuclient。

#Linux

GOOS=linuxGOARCH=amd64makeimmuclient-static#MicrosoftWindows

GOOS=windowsGOARCH=amd64makeimmuclient-static

如果您不知道如何构建它,可以使用以下Docker命令和过程:

gitclone

#Linux

dockerrun-it–rm-v$(pwd):/srcgolang:1.13-stretchsh-c'cd/src&&GOOS=linuxGOARCH=amd64makeimmuclient-static'#MicrosoftWindows

dockerrun-it–rm-v$(pwd):/srcgolang:1.13-stretchsh-c'cd/src&&GOOS=windowsGOARCH=amd64makeimmuclient-static'

现在,您将在存储库文件夹中找到immuclient二进制文件并准备使用。

./immuclient–help

详细介绍了如何使用它。

将记录添加到immudb

#samesystemwhereimmudbserverisrunning

./immuclientsafesetmykeymyvalue#immudbserverrunsonaremotesystem

./immuclient-asafesetmykeymyvalue

您会收到类似于以下内容的信息:

./immuclientsafesetk1v1

index:307

key:k1

value:v1hash:4a6a18172eba5a3ea49a3caf147ac405c874ed4c922cc7dafe0dce5ff85f35aa

time:2020–05–1304:01:30-0400EDT

verified:true

从immudb获取记录

#samesystemwhereimmudbserverisrunning

./immuclientsafegetmykey#getthevaluehistory

./immuclienthistorymykey#immudbserverrunsonaremotesystem

./immuclient-asafegetmykey

safeGet和safeSet命令也对值进行一致性检查。

现在,您可以存储任何类型的数据,例如敏感数据库字段,公共证书或什至配置文件的内容。

让我们尝试使用本地Dockerfile并确保我们的值中没有换行或特殊字符。

./immuclientsafesetDockerfile1$(echo-n"$(catDockerfile)"|base64-w0)

要取回数据,您需要确保再次进行转换。

由于safeget的输出不仅仅包含值,如下所示:

./immuclientsafegetDockerfile1

index:309

key:Dockerfile1

value:RlJPTSBnb2xhbmc6MS4xMy1zdHJldGNoIGFzIGJ1aWxkCldPUktESVIgL3NyYwpDT1BZIC4gLgpSVU4gR09PUz1saW51eCBHT0FSQ0g9YW1kNjQgbWFrZSBpbW11YWRtaW4tc3RhdGljCkZST00gdWJ1bnR1OjE4LjA0Ck1BSU5UQUlORVIgdkNoYWluLCBJbmMuICA8aW5mb0B2Y2hhaW4udXM+CgpDT1BZIC0tZnJvbT1idWlsZCAvc3JjL2ltbXVhZG1pbiAvdXNyL2xvY2FsL2Jpbi9pbW11YWRtaW4KCkFSRyBJTU1VX1VJRD0iMzMyMiIKQVJHIElNTVVfR0lEPSIzMzIyIgoKRU5WIElNTVVBRE1JTl9JTU1VREItQUREUkVTUz0iMTI3LjAuMC4xIiBcCiAgICBJTU1VQURNSU5fSU1NVURCLVBPUlQ9IjMzMjIiIFwKICAgIElNTVVEQl9NVExTPSJmYWxzZSIgCgpSVU4gYWRkZ3JvdXAgLS1zeXN0ZW0gLS1naWQgJElNTVVfR0lEIGltbXUgJiYgXAogICAgYWRkdXNlciAtLXN5c3RlbSAtLXVpZCAkSU1NVV9VSUQgLS1uby1jcmVhdGUtaG9tZSAtLWluZ3JvdXAgaW1tdSBpbW11ICYmIFwKICAgIGNobW9kICt4IC91c3IvbG9jYWwvYmluL2ltbXVhZG1pbgoKVVNFUiBpbW11CkVOVFJZUE9JTlQgWyIvdXNyL2xvY2FsL2Jpbi9pbW11YWRtaW4iXQ==hash:dfca217e2d87dccb8fd3fe8c1b49e620cc4ece8dc9c9fc2384cb6f6c9617eddb

time:2020-05-1305:19:19-0400EDT

verified:true

  命令有点复杂

./immuclientsafegetDockerfile1|grep"^value"|cut-d":"-f2|xargsecho-n|base64-di

对于非开发人员,将来还会有更简单的选项,以及.net,Java,Node.js和Pythonaso的SDK驱动程序。想要了解更多关于数据库的信息,请继续关注。