背景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,後者用於通知複製的狀態變化。
或者是
生產環境部署提示
提示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結構
- 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需要將數據寫入正確的位置,然後更新索引。
當想在生產集群中創建索引時,請選擇與主鍵相關的列。
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
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
網路
cluster_2S_2R_ch_proxy
:- 使用
bridge
驅動,有一個子網192.168.9.0/24
,網關192.168.9.254
。
- 使用
容器:
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)
依賴關係:
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
埠映射:
clickhouse-01
,clickhouse-02
,clickhouse-03
,clickhouse-04
都有 8123 和 9000 埠映射到本地的相應埠clickhouse-keeper-01
,clickhouse-keeper-02
,clickhouse-keeper-03
的 9181 埠映射到本地的相應埠ch-proxy
的 443 和 80 埠映射到本地的相應埠
捲掛載:
- 每個
clickhouse
容器掛載了config.xml
和users.xml
文件 - 每個
clickhouse-keeper
容器掛載了keeper_config.xml
文件 ch-proxy
容器掛載了config.yml
文件
- 每個
以下是 採用 Keeper 的 ClickHouse 架構
當資料庫集群節點之間需要強一致性時,ClickHouse 會廣泛使用 Keeper,最值得註意的是支持存儲元數據、複製、備份、訪問控制、任務調度以及用於從 Apache Kafka 和 AWS S3 提取數據的高度一致的鍵值存儲。
Keeper 依賴於 Raft 共識演算法,而 ZooKeeper 則使用 ZAB。儘管 ZAB 是一個更成熟的選擇(至少從 2008 年開始開發),但該團隊選擇了 Raft,因為它相對簡單,並且使用 C++ 庫集成起來很容易。
單機版生產環境部署
用於設置生產就緒的獨立 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-creatorprometheus:
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-bucketgrafana:
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-clusterminio-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-nodevolumes:
clickhouse-data:
clickhouse-logs:
prometheus_data:
grafana_data:
minio_data:
阿裡雲-雲資料庫 ClickHouse 社區相容版
雲資料庫 ClickHouse 社區相容版節點和節點完全對等,每一個節點都可以承載查詢請求和寫入請求,以及後臺數據的計算和操作。
每個雲資料庫 ClickHouse 社區相容版集群包含1個或多個分片(Shard),每個分片內部包含1個或多個副本(Replica)。
所有節點都部署在阿裡雲彈性計算伺服器ECS之上,底層採用高可靠的雲盤作為持久化存儲介質
兩地雙中心部署架構
CH集群應用案例
某國內電商公司Data Management Platform, 主要用於對人群進行圈選,畫像分析,廣告投放。隨著精細化自動營銷的慢慢發展,主要是通過聚合商家全域數據流量(其中包括用戶數據,用戶行為數據等)來進行行為分析,畫像分析,自動化營銷。
數據分片:提到了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,企業信息化, 團隊管理 資訊,請關註我的微信訂閱號:
作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
該文章也同時發佈在我的獨立博客中-Petter Liu Blog。