目前因為有傳福音需求
如果看起來不好, 見證也會不好的
1 體型優化: 再瘦10公斤(97->87)
2 早睡: 目前12:00-7:00->11:00-6:00(每早起來跑步)
3 吃健康: 每周4天健康餐(午晚)+水果
4 保養皮膚
5 固定週六進修辦讀書會
6 每天8:00進公司 進修python(8-10)
7 在20260217買新衣服打扮(驗收成果)
在51會所尋求交往至1/3前(剛好錄完第一首詩歌)
如果沒找到, 就推進到鄰近會所
目前因為有傳福音需求
如果看起來不好, 見證也會不好的
1 體型優化: 再瘦10公斤(97->87)
2 早睡: 目前12:00-7:00->11:00-6:00(每早起來跑步)
3 吃健康: 每周4天健康餐(午晚)+水果
4 保養皮膚
5 固定週六進修辦讀書會
6 每天8:00進公司 進修python(8-10)
7 在20260217買新衣服打扮(驗收成果)
在51會所尋求交往至1/3前(剛好錄完第一首詩歌)
如果沒找到, 就推進到鄰近會所
202401
長久的目標
1 進入外企寫程式
2 英文母語化
3 成為程式資深開發者
4 減肥or使身材更優, 體力更好, 睡眠正常, 頭髮長回來, 美顏
5 年薪突破140, 資產突破300
我希望今年能完成
1 兩個月做一個專案 包含redis, Elasticsearch, kafka
2 leetcode 一個月 easy 8題 medium 4題
3 一周健身3次, 跑步3次
4 擦皮膚保養品
5 每天10:00洗澡, 11:30準備睡覺, 早上6:30起床
6 平日5天讀英文?!
202504
社交上, 目前計畫
1 參加健身房課程-保持一下健康
2 組讀書會
3 周遊列國小排
4 找一下比較能社交類型的英文團課
5 音樂相關, 可能找唱歌局, 或是揪唱歌之類, 未定
6 拍照, 攝影活動, 外拍活動
----------------------------------------------------------------------
大約從去年到今年有很長一段時間進修所以兩年結算一下
數一數有達成的事
1 程式資深開發者
2 做了兩個redis, Elasticsearch, kafka專案
3 周遊列國小排
4 組讀書會(github上面有)
5 青職弟兄之家找到牟弟兄, 可以來錄唱歌, 超開心
6 年薪百萬
除了上述之外, 其實尋求交往上也找到方向了
打算走一條有主的道路
基於主會幫我們分配預定居住的疆界
我應該優先在主顯現的地界鄰近先找
可能當前會所, 附近會所, 及以前待過的台北市會所
提交通, 合適的相處, 然後進入交通
主線必修:
選修加分(時間有限可跳過):
三年內,一定要有帶領團隊 or 牽頭專案的經驗,否則履歷只會像「資深後端」,很難轉「架構師」。
具體做法:
👉 為什麼要考?
因為很多公司在招「雲端架構師 / 資料工程師」時,證照是 HR 快速篩選的關鍵字。
三年後的定位可以是:
👉 這些職缺在台灣、新加坡、馬來西亞、新創或大型 SaaS 公司都需求很高。
如果想到快, 可能直覺就是Redis, 但是...
問:瞬間有100-200萬筆資料量進來, 如果存到redis, 這樣操作有沒有可能壓垮redis?
答:
在瞬間大量資料(如100-200萬筆)快速進入Redis,確實有可能導致Redis的性能瓶頸甚至崩潰,特別是在以下情況下:
1.寫入速度過快:Redis處理速度雖然很快,但如果大量資料在短時間內集中寫入,可能會超出其處理能力,導致延遲增加甚至CPU過載。
2.硬體資源限制:
記憶體:Redis記憶體是有限的,若資料量超出配置容量,將觸發記憶體淘汰策略或導致操作失敗。
CPU:高併發寫入會大量佔用CPU資源,可能造成系統反應遲緩。
3.持久化設定:
如果啟用了RDB/AOF持久化,寫入這麼多資料時會進行持久化操作,進一步降低性能甚至引起阻塞。
4.網路瓶頸:大量資料傳輸也會產生網路壅塞。
批次寫入:將資料分批次寫入,避免一次大量資料突入。
調整Redis配置:優化快取策略、增加記憶體、調整持久化頻率或關閉持久化(視需求而定)。
擴展Redis集群:利用分片、叢集或多實例分擔負載。
硬體升級:增加記憶體、提升CPU與網路能力。
異步處理:使用訊息佇列(如Kafka)做緩衝,逐步寫入Redis。
單純一瞬間寫入大量資料確實有壓垮Redis的風險,建議根據實際需求進行架構設計調整,避免單點壓力過大。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
再問: 瞬間大量資料(如100-200萬筆)想要快速接收, 你有一套好的解決方案嗎?
答:
當面對瞬間大量資料(如100-200萬筆)需要快速接收的情況,設計一個高效的資料接收與存儲解決方案,關鍵在於分散負載、緩衝與異步處理。以下是我推薦的一套較為成熟且可擴展的方案:
使用負載均衡(如Nginx + DNS輪詢)將資料請求分散到多個接收節點。
將快速接收資料的端點設計成高併發處理架構(異步IO、多線程、事件驅動)。
引入MQ(Kafka、RabbitMQ、或 Pulsar):
毫秒級的資料排隊緩衝,快速寫入資料到消息隊列。
保證資料不丟失,且支援高併發入列。
可自由調整消費速率。
批次處理:
消費端以批次讀取消息,進行合併寫入。
使用MongoDB、ClickHouse、ElasticSearch 或分散資料庫根據資料特性選擇存儲。
高效批次寫入:
利用bulk insert(批量插入)方式,提高存取效率。
多個消費者併行處理,提高吞吐量。
分區/分片策略:
根據資料特性(如時間、ID)進行資料分片,降低單點壓力。
配置硬體:
高IO性能SSD、大容量記憶體、多核CPU。
示意流程圖
異步寫入:消費端以非阻塞方式處理消息,提高吞吐。
分散壓力:通過多個節點與隊列分層調度。
資料降速策略:遇到高負載時,動態調整入隊速率。
高速緩衝資料,進行後續分析或存儲
非即時敏感的資料存取(如日誌、事件記錄)
需要高可靠度,避免資料丟失
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
再問: 如果說這些資料後續是要搭配資料分析的話, 會存在MongoDB嗎? 我以為MongoDB讀取比RDB慢, 請問應用資料分析時會怎麼搭配?
答: 你的疑問非常好!MongoDB本身在讀取速度上比傳統關聯式資料庫(RDB)慢,特別是在進行大量複雜查詢或資料分析時。然而,MongoDB在某些情境中仍然可以用來存儲和檢索資料,尤其是當資料結構較複雜或需要高擴展性時。
作為原始資料存儲:將原始資料大量存入MongoDB,方便快速寫入。
資料預處理:利用MongoDB的聚合框架做初步過濾、轉換或彙總,產生較小的、易於分析的資料集。
資料快照與存檔:存放經過整理、清洗後的資料。
資料倉庫(Data Warehouse)/OLAP系統:為複雜查詢和大規模分析建置專用的資料倉庫,可以是:
ClickHouse、Druid:列存儲,極速聯合查詢和分析。
Snowflake、Redshift:雲端數據平台,適合大數據分析。
Apache Spark:批次或實時分析,擴展性佳。
ETL流程(Extract, Transform, Load):從MongoDB或原始資料存儲系統抽取資料,經過轉換,載入專用分析系統。
工具:Apache NiFi、Airflow、DataStage等。
大量原始資料先存到MongoDB,利用其高效率的插入能力。
透過ETL工具或Spark等平台,定期抽取MongoDB資料。
進行資料清洗、轉換及彙總。
轉換後的資料存放於分析專用資料庫中(如ClickHouse、Redshift等)。
在資料倉庫中進行快速查詢和分析,支持BI工具(如Tableau、Power BI等)或自定義分析模型。
MongoDB:適合作為資料的暫存庫或初步收集層,高速寫入,並進行基本的資料篩選。
專用分析資料庫/平台:對於大規模、複雜的資料分析,建議將資料轉存到專門設計的資料倉庫或OLAP系統,更適合快速查詢和分析。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
問: 有一工程師表示mongo跟rdb的讀不一定就是mongo慢, 他說只有raw data一筆一筆讀mongo應該會比較快, 依照你的知識, 讀取資料的快慢RDB什麼情況下比Mongo快, 為什麼, 什麼情況下有可能慢?
答: 在比較MongoDB(非關聯式文檔數據庫)與傳統關係型數據庫(RDB)在讀取資料上的性能時,影響因素很多,不能一概而論。以下是一些關鍵點和情境分析:
當數據是高度結構化、規範化良好的(比如多表關聯),進行單筆或少量的查詢時,RDB能通過索引直接定位,提高讀取效率。
RDB支持多表聯結,特別是當查詢需要跨多個表的相關信息時,RDB的JOIN操作經過優化,可能比Mongo的多次查詢(尤其是在沒有預先設計好聚合管道或多重查詢時)更快。
RDB的索引策略在設計良好且數據存取方式固定的情況下,可以極大提高讀取效率。
在支持多步交易和一致性要求高的場景下,RDB提供較好的性能與可靠性。
Mongo在缺乏關聯或需要多次查詢時,可能需要多次I/O,造成性能瓶頸。儘管Mongo支持聚合管道,但沒有類似SQL的JOIN,處理複雜關聯較慢。
索引設計不佳或查詢不優化:
若未合理建立索引,或查詢條件不在索引範圍內,性能會顯著下降。
數據量大且單一操作讀取較多數據時:
當讀取大量數據、特別是逐條讀取(streaming或逐筆讀取)時,Mongo相較於某些RDB的批量讀取優化可能較弱。
關於為什麼在某些情況下傳統的關係型數據庫(RDB)會比MongoDB慢,主要原因包括以下幾個方面:
嚴格的模式(Schema):RDB需要預先定義表結構,並在變更模式時可能會經歷較長的表結構修改時間,這在頻繁變更或動態數據場景中會降低效率。
多表JOIN操作成本高:當查詢涉及多個表的聯結(JOIN)時,尤其是在數據量大或JOIN條件複雜時,RDB的引擎可能需要大量的計算和IO,導致性能下降。
嚴格的事務管理:RDB支持完整的ACID事務,在高併發情況下,鎖定策略(行鎖、表鎖)可能導致性能瓶頸,尤其在寫操作多、讀操作競爭激烈時。
等待鎖釋放:當多個事務同時競爭同一資源時,可能導致等待和阻塞,增加延遲。
索引策略不當或未充分設計:在大規模數據集上,不合理的索引可能導致查詢變慢,特別是在需要掃描整個表或多索引組合時。
查詢計劃不理想:複雜查詢未經優化或查詢計劃選擇不佳,也會影響性能。
存儲引擎限制:傳統存儲引擎在高IO負載下可能出現性能瓶頸。
硬件配置:比起某些NoSQL系統,特別是在分布式或高並行場景下,硬體配置不足(如IO帶寬、CPU還有內存)可能使RDB表現不佳。
在大量的聚合、多條件過濾或多層次篩選時,RDB的表達能力和優化器在一些場景下會更慢,尤其如果查詢沒有充分利用索引或需要複雜的計算。
傳統RDB在水平擴展(分片)方面相對較少靈活,數據量巨大時需要進行複雜的配置,可能導致性能下降。
RDB在處理高度結構化、關聯性強、用JOIN或多條件篩選查詢的場景下通常會更快,特別是在數據規模較小到中等且查詢已經被良好優化時。
Mongo在存取非結構化數據、需要大規模讀取、或在分布式環境中具有較好擴展性的情況下,表現可能更好。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
想問一下上面其中, 多次查詢和Join操作, 如果是一般情況, RDB操作會比MongoDB快, 但是在大數據的情況下, 反而MongoDB可能會比較快嗎?
這個問題非常好,涉及到數據規模、系統架構與查詢模式的變化。
簡單來說:
RDB通常會比MongoDB快,特別是在多次查詢與JOIN操作方面,因為:
RDB的表結構和索引經過優化,JOIN是其一大優勢
查询计划和優化器已非常成熟
沒有分布式架構負擔
MongoDB反而可能會較快, 原因如下:
水平擴展能力:Mongo經由分片(sharding)可以擴展到多節點,滿足海量數據的存儲和高吞吐需求
讀取吞吐量高:Mongo的存儲引擎(如WiredTiger)以及設計支持高並行、分散存取,大量並行查詢依賴於硬件和分片策略
避免多表JOIN的成本:在大數據規模下,JOIN操作的成本(內存消耗、計算時間、路由等)會變得昂貴,而Mongo在此情境下避免了JOIN,可能以聚合或預嵌入避免跨表查詢,提升性能
預聚合和文檔模型:Mongo支持靈活的嵌套和文檔結構,可以將多個相關數據事先合併在一個文檔中,減少跨查詢的需要
小規模或中等數據: RDB的JOIN和多表聯結優勢明顯,通常更快。
大規模數據(特別是海量非關聯數據或分布式存儲): 組建良好的MongoDB集群,合理設計文檔模型,避免頻繁跨集合JOIN,可以在讀取性能上超越傳統RDB。
實現效果也依賴數據模型設計與系統配置:在大數據環境下,若設計不當,Mongo也會變慢;合理的分片策略、索引和文檔設計是關鍵。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
再問: MongoDB作為放大量原始資料儲存的理由, 為什麼比RDB好? RDB不適合放百萬級別資料嗎?
答:這是一個很好的問題!讓我來詳細解釋一下為什麼在某些場景下,MongoDB會被用來存放大量原始資料,並且它相較於傳統關聯式資料庫(RDB)有什麼優勢。
非結構化或半結構化資料:MongoDB是文件導向(Document-oriented),存儲格式為BSON(類JSON),對於每一筆資料具有靈活的結構,不需要事先定義 schema。
水平擴展性強:MongoDB支持分片(sharding),可以輕鬆擴展以應對超大量資料的存取需求。多台節點分擔寫入與讀取壓力。
動態結構:不需要預設固定表結構,新資料型態或字段的加入不會影響現有資料庫的運作,非常適合資料格式多變或不確定的場景。
開發時不受嚴格schema限制,更快建立快速原型。
支援嵌套查詢與多層結構資料,較適合多層次的資料表現。
在高並發寫入的場景下,MongoDB可以實現更高的寫入效率(尤其是批次寫入)。
必須明確定義資料表結構,若資料格式多變,會很難管理與擴展。
靈活度較差,不方便處理半結構化或不規則資料。
水平擴展(sharding)較複雜,尤其是在處理數以百萬、甚至十億級資料時。
在大量資料插入時容易造成性能瓶頸。
非常大的資料庫架構難以管理,架構調整、索引優化、維護較為繁瑣。
結構固定、需要複雜聯結(JOIN)、保障資料一致性(ACID)的業務。
小到中等規模資料,不需高擴展性。
MongoDB的確更適合用來存放大量、快速變化、不需要嚴格關聯的原始資料。
RDB則適合核心資料結構穩定,需要嚴格一致性的資料。
如果你資料結構較為動態且資料量巨大,MongoDB是較適合的選擇。反之,若資料關聯性強、需要行業法規嚴格遵守、結構穩定,則傳統關聯式資料庫還是較佳。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
再問:這樣, 那比方說哪種類型資料適合緩存到redis? 只要不是百萬級別的, 都適合嗎?
答:
很好的問題!Redis是一個高性能的鍵值快取系統,適合用來存放需要高速讀寫和低延遲訪問的資料。以下是對於哪種類型資料適合緩存在Redis的分析:
如使用者會話信息(Session data)、授權Token、登錄狀態等。
熱點商品或內容(熱門文章、熱門商品等)。
實時計算的暫存結果(如排行榜、統計數據、計算的中間值)。
排行榜、計數器、訪問次數。
例如:即時計算的快取、用戶最近操作、短期有效的緩存數據。
典型為key-value格式,存放JSON、Hash、Set等。
Redis的伺服器內存(RAM)是限制存放資料的瓶頸。
百萬筆資料可能超出單台Redis伺服器的內存容量,引起資料喪失(若未設置持久化或淘汰策略)。
小資料量、多次讀取的熱點資料,非常適合存入Redis。
大型資料(例如多MB甚至GB的文件數據),存入Redis會極大浪費內存,不是最佳做法。
非常頻繁變動的資料(如實時監控指標)可以緩存,但需用合適的淘汰策略。
Redis非常適合小型、熱點、頻繁讀寫或需低延遲存取的資料。
資料量較大或非熱點資料,較適合存放在持久化存儲(MongoDB、SQL等)或分散式存儲系統。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
在數據規模快速擴展的背景下,選擇合適的資料存儲方案對於系統性能與擴展性至關重要。本文將討論不同資料類型的存儲方案,適合場景,以及如何搭配資料分析。
MongoDB 適用於存放大量原始資料或半結構化資料,支援高吞吐、多擴展、彈性schema,方便後續分析或資料處理。
RDB 適合結構固定、關聯性強、資料一致性要求高的業務核心數據,例如財務交易、用戶資料等。
Redis 適合用來存放熱點、頻繁讀寫、需要超低延遲的資料,例如 Session、排行榜、計數器等短期或熱點資料。
在微服務架構中,配置管理是確保服務正常運行與維護的核心部分。尤其在多語言、多技術棧、多部署環境(如 Kubernetes)中,選擇合適的配置管理方案更為重要。本篇將探討如何在 Kubernetes 上運行的微服務中,合理運用 Kubernetes 原生配置工具與 Spring Cloud 配置服務。
在一個多語言、多技術棧的微服務集群中:
答案: 不一定。
答案:不一定。
取決於你的需求、團隊技術能力,以及服務的複雜度。
主要工作包括:
服務註冊與發現
配置管理
服務間調用
分布式追蹤
安全、路由、監控
orders.default.svc.cluster.local)curl http://orders:8080config-v1, config-v2| 功能 | 解決方案描述 |
|---|---|
| 服務註冊/發現 | Kubernetes Service + DNS |
| 配置管理 | ConfigMap、Secrets + 手動或工具刷新 |
| 版本控制 | Git + 配置版本管理 + ConfigMap 版本切換 |
| 服務通信與治理 | API Gateway + 熔斷(Resilience4j、Hystrix)+ 服务网格 |
| 分布式追蹤 | Zipkin / Jaeger + 集成 |
| 安全與監控 | Cloud Native 工具鏈:Prometheus、Grafana、Network Policy |
| 主要功能 | 方案描述 |
|---|---|
| 服務註冊與發現 | Eureka Server,服務動態註冊與查找 |
| 配置管理 | Spring Cloud Config + Git,支持版本控制與動態刷新 |
| 服務間調用 | REST/gRPC + Spring Cloud LoadBalancer + Eureka 服務列表 |
| 熔斷與容錯 | Resilience4j / Hystrix,實現可靠性保障 |
| 分布式追蹤 | Spring Cloud Sleuth + Zipkin / Jaeger |
| 安全控制 | OAuth2 / JWT,API Gateway 管理安全 |
| 部署與運維 | Kubernetes 的 Deployment、Service,結合 Helm、監控、日誌工具等 |
| 比較點 | 使用Spring Cloud | 不使用Spring Cloud |
|---|---|---|
| 架構複雜性 | 高:需要部署Config Server、Eureka Server,和其他組件 | 低:主要利用Kubernetes內建資源和第三方工具 |
| 運維負擔 | 較重:需要管理多個微服務支援服務中心(Eureka、Config Server) | 較輕:多數功能由K8s與外部工具直接支援 |
| 技術棧整合 | 預構建支持Spring生態,整合流暢 | 需自行整合方案,包括服務註冊、配置管理、熔斷等 |
| 功能 | 使用Spring Cloud | 不使用Spring Cloud |
|---|---|---|
| 服務註冊與發現 | Eureka Server,動態註冊和查找服務 | Kubernetes Service + DNS,基本服務發現 |
| 配置管理 | Spring Cloud Config + Git,支持版本控制和動態刷新 | ConfigMap / Secrets,手動或自動同步,缺乏版本追蹤 |
| 服務間通信 | REST/gRPC + Ribbon + Eureka | REST/gRPC,依賴 Kubernetes DNS 或外部負載均衡器 |
| 熔斷/容錯 | Resilience4j、Hystrix | 需自行實現,或用 Sidecar / Service Mesh |
| 分布式追蹤 | Spring Cloud Sleuth + Zipkin / Jaeger | 自行集成追蹤系統(Zipkin / Jaeger)或用 Sidecar |
| 安全策略 | API Gateway + OAuth2/JWT | 自行實作安全措施,或與API Gateway配合 |
| 服務擴展與治理 | 完整 Spring Cloud 生態支持(Circuit Breaker、断路器、配置刷新) | 依賴 Kubernetes 原生資源和第三方工具,只做基本支持 |
| 特色 | 使用Spring Cloud | 不使用Spring Cloud |
|---|---|---|
| 優點 | 權威完整:快速搭建多功能微服務架構 | 簡單:架構小,維護方便,較低運維成本 |
| 缺點 | 較複雜:需要管理多個Spring Cloud組件 | 功能較少:需自行實作和整合多個功能 |
| 適用場景 | 服務數量多、配置複雜、需要高動態和治理 | 服務較少、架構較簡、追求解耦省維護成本 |
建議使用Spring Cloud:
不使用Spring Cloud:
| 取捨點 | 使用Spring Cloud | 不使用Spring Cloud |
|---|---|---|
| 運維成本 | 較高 | 較低 |
| 功能豐富度 | 完整豐富,支持多功能 | 基本功能,需手動補充 |
| 適用場景 | 大型、多功能、複雜架構 | 小型、簡單、偏運維成本低 |
目前因為有傳福音需求 如果看起來不好, 見證也會不好的 1 體型優化: 再瘦10公斤(97->87) 2 早睡: 目前12:00-7:00->11:00-6:00(每早起來跑步) 3 吃健康: 每周4天健康餐(午晚)+水果 4 保養皮膚 5 固定週六進修辦讀書會 6 ...