ClickHouse生產環境部署

来源:https://www.cnblogs.com/wintersun/p/18348694
-Advertisement-
Play Games

背景ClickHouse是一個面向分析型的開源列式資料庫管理系統,它主要應用於以下幾個場景: 數據倉庫和商業智能分析:ClickHouse擅長處理大規模的數據,可以用於構建企業級的數據倉庫,支持複雜的OLAP查詢,可用實時數倉,適合各種商業分析和報表應用。 實時分析和監控:ClickHouse以毫秒 ...


背景

ClickHouse是一個面向分析型的開源列式資料庫管理系統,它主要應用於以下幾個場景:

數據倉庫和商業智能分析:ClickHouse擅長處理大規模的數據,可以用於構建企業級的數據倉庫,支持複雜的OLAP查詢,可用實時數倉,適合各種商業分析和報表應用。
實時分析和監控:ClickHouse以毫秒級的響應時間處理大量數據,非常適合實時監控、異常檢測和故障預警等場景。
Web分析:ClickHouse可以採集和分析網站訪問日誌,計算各種指標如UV、PV、跳出率等,為網站運營提供數據支持。
用戶行為分析:精細化運營分析,日活,留存率分析,路徑分析,有序漏斗轉化率分析,Session 分析等。
物聯網數據分析:ClickHouse可以處理海量的感測器數據,用於分析設備運行狀況、預測故障等。
廣告技術:ClickHouse可以處理廣告點擊、展示等海量數據,為廣告優化和效果分析提供支持。
金融交易分析:ClickHouse可以處理交易數據,為金融市場分析提供實時計算能力,欺詐檢測,低延遲查詢對於識別任何欺詐活動和防止損失。
游戲數據分析:ClickHouse可以收集和分析游戲用戶行為數據,為游戲運營和產品優化提供依據。
酒店管理行業:利用 ClickHouse 瞭解最新的預訂、定價、收入和物業績效信息。製造商在 ClickHouse 資料庫的基礎上建立物流規劃系統。
媒體和娛樂公司:使用 ClickHouse 監控流媒體質量、管理廣告投放和推送個性化促銷信息。
雲服務提供商: ClickHouse 的基礎上建立雲資源監控和網路分析。

它是一個資料庫: 資料庫既有存儲引擎,也有查詢引擎。ClickHouse 可以有效地從各種來源獲取數據,其查詢引擎可提供低延遲查詢響應。
它是一個 OLAP 資料庫: 線上分析處理(OLAP)資料庫不是為支持正常業務交易而設計的。它專門用於分析大量業務記錄,側重於讀取和計算,而較少用於寫入和事務處理。
它是一種面向列的 OLAP 資料庫: 面向列的存儲是分析型資料庫事實上的存儲格式,因為分析查詢會讀取大量記錄,但只對有限的列感興趣。在這種情況下,列式存儲比傳統的面向行存儲更有效。


部署架構

       數據分片和複製是完全獨立的。分片是 ClickHouse 的自然組成部分,而複製則主要依賴於 Zookeeper,後者用於通知複製的狀態變化。

image

或者是

image


生產環境部署提示

提示1: 使用多個副本
       在測試ClickHouse時,部署只有一個主機的配置是很自然的,因為可能不想使用額外的資源或承擔不必要的費用。在開發或測試環境中沒有什麼問題,但如果只想在生產環境中使用一個主機,這可能會有代價。如果發生故障,而只有一個副本和一個主機,就面臨著丟失所有數據的風險。 對於生產環境, 應該使用多個主機併在它們之間複製數據。這不僅可以確保主機失敗時數據仍然安全,還可以在多個主機上平衡用戶負載,從而使資源密集型查詢更快。

提示2: 不要吝惜RAM記憶體
      ClickHouse很快,但其速度取決於可用資源,特別是RAM記憶體。在開發或測試環境中運行ClickHouse集群時,即使使用最小RAM量也可以看到很好的性能,但當負載增加時可能會發生變化。在一個擁有大量同時讀寫操作的生產環境中,RAM不足會更加明顯。如果您的ClickHouse集群沒有足夠的記憶體,它將更慢,執行複雜查詢也會花更長時間。 此外,當ClickHouse執行資源密集型操作時,它可能會與操作系統本身爭奪RAM,最終導致OOM、宕機和數據丟失。ClickHouse的開發者建議使用至少16 GB的RAM來確保集群穩定。您可以選擇更少的記憶體,但前提是您知道負載不會很高。

