immudb是用于系統(tǒng)和應(yīng)用程序的輕量級(jí)高速不可變數(shù)據(jù)庫(kù)。使用immudb,您可以跟蹤事務(wù)數(shù)據(jù)庫(kù)中敏感數(shù)據(jù)的更改,然后將這些更改永久記錄在防篡改的immudb數(shù)據(jù)庫(kù)中。這樣一來(lái),您就可以保留借記/貸記交易的不可磨滅的歷史記錄。傳統(tǒng)的事務(wù)日志很難擴(kuò)展,并且并非一成不變。immudb是Apachev2.0許可下的開(kāi)放源代碼,因此無(wú)法確定您的數(shù)據(jù)是否已泄露。
這個(gè)怎么運(yùn)作
因此,immudb可以追溯性地提供無(wú)與倫比的洞察力,即使您的permiter受到損害,您的敏感數(shù)據(jù)也會(huì)發(fā)生什么。immudb通過(guò)內(nèi)部使用Merkle樹(shù)結(jié)構(gòu)提供了不變性的保證。
immudb可以像使用傳統(tǒng)區(qū)塊鏈一樣為您提供用SHA-256編寫(xiě)的數(shù)據(jù)完整性的密碼驗(yàn)證,而無(wú)需像當(dāng)今的區(qū)塊鏈那樣付出成本和復(fù)雜性。
immudb具有4個(gè)主要優(yōu)點(diǎn):
·immudb是不可變的。您只能添加記錄,而不能更改或刪除記錄。
·像區(qū)塊鏈一樣,存儲(chǔ)在immudb中的數(shù)據(jù)是加密一致且可驗(yàn)證的,而沒(méi)有所有復(fù)雜性和高速性。
·任何人都可以在幾分鐘內(nèi)開(kāi)始使用immudb。可以使用node.js,Java,Python,Golang,.Net或任何其他語(yǔ)言。它非常易于使用,并且您可以在幾分鐘之內(nèi)運(yùn)行不可變數(shù)據(jù)庫(kù)。
·最后,immudb是OpenSource。您可以在本地或云中運(yùn)行它,它是完全免費(fèi)的。immudb受Apache2.0許可的約束。
immudb當(dāng)前在Linux,F(xiàn)reeBSD,Windows和MacOS以及從它們派生的其他系統(tǒng)上運(yùn)行。
immudb高級(jí)
組成部分
·immudb是服務(wù)器二進(jìn)制文件,它偵聽(tīng)本地主機(jī)上的端口3322并提供gRPC接口
·immugw是連接到immudb的智能REST代理,并為應(yīng)用程序提供RESTful接口。我們建議在單獨(dú)的計(jì)算機(jī)上運(yùn)行immudb和immugw以增強(qiáng)安全性
·immuadmin是immudb和immugw的管理CLI。您可以安裝和管理兩個(gè)組件的服務(wù)安裝,并獲取統(tǒng)計(jì)信息以及運(yùn)行時(shí)信息。
入門(mén)
您可以基于GitHub存儲(chǔ)庫(kù)中最常用架構(gòu)的Dockerfile構(gòu)建Docker映像,也可以在Linux的Dockerhub上使用預(yù)構(gòu)建的映像。
自己建造
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
獨(dú)立二進(jìn)制
如果要自己構(gòu)建二進(jìn)制文件,只需克隆此存儲(chǔ)庫(kù)并根據(jù)您的操作系統(tǒng)運(yùn)行以下命令之一。
#Linux
GOOS=linuxGOARCH=amd64makeimmuadmin-staticimmudb-staticimmugw-static#macOS
GOOS=darwinGOARCH=amd64makeimmuadmin-staticimmudb-staticimmugw-static#MicrosoftWindows
GOOS=windowsGOARCH=amd64makeimmuadmin-staticimmudb-staticimmugw-static
然后您可以運(yùn)行immudbimmudb服務(wù)器
#runimmudbintheforeground
./immudb#runimmudbinthebackground
./immudb-d
將immudb安裝為服務(wù)
安裝服務(wù)時(shí),請(qǐng)確保構(gòu)建或下載immudb和immuadmin組件,并將它們保存在同一工作目錄中。
#installimmudbservice
./immuadminserviceimmudbinstall#checkcurrentimmudbservicestatus
./immuadminserviceimmudbstatus#stopimmudbservice
./immuadminserviceimmudbstop#startimmudbservice
./immuadminserviceimmudbstart
immudlinux服務(wù)使用以下默認(rèn)值:
·用戶:immu
·組:immu
·配置:/etc/immudb
·數(shù)據(jù):/var/lib/immudb
·日志:/var/log/immudb
·服務(wù)端口:3322(immudb),3323(immugw)
·普羅米修斯港:9497
您可以對(duì)immugwAPI網(wǎng)關(guān)執(zhí)行相同的操作,出于安全原因,應(yīng)將其安裝在單獨(dú)的系統(tǒng)上。
安裝該服務(wù)時(shí),請(qǐng)確保構(gòu)建或下載immugw和immuadmin組件,并將它們保存在同一工作目錄中。
#installimmugwservice
./immuadminserviceimmugwinstall#checkcurrentimmugwservicestatus
./immuadminserviceimmugwstatus#stopimmugwservice
./immuadminserviceimmugwstop#startimmugwservice
./immuadminserviceimmugwstart
性能
由于經(jīng)常將immudb與AmazonQLDB進(jìn)行比較,我們使用簡(jiǎn)單的演示應(yīng)用程序(不使用任何不公平的優(yōu)化)編寫(xiě)數(shù)據(jù)來(lái)進(jìn)行性能基準(zhǔn)測(cè)試。
測(cè)試設(shè)置:
·4個(gè)CPU核心
·英特爾(R)至強(qiáng)(R)CPUE3–1275v6@3.80GHz
·64GB內(nèi)存
·固態(tài)硬盤(pán)
immudb統(tǒng)計(jì)要隨時(shí)查看統(tǒng)計(jì)信息,請(qǐng)使用immuadminstats訪問(wèn)文本
-t或視覺(jué)統(tǒng)計(jì):
./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)
或視覺(jué)(默認(rèn))Prometheus和Grafana監(jiān)控
immudb具有一個(gè)內(nèi)置的prometheus導(dǎo)出器,默認(rèn)情況下會(huì)在端口9497(:9497/metrics)上發(fā)布所有度量標(biāo)準(zhǔn)。在運(yùn)行Prometheus實(shí)例時(shí),可以像以下示例一樣配置目標(biāo):
-job_name:'immudbmetrics'scrape_interval:60sstatic_configs:-targets:['my-immudb-server:9497']
常見(jiàn)用例
我們已經(jīng)從用戶那里了解了以下用例:
·使用immudb不變地將每個(gè)更新存儲(chǔ)到現(xiàn)有應(yīng)用程序數(shù)據(jù)庫(kù)的敏感數(shù)據(jù)庫(kù)字段(信用卡或銀行帳戶數(shù)據(jù));
·將CI/CD配方存儲(chǔ)在immudb中以保護(hù)構(gòu)建和部署管道;
·將公共證書(shū)存儲(chǔ)在immudb中;
·使用immudb作為數(shù)字對(duì)象校驗(yàn)和的附加哈希存儲(chǔ);
·存儲(chǔ)日志流防篡改。
Opvizor—適用于VMwarevSphere的不可變?nèi)罩窘鉀Q方案
API文檔及其使用方法
您可以在此處找到immudb的靈活模式:
/codenotary/immudb/blob/master/pkg/api/schema/schema.swagger.json
如果要運(yùn)行SwaggerUI,只需在克隆此倉(cāng)庫(kù)后運(yùn)行以下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。
一些過(guò)程,不同的模式:
dockerrun-d-it-p8081:8080--nameswagger-immugw-v${PWD}/pkg/api/schema/gw.schema.swagger.json:/openapi.json-eSWAGGER_JSON=/openapi.jsonswaggerapi/swagger-ui
沒(méi)有程序員嗎?
實(shí)際上,如果您不是程序員,但仍想使用immudb只是為了在腳本中或腳本中玩游戲,則可以使用immuclient。
#Linux
GOOS=linuxGOARCH=amd64makeimmuclient-static#MicrosoftWindows
GOOS=windowsGOARCH=amd64makeimmuclient-static
如果您不知道如何構(gòu)建它,可以使用以下Docker命令和過(guò)程:
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'
現(xiàn)在,您將在存儲(chǔ)庫(kù)文件夾中找到immuclient二進(jìn)制文件并準(zhǔn)備使用。
./immuclient--help
詳細(xì)介紹了如何使用它。
將記錄添加到immudb
#samesystemwhereimmudbserverisrunning
./immuclientsafesetmykeymyvalue#immudbserverrunsonaremotesystem
./immuclient-asafesetmykeymyvalue
您會(huì)收到類似于以下內(nèi)容的信息:
./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命令也對(duì)值進(jìn)行一致性檢查。
現(xiàn)在,您可以存儲(chǔ)任何類型的數(shù)據(jù),例如敏感數(shù)據(jù)庫(kù)字段,公共證書(shū)或什至配置文件的內(nèi)容。
讓我們嘗試使用本地Dockerfile并確保我們的值中沒(méi)有換行或特殊字符。
./immuclientsafesetDockerfile1$(echo-n"$(catDockerfile)"|base64-w0)
要取回?cái)?shù)據(jù),您需要確保再次進(jìn)行轉(zhuǎn)換。
由于safeget的輸出不僅僅包含值,如下所示:
./immuclientsafegetDockerfile1
index:309
key:Dockerfile1
value:RlJPTSBnb2xhbmc6MS4xMy1zdHJldGNoIGFzIGJ1aWxkCldPUktESVIgL3NyYwpDT1BZIC4gLgpSVU4gR09PUz1saW51eCBHT0FSQ0g9YW1kNjQgbWFrZSBpbW11YWRtaW4tc3RhdGljCkZST00gdWJ1bnR1OjE4LjA0Ck1BSU5UQUlORVIgdkNoYWluLCBJbmMuICA8aW5mb0B2Y2hhaW4udXM+CgpDT1BZIC0tZnJvbT1idWlsZCAvc3JjL2ltbXVhZG1pbiAvdXNyL2xvY2FsL2Jpbi9pbW11YWRtaW4KCkFSRyBJTU1VX1VJRD0iMzMyMiIKQVJHIElNTVVfR0lEPSIzMzIyIgoKRU5WIElNTVVBRE1JTl9JTU1VREItQUREUkVTUz0iMTI3LjAuMC4xIiBcCiAgICBJTU1VQURNSU5fSU1NVURCLVBPUlQ9IjMzMjIiIFwKICAgIElNTVVEQl9NVExTPSJmYWxzZSIgCgpSVU4gYWRkZ3JvdXAgLS1zeXN0ZW0gLS1naWQgJElNTVVfR0lEIGltbXUgJiYgXAogICAgYWRkdXNlciAtLXN5c3RlbSAtLXVpZCAkSU1NVV9VSUQgLS1uby1jcmVhdGUtaG9tZSAtLWluZ3JvdXAgaW1tdSBpbW11ICYmIFwKICAgIGNobW9kICt4IC91c3IvbG9jYWwvYmluL2ltbXVhZG1pbgoKVVNFUiBpbW11CkVOVFJZUE9JTlQgWyIvdXNyL2xvY2FsL2Jpbi9pbW11YWRtaW4iXQ==hash:dfca217e2d87dccb8fd3fe8c1b49e620cc4ece8dc9c9fc2384cb6f6c9617eddb
time:2020-05-1305:19:19-0400EDT
verified:true
命令有點(diǎn)復(fù)雜
./immuclientsafegetDockerfile1|grep"^value"|cut-d":"-f2|xargsecho-n|base64-di
對(duì)于非開(kāi)發(fā)人員,將來(lái)還會(huì)有更簡(jiǎn)單的選項(xiàng),以及.net,Java,Node.js和Pythonaso的SDK驅(qū)動(dòng)程序。想要了解更多關(guān)于數(shù)據(jù)庫(kù)的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。