智能合約調(diào)用是實(shí)現(xiàn)一個(gè) DApp 的關(guān)鍵,一個(gè)完整的 DApp 包括前端、后端、智能合約及區(qū)塊 鏈系統(tǒng),智能合約的調(diào)用是連接區(qū)塊鏈與前后端的關(guān)鍵。
成都創(chuàng)新互聯(lián)公司專(zhuān)注于深圳網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供深圳營(yíng)銷(xiāo)型網(wǎng)站建設(shè),深圳網(wǎng)站制作、深圳網(wǎng)頁(yè)設(shè)計(jì)、深圳網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造深圳網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供深圳網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
我們先來(lái)了解一下智能合約調(diào)用的基礎(chǔ)原理。智能合約運(yùn)行在以太坊節(jié)點(diǎn)的 EVM 中。因此要 想調(diào)用合約必須要訪(fǎng)問(wèn)某個(gè)節(jié)點(diǎn)。
以后端程序?yàn)槔?,后端服?wù)若想連接節(jié)點(diǎn)有兩種可能,一種是雙 方在同一主機(jī),此時(shí)后端連接節(jié)點(diǎn)可以采用 本地 IPC(Inter-Process Communication,進(jìn) 程間通信)機(jī)制,也可以采用 RPC(Remote Procedure Call,遠(yuǎn)程過(guò)程調(diào)用)機(jī)制;另 一種情況是雙方不在同一臺(tái)主機(jī),此時(shí)只能采用 RPC 機(jī)制進(jìn)行通信。
提到 RPC, 讀者應(yīng)該對(duì) Geth 啟動(dòng)參數(shù)有點(diǎn)印象,Geth 啟動(dòng)時(shí)可以選擇開(kāi)啟 RPC 服務(wù),對(duì)應(yīng)的 默認(rèn)服務(wù)端口是 8545。。
接著,我們來(lái)了解一下智能合約運(yùn)行的過(guò)程。
智能合約的運(yùn)行過(guò)程是后端服務(wù)連接某節(jié)點(diǎn),將 智能合約的調(diào)用(交易)發(fā)送給節(jié)點(diǎn),節(jié)點(diǎn)在驗(yàn)證了交易的合法性后進(jìn)行全網(wǎng)廣播,被礦工打包到 區(qū)塊中代表此交易得到確認(rèn),至此交易才算完成。
就像數(shù)據(jù)庫(kù)一樣,每個(gè)區(qū)塊鏈平臺(tái)都會(huì)提供主流 開(kāi)發(fā)語(yǔ)言的 SDK(Software Development Kit,軟件開(kāi)發(fā)工具包),由于 Geth 本身就是用 Go 語(yǔ)言 編寫(xiě)的,因此若想使用 Go 語(yǔ)言連接節(jié)點(diǎn)、發(fā)交易,直接在工程內(nèi)導(dǎo)入 go-ethereum(Geth 源碼) 包就可以了,剩下的問(wèn)題就是流程和 API 的事情了。
總結(jié)一下,智能合約被調(diào)用的兩個(gè)關(guān)鍵點(diǎn)是節(jié)點(diǎn)和 SDK。
由于 IPC 要求后端與節(jié)點(diǎn)必須在同一主機(jī),所以很多時(shí)候開(kāi)發(fā)者都會(huì)采用 RPC 模式。除了 RPC,以太坊也為開(kāi)發(fā)者提供了 json- rpc 接口,本文就不展開(kāi)討論了。
接下來(lái)介紹如何使用 Go 語(yǔ)言,借助 go-ethereum 源碼庫(kù)來(lái)實(shí)現(xiàn)智能合約的調(diào)用。這是有固定 步驟的,我們先來(lái)說(shuō)一下總體步驟,以下面的合約為例。
步驟 01:編譯合約,獲取合約 ABI(Application Binary Interface,應(yīng)用二進(jìn)制接口)。 單擊【ABI】按鈕拷貝合約 ABI 信息,將其粘貼到文件 calldemo.abi 中(可使用 Go 語(yǔ)言IDE 創(chuàng)建該文件,文件名可自定義,后綴最好使用 abi)。
最好能將 calldemo.abi 單獨(dú)保存在一個(gè)目錄下,輸入“l(fā)s”命令只能看到 calldemo.abi 文件,參 考效果如下:
步驟 02:獲得合約地址。注意要將合約部署到 Geth 節(jié)點(diǎn)。因此 Environment 選擇為 Web3 Provider。
在【Environment】選項(xiàng)框中選擇“Web3 Provider”,然后單擊【Deploy】按鈕。
部署后,獲得合約地址為:0xa09209c28AEf59a4653b905792a9a910E78E7407。
步驟 03:利用 abigen 工具(Geth 工具包內(nèi)的可執(zhí)行程序)編譯智能合約為 Go 代碼。abigen 工具的作用是將 abi 文件轉(zhuǎn)換為 Go 代碼,命令如下:
其中各參數(shù)的含義如下。 (1)abi:是指定傳入的 abi 文件。 (2)type:是指定輸出文件中的基本結(jié)構(gòu)類(lèi)型。 (3)pkg:指定輸出文件 package 名稱(chēng)。 (4)out:指定輸出文件名。 執(zhí)行后,將在代碼目錄下看到 funcdemo.go 文件,讀者可以打開(kāi)該文件欣賞一下,注意不要修改它。
步驟 04:創(chuàng)建 main.go,填入如下代碼。 注意代碼中 HexToAddress 函數(shù)內(nèi)要傳入該合約部署后的地址,此地址在步驟 01 中獲得。
步驟 04:設(shè)置 go mod,以便工程自動(dòng)識(shí)別。
前面有所提及,若要使用 Go 語(yǔ)言調(diào)用智能合約,需要下載 go-ethereum 工程,可以使用下面 的指令:
該指令會(huì)自動(dòng)將 go-ethereum 下載到“$GOPATH/src/github.com/ethereum/go-ethereum”,這樣還算 不錯(cuò)。不過(guò),Go 語(yǔ)言自 1.11 版本后,增加了 module 管理工程的模式。只要設(shè)置好了 go mod,下載 依賴(lài)工程的事情就不必關(guān)心了。
接下來(lái)設(shè)置 module 生效和 GOPROXY,命令如下:
在項(xiàng)目工程內(nèi),執(zhí)行初始化,calldemo 可以自定義名稱(chēng)。
步驟 05:運(yùn)行代碼。執(zhí)行代碼,將看到下面的效果,以及最終輸出的 2020。
上述輸出信息中,可以看到 Go 語(yǔ)言會(huì)自動(dòng)下載依賴(lài)文件,這就是 go mod 的神奇之處??吹?2020,相信讀者也知道運(yùn)行結(jié)果是正確的了。
Cacti(英文含義為仙人掌〉是一套基于 PHP、MySQL、SNMP和 RRDtool開(kāi)發(fā)的網(wǎng)絡(luò)流量監(jiān)測(cè)圖形分析工具。
它通過(guò)snmpget來(lái)獲取數(shù)據(jù),使用RRDTool繪圖,但使用者無(wú)須了解RRDTool復(fù)雜的參數(shù)。它提供了非常強(qiáng)大的數(shù)據(jù)和用戶(hù)管理功能,可以指定每一個(gè)用戶(hù)能查看樹(shù)狀結(jié)構(gòu)、主機(jī)設(shè)備以及任何一張圖,還可以與LDAP 結(jié)合進(jìn)行用戶(hù)認(rèn)證,同時(shí)也能自定義模板,在歷史數(shù)據(jù)的展示監(jiān)控方面,其功能相當(dāng)不錯(cuò)。
Cacti通過(guò)添加模板,使不同設(shè)備的監(jiān)控添加具有可復(fù)用性,并且具備可自定義繪圖的功能,具有強(qiáng)大的運(yùn)算能力(數(shù)據(jù)的疊加功能)
1.2Nagios
Nagios是一款開(kāi)源的免費(fèi)網(wǎng)絡(luò)監(jiān)視工具,能有效監(jiān)控windows、Linux和Unix的主機(jī)狀態(tài),交換機(jī)、打印機(jī)、路由器等網(wǎng)絡(luò)設(shè)備。在系統(tǒng)或服務(wù)狀態(tài)異常時(shí)發(fā)出郵件或短信報(bào)警第一時(shí)間通知網(wǎng)站運(yùn)維人員,在狀態(tài)恢復(fù)后發(fā)出正常的郵件或短信通知。
nagios主要的特征是監(jiān)控告警,最強(qiáng)大的就是告警功能,可支持多種告警方式,但缺點(diǎn)是沒(méi)有強(qiáng)大的數(shù)據(jù)收集機(jī)制,并且數(shù)據(jù)出圖也很簡(jiǎn)陋,當(dāng)監(jiān)控的主機(jī)越來(lái)越多時(shí),添加主機(jī)也非常麻煩,配置文件都是基于文本配置的,不支持web方式管理和配置,這樣很容易出錯(cuò),不宜維護(hù)。
1.3Zabbix
zabbix是一個(gè)基于WEB界面的提供分布式系統(tǒng)監(jiān)視以及網(wǎng)絡(luò)監(jiān)視功能的企業(yè)級(jí)的開(kāi)源解決方案。zabbix能監(jiān)視各種網(wǎng)絡(luò)參數(shù),保證服務(wù)器系統(tǒng)的安全運(yùn)營(yíng);并提供強(qiáng)大的通知機(jī)制以讓系統(tǒng)運(yùn)維人員快速定位/解決存在的各種問(wèn)題。
zabbix由2部分構(gòu)成,zabbix server與可選組件zabbix agent。zabbix server可以通過(guò)SNMP,zabbix,agent,ping,端口監(jiān)視等方法提供對(duì)遠(yuǎn)程服務(wù)器/網(wǎng)絡(luò)狀態(tài)的監(jiān)視,數(shù)據(jù)收集等功能,它可以運(yùn)行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,os x等平臺(tái)上。
zabbix解決了cacti沒(méi)有告警的不足,也解決了nagios不能通過(guò)web配置的缺點(diǎn),同時(shí)還支持分布式部署,這使得它迅速流行起來(lái),zabbix也成為目前中小企業(yè)監(jiān)控最流行的運(yùn)維監(jiān)控平臺(tái)。當(dāng)然,zabbix也有不足之處,它消耗的資源比較多,如果監(jiān)控的主機(jī)非常多時(shí)(服務(wù)器數(shù)量超過(guò)500臺(tái)),可能會(huì)出現(xiàn)監(jiān)控超時(shí)、告警超時(shí)、告警系統(tǒng)單點(diǎn)故障等現(xiàn)象,不過(guò)也有很多解決辦法,比如提高硬件性能、改變zabbix監(jiān)控模式等。
① agent代理:專(zhuān)門(mén)的代理服務(wù)方式進(jìn)行監(jiān)控,專(zhuān)屬的協(xié)議,裝有zabbix-agent的主機(jī)就可以被zabbix-server監(jiān)控,主
動(dòng)或被動(dòng)的方式,把數(shù)據(jù)給到server進(jìn)行處理。
② ssh/telent:linux主機(jī)支持ssh/telent協(xié)議
③ snmp:網(wǎng)絡(luò)設(shè)備路由器、交換機(jī)不能安裝第三方程序(agent),使用簡(jiǎn)單網(wǎng)絡(luò)協(xié)議。大多數(shù)的路由器設(shè)備支持SNMP協(xié)議
④ ipmi:通過(guò)ipmi接口進(jìn)行監(jiān)控,我們可以通過(guò)標(biāo)準(zhǔn)的ipmi硬件接口,監(jiān)控被監(jiān)控對(duì)象的物理特征,比如電壓,溫度,
風(fēng)扇狀態(tài)電源情況,被廣泛使用服務(wù)監(jiān)控中,包括采集cpu溫度,風(fēng)扇轉(zhuǎn)速,主板溫度,及遠(yuǎn)程開(kāi)關(guān)機(jī)等等,而且ipmi獨(dú)立于硬件和操作系統(tǒng),無(wú)論是cpu,bios還是os出現(xiàn)故障,都不會(huì)影響ipmi的工作,因?yàn)閕pmi的硬件設(shè)備BMC(bashboard management controller)是獨(dú)立的板卡,獨(dú)立供電
⑤ zabbix核心組件介紹
Zabbix Server:
Zabbix軟件實(shí)現(xiàn)監(jiān)控的核心程序,主要功能是與Zabbixproxies和Agents進(jìn)行交互、觸發(fā)器計(jì)算、發(fā)送告警通知;并將數(shù)據(jù)集中保存。與prometheus的類(lèi)似可以保存收集到的數(shù)據(jù),但是prometheus告警需要使用altermanager組件
Database storage:
存儲(chǔ)配置信息以及收集到的數(shù)據(jù)
web Interface:
Zabbix的GUI接口,通常與server運(yùn)行在同一臺(tái)機(jī)器上
Proxy:
可選組件,常用于分布式監(jiān)控環(huán)境中,一個(gè)幫助zabbix Server收集數(shù)據(jù),分擔(dān)zabbix Server的負(fù)載的程序
Agent:
部署在被監(jiān)控主機(jī)上,負(fù)責(zé)收集數(shù)據(jù)發(fā)送給server
1.5Prometheus
borg.kubernetes
borgmon(監(jiān)控系統(tǒng)) 對(duì)應(yīng)克隆的版本:prometheus(go語(yǔ)言)
所以prometheus 特別適合K8S 的架構(gòu)上
而作為一個(gè)數(shù)據(jù)監(jiān)控解決方案,它由一個(gè)大型社區(qū)支持,有來(lái)自700多家公司的6300個(gè)貢獻(xiàn)者,13500個(gè)代碼提交和7200個(gè)拉取請(qǐng)求
Prometheus具有以下特性:
① 多維的數(shù)據(jù)模型(基于時(shí)間序列的Key、value鍵值對(duì))
② 靈活的查詢(xún)和聚合語(yǔ)言PromQL(難)
③ 提供本地存儲(chǔ)和分布式存儲(chǔ)
④ 通過(guò)基于HTTP和HTTPS的Pull模型采集時(shí)間序列數(shù)據(jù)(pull數(shù)據(jù)的拉取,時(shí)間序列:每段
時(shí)間點(diǎn)的數(shù)據(jù)值指標(biāo),持續(xù)性的產(chǎn)生。橫軸標(biāo)識(shí)時(shí)間,縱軸為數(shù)據(jù)值,一段時(shí)間內(nèi)數(shù)值的動(dòng)態(tài)變化,所有的點(diǎn)連線(xiàn)形成大盤(pán)式的折線(xiàn)圖)
⑤ 可利用Pushgateway (Prometheus的可選中間件)實(shí)現(xiàn)Push模式
⑥ 可通過(guò)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)或靜態(tài)配置發(fā)現(xiàn)目標(biāo)機(jī)器(通過(guò)consul自動(dòng)發(fā)現(xiàn)和收縮)
⑦ 支持多種圖表和數(shù)據(jù)大盤(pán)
open-Falcaon是小米開(kāi)源的企業(yè)級(jí)監(jiān)控工具,用GO語(yǔ)言開(kāi)發(fā),包括小米、滴滴、美團(tuán)等在內(nèi)的互聯(lián)網(wǎng)公司都在使用它,是一款靈活、可拓展并且高性能的監(jiān)控方案。
一般命令
所謂一般命令,就是在一定時(shí)間內(nèi)會(huì)執(zhí)行完的命令。比如 grep, cat 等等。 執(zhí)行命令的步驟是:連接,執(zhí)行,獲取結(jié)果
連接
連接包含了認(rèn)證,可以使用 password 或者 sshkey 2種方式來(lái)認(rèn)證。下面的示例為了簡(jiǎn)單,使用了密碼認(rèn)證的方式來(lái)完成連接。
import (
"fmt"
"time"
"golang.org/x/crypto/ssh"
)
func connect(user, password, host string, port int) (*ssh.Session, error) {
var (
auth []ssh.AuthMethod
addr string
clientConfig *ssh.ClientConfig
client *ssh.Client
session *ssh.Session
err error
)
// get auth method
auth = make([]ssh.AuthMethod, 0)
auth = append(auth, ssh.Password(password))
clientConfig = ssh.ClientConfig{
User: user,
Auth: auth,
Timeout: 30 * time.Second,
}
// connet to ssh
addr = fmt.Sprintf("%s:%d", host, port)
if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {
return nil, err
}
// create session
if session, err = client.NewSession(); err != nil {
return nil, err
}
return session, nil
}
連接的方法很簡(jiǎn)單,只要提供登錄主機(jī)的 用戶(hù)*, *密碼*, *主機(jī)名或者IP*, *SSH端口
執(zhí)行,命令獲取結(jié)果
連接成功后,執(zhí)行命令很簡(jiǎn)單
import (
"fmt"
"log"
"os"
"time"
"golang.org/x/crypto/ssh"
)
func main() {
session, err := connect("root", "xxxxx", "127.0.0.1", 22)
if err != nil {
log.Fatal(err)
}
defer session.Close()
session.Run("ls /; ls /abc")
}
上面代碼運(yùn)行之后,雖然命令正常執(zhí)行了,但是沒(méi)有正常輸出的結(jié)果,也沒(méi)有異常輸出的結(jié)果。 要想顯示結(jié)果,需要將 session 的 Stdout 和 Stderr 重定向 修改 func main 為如下:
func main() {
session, err := connect("root", "xxxxx", "127.0.0.1", 22)
if err != nil {
log.Fatal(err)
}
defer session.Close()
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Run("ls /; ls /abc")
}
這樣就能在屏幕上顯示正常,異常的信息了。
交互式命令
上面的方式無(wú)法遠(yuǎn)程執(zhí)行交互式命令,比如 top , 遠(yuǎn)程編輯一個(gè)文件,比如 vi /etc/nginx/nginx.conf 如果要支持交互式的命令,需要當(dāng)前的terminal來(lái)接管遠(yuǎn)程的 PTY。
func main() {
session, err := connect("root", "olordjesus", "dockers.iotalabs.io", 2210)
if err != nil {
log.Fatal(err)
}
defer session.Close()
fd := int(os.Stdin.Fd())
oldState, err := terminal.MakeRaw(fd)
if err != nil {
panic(err)
}
defer terminal.Restore(fd, oldState)
// excute command
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Stdin = os.Stdin
termWidth, termHeight, err := terminal.GetSize(fd)
if err != nil {
panic(err)
}
// Set up terminal modes
modes := ssh.TerminalModes{
ssh.ECHO: 1, // enable echoing
ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud
ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud
}
// Request pseudo terminal
if err := session.RequestPty("xterm-256color", termHeight, termWidth, modes); err != nil {
log.Fatal(err)
}
session.Run("top")
}
內(nèi)核線(xiàn)程(Kernel-Level Thread ,KLT)
輕量級(jí)進(jìn)程(Light Weight Process,LWP):輕量級(jí)進(jìn)程就是我們通常意義上所講的線(xiàn)程,由于每個(gè)輕量級(jí)進(jìn)程都由一個(gè)內(nèi)核線(xiàn)程支持,因此只有先支持內(nèi)核線(xiàn)程,才能有輕量級(jí)進(jìn)程
用戶(hù)線(xiàn)程與系統(tǒng)線(xiàn)程一一對(duì)應(yīng),用戶(hù)線(xiàn)程執(zhí)行如lo操作的系統(tǒng)調(diào)用時(shí),來(lái)回切換操作開(kāi)銷(xiāo)相對(duì)比較大
多個(gè)用戶(hù)線(xiàn)程對(duì)應(yīng)一個(gè)內(nèi)核線(xiàn)程,當(dāng)內(nèi)核線(xiàn)程對(duì)應(yīng)的一個(gè)用戶(hù)線(xiàn)程被阻塞掛起時(shí)候,其他用戶(hù)線(xiàn)程也阻塞不能執(zhí)行了。
多對(duì)多模型是可以充分利用多核CPU提升運(yùn)行效能的
go線(xiàn)程模型包含三個(gè)概念:內(nèi)核線(xiàn)程(M),goroutine(G),G的上下文環(huán)境(P);
GMP模型是goalng特有的。
P與M一般是一一對(duì)應(yīng)的。P(上下文)管理著一組G(goroutine)掛載在M(內(nèi)核線(xiàn)程)上運(yùn)行,圖中左邊藍(lán)色為正在執(zhí)行狀態(tài)的goroutine,右邊為待執(zhí)行狀態(tài)的goroutiine隊(duì)列。P的數(shù)量由環(huán)境變量GOMAXPROCS的值或程序運(yùn)行runtime.GOMAXPROCS()進(jìn)行設(shè)置。
當(dāng)一個(gè)os線(xiàn)程在執(zhí)行M1一個(gè)G1發(fā)生阻塞時(shí),調(diào)度器讓M1拋棄P,等待G1返回,然后另起一個(gè)M2接收P來(lái)執(zhí)行剩下的goroutine隊(duì)列(G2、G3...),這是golang調(diào)度器厲害的地方,可以保證有足夠的線(xiàn)程來(lái)運(yùn)行剩下所有的goroutine。
當(dāng)G1結(jié)束后,M1會(huì)重新拿回P來(lái)完成,如果拿不到就丟到全局runqueue中,然后自己放到線(xiàn)程池或轉(zhuǎn)入休眠狀態(tài)??臻e的上下文P會(huì)周期性的檢查全局runqueue上的goroutine,并且執(zhí)行它。
另一種情況就是當(dāng)有些P1太閑而其他P2很忙碌的時(shí)候,會(huì)從其他上下文P2拿一些G來(lái)執(zhí)行。
詳細(xì)可以翻看下方第一個(gè)參考鏈接,寫(xiě)得真好。
最后用大佬的總結(jié)來(lái)做最后的收尾————
Go語(yǔ)言運(yùn)行時(shí),通過(guò)核心元素G,M,P 和 自己的調(diào)度器,實(shí)現(xiàn)了自己的并發(fā)線(xiàn)程模型。調(diào)度器通過(guò)對(duì)G,M,P的調(diào)度實(shí)現(xiàn)了兩級(jí)線(xiàn)程模型中操作系統(tǒng)內(nèi)核之外的調(diào)度任務(wù)。整個(gè)調(diào)度過(guò)程中會(huì)在多種時(shí)機(jī)去觸發(fā)最核心的步驟 “一整輪調(diào)度”,而一整輪調(diào)度中最關(guān)鍵的部分在“全力查找可運(yùn)行G”,它保證了M的高效運(yùn)行(換句話(huà)說(shuō)就是充分使用了計(jì)算機(jī)的物理資源),一整輪調(diào)度中還會(huì)涉及到M的啟用停止。最后別忘了,還有一個(gè)與Go程序生命周期相同的系統(tǒng)監(jiān)測(cè)任務(wù)來(lái)進(jìn)行一些輔助性的工作。
淺析Golang的線(xiàn)程模型與調(diào)度器
Golang CSP并發(fā)模型
Golang線(xiàn)程模型
知網(wǎng)和Gocheck的論文查重區(qū)別分為論文查重系統(tǒng)數(shù)據(jù)庫(kù)、論文檢測(cè)的方式、識(shí)別引用的不同。
一、論文查重系統(tǒng)數(shù)據(jù)庫(kù)不同
Gocheck論文檢測(cè)專(zhuān)家和知網(wǎng)查重的數(shù)據(jù)庫(kù)不同,兩個(gè)系統(tǒng)都收錄超過(guò)上億的文獻(xiàn)資源庫(kù),并且對(duì)互聯(lián)網(wǎng)資源進(jìn)行實(shí)時(shí)監(jiān)測(cè)收錄和索引,但不同的是知網(wǎng)論文文獻(xiàn)庫(kù)更為豐富。
知網(wǎng)查重檢測(cè)系統(tǒng):中國(guó)學(xué)術(shù)期刊網(wǎng)絡(luò)出版總庫(kù),中國(guó)博士學(xué)位論文全文數(shù)據(jù)庫(kù),中國(guó)優(yōu)秀碩士學(xué)位論文全文數(shù)據(jù)庫(kù),中國(guó)重要會(huì)議論文全文數(shù)據(jù)庫(kù)。
大學(xué)生論文聯(lián)合對(duì)比庫(kù),中國(guó)重要報(bào)紙全文數(shù)據(jù)庫(kù),中國(guó)專(zhuān)利全文數(shù)據(jù)庫(kù),互聯(lián)網(wǎng)資源(包含貼吧等論壇資源)。
英文數(shù)據(jù)庫(kù)(涵蓋期刊、博碩、會(huì)議的英文數(shù)據(jù)以及德國(guó)Springer、英國(guó)TaylorFrancis 期刊數(shù)據(jù)庫(kù)等),港澳臺(tái)學(xué)術(shù)文獻(xiàn)庫(kù),優(yōu)先出版文獻(xiàn)庫(kù),互聯(lián)網(wǎng)文檔資源,圖書(shū)資源,CNKI大成編客-原創(chuàng)作品庫(kù),個(gè)人比對(duì)庫(kù)。
gocheck的對(duì)比庫(kù):中文期刊庫(kù)、TONDA論文庫(kù)、互聯(lián)網(wǎng)資源、用戶(hù)自建數(shù)據(jù)庫(kù)、共享資源庫(kù)。
二、論文檢測(cè)的方式不同
一般論文寫(xiě)作者將論文上傳至系統(tǒng),便會(huì)開(kāi)始檢測(cè)了。Gocheck和知網(wǎng)的不同之處便是,知網(wǎng)自動(dòng)識(shí)別目錄然后一章一章拆分比對(duì),連續(xù)超過(guò)一定字?jǐn)?shù)后便會(huì)被系統(tǒng)識(shí)別出來(lái);而Gocheck則是將句子的主要語(yǔ)義片段同系統(tǒng)的資源比對(duì),超過(guò)系統(tǒng)閥值則會(huì)被檢測(cè)出來(lái),閥值可以由學(xué)校掌控。
三、識(shí)別引用的不同
在論文中常常有會(huì)有忘記加引用符號(hào),而變成抄襲的情況。而且不了解系統(tǒng)是如何將抄襲和引用分界的,讓人苦惱不已。
知網(wǎng)查重可識(shí)別的引用方式有兩種,一種是在文章加“”符號(hào),以及在正文中有來(lái)源于參考文獻(xiàn)中文章的內(nèi)容。
Gocheck論文檢測(cè)專(zhuān)家的識(shí)別方式則有四種,其中兩種和知網(wǎng)一樣。文中的【數(shù)字】的部分以及在Word自帶的插入腳注都可以被識(shí)別為引用。
此處有一點(diǎn)切結(jié)不管是在知網(wǎng)還是在Gocheck在引用完一段文獻(xiàn)之前一定不能加句號(hào),因?yàn)槿绻谝梦赐曛坝镁涮?hào)則代表此段引用完畢,后面的會(huì)被系統(tǒng)認(rèn)定為抄襲,這樣可就得不償失了。
擴(kuò)展資料:
知網(wǎng)的概念是國(guó)家知識(shí)基礎(chǔ)設(shè)施,由世界銀行于1998年提出。CNKI工程是以實(shí)現(xiàn)全社會(huì)知識(shí)資源傳播共享與增值利用為目標(biāo)的信息化建設(shè)項(xiàng)目,由清華大學(xué)、清華同方發(fā)起。
始建于1999年6月。在黨和國(guó)家領(lǐng)導(dǎo)以及教育部、中宣部、科技部、新聞出版總署、國(guó)家版權(quán)局、國(guó)家發(fā)改委的大力支持下,在全國(guó)學(xué)術(shù)界、教育界、出版界、圖書(shū)情報(bào)界等社會(huì)各界的密切配合和清華大學(xué)的直接領(lǐng)導(dǎo)下。
CNKI工程集團(tuán)經(jīng)過(guò)多年努力。采用自主開(kāi)發(fā)并具有國(guó)際領(lǐng)先水平的數(shù)字圖書(shū)館技術(shù),建成了世界上全文信息量規(guī)模最大的"CNKI數(shù)字圖書(shū)館",并正式啟動(dòng)建設(shè)《中國(guó)知識(shí)資源總庫(kù)》及CNKI網(wǎng)格資源共享平臺(tái)。
通過(guò)產(chǎn)業(yè)化運(yùn)作,為全社會(huì)知識(shí)資源高效共享提供最豐富的知識(shí)信息資源和最有效的知識(shí)傳播與數(shù)字化學(xué)習(xí)平臺(tái)。(一般評(píng)定職稱(chēng)所說(shuō)的中國(guó)期刊網(wǎng),是中國(guó)知網(wǎng))。
參考資料:百度百科-中國(guó)知網(wǎng)
Docker 提供了一個(gè)與 Docker 守護(hù)進(jìn)程交互的 API (稱(chēng)為Docker Engine API),我們可以使用官方提供的 Go 語(yǔ)言的 SDK 進(jìn)行構(gòu)建和擴(kuò)展 Docker 應(yīng)用程序和解決方案。
轉(zhuǎn)自:
整理:地鼠文檔
通過(guò)下面的命令就可以安裝 SDK 了:
該部分會(huì)介紹如何使用 Golang + Docker API 進(jìn)行管理本地的 Docker。
第一個(gè)例子將展示如何運(yùn)行容器,相當(dāng)于 docker run docker.io/library/alpine echo "hello world" :
還可以在后臺(tái)運(yùn)行容器,相當(dāng)于 docker run -d bfirsh/reticulate-splines :
列出正在運(yùn)行的容器,就像使用 docker ps 一樣:
如果是 docker ps -a ,我們可以通過(guò)修改 types.ContainerListOptions 中的 All 屬性達(dá)到這個(gè)目的:
通過(guò)上面的例子,我們可以獲取容器的列表,所以在這個(gè)案例中,我們可以去停止所有正在運(yùn)行的容器。
通過(guò)指定容器的 ID,我們可以獲取對(duì)應(yīng) ID 的容器的日志:
獲取本地所有的鏡像,相當(dāng)于 docker image ls 或 docker images :
拉取指定鏡像,相當(dāng)于 docker pull alpine :
除了公開(kāi)的鏡像,我們平時(shí)還會(huì)用到一些私有鏡像,可以是 DockerHub 上私有鏡像,也可以是自托管的鏡像倉(cāng)庫(kù),比如 harbor 。這個(gè)時(shí)候,我們需要提供對(duì)應(yīng)的憑證才可以拉取鏡像。
值得注意的是:在使用 Docker API 的 Go SDK 時(shí),憑證是以明文的方式進(jìn)行傳輸?shù)?,所以如果是自建的鏡像倉(cāng)庫(kù),請(qǐng)務(wù)必使用 HTTPS !
我們可以將一個(gè)已有的容器通過(guò) commit 保存成一個(gè)鏡像:
當(dāng)然,除了可以管理本地的 Docker , 我們同樣也可以通過(guò)使用 Golang + Docker API 管理遠(yuǎn)程的 Docker 。
默認(rèn) Docker 是通過(guò)非網(wǎng)絡(luò)的 Unix 套接字運(yùn)行的,只能夠進(jìn)行本地通信( /var/run/docker.sock ),是不能夠直接遠(yuǎn)程連接 Docker 的。
我們需要編輯配置文件 /etc/docker/daemon.json ,并修改以下內(nèi)容(把 192.168.59.3 改成你自己的 IP 地址),然后重啟 Docker :
創(chuàng)建 client 的時(shí)候需要指定遠(yuǎn)程 Docker 的地址,這樣就可以像管理本地 Docker 一樣管理遠(yuǎn)程的 Docker 了:
現(xiàn)在已經(jīng)有很多可以管理 Docker 的產(chǎn)品,它們便是這樣進(jìn)行實(shí)現(xiàn)的,比如: portainer 。