提示3:三思而後行-選擇表引擎
       ClickHouse支持幾種具有不同特性的表引擎,但MergeTree引擎很可能是理想的選擇。專門的表是為特定用途而設計的,但它們也有一些可能不太明顯的局限性。Log Family引擎可能看起來適合日誌,但它們不支持複製,並且資料庫大小有限制。MergeTree家族的表引擎是預設選擇,它們提供了ClickHouse所知名的核心數據功能。除非您確定需要不同的表引擎, 否則使用MergeTree家族的引擎就可以覆蓋大多數用例。

MergeTree結構

image


  • ReplacingMergeTree: 會根據主鍵進行去重,但是這是後臺合併時才會去重,無法控制合併時機,儘管可以用 OPTIMIZE … FINAL 語句來強制合併執行,但是由於性能原因一般不會使用。
  • CollapsingMergeTree: 非同步的刪除(摺疊)這些除了特定列 Sign 有 1 和 -1 的值以外,其餘所有欄位的值都相等的成對的行。沒有成對的行會被保留。
  • VersionedCollapsingMergeTree: 類似於 CollapsingMergeTree, 多了 Version 列,支持多線程亂序插入的場景,相比之下, CollapsingMergeTree 只允許嚴格連續插入。
  • AggregatingMergeTree: 做增量數據的聚合統計,包括物化視圖的數據聚。
  • ReplicatedXXXMergeTree: 使得以上 MergeTree 家族擁有副本機制,保證高可用,用於生產環境

提示4:主鍵不要超過三列
       ClickHouse中的主鍵與傳統資料庫中的主鍵作用不同。它們不保證唯一性,而是定義了數據的存儲和檢索方式。如果將所有列都用作主鍵,可能會獲得更快的查詢速度。但ClickHouse的性能不僅取決於讀取數據,也取決於寫入數據。當主鍵包含許多列時,向集群寫入數據會減慢整個速度。ClickHouse中主鍵的最佳大小是兩個或三個列,這樣既可以更快地進行查詢,又不會減慢數據插入速度。選擇列時,請考慮將要進行的請求,選擇經常用於過濾條件的列。

提示5:避免小量插入
      當在ClickHouse中插入數據時,它首先會將此數據保存到磁碟上的一個部分。然後它會對這些數據進行排序、合併,併在後臺將其插入到資料庫的合適位置。如果頻繁插入小塊數據,ClickHouse將為每個小插入創建一個部分,這將減慢整個集群的速度,可能會遇到"太多部分"的錯誤。要高效地插入數據,請以大塊的方式添加數據,並避免每秒發送多個插入語句。ClickHouse可以以很高的速度(每秒100K行也可以)插入大量數據,但這應該是一個批量插入,而不是多個較小的插入。 如果的數據來源很小,可以考慮使用外部系統(如托管的Kafka)來製作數據批次。ClickHouse與Kafka集成良好,可以有效地從中消費數據。

提示6:考慮如何刪除重覆數據
      ClickHouse中的主鍵不能確保數據的唯一性。與其他資料庫不同,如果在ClickHouse中插入重覆數據,它將被原樣添加。因此,最好的選擇是在插入數據之前確保數據是唯一的。可以在像Apache Kafka這樣的流處理應用程式中完成。如果做不到這一點,在運行查詢時也有辦法處理重覆數據。一種選擇是使用argMax僅選擇最新版本的重覆行。您也可以使用ReplacingMergeTree引擎,它會根據設計刪除重覆條目。最後,可以運行`OPTIMIZE TABLE ... FINAL`來合併數據部分,但這是一個資源密集型操作,只應在知道它不會影響集群性能的情況下運行。

提示7:不要為每個列創建索引
      與主鍵一樣,可能想使用多個索引來提高性能。當使用與索引匹配的過濾器查詢數據時,這可能是有用的。但整體上它不會幫助您加快查詢速度。與此同時,肯定會遇到這種策略的缺點。多個索引會顯著減慢數據插入,因為ClickHouse需要將數據寫入正確的位置,然後更新索引。 當想在生產集群中創建索引時,請選擇與主鍵相關的列。

image

