日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

在非容器(集群)环境下运行dapr

發(fā)布時(shí)間:2023/12/4 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在非容器(集群)环境下运行dapr 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:李俱順

原文:https://www.4async.com/2021/03/2021-03-11-running-dapr-without-container/

前一段時(shí)間一直關(guān)注的dapr正式發(fā)布了v1.0版本(實(shí)際上本文發(fā)布時(shí)還更新了v1.0.1),代表dapr在某些程度上進(jìn)入穩(wěn)定狀態(tài),可以嘗試在實(shí)際中進(jìn)行運(yùn)用。作為我一直關(guān)注的項(xiàng)目,在第一時(shí)間中進(jìn)行了嘗試,并試圖引入實(shí)際項(xiàng)目中,本文則是針對(duì)這些的一些先期測(cè)試內(nèi)容.

什么是dapr?

dapr最早是由微軟開源的(不愧是你),一個(gè)可移植的、事件驅(qū)動(dòng)的程序運(yùn)行時(shí),它使任何開發(fā)者都能輕松地構(gòu)建運(yùn)行在云和邊緣的彈性、無(wú)狀態(tài)/有狀態(tài)的應(yīng)用程序,并且可以靈活支持多種開發(fā)語(yǔ)言。換而言之,在我看來(lái),dapr可以作為一個(gè)serverless落地方案看待和處理,對(duì)程序而言,只關(guān)注提供的store和消息隊(duì)列接口,無(wú)需關(guān)心架構(gòu)層面更多內(nèi)容。

不過(guò)在官方的示例教程中,使用的環(huán)境為容器環(huán)境部署和管理dapr。實(shí)際上,除了在容器環(huán)境或者容器集群環(huán)境下,dapr可以配置為在本地機(jī)器上以自托管模式運(yùn)行。

本地安裝

dapr安裝可以通過(guò)官方的dapr-cli實(shí)現(xiàn),dapr-cli可以通過(guò)一鍵安裝命令快速安裝:

# wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash Your system is linux_amd64Dapr CLI is detected: main: line 86: 43656 Segmentation fault $DAPR_CLI_FILE --version Reinstalling Dapr CLI - /usr/local/bin/dapr...Getting the latest Dapr CLI... Installing v1.0.0 Dapr CLI... Downloading https://github.com/dapr/cli/releases/download/v1.0.0/dapr_linux_amd64.tar.gz ... dapr installed into /usr/local/bin successfully. CLI version: 1.0.0 Runtime version: n/aTo get started with Dapr, please visit https://docs.dapr.io/getting-started/

可以通過(guò)輸入dapr命令確認(rèn)dapr-cli程序是否被正常安裝成功。

接下來(lái)使用dapr-cli安裝所有的runtime等應(yīng)用。

# dapr init --slim ? Making the jump to hyperspace... ↘ Downloading binaries and setting up components... Dapr runtime installed to /root/.dapr/bin, you may run the following to add it to your path if you want to run daprd directly:export PATH=$PATH:/root/.dapr/bin ? Downloaded binaries and completed components set up. ?? daprd binary has been installed to /root/.dapr/bin. ?? placement binary has been installed to /root/.dapr/bin. ? Success! Dapr is up and running. To get started, go here: https://aka.ms/dapr-getting-started# dapr --version CLI version: 1.0.0 Runtime version: 1.0.1

在官方文檔中,如果選擇使用init命令初始化,dapr-cli將會(huì)自動(dòng)嘗試使用容器環(huán)境管理相關(guān)程序,只有添加--slim參數(shù)才會(huì)選擇本地化運(yùn)行。更多用法可以參考dapr help init幫助。默認(rèn)程序相關(guān)內(nèi)容會(huì)安裝在$HOME/.dapr目錄下,這里因?yàn)槲覟榱撕?jiǎn)便使用了root用戶,因此程序命令所在目錄為/root/.dapr/bin,共安裝了如下命令:

# ls ~/.dapr/bin daprd dashboard placement web

從文件名可以看出來(lái)daprd是deamon進(jìn)程,dashboard就是管理面板,placement是用于管理actor分布方案和密鑰范圍的工具。官方文檔中提到在安裝后會(huì)使用Reids作為默認(rèn)的存儲(chǔ)和pub/sub組件,但是我實(shí)際安裝下來(lái)其實(shí)是并沒(méi)沒(méi)有的,不知道是不是文檔有些過(guò)期導(dǎo)致的。這時(shí)如果按照官方文檔的例子進(jìn)行操作啟動(dòng)程序并嘗試在存儲(chǔ)中保存數(shù)據(jù),則會(huì)出現(xiàn)報(bào)錯(cuò)的情況:

// 第一個(gè)session中執(zhí)行: # dapr run --app-id myapp --dapr-http-port 3500// 第二個(gè)session中執(zhí)行: # curl -X POST -H "Content-Type: application/json" -d '[{ "key": "name", "value": "Bruce Wayne"}]' http://localhost:3500/v1.0/state/statestore{"errorCode":"ERR_STATE_STORES_NOT_CONFIGURED","message":"state store is not configured"}

