部落格自 2019-03-12
創立至 2024-01-25
已歷 1780
天。然而,
在 2024-01-20
又一次發生了部落格的 404
事件,直接導致我的部落格流量急遽下降。
參考 Google Analytics:
值得一提的是,於 2020-03-11
前,Gitlab Pages 已經曾發生過 404
的問題。
為此,我進行了一系列的排查和檢測,最終發現此次問題的原因如下:
首先要知道 Gitlab Pages 預設網域名稱和 URL 的規則是:
使用者頁面 -
1 | http(s)://username.gitlab.io |
專案內的存取頁面網誌直接變成 -
1 | https://morosedog.gitlab.io/morosedog.gitlab.io |
造成網址變成非使用者頁面的情況下,就是專案名與使用者名稱不匹配造成的。
然而,我的專案名已經保持 1780
天沒變過啊!
所以問題就是 Gitlab 更新了什麼?
透過查閱 Gitlab issues,確實發現問題發生當下的幾天內,有不少使用者也遭遇此問題。
總結就是使用者名稱中的大小寫,從不敏感變成敏感了。
原本的使用者名稱 MoroseDog
無法匹配 morosedog
。
在問題尚未修復前,將使用者名稱統一為全小寫。
截至 2024-01-25 06:00 UTC+8
,該問題已經被確認修復。
我也親自嘗試修改使用者名稱,確實解決了此問題。
註:儘管問題已經修復,我仍然選擇保持使用者名稱全小寫。
在經歷這次的 GitLab Pages 404 事件後,我深刻體會到即使是成熟的平台,也無法完全避免突發的技術問題。
這次事件提醒了我,作為一名網站管理者,必須隨時準備應對這類意外,並且保持對系統更新和變更的警覺性。
同時,這也凸顯了社群支持和開源平台的力量。在遇到問題時,我們不是孤軍奮戰,而是有一個活躍且支援性強的社群可以依賴。
從 GitLab issues 的迅速回應和修正,我們可以看到開源社群在解決問題時的效率和團結。
最後,這次經歷也讓我再次意識到清晰而一致的命名規則的重要性。無論是在程式碼還是在使用者名稱的設定上,保持一致性可以在很大程度上避免類似的混淆和問題。
總之,雖然這次事件帶來了一定的困擾和流量損失,但從中學習到的經驗和對社群的信任感,是無法用數字衡量的寶貴資產。
這次事件也提醒了我們,技術的不斷變化要求我們不斷學習和適應,這正是科技領域充滿挑戰與興奮的地方。
首先如果沒有MacBook
請直接忽略此文章,如果是使用Android
裝置的話,請自行研究。
iOS
和Android
。Mac
的位置。MacBook
,MacOS 11+
。MacBook
。(可能需要type-c
轉接頭)python3
。pymobiledevice3
套件。Mound Developer Image
。
python3
安裝。<已安裝請跳過>1 | brew install python3 |
📝︎ 此指令是使用
homebrew
進行python3
的安裝。
pymobiledevice3
。<已安裝請跳過>1 | python3 -m pip install -U pymobiledevice3 |
pymobiledevice3
符號連結。1 | ln -s /Users/{user}/Library/Python/3.9/bin/pymobiledevice3 /usr/local/bin/pymobiledevice3 |
📝︎ 注意{user}為使用者名稱變數,路徑的部分請根據自己環境路徑去做調整。
⚠️該部驟主要解決此問題Error : the pymobiledevice3” doesn’t exist.
iOS
行動裝置版本。<此範例版本為 16.5>1 | 前往「設定」-> 「一般」 -> 「關於本機」 -> 「iOS版本」 -> 16.5 |
📝 使處使用
iphone
裝置作為範例。
Xcode
開發工具iOS
版本的調試支援文件版本。1 | /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport |
📝 該目錄下應該存在已經支援的版本目錄。
📝 下載後解壓縮放入即可,可能需要使用最高權限操作。
1 | 前往「設定」->「隱私權與安全性」->「開發者模式」,然後將其切換至開啟狀態。 |
📝 手機會自動重開機,開機完畢後會詢問是否要開啟「開發者模式」,並要求輸入密碼認證。
MacBook
,透過Releases下載已編譯和簽署的應用程式。SimVirtualLocation.dmg
,啟動SimVirtualLocation
。1 | 如果您看到一條警告,警告應用程式已損壞且 Apple 無法檢查開發人員: |
⚠️ 如果還是無法開啟,可以參考此篇瘋先生 - 教你找回macOS內消失的「任何來源」選項!
MacBook
與行動裝置連接。⚠️ 連結後,需要解鎖行動裝置,並「信任此電腦」。
SimVirtualLocation
,點選頁籤Device
,Device
下拉選擇對應的裝置與版本。⚠️ 如果 iOS 裝置未列出,請參考下方的問題排除。
Mount Developer Image
。如看到此畫面表示Mount
成功。A
位置。Set to A
按鈕。Google Map
可以看到位置已經被修改至A
位置上了。😉 是否可以開啟其他應用哪?這應該不用我多說了,像是什麼
Pokémon GO
、Monster Hunter Now
…。
其他的功能,請自行摸索。
❓ Device
下拉選擇沒有對應的裝置與版本:
🐾 嘗試按「Refresh」按鈕重新整理,如果沒有幫助 - 轉到行動裝置上的「設定」->「開發者」,然後按一下「清除受信任的電腦」,再次重新插上傳輸線並按刷重新整理。
❓ No simulators are currently booted
:
🐾 沒有選到Device
頁籤。
❓ ERROR Given image was already mounted
:
🐾 已經完成Mount
成功,不需要再次Mount
,可以直接設置虛擬位置了。
❓︎ NoDeviceConnectedError
:
🐾 請確認連接線是否有接好,或是接觸不良,也有可能是線有問題,可以換一條。
❓︎ Error: Device is locked
:
🐾 行動裝置是鎖定狀態,請解鎖即可。
無教學,請自行研究。
]]>註:以上參考了
Github - nexron171 / SimVirtualLocation
Xcode_Developer_Disk_Images
瘋先生 - 教你找回macOS內消失的「任何來源」選項!
前兩篇示範了如何使用ClickHouse
來消費/推送RabbitMQ
,這是一個強大的組合,可用於處理大量的實時資料和執行複雜的資料分析。然而,所提供的示範僅是一個簡單的入門,而這個領域有很多更深入和高級的主題。
這個組合的應用範圍非常廣泛,從資料分析到實時監控,因此它可能對不同領域的專業人士都有價值。繼續學習和探索,並享受使用ClickHouse
和RabbitMQ
來處理資料的過程。
如果您在實施類似的解決方案時遇到疑問或問題,不要害怕尋求幫助。ClickHouse
和RabbitMQ
都有廣泛的文檔和社區支持,您可以在網路上找到豐富的資源,幫助您解決任何挑戰。此外,許多問題都有可能在技術論壇、博客文章和教程中找到答案。
以下為我列出來在應用上思考到的問題或是「坑」,並實際操作找出問題的解答或是方案。
問題:RabbitMQ Engine 消費/推送兩個物化視圖,使用同一個來源表與目標表會發生什麼事?
解答:可以看到當到第「7」步驟後,會再次觸發上方的第「2」步驟,這將導致一個無限循環,因為訊息的循環傳遞會一直觸發。需要注意避免無限循環。
問題:RabbitMQ Engine 消費/推送,物化視圖來源與目的是否可以跨資料庫?
解答:可以!以下是一個簡單範例。
1 | -- 創建 common 資料庫,如果不存在 |
]]>註:以上參考了
Docker
ClickHouse
ClickHouse - RabbitMQ Engine
博客園 - 渐逝的星光 - clickhouse使用rabbitmq进行实时订阅消费
知乎 - 张琼芳 - 理解 RabbitMQ Exchange
Family with 220 icons by inipagi
我們的需求主要源於對Change Data Capture(CDC)
功能的需求,這種功能允許我們實時捕獲和處理資料更改。CDC
在現代資料處理中變得越來越重要,因為它可以用於許多關鍵業務案例,如實時監控、資料同步和資料分析。
為了實現CDC
,我們尋找了合適的工具和技術,而ClickHouse
提供的Publish
到RabbitMQ
的Engine
正是我們所需要的功能。這個Engine
允許我們將資料更改以實時方式發布到RabbitMQ
消息隊列,然後可以對這些消息進行進一步處理、分析或同步到其他資料存儲系統。這使我們能夠快速且可靠地響應資料更改,並滿足我們的業務需求。
總而言之,選擇了ClickHouse
的CDC
功能,因為它能夠有效地實現我們的實時資料捕獲需求,並為我們提供了一個強大的工具,用於處理資料更改,並支持多種關鍵業務用例。
1 | version: "3.0" |
Docker compose
的詳細說明與相關的設定檔案配置,請參閱Docker Compose - ClickHouse (cluster - CK)與Docker Compose - RabbitMQ。此處是使用瀏覽器開啟Clickhouse-Web-Client
+ RabbitMQ-WebUI
進行測試。
1 | # Clickhouse-Web-Client |
首先於clickhouse-01
和clickhouse-02
建立資料庫、分布式表、RabbitMQ Engine
和MATERIALIZED View
。
1 | -- 創建 test 資料庫,如果不存在 |
註:關於 RabbitMQ ENGINE 的 SETTINGS 可以參考RabbitMQ Engine - Optional parameters
使用Insert into
語法,寫入資料至event
表內
1 | INSERT INTO test.event |
後續使用RabbitMQ-WebUI
進行取得訊息,確定訊息是有被推送。
]]>註:以上參考了
Docker
ClickHouse
ClickHouse - RabbitMQ Engine
博客園 - 渐逝的星光 - clickhouse使用rabbitmq进行实时订阅消费
知乎 - 张琼芳 - 理解 RabbitMQ Exchange
在現代商業環境中,資料是一個無價的資源,它能夠提供深入洞察並驅動重要的決策。對於我們的公司來說,這一點特別重要,因為我們致力於提供高效的資料處理和分析解決方案。然而,隨著業務的快速擴張和客戶基數的不斷增長,我們迫切需要一個強大且高效的資料存儲和分析系統,以應對不斷增長的資料量和復雜性。
我們的業務在資料方面的需求不斷增加,主要表現在以下幾個方面:
實時資料流:我們的應用程序需要能夠處理大量的實時資料流,以保持我們的業務競爭優勢。這包括來自各種源頭的資料,如應用程序日誌、用戶互動、交易記錄等。
複雜的資料分析需求:我們的分析團隊需要能夠執行高級資料分析,以識別趨勢、模式和關聯性,以改進產品和服務。這種分析需要大量的資料存儲和計算能力。
擴展性:我們需要一個系統,能夠無縫地擴展以應對未來的資料增長,而不會引起系統性能下降或故障。
可靠性:由於資料對我們的業務至關重要,我們需要一個高度可靠的系統,能夠確保資料的持久性和可恢復性,以應對突發情況。
鑒於這些需求,我們決定採用ClickHouse與RabbitMQ的結合,以構建一個高效、擴展性強且可靠的資料處理和分析系統。這個結合允許我們實現以下目標:
實時資料處理:RabbitMQ作為我們的消息代理,能夠接受和分發大量的實時資料,而ClickHouse則能夠高效地將這些資料寫入並進行複雜的分析。
擴展性:ClickHouse的分佈式架構和RabbitMQ的佇列系統,使我們能夠輕鬆擴展系統,以處理更多資料和更多用戶。
可靠性:ClickHouse的可持久性和可恢復性特性,以及RabbitMQ的消息確保,確保我們的資料不會丟失,即使發生硬件故障或其他問題。
總之,我們選擇ClickHouse與RabbitMQ的結合是基於我們的業務需求,這個組合不僅滿足了我們的實時資料處理和分析需求,還為我們提供了一個堅固的資料基礎,以支持未來的增長和創新。
1 | version: "3.0" |
Docker compose
的詳細說明與相關的設定檔案配置,請參閱Docker Compose - ClickHouse (cluster - CK)與Docker Compose - RabbitMQ。Clickhouse-Web-Client
+ RabbitMQ-WebUI
進行測試。1 | # Clickhouse-Web-Client |
clickhouse-01
和clickhouse-02
建立資料庫、分布式表、RabbitMQ Engine
和MATERIALIZED View
。1 | -- 創建 test 資料庫,如果不存在 |
註:關於 RabbitMQ ENGINE 的 SETTINGS 可以參考RabbitMQ Engine - Optional parameters
RabbitMQ-WebUI
進行推送訊息。event
表看到消費並寫入的資料。]]>註:以上參考了
Docker
ClickHouse
ClickHouse - RabbitMQ Engine
博客園 - 渐逝的星光 - clickhouse使用rabbitmq进行实时订阅消费
知乎 - 张琼芳 - 理解 RabbitMQ Exchange
RabbitMQ
是一個開源的消息代理軟件,用於實現異步通信和消息傳遞。它遵循AMQP
(高級消息佇列協議)標準,這是一個開放的通信協議,用於消息佇列的管理和消息交換。
消息佇列:RabbitMQ
允許消息的發送者(生產者)將消息放入佇列,然後由接收者(消費者)從該佇列中獲取消息,實現異步通信。
可擴展性:RabbitMQ
支持集群部署,實現高可用性和負載均衡。
消息路由:RabbitMQ
具有靈活的消息路由機制,支持多種消息路由模式,包括發布/訂閱和工作佇列。
消息持久性:RabbitMQ
可配置以確保消息的持久性,即使伺服器重新啟動也不會丟失。
管理界面:提供Web管理界面,用於監控和管理RabbitMQ
伺服器的佇列、交換機和連接。
RabbitMQ
廣泛應用於多種場景,包括:
微服務架構中的異步通信。
後台任務處理,例如圖像處理和文件處理。
即時通信應用,如聊天和通知系統。
數據分發和日誌處理。
RabbitMQ
為應用程序提供了一個強大的消息傳遞和佇列管理解決方案,有助於實現分布式系統和異步通信。
1 | version: '3.3' |
3.3
。services
名稱為rabbitmq
。 rabbitmq:3.12-management
映像。rabbitmq
。rabbitmq
。SOURCE:TARGET
)。5672
、5672
(格式為HOST:CONTAINER
)。15672
、15672
(格式為HOST:CONTAINER
)。rabbitmq-web-ui
進行測試。1 | http://127.0.0.1:15672 |
guest/guest
。注意:此處的帳號密碼對照
docker compose
的RABBITMQ_DEFAULT_USER
與RABBITMQ_DEFAULT_PASS
環境變數設定。
Queues and Streams
頁籤Add a new queue
輸入name
,並按下Add queue
按鈕建立。註:此使用
test
名稱。
test
的Queue
。Publish message
與Get messages
的操作。如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。
]]>註:以上參考了
Docker
RabbitMQ
stack overflow - Docker RabbitMQ persistency
此篇主要是針對ClickHouse
提供使用ClickHouse Keeper
建立集群Docker Compose
的內容。
為何使用ClickHouse Keeper
,主要是官方建議使用它的ClickHouse keeper
,官方的詳細說明連結
此處直接使用Docker hub
上的clickhouse/clickhouse-server:23.5.3.24。
另外有在多掛Docker hub
上的spoonest/clickhouse-tabix-web-client。
1 | version: "3.3" |
3.3
。services
名稱為clickhouse01
。 clickhouse/clickhouse-server:23.5.3.24
映像。clickhouse-01
。SOURCE:TARGET
)。8123
、8123
(格式為HOST:CONTAINER
)。9000
、9000
(格式為HOST:CONTAINER
)。9181
、9181
(格式為HOST:CONTAINER
)。networks
名稱)。services
名稱為clickhouse02
。 clickhouse/clickhouse-server:23.5.3.24
映像。clickhouse-02
。SOURCE:TARGET
)。8124
、8123
(格式為HOST:CONTAINER
)。9001
、9000
(格式為HOST:CONTAINER
)。9182
、9181
(格式為HOST:CONTAINER
)。networks
名稱)。services
名稱為tabix-web-client
。 spoonest/clickhouse-tabix-web-client
映像。tabix-web-client
。services
名稱)。8080
、80
(格式為HOST:CONTAINER
)。networks
名稱)。/etc/clickhouse-server/config.xml
/etc/clickhouse-server/users.xml
/var/lib/clickhouse
/var/log/clickhouse-server/clickhouse-server.log
/var/log/clickhouse-server/clickhouse-server.err.log
1 | . |
以下設定檔皆使用內置的默認文件進行修改,並使用volumes
去掛載。
1 | 無異動 |
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 | 無異動 |
1 | 無異動 |
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 | 無異動 |
注意:以上設定和配置「可能」不完全有作用或是正確,目前僅提供當前可運作的設定,建議還是根據官方文件進行調整。
註:可參考官方文件Configuration Files、Global Server Settings、User Settings
此處是使用瀏覽器開啟web-client
進行測試。
1 | http://127.0.0.1:8080 |
連線配置
注意:[http://host:port *]這個要輸入位置,不要看畫面好像有輸入了就不輸入,那只是個
placeholder
。
注意:預設的使用者為default
密碼為空。可見users.xml
配置。
注意:[HTTP Base auth],如果無法連入可以勾選或取消勾選試試看。
相關的語法:
注意:語法結束符號為
;
,當你要執行多行指令的時候會出錯,請使用;;
,該問題應該是web-client
的問題。
首先於clickhouse-01
和clickhouse-02
建立資料庫與分布式表。
1 | -- 建立資料庫 |
於clickhouse-01
執行寫入示範資料,並查詢。
1 | -- 寫入示範資料 |
於clickhouse-02
執行並查詢,可見資料已經同步。
1 | -- 查詢資料 |
如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。
]]>註:以上參考了
Docker
ClickHouse
Github - mr-karan - clickhouse-keeper-example
dbeaver
此篇主要是針對ClickHouse
提供使用ZooKeeper
建立集群Docker Compose
的內容。
可以參考上一篇的介紹Docker Compose - ClickHouse (single)
為何使用ZooKeeper
,主要是當前的其他集群服務都有在使用ZooKeeper
,為了不浪費資源所以就共同使用。
但是官方是建議使用它的ClickHouse keeper
,官方的詳細說明連結
此處直接使用Docker hub
上的clickhouse/clickhouse-server:23.5.3.24 與 confluentinc/cp-zookeeper:7.4.0 。
另外有在多掛Docker hub
上的spoonest/clickhouse-tabix-web-client。
docker-compose.yml
1 | version: "3.3" |
説明:
3.3
。services
名稱為clickhouse01
。 clickhouse/clickhouse-server:23.5.3.24
映像。clickhouse-01
。services
名稱)。SOURCE:TARGET
)。8123
、8123
(格式為HOST:CONTAINER
)。9011
、9011
(格式為HOST:CONTAINER
)。9004
、9004
(格式為HOST:CONTAINER
)。9005
、9005
(格式為HOST:CONTAINER
)。networks
名稱)。services
名稱為clickhouse02
。 clickhouse/clickhouse-server:23.5.3.24
映像。clickhouse-02
。services
名稱)。SOURCE:TARGET
)。8223
、8223
(格式為HOST:CONTAINER
)。9211
、9211
(格式為HOST:CONTAINER
)。9204
、9204
(格式為HOST:CONTAINER
)。9205
、9205
(格式為HOST:CONTAINER
)。networks
名稱)。services
名稱為zookeeper
。 confluentinc/cp-zookeeper:7.4.0
映像。zkserver
。2181
、2181
(格式為HOST:CONTAINER
)。SOURCE:TARGET
)。networks
名稱)。services
名稱為tabix-web-client
。 spoonest/clickhouse-tabix-web-client
映像。tabix-web-client
。services
名稱)。8080
、80
(格式為HOST:CONTAINER
)。networks
名稱)。註:關於
zookeeper
環境變數可以參考。
/etc/clickhouse-server/config.xml
/etc/clickhouse-server/users.xml
/var/lib/clickhouse
/var/log/clickhouse-server/clickhouse-server.log
/var/log/clickhouse-server/clickhouse-server.err.log
1 | . |
以下設定檔皆使用內置的默認文件進行修改,並使用volumes
去掛載。
1 | <tcp_port>9011</tcp_port> |
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 | 無異動 |
1 |
|
1 | <http_port>8223</http_port> |
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 | 無異動 |
1 |
|
注意:以上設定和配置「可能」不完全有作用或是正確,目前僅提供當前可運作的設定,建議還是根據官方文件進行調整,像是這邊就沒有使用分片的集群設定。
註:可參考官方文件Configuration Files、Global Server Settings、User Settings
此處是使用瀏覽器開啟web-client
進行測試。
1 | http://127.0.0.1:8080 |
連線配置
注意:[http://host:port *]這個要輸入位置,不要看畫面好像有輸入了就不輸入,那只是個
placeholder
。
注意:使用者為clickhouse
密碼為clickhouse1234
。可見user-custom.xml
配置。
注意:[HTTP Base auth],如果無法連入可以勾選或取消勾選試試看。
相關的語法:
注意:語法結束符號為
;
,當你要執行多行指令的時候會出錯,請使用;;
,該問題應該是web-client
的問題。
首先於clickhouse-01
和clickhouse-02
建立資料庫與分布式表。
1 | -- 建立資料庫 |
於clickhouse-01
執行寫入示範資料,並查詢。
1 | -- 寫入示範資料 |
於clickhouse-02
執行並查詢,可見資料已經同步。
1 | -- 查詢資料 |
如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。
]]>註:以上參考了
Docker
ClickHouse
dbeaver
ClickHouse
是列為導向(column-oriented
)儲存的資料庫系統(database management system, DBMS
),並用來於OLAP
(online analytical processing
)線上分析處理的查詢。ClickHouse
是由俄羅斯IT
公司Yandex
為Yandex.Metrica
網路分析服務開發的,且ClickHouse
允許分析即時更新的資料,以及該資料庫系統以高效能為目標。如要深入了解列為導向和行為導向的說明,參考官方文件:什麼是ClickHouse?
另外這邊使用Clickhouse
的開源簡單商業智能應用程序和SQL
編輯器工具。spoonest/clickhouse-tabix-web-client
此處直接使用Docker hub
上的clickhouse/clickhouse-server:23.5.3.24。
另外有在多掛Docker hub
上的spoonest/clickhouse-tabix-web-client。
1 | version: "3.3" |
3.3
。services
名稱為clickhouse
。 clickhouse/clickhouse-server:23.5.3.24
映像。clickhouse
。8123
、8123
(格式為HOST:CONTAINER
)。9000
、9000
(格式為HOST:CONTAINER
)。9004
、9004
(格式為HOST:CONTAINER
)。9005
、9005
(格式為HOST:CONTAINER
)。9009
、9009
(格式為HOST:CONTAINER
)。services
名稱為tabix-web-client
。 spoonest/clickhouse-tabix-web-client
映像。tabix-web-client
。8080
、80
(格式為HOST:CONTAINER
)。/etc/clickhouse-server/config.xml
/etc/clickhouse-server/users.xml
/var/lib/clickhouse
/var/log/clickhouse-server/clickhouse-server.log
/var/log/clickhouse-server/clickhouse-server.err.log
以下設定檔皆使用內置的默認文件,並沒有使用volumes
去掛載和修改配置。
/etc/clickhouse-server/config.xml
clickhouse
的對外的port
、用户設定、配置文件…等等。此處文件也適用默認配置。1 | <!-- |
/etc/clickhouse-server/users.xml
註:可參考官方文件User Settings
1 | <clickhouse> |
此處是使用瀏覽器開啟web-client
進行測試。
1 | http://127.0.0.1:8080 |
連線配置
注意:[http://host:port *]這個要輸入位置,不要看畫面好像有輸入了就不輸入,那只是個
placeholder
。
注意:預設的使用者為default
密碼為空。可見users.xml
配置。
注意:[HTTP Base auth],如果無法連入可以勾選或取消勾選試試看。
相關的語法:
注意:語法結束符號為
;
,當你要執行多行指令的時候會出錯,請使用;;
,該問題應該是web-client
的問題。
1 | -- 建立資料庫 |
如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。
]]>註:以上參考了
Docker
ClickHouse
dbeaver
此篇主要是針對Cassandra
提供集群的Docker Compose
的內容。
可以參考上一篇的介紹Docker Compose - Cassandra (single)
此處直接使用Docker hub
上的cassandra:latest。
docker-compose.yml
1 | version: '3.3' |
説明:
3.3
。services
名稱為cassandra-1
。 cassandra:latest
映像。cassandra-1
。7000
、7000
(格式為HOST:CONTAINER
)。7001
、7001
(格式為HOST:CONTAINER
)。9042
、9042
(格式為HOST:CONTAINER
)。9160
、9160
(格式為HOST:CONTAINER
)。SOURCE:TARGET
)。services
名稱為cassandra-2
。 cassandra:latest
映像。cassandra-2
。7002
、7000
(格式為HOST:CONTAINER
)。7003
、7001
(格式為HOST:CONTAINER
)。9043
、9042
(格式為HOST:CONTAINER
)。9161
、9160
(格式為HOST:CONTAINER
)。SOURCE:TARGET
)。services
名稱為cassandra-3
。 cassandra:latest
映像。cassandra-3
。7004
、7000
(格式為HOST:CONTAINER
)。7005
、7001
(格式為HOST:CONTAINER
)。9044
、9042
(格式為HOST:CONTAINER
)。9162
、9160
(格式為HOST:CONTAINER
)。SOURCE:TARGET
)。註:關於環境變數可以參考。
此處是進入容器並使用cqlsh
進行測試。
註:如果有此錯誤
Connection error: ('Unable to connect to any servers', {'127.0.0.1:9042': ConnectionRefusedError(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})
,表示Cassandra
還沒有完全啟動完畢,請稍等一下再次下cqlsh
指令即可。
相關的語法:
1 | -- 建立 test keyspace |
註記:replication_factor 注意到是設定 3。
主要是在不同的容器內,建立表、新增、刪除資料看是否有同步。
如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。
]]>
Cassandra
在NoSQL
裡面也算是小有名氣,稍微介紹Cassandra
為Facebook
原為了應對電子郵件的查詢效能所設計出來,結合Google Big Table
與Amazon DynamoDB
的資料模型與分散式架構所設計,於2008
年開放原始程式,因其良好的延伸性與效能被各大網站所使用,成為了目前最流行的分散式資料儲存架構的方案之一。
最主要強調他的高可用、沒有單點故障、簡單擴充。
註:該篇文章教學為單節點。
另外Cassandra
提供一個定義接近SQL
的語法The Cassandra Query Language (CQL)
,採用table/row/column
等相同定義的名稱去描述Cassandra
的Data Model
,讓使用者可以更快速的學習使用它。
此處直接使用Docker hub
上的cassandra:latest。
1 | version: '3.3' |
3.3
。services
名稱為cassandra
。 cassandra:latest
映像。cassandra
。9042
、9042
(格式為HOST:CONTAINER
)。SOURCE:TARGET
)。此處是進入容器並使用cqlsh
進行測試。
註:如果有此錯誤
Connection error: ('Unable to connect to any servers', {'127.0.0.1:9042': ConnectionRefusedError(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})
,表示Cassandra
還沒有完全啟動完畢,請稍等一下再次下cqlsh
指令即可。
相關的語法:
1 | -- 建立 test keyspace |
如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。
]]>
Redis
在NoSQL
來說應該都不陌生,在「大量/巨量資料處理」或是「快取」上面的需求想必都有使用過。
主要原因傳統的資料庫普遍上效能低落,而且隨著資料量以及關聯的遞增,資料庫的搜尋效率會越低,後面的速度甚至會呈現等比遞減。
此處直接使用Docker hub
上的redis:6.2.13。
註:版本可以在下載區看到版本通知內容。Version Release Notes
1 | version: '3.3' |
3.3
。services
名稱為redis
。redis:6.2.13
映像。myredis
。myredis
。6379
、6379
(格式為HOST:CONTAINER
)。SOURCE:TARGET
)。註:關於指令
AOF
可以參考。
redis-cli
進行測試。註:推薦使用
Another Redis Desktop Manager
Github
如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。
]]>
在Git
還沒有現世之前,就有在接觸開發並使用版本控制系統的人,一定有接觸過Subversion
簡稱SVN
。
當然新一代的工程師們「可能」沒有接觸使用過該版本控制系統。可以參閱
此處直接使用Docker hub
上的mamohr/subversion-edge。
1 | version: '3.3' |
3.3
。services
名稱為svn
。mamohr/subversion-edge
映像。svn
。svn
。3343
、3343
(格式為HOST:CONTAINER
)。4434
、4434
(格式為HOST:CONTAINER
)。18080
、18080
(格式為HOST:CONTAINER
)。SOURCE:TARGET
)。SVN Admin
進行啟動、配置…等等操作。1 | http://127.0.0.1:3343/ |
1 | admin/admin |
SVN Command
的方式指令參考。SVN GUI
工具 - 註:只有 Windows 版本。
註:支援 Windows, macOS, Linux。
如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。
]]>
我想有開發分布式系統的工程師們,對「Message queue
」、「MQ
」、「訊息佇列」、「訊息中間件」、「分佈式訊息隊列」…這些詞應該都不陌生吧?!
不知道?可以參考Wiki-訊息佇列。
至於Message queue
能用來幹嘛?之後有時間再來寫篇文章介紹。
可以先看看官方提供的特性和保證。
此處直接使用Docker hub
上的nsqio/nsq。
官方網站也有提供較完整的說明,可以參考NSQ - DOCKER。
官方也有提供一個Docker compose
範本,但是我這邊有多加一個參數,所以有些微不一樣。
1 | version: '3' |
3
。services
名稱為nsqlookupd
。nsqio/nsq
映像。註:
-broadcast-address
如果需要外網訪問,必須設置這個參數為對外ip地址。
4160
、4160
(格式為HOST:CONTAINER
)。services
名稱為nsqd
。nsqio/nsq
映像。nsqlookupd
啟動後)8080
(格式為HOST:CONTAINER
)。4150
、4151
(格式為HOST:CONTAINER
)。services
名稱為nsqadmin
。nsqio/nsq
映像。nsqlookupd
啟動後)4171
(格式為HOST:CONTAINER
)。註:以上命名都是由NSQ Docker compose定義,請自行查閱。
建立Topic
參考:
1 | curl -X POST http://127.0.0.1:4151/topic/create?topic=public |
進入nsq-nsqadmin-1
容器:
1 | docker exec -it nsq-nsqadmin-1 sh |
於nsq-nsqadmin-1
容器內使用nsq_to_file
工具做簡單的消費者:
1 | nsq_to_file --topic=public --channel=t1 --output-dir=/data/ --nsqd-tcp-address=nsq-nsqd-1:4150 |
發送Message
參考:
1 | curl -d "Hello" http://127.0.0.1:4151/pub?topic=public |
回到nsq-nsqadmin-1
容器,檢視消費的log內容:
1 | cat ./public.27d746892aac.2023-06-06_02.log |
註:檔案名稱可能不一樣。
如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。
]]>
之前在開發一個一些套件的時候,對於函式庫的部分會需要手動上傳至特定的目錄,最常想到的就是透過FTP
或是Python
的Server
,一般情況下這樣就夠用了,但是再給多人使用的時候,希望有一個權限控管、UI畫面…等等的需求,這時候就可以用MiniServe
來解決這個問題。
此處直接使用Docker hub
上的svenstaro/miniserve。
1 | version: '3.3' |
3.3
。services
名稱為miniserve
。svenstaro/miniserve
映像。8080
(格式為HOST:CONTAINER
)。SOURCE:TARGET
)。註:以上命名都是由Github miniserve定義,請自行查閱。
如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。
]]>
常見與第三方服務做對接的時候,遇到沒有文件、格式錯誤…等等的常見問題。而在開發初期並無法立即搭建好環境提供給對方做呼叫。
此時使用BlackHole
建置企一個服務,並提供對應的位址給對方,而在BlackHole
裡面做的紀錄就是對方所帶的像是 -
URL Path
HTTP method
Headers
Body
舉例:
1 | curl --location --request GET 'http://127.0.0.1:9999/test/' \ |
紀錄:
1 | GET /test/ |
使用nods.js
的blackhole-server
套件來建置,可以參考:blackhole-server
使用DockerFile
建置。
1 | # OS: Debian Buster |
説明:
node 14.4.0
映像開始構建映像。blackhole-server
9999
端口。blackhole-server
。To Build:
1 | $ docker build -t blackhole-server:v1 . |
1 | version: '2' |
2
。services
名稱為blackhole
。blackhole-server:v1
映像。9999
(格式為HOST:CONTAINER
)。此處省略了Build Dockerfile
的環節。
如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。
]]>註:以上參考了
Docker
blackhole-server
由於工作上常使用到Docker
建置開發的環境,並且會有很多服務需要一起啟動…等等,所以有一大堆的Docker-compose
,再一次的電腦重新升級與安裝後,就想要將其整理上來部落格做個留存。另外在下面會根據官方的違建,做一些簡單的說明,後面就會將各種的服務直接分享上來。
如需要更深入學習和了解Docker
和Docker-compose
,建議在官方上做學習或是其他的菜鳥教學都可以很好的理解學習。
註:更多更詳細的介紹,或是問題的解決,請自行上網找尋唷。
注意:
Compose V1
不再接收更新,並且在2023年6月
之後將在Docker Desktop
的新版本中不可用。Compose V2
包含在Docker Desktop
的所有當前支持版本中。註:有關更多信息請參見V2。
另外版本之間的差異和升級,可以參考Legacy versions。
Docker
應用程序的工具。docker-compose.yaml
的YAML
文件來配置應用程序的服務。docker compose up
,可以從您的配置創建並啟動所有服務。它還具有用於管理應用程序整個生命週期的命令:
Compose
使其有效的關鍵特徵是:
註:上面這些特性或許不能夠透過簡單幾句話就理解,建議身體例行,直接照著官方的 getting started 來學習。
以下是目前預計會整理分享上來的服務清單<部分有區分單節點與集群>:
HTTP
服務器,它捕獲所有的東西並記錄下來)CLI
工具,可通過HTTP提供文件和目錄)NSQ
是一個基於Go
語言的分佈式實時消息平台。Apache Subversion
,一個開放原始碼的版本控制系統。Redis
是一個使用ANSI C
編寫的開源、支援網路、基於記憶體、分散式、可選永續性的鍵值對儲存資料庫。Apache Cassandra
是一套開源分散式NoSQL
資料庫系統。ClickHouse
是一個用於線上分析處理的開源列式資料庫。RabbitMQ
是實現了進階訊息佇列協定的開源訊息代理軟體。PostgreSQL
是一個開源的物件-關聯式資料庫管理系統。Kafka
是由Apache
軟體基金會開發的一個開源流處理平台。Tarantool
是一個開源的NoSQL
資料庫管理系統和Lua
應用伺服器。Apache ZooKeeper
為大型分散式計算提供開源的分散式組態設定服務、同步服務和命名註冊。Elasticsearch
是一個基於Lucene
庫的搜尋引擎。MariaDB
是MySQL
關聯式資料庫管理系統的一個復刻,由社群開發、商業支援,旨在保持在GNU GPL
下開源。NATS
是一個開源消息傳遞系統。MySQL
原本是一個開放原始碼的關聯式資料庫管理系統。MongoDB
是一種文件導向的資料庫管理系統。Nginx
是非同步框架的網頁伺服器,也可以用作反向代理、負載平衡器和HTTP
快取。TimescaleDB
是由Timescale Inc.
開發的開源時間序列數據庫。註:以上僅僅是部分…後面有機會會慢慢補充。
]]>