ClickHouse 的主鍵索引採用的是稀疏索引,將每列數據按照 index granularity(預設8192行)進行劃分。稀疏索引的好處是條目相對稠密索引較少,能夠將其載入到記憶體,而且對插入時建立索引的成本相對較小。
ClickHouse 數據按列進行存儲,每一列都有對應的 mrk 標記文件,bin 文件。mrk 文件與主鍵索引對齊,主要用於記錄數據在 bin 文件中的偏移量信息。


生產環境部署示例-四節點代理集群

部署架構

4 個 ClickHouse 實例利用 3 個專用 ClickHouse Keepers 和 CH 代理負載均衡器
2 個具有複製的分片:
跨分片 01 的 clickhouse-01 和 clickhouse-03
跨分片 02 的 clickhouse-02 和 clickhouse-04

image

https://github.com/ClickHouse/examples/blob/main/docker-compose-recipes/recipes/cluster_2S_2R_ch_proxy/docker-compose.yaml

version: '3.8'
services:
   clickhouse-01:
     image: "clickhouse/clickhouse-server:${CHVER:-latest}"
     user: "101:101"
     container_name: clickhouse-01
     hostname: clickhouse-01
     networks:
       cluster_2S_2R_ch_proxy:
         ipv4_address: 192.168.9.1
     volumes:
       - ${PWD}/fs/volumes/clickhouse-01/etc/clickhouse-server/config.d/config.xml:/etc/clickhouse-server/config.d/config.xml
       - ${PWD}/fs/volumes/clickhouse-01/etc/clickhouse-server/users.d/users.xml:/etc/clickhouse-server/users.d/users.xml
     ports:
       - "127.0.0.1:8123:8123"
       - "127.0.0.1:9000:9000"
     depends_on:
       - clickhouse-keeper-01
       - clickhouse-keeper-02
       - clickhouse-keeper-03
   clickhouse-02:
     image: "clickhouse/clickhouse-server:${CHVER:-latest}"
     user: "101:101"
     container_name: clickhouse-02
     hostname: clickhouse-02
     networks:
       cluster_2S_2R_ch_proxy:
         ipv4_address: 192.168.9.2
     volumes:
       - ${PWD}/fs/volumes/clickhouse-02/etc/clickhouse-server/config.d/config.xml:/etc/clickhouse-server/config.d/config.xml
       - ${PWD}/fs/volumes/clickhouse-02/etc/clickhouse-server/users.d/users.xml:/etc/clickhouse-server/users.d/users.xml
     ports:
       - "127.0.0.1:8124:8123"
       - "127.0.0.1:9001:9000"
     depends_on:
       - clickhouse-keeper-01
       - clickhouse-keeper-02
       - clickhouse-keeper-03
   clickhouse-03:
     image: "clickhouse/clickhouse-server:${CHVER:-latest}"
     user: "101:101"
     container_name: clickhouse-03
     hostname: clickhouse-03
     networks:
       cluster_2S_2R_ch_proxy:
         ipv4_address: 192.168.9.3
     volumes:
       - ${PWD}/fs/volumes/clickhouse-03/etc/clickhouse-server/config.d/config.xml:/etc/clickhouse-server/config.d/config.xml
       - ${PWD}/fs/volumes/clickhouse-03/etc/clickhouse-server/users.d/users.xml:/etc/clickhouse-server/users.d/users.xml
     ports:
       - "127.0.0.1:8125:8123"
       - "127.0.0.1:9002:9000"
     depends_on:
       - clickhouse-keeper-01
       - clickhouse-keeper-02
       - clickhouse-keeper-03
   clickhouse-04:
     image: "clickhouse/clickhouse-server:${CHVER:-latest}"
     user: "101:101"
     container_name: clickhouse-04
     hostname: clickhouse-04
     networks:
       cluster_2S_2R_ch_proxy:
         ipv4_address: 192.168.9.4
     volumes:
       - ${PWD}/fs/volumes/clickhouse-04/etc/clickhouse-server/config.d/config.xml:/etc/clickhouse-server/config.d/config.xml
       - ${PWD}/fs/volumes/clickhouse-04/etc/clickhouse-server/users.d/users.xml:/etc/clickhouse-server/users.d/users.xml
     ports:
         - "127.0.0.1:8126:8123"
         - "127.0.0.1:9003:9000"
     depends_on:
       - clickhouse-keeper-01
       - clickhouse-keeper-02
       - clickhouse-keeper-03
   clickhouse-keeper-01:
     image: "clickhouse/clickhouse-keeper:${CHKVER:-latest-alpine}"
     user: "101:101"
     container_name: clickhouse-keeper-01
     hostname: clickhouse-keeper-01
     networks:
       cluster_2S_2R_ch_proxy:
         ipv4_address: 192.168.9.5
     volumes:
       - ${PWD}/fs/volumes/clickhouse-keeper-01/etc/clickhouse-keeper/keeper_config.xml:/etc/clickhouse-keeper/keeper_config.xml
     ports:
         - "127.0.0.1:9181:9181"
   clickhouse-keeper-02:
     image: "clickhouse/clickhouse-keeper:${CHKVER:-latest-alpine}"
     user: "101:101"
     container_name: clickhouse-keeper-02
     hostname: clickhouse-keeper-02
     networks:
       cluster_2S_2R_ch_proxy:
         ipv4_address: 192.168.9.6
     volumes:
       - ${PWD}/fs/volumes/clickhouse-keeper-02/etc/clickhouse-keeper/keeper_config.xml:/etc/clickhouse-keeper/keeper_config.xml
     ports:
         - "127.0.0.1:9182:9181"
   clickhouse-keeper-03:
     image: "clickhouse/clickhouse-keeper:${CHKVER:-latest-alpine}"
     user: "101:101"
     container_name: clickhouse-keeper-03
     hostname: clickhouse-keeper-03
     networks:
       cluster_2S_2R_ch_proxy:
         ipv4_address: 192.168.9.7
     volumes:
       - ${PWD}/fs/volumes/clickhouse-keeper-03/etc/clickhouse-keeper/keeper_config.xml:/etc/clickhouse-keeper/keeper_config.xml
     ports:
         - "127.0.0.1:9183:9181"
   ch-proxy:
     image: contentsquareplatform/chproxy:v1.26.4
     platform: linux/amd64
     container_name: ch-proxy
     hostname: ch-proxy
     networks:
       cluster_2S_2R_ch_proxy:
         ipv4_address: 192.168.9.10
     ports:
       - "127.0.0.1:443:443"
       - "127.0.0.1:80:80"
     volumes:
       - ${PWD}/fs/volumes/ch-proxy/config/config.yml:/opt/config.yml
     depends_on:
       - clickhouse-01
       - clickhouse-02
       - clickhouse-03
       - clickhouse-04
     command: [-config, /opt/config.yml]