不過(guò)實(shí)際上添加組件在dapr中也是比較簡(jiǎn)單的,可以通過(guò)在$HOME/.dapr/components下添加對(duì)應(yīng)yaml文件實(shí)現(xiàn)。

添加Redis作為組件

我們可以在官方文檔中找到一個(gè)Redis組件配置模版,可以快速使用:

# redis-store.yml apiVersion: dapr.io/v1alpha1 kind: Component metadata:name: redis-storenamespace: default spec:type: state.redisversion: v1metadata:- name: redisHostvalue: 127.0.0.1:6379- name: redisPasswordvalue: ""

當(dāng)然我們也可以使用Redis Stream功能做pub/sub功能,雖然這個(gè)功能已經(jīng)GA,但是介于Redis Stream的特點(diǎn),你需要謹(jǐn)慎使用這個(gè)功能,這里只是因?yàn)槭茄菔舅詿o(wú)所謂:

# redis-pubsub.yml apiVersion: dapr.io/v1alpha1 kind: Component metadata:name: redis-pubsubnamespace: default spec:type: pubsub.redisversion: v1metadata:- name: redisHostvalue: 127.0.0.1:6379- name: redisPasswordvalue: ""- name: consumerIDvalue: "myGroup"

這里我們定義了一個(gè)store名叫做redis-store,所以我們要把上面的命令修改一下:

# curl -X POST -H "Content-Type: application/json" -d '[{ "key": "name", "value": "Bruce Wayne"}]' http://localhost:3500/v1.0/state/redis-store// 獲取存儲(chǔ)內(nèi)容 # curl http://localhost:3500/v1.0/state/redis-store/name "Bruce Wayne"

同時(shí)也可以通過(guò)redis-cli獲取Redis中存儲(chǔ)的內(nèi)容:

# redis-cli 127.0.0.1:6379> keys * 1) "myapp||name" 127.0.0.1:6379> hgetall "myapp||name" 1) "data" 2) "\"Bruce Wayne\"" 3) "version" 4) "1"

我們?cè)谔砑覴edis作為存儲(chǔ)時(shí)還額外添加了Redis支持發(fā)布/訂閱功能,這個(gè)功能如何實(shí)現(xiàn)呢?這里可能就需要編寫額外程序?qū)崿F(xiàn)了。我們這里采用官方的例子進(jìn)行。訂閱在dapr中有兩種形式,一種是采用yaml聲明組件形式,另外一種則可以通過(guò)編寫代碼形式實(shí)現(xiàn)。當(dāng)然第一種方式和第二種方式互有優(yōu)劣,前者更適合無(wú)縫集成,后者方便開發(fā)控制。這里為了演示直觀性直接采用了編寫代碼方式實(shí)現(xiàn)。

package mainimport ("io""log""net/http""github.com/gin-gonic/gin" )func main() {r := gin.Default()r.GET("/dapr/subscribe", func(ctx *gin.Context) {ctx.JSON(http.StatusOK, []map[string]string{{"pubsubname": "redis-pubsub","topic": "deathStarStatus","route": "dsstatus",},})})r.POST("/dsstatus", func(c *gin.Context) {b, _ := io.ReadAll(c.Request.Body)defer c.Request.Body.Close()log.Println(string(b))c.JSON(http.StatusOK, map[string]interface{}{"success": true})})r.Run("127.0.0.1:5000") }

使用如下命令啟動(dòng)編譯后的daprdemo,注意指定文件名時(shí)需要填寫路徑或者在$PATH中:

# dapr --app-id subapp --app-port 5000 run ~/daprdemo

在程序啟動(dòng)日志中我們可以看到dapr會(huì)嘗試訪問(wèn)一些默認(rèn)的endpoint讀取可能的配置:

INFO[0000] application discovered on port 5000 app_id=subapp instance=127.0.0.1 scope=dapr.runtime type=log ver=1.0.1 == APP == [GIN] 2021/03/11 - 10:45:02 | 404 | 949ns | 127.0.0.1 | GET "/dapr/config"INFO[0000] application configuration loaded app_id=subapp instance=127.0.0.1 scope=dapr.runtime type=log ver=1.0.1 INFO[0000] actor runtime started. actor idle timeout: 1h0m0s. actor scan interval: 30s app_id=subapp instance=127.0.0.1 scope=dapr.runtime.actor type=log ver=1.0.1 == APP == [GIN] 2021/03/11 - 10:45:02 | 200 | 540.891μs | 127.0.0.1 | GET "/dapr/subscribe"INFO[0000] app is subscribed to the following topics: [deathStarStatus] through pubsub=redis-pubsub app_id=subapp instance=127.0.0.1 scope=dapr.runtime type=log ver=1.0.1 WARN[0000] redis streams: BUSYGROUP Consumer Group name already exists app_id=subapp instance=127.0.0.1 scope=dapr.contrib type=log ver=1.0.1 INFO[0000] dapr initialized. Status: Running. Init Elapsed 49.674504ms app_id=subapp instance=127.0.0.1 scope=dapr.runtime type=log ver=1.0.1

