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驱动程序。想要了解更多关于数据库的信息,请继续关注中培教育。