networks:
   cluster_2S_2R_ch_proxy:
     driver: bridge
     ipam:
       config:
         - subnet: 192.168.9.0/24
           gateway: 192.168.9.254

  1. 網路 cluster_2S_2R_ch_proxy

    • 使用 bridge 驅動,有一個子網 192.168.9.0/24,網關 192.168.9.254
  2. 容器:

    • clickhouse-01 (192.168.9.1)
    • clickhouse-02 (192.168.9.2)
    • clickhouse-03 (192.168.9.3)
    • clickhouse-04 (192.168.9.4)
    • clickhouse-keeper-01 (192.168.9.5)
    • clickhouse-keeper-02 (192.168.9.6)
    • clickhouse-keeper-03 (192.168.9.7)
    • ch-proxy (192.168.9.10)
  3. 依賴關係:

    • clickhouse-01, clickhouse-02, clickhouse-03, clickhouse-04 都依賴 clickhouse-keeper-01, clickhouse-keeper-02, clickhouse-keeper-03
    • ch-proxy 依賴 clickhouse-01, clickhouse-02, clickhouse-03, clickhouse-04
  4. 埠映射:

    • clickhouse-01, clickhouse-02, clickhouse-03, clickhouse-04 都有 8123 和 9000 埠映射到本地的相應埠
    • clickhouse-keeper-01, clickhouse-keeper-02, clickhouse-keeper-03 的 9181 埠映射到本地的相應埠
    • ch-proxy 的 443 和 80 埠映射到本地的相應埠
  5. 捲掛載:

    • 每個 clickhouse 容器掛載了 config.xmlusers.xml 文件
    • 每個 clickhouse-keeper 容器掛載了 keeper_config.xml 文件
    • ch-proxy 容器掛載了 config.yml 文件


以下是 採用 Keeper 的 ClickHouse 架構