接下來(lái)我們嘗試使用dapr-cli對(duì)我們之前啟動(dòng)的myapp發(fā)送消息:

dapr publish --publish-app-id myapp --pubsub redis-pubsub --topic deathStarStatus --data '{"status": "completed"}'

在程序日志中獲取到的輸出為:

== APP == [GIN] 2021/03/11 - 10:45:05 | 200 | 122.15μs | 127.0.0.1 | POST "/dsstatus"== APP == 2021/03/11 10:45:05 {"id":"9c237504-7cab-4a13-8582-92d9130fd016","source":"myapp","pubsubname":"redis-pubsub","traceid":"00-fba669a086f84650e882e3cadc55082c-ea466c080e359e68-00","data":{"status":"completed"},"specversion":"1.0","datacontenttype":"application/json","type":"com.dapr.event.sent","topic":"deathStarStatus"}

當(dāng)然,除了pub/sub方式,我們也可以借助dapr提供的路由功能,直接進(jìn)行服務(wù)調(diào)用:

# curl http://127.0.0.1:3500/v1.0/invoke/subapp/method/dsstatus -X POST {"success":true}

其他的組件功能則可以參考官方文檔中描述進(jìn)行配置即可。

總結(jié)

dapr是一個(gè)功能強(qiáng)大的serverless運(yùn)行時(shí),除了上面提到的面向消息和請(qǐng)求存儲(chǔ)的功能以外,還可以控制程序的HTTP請(qǐng)求與gRPC請(qǐng)求等等。除了這些功能外,還包含了服務(wù)的管理,還有可觀測(cè)性支持等功能,是一個(gè)非常有潛力的運(yùn)行時(shí)選擇。

相關(guān)文章:

  • Dapr能否引領(lǐng)云原生中間件的未來(lái)?

  • 云原生 | 阿里巴巴的Dapr實(shí)踐與探索

  • Dapr | 云原生的抽象與實(shí)現(xiàn)

  • Dapr 可視化指南

  • Dapr 知多少 | 分布式應(yīng)用運(yùn)行時(shí)

  • Dapr 正式發(fā)布 1.0

  • Dapr 交通流量控制示例

  • Dapr是如何簡(jiǎn)化微服務(wù)的開發(fā)和部署

  • 微軟開源微服務(wù)運(yùn)行時(shí)Dapr,賦能云原生應(yīng)用開發(fā)

  • YARP實(shí)現(xiàn)Dapr服務(wù)調(diào)用的反向代理

  • Dapr微服務(wù)應(yīng)用開發(fā)系列0:概述

  • Dapr微服務(wù)應(yīng)用開發(fā)系列1:環(huán)境配置

  • Dapr微服務(wù)應(yīng)用開發(fā)系列2:Hello World與SDK初接觸

  • Dapr微服務(wù)應(yīng)用開發(fā)系列3:服務(wù)調(diào)用構(gòu)件塊

  • Dapr微服務(wù)應(yīng)用開發(fā)系列4:狀態(tài)管理構(gòu)件塊

  • Dapr微服務(wù)應(yīng)用開發(fā)系列5:發(fā)布訂閱構(gòu)建塊

  • Windows環(huán)境下Dapr入門

  • 云原生 | .NET 5 with Dapr 初體驗(yàn)

  • 通過(guò)Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)

  • 通過(guò)Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(二)——通訊框架講解

  • 通過(guò)Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(三)——一步一步教你如何擼Dapr

  • 通過(guò)Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(四)——一步一步教你如何擼Dapr之訂閱發(fā)布

  • 通過(guò)Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(五)——一步一步教你如何擼Dapr之狀態(tài)管理

  • 通過(guò)Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(六)——一步一步教你如何擼Dapr之Actor服務(wù)

  • 通過(guò)Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(七)——一步一步教你如何擼Dapr之服務(wù)限流

  • 通過(guò)Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(八)——一步一步教你如何擼Dapr之鏈路追蹤

  • 通過(guò)Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(九)——一步一步教你如何擼Dapr之OAuth2授權(quán)

  • 通過(guò)Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(九)——一步一步教你如何擼Dapr之OAuth2授權(quán)-百度版

  • 通過(guò)Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十)——一步一步教你如何擼Dapr之綁定

  • 通過(guò)Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十一)——一步一步教你如何擼Dapr之自動(dòng)擴(kuò)/縮容

  • WebAssembly + Dapr = 下一代云原生運(yùn)行時(shí)?

  • dapr 應(yīng)用開發(fā) | 環(huán)境配置

  • 乘風(fēng)破浪,.Net Core遇見Dapr,為云原生而生的分布式應(yīng)用運(yùn)行時(shí)

  • Dapr案例之高德 Serverless 平臺(tái)建設(shè)及實(shí)踐

總結(jié)

以上是生活随笔為你收集整理的在非容器(集群)环境下运行dapr的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。