image

當資料庫集群節點之間需要強一致性時,ClickHouse 會廣泛使用 Keeper,最值得註意的是支持存儲元數據、複製、備份、訪問控制、任務調度以及用於從 Apache Kafka 和 AWS S3 提取數據的高度一致的鍵值存儲。
Keeper 依賴於 Raft 共識演算法,而 ZooKeeper 則使用 ZAB。儘管 ZAB 是一個更成熟的選擇(至少從 2008 年開始開發),但該團隊選擇了 Raft,因為它相對簡單,並且使用 C++ 庫集成起來很容易。


單機版生產環境部署

image

用於設置生產就緒的獨立 ClickHouse 實例。它還包括由 Prometheus 和 Grafana 組成的監控堆棧,用於實時性能跟蹤。此外,還集成了 MinIO,以實現 ClickHouse 數據的高效備份。這種全面的設置可確保強大且可靠的數據管理環境。

示例docker-compose.yaml

version: '3'

services:
   clickhouse:
     container_name: clickhouse
     image: clickhouse/clickhouse-server:23.8
     restart: always
     ports:
       - 8123:8123  # http
       - 9000:9000  # native protocol
       - 9363:9363  # metrics server
     volumes:
       - clickhouse-data:/var/lib/clickhouse/
       - clickhouse-logs:/var/log/clickhouse-server/
       - ./config_files/clickhouse/etc/clickhouse-server:/etc/clickhouse-server
     cap_add:
       - SYS_NICE
       - NET_ADMIN
       - IPC_LOCK
     ulimits:
       nofile:
         soft: 262144
         hard: 262144
     depends_on:
       - minio
       - minio-bucket-creator

  prometheus:
     container_name: prometheus
     image: prom/prometheus:v2.37.9
     restart: always
     ports:
       - 9090:9090
     volumes:
       - ./config_files/prometheus/:/etc/prometheus/
       - prometheus_data:/prometheus
     command:
       - '--config.file=/etc/prometheus/prometheus.yaml'
       - '--storage.tsdb.path=/prometheus'
       - '--web.console.libraries=/usr/share/prometheus/console_libraries'
       - '--web.console.templates=/usr/share/prometheus/consoles'
     depends_on:
       - minio-prometheus-monitoring-cluster
       - minio-prometheus-monitoring-node
       - minio-prometheus-monitoring-bucket

  grafana:
     container_name: grafana
     image: grafana/grafana:10.0.3-ubuntu
     ports:
       - 3000:3000
     volumes:
       - grafana_data:/var/lib/grafana
       - ./config_files/grafana/etc/grafana/provisioning/dashboards/:/etc/grafana/provisioning/dashboards/
       - ./config_files/grafana/etc/grafana/provisioning/datasources/:/etc/grafana/provisioning/datasources/
       - ./config_files/grafana/var/lib/grafana/dashboards/:/var/lib/grafana/dashboards/
       # uncomment the following line, if you don't have access to grafana.com plugins and download a plugin manually (read README.md file)
       - ./config_files/grafana/var/lib/grafana/plugins/:/var/lib/grafana/plugins/
     depends_on:
       - prometheus
    
   minio:
     container_name: minio
     image: minio/minio:RELEASE.2023-09-07T02-05-02Z
     restart: always
     env_file:
       - .env
     ports:
       - 9001:9001
       - 9002:9002
     volumes:
       - minio_data:/var/lib/minio/data
     command: minio server /var/lib/minio/data --address 0.0.0.0:9002 --console-address ":9001"

  minio-bucket-creator:
     container_name: minio-bucket-creator
     image: minio/mc:RELEASE.2023-09-13T23-08-58Z
     env_file:
       - .env
     entrypoint: >
       /bin/bash -c "
       /usr/bin/mc alias set myminio http://minio:9002 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD;
       /usr/bin/mc mb myminio/${MINIO_CLICKHOUSE_BACKUP_BUCKET:-clickhouse};
       /usr/bin/mc anonymous set public myminio/${MINIO_CLICKHOUSE_BACKUP_BUCKET:-clickhouse};
       exit 0;
       "
     depends_on:
       - minio
  
   minio-prometheus-monitoring-cluster:
     container_name: minio-prometheus-monitoring-cluster
     image: minio/mc:RELEASE.2023-09-13T23-08-58Z
     env_file:
       - .env
     volumes:
       - ./config_files/prometheus/templates/prometheus.yaml:/home/prometheus-template.yaml:ro
       - ./config_files/prometheus/prometheus.yaml:/home/prometheus.yaml
     entrypoint: >
       /bin/bash -c "
       cp /home/prometheus-template.yaml /home/prometheus.yaml;
       /usr/bin/mc alias set myminio http://minio:9002 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD > /dev/null;
       /usr/bin/mc admin prometheus generate myminio cluster | sed '1d' | awk '{print \"  \" $0}' >> /home/prometheus.yaml;
       "
     depends_on:
       - minio
  
   minio-prometheus-monitoring-node:
     container_name: minio-prometheus-monitoring-node
     image: minio/mc:RELEASE.2023-09-13T23-08-58Z
     env_file:
       - .env
     volumes:
       - ./config_files/prometheus/prometheus.yaml:/home/prometheus.yaml
     entrypoint: >
       /bin/bash -c "
       /usr/bin/mc alias set myminio http://minio:9002 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD > /dev/null;
       /usr/bin/mc admin prometheus generate myminio node | sed '1d' | awk '{print \"  \" $0}' >> /home/prometheus.yaml;
       "
     depends_on:
       - minio
       - minio-prometheus-monitoring-cluster

  minio-prometheus-monitoring-bucket:
     container_name: minio-prometheus-monitoring-bucket
     image: minio/mc:RELEASE.2023-09-13T23-08-58Z
     env_file:
       - .env
     volumes:
       - ./config_files/prometheus/prometheus.yaml:/home/prometheus.yaml
     entrypoint: >
       /bin/bash -c "
       /usr/bin/mc alias set myminio http://minio:9002 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD > /dev/null;
       /usr/bin/mc admin prometheus generate myminio bucket | sed '1d' | awk '{print \"  \" $0}' >> /home/prometheus.yaml;
       "
     depends_on:
       - minio
       - minio-prometheus-monitoring-cluster
       - minio-prometheus-monitoring-node

volumes:
   clickhouse-data:
   clickhouse-logs:
   prometheus_data:
   grafana_data:
   minio_data:


阿裡雲-雲資料庫 ClickHouse 社區相容版

雲資料庫 ClickHouse 社區相容版節點和節點完全對等,每一個節點都可以承載查詢請求和寫入請求,以及後臺數據的計算和操作。

每個雲資料庫 ClickHouse 社區相容版集群包含1個或多個分片(Shard),每個分片內部包含1個或多個副本(Replica)。

所有節點都部署在阿裡雲彈性計算伺服器ECS之上,底層採用高可靠的雲盤作為持久化存儲介質

image


兩地雙中心部署架構

image


CH集群應用案例

      某國內電商公司Data Management Platform, 主要用於對人群進行圈選,畫像分析,廣告投放。隨著精細化自動營銷的慢慢發展,主要是通過聚合商家全域數據流量(其中包括用戶數據,用戶行為數據等)來進行行為分析,畫像分析,自動化營銷。

DMP架構

數據分片:提到了CH集群分片,這通常意味著數據被分割成多個部分,分佈在不同的伺服器或節點上,以提高處理效率和可擴展性。

實時與離線處理:系統支持實時寫入和離線寫入,這表明架構設計了處理不同數據流的能力,能夠適應不同的業務場景。

Spark與Flink任務:提到了Spark任務和Flink/FlinkSQL任務,這表明系統使用了這兩種流行的大數據處理框架來處理數據。

點陣圖索引:提到了點陣圖本地表和標簽用戶點陣圖表,點陣圖索引是一種高效的數據結構,用於快速檢索和存儲大量數據。

用戶ID哈希處理:用戶ID通過Hash處理,這有助於保護用戶隱私,同時也可以減少數據存儲的需求。

Kafka消息隊列:使用Kafka作為消息隊列,這有助於實現數據的非同步處理和解耦。

HTTP調用與自定義插件:系統支持通過HTTP調用自定義CH插件,這提供了靈活性,允許根據需要擴展或修改系統功能。

安全與性能優化:提到了Rate Limiter(限流器)、Security(安全)、Customer Plugins(自定義插件)、Circuit Breaker(斷路器)和Routing(路由),這些都是系統性能和安全性的重要保障。

API網關:使用Proxy(如Apisix)作為API網關,這有助於管理API請求,提供負載均衡、服務發現等功能。

數據轉換:用戶行為數據結果需要轉換成bitmap和標簽點陣圖結果,這表明系統需要進行數據格式的轉換以適應不同的查詢需求。

多節點處理:提到了CH Shard1、CH Shard2、CH ShardN,這表明系統設計了多節點處理能力,以支持大規模的數據和高併發請求。




今天先到這兒,希望對AIGC,雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 項目管理, 產品管理,信息安全,團隊建設 有參考作用 , 您可能感興趣的文章:
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
視頻直播平臺的系統架構演化
微服務與Docker介紹
Docker與CI持續集成/CD
互聯網電商購物車架構演變案例
互聯網業務場景下消息隊列架構
互聯網高效研發團隊管理演進之一
消息系統架構設計演進
互聯網電商搜索架構演化之一
企業信息化與軟體工程的迷思
企業項目化管理介紹
軟體項目成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共用
高效能的團隊建設
項目管理溝通計劃
構建高效的研發與自動化運維
某大型電商雲平臺實踐
互聯網資料庫架構設計思路
IT基礎架構規劃方案一(網路系統規劃)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之採購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之性能實時度量系統演變

如有想瞭解更多軟體設計與架構, 系統IT,企業信息化, 團隊管理 資訊,請關註我的微信訂閱號:

image_thumb2_thumb_thumb_thumb_thumb[1]

作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 該文章也同時發佈在我的獨立博客中-Petter Liu Blog。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Apache Doris設計思想介紹與應用場景 MPP ( Massively Parallel Processing ),即大規模並行處理,在資料庫非共用集群中,每個節點都有獨立的磁碟存儲系統和記憶體系統,業務數據根據資料庫模型和應用特點劃分到各個節點上,每台數據節點通過專用網路或者商業通用網路互相 ...
  • 《數據資產管理核心技術與應用》是清華大學出版社出版的一本圖書,全書共分10章,第1章主要讓讀者認識數據資產,瞭解數據資產相關的基礎概念,以及數據資產的發展情況。第2~8章主要介紹大數據時代數據資產管理所涉及的核心技術,內容包括元數據的採集與存儲、數據血緣、數據質量、數據監控與告警、數據服務、數據許可權 ...
  • 我把粉絲們發給我的面經好好整理了一下,從裡面挖出了十個被問得比較頻繁的資料庫面試題,可以收藏起來,在面試之前給它突擊過一遍。 ...
  • 視圖 1. 為什麼要使用視圖?什麼是視圖? 為了提高複雜 SQL 語句的復用性和表操作的安全性,MySQL 資料庫管理系統提供了視圖特性。所謂視圖,本質上是一種虛擬表,在物理上是不存在的,其內容與真實的表相似,包含一系列帶有名稱的列和行數據。但是,視圖並不在資料庫中以儲存的數據值形式存在。行和列數據 ...
  • 問題場景 SQL Server事務複製在正常創建發佈和訂閱之後,log reader Job 啟動異常,出現“The process could not execute ‘sp_replcmds’ on xxx”等異常日誌導致代理服務無法正常啟動。 異常現象 參考下圖,異常日誌如下 Error me ...
  • 整理了一下pg_dump邏輯備份還原,pg啥時候推出一個庫級別的物理備份還原就好,邏輯備份能行但操作大庫效率太低,就像MySQL/MSSQL一樣,跨實例做庫級別還原的需求太多了 pg_dump備份 pg_dump備份 -F format 參數,備份文件的格式。format可以是下列之一: p pla ...
  • Percona Toolkit 神器全攻略(系統類) Percona Toolkit 神器全攻略系列共八篇,前文回顧: 前文回顧 Percona Toolkit 神器全攻略 Percona Toolkit 神器全攻略(實用類) Percona Toolkit 神器全攻略(配置類) Percona T ...
  • 索引 百萬級別或以上的數據如何刪除? 關於索引:由於索引需要額外的維護成本,因為索引文件是單獨存在的文件,所以當我們對數據的增加、修改、刪除都會產生額外的對索引文件的操,這些操作需要消耗額外的IO,會降低增/改/刪的執行效率。所以,在我們刪除資料庫百萬級別數據的時候,查詢MySQL官方手冊得知刪除數 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...