欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

微服務(wù)與事件驅(qū)動(dòng)架構(gòu)(EDA)

微服務(wù)架構(gòu)

微服務(wù)架構(gòu)核心特征

  • 服務(wù)自治:每個(gè)服務(wù)擁有獨(dú)立的代碼庫(kù)、數(shù)據(jù)庫(kù)和運(yùn)維流程。
  • 輕量級(jí)通信:服務(wù)間通過(guò)API(REST/gRPC)或消息隊(duì)列(如Kafka)交互。
  • 去中心化治理:允許技術(shù)棧多樣化(如不同服務(wù)使用Java、Go、Python)。
  • 故障隔離:?jiǎn)蝹€(gè)服務(wù)故障不影響全局系統(tǒng)可用性。

微服務(wù)的核心設(shè)計(jì)原則

  • 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)

    • 限界上下文(Bounded Context) :根據(jù)業(yè)務(wù)領(lǐng)域劃分服務(wù)邊界(如“訂單上下文”與“支付上下文”),避免模型混雜。

    • 上下文映射(Context Mapping)

      防腐層(Anti-Corruption Layer) :隔離外部服務(wù)的模型變更(如適配第三方支付接口)。

      發(fā)布語(yǔ)言(Published Language) :通過(guò)共享事件格式(如Avro Schema)實(shí)現(xiàn)跨服務(wù)通信。

  • 服務(wù)拆分策略

    • 基于業(yè)務(wù)能力拆分:按業(yè)務(wù)功能劃分服務(wù)(如用戶服務(wù)、物流服務(wù))。
    • 基于數(shù)據(jù)邊界拆分:確保每個(gè)服務(wù)擁有獨(dú)立數(shù)據(jù)庫(kù)(如訂單服務(wù)用MySQL,商品服務(wù)用MongoDB)。
    • 基于變更頻率拆分:高頻變更模塊獨(dú)立為服務(wù)(如促銷活動(dòng)服務(wù)),避免頻繁全系統(tǒng)發(fā)布。
  • 服務(wù)通信機(jī)制

    • 同步通信

      RESTful API:簡(jiǎn)單易用,適合外部系統(tǒng)集成(如移動(dòng)端調(diào)用)。

      gRPC:基于HTTP/2的高性能RPC框架,適合內(nèi)部服務(wù)間通信。

    • 異步通信

      消息隊(duì)列(如Kafka/RabbitMQ) :解耦服務(wù),實(shí)現(xiàn)最終一致性(如訂單創(chuàng)建后發(fā)送事件通知庫(kù)存服務(wù))。

      事件溯源(Event Sourcing) :通過(guò)事件日志重建狀態(tài)(如用戶積分變更歷史)。

微服務(wù)的技術(shù)支撐體系

  • 服務(wù)治理

    • 服務(wù)發(fā)現(xiàn)

      客戶端發(fā)現(xiàn):服務(wù)消費(fèi)者通過(guò)注冊(cè)中心(如Eureka、Consul)獲取服務(wù)實(shí)例列表。

      服務(wù)端發(fā)現(xiàn):通過(guò)負(fù)載均衡器(如Nginx、K8s Service)路由請(qǐng)求。

    • 熔斷與降級(jí)

      熔斷器(Circuit Breaker) :當(dāng)服務(wù)失敗率超過(guò)閾值時(shí),快速失?。ㄈ鏗ystrix、Sentinel)。

      降級(jí)策略:返回緩存數(shù)據(jù)或默認(rèn)值,保障核心流程可用(如商品詳情頁(yè)降級(jí)顯示靜態(tài)信息)。

    • 配置中心:動(dòng)態(tài)管理服務(wù)配置(如Apollo、Nacos),支持灰度發(fā)布和實(shí)時(shí)生效。

  • 數(shù)據(jù)一致性管理

    • 分布式事務(wù)挑戰(zhàn):(CAP定理約束)在一致性(C)與可用性(A)之間權(quán)衡,跨服務(wù)調(diào)用可能因網(wǎng)絡(luò)中斷導(dǎo)致數(shù)據(jù)不一致。
    • Saga模式:將事務(wù)拆分為多個(gè)本地事務(wù),通過(guò)補(bǔ)償操作回滾(如“訂單創(chuàng)建”成功后若“庫(kù)存扣減”失敗,則觸發(fā)“訂單取消”補(bǔ)償)。
    • TCC:業(yè)務(wù)層實(shí)現(xiàn)兩階段提交(電商支付場(chǎng)景:預(yù)扣款(Try)→ 確認(rèn)(Confirm)→ 取消(Cancel))。
    • 事件驅(qū)動(dòng)最終一致性:通過(guò)消息隊(duì)列保證事件可靠傳遞(如訂單服務(wù)發(fā)布“訂單已支付”事件,庫(kù)存服務(wù)消費(fèi)后扣減庫(kù)存)。
  • 可觀測(cè)性

    • 日志聚合:使用ELK(Elasticsearch + Logstash + Kibana)或Loki集中管理日志,支持分布式追蹤(Trace ID)。
    • 指標(biāo)監(jiān)控:Prometheus采集服務(wù)指標(biāo)(如QPS、延遲),Grafana可視化展示。
    • 鏈路追蹤:Jaeger或SkyWalking追蹤跨服務(wù)調(diào)用鏈,定位性能瓶頸(如查詢超時(shí)的根因是數(shù)據(jù)庫(kù)慢查詢)。
  • API網(wǎng)關(guān)

    • 路由轉(zhuǎn)發(fā):將外部請(qǐng)求分發(fā)到內(nèi)部服務(wù)(如/api/orders路由到訂單服務(wù))。
    • 鑒權(quán)與限流:驗(yàn)證JWT令牌,限制每秒請(qǐng)求數(shù)(如防止爬蟲(chóng)濫用)。
    • 協(xié)議轉(zhuǎn)換:將HTTP請(qǐng)求轉(zhuǎn)換為gRPC或GraphQL協(xié)議。
    • 代表實(shí)現(xiàn):Kong、Spring Cloud Gateway、Envoy。
  • 服務(wù)網(wǎng)格(Service Mesh)

    • 架構(gòu)模式:通過(guò)Sidecar代理(如Envoy)接管服務(wù)間通信,實(shí)現(xiàn)非侵入式治理。
    • 流量管理:金絲雀發(fā)布、A/B測(cè)試。
    • 安全通信:mTLS加密、服務(wù)身份認(rèn)證。
    • 可觀測(cè)性:自動(dòng)生成指標(biāo)和追蹤數(shù)據(jù)。
    • 代表框架:Istio、Linkerd。

事件驅(qū)動(dòng)架構(gòu)(EDA)

事件驅(qū)動(dòng)架構(gòu)核心理念

  • 異步通信:事件生產(chǎn)者無(wú)需等待消費(fèi)者處理結(jié)果。
  • 事件持久化:事件通常被持久化存儲(chǔ),支持重放和審計(jì)。
  • 最終一致性:通過(guò)事件傳播實(shí)現(xiàn)數(shù)據(jù)一致性,而非強(qiáng)一致性。
  • 動(dòng)態(tài)響應(yīng):系統(tǒng)可靈活響應(yīng)未知或未來(lái)新增的消費(fèi)者。

事件驅(qū)動(dòng)架構(gòu)的核心組件

  • 事件(Event) :系統(tǒng)中發(fā)生的狀態(tài)變化或業(yè)務(wù)動(dòng)作的描述(如“訂單已創(chuàng)建”“庫(kù)存已扣減”)。

  • 事件生產(chǎn)者(Event Producer) :檢測(cè)狀態(tài)變化并發(fā)布事件(如訂單服務(wù)在訂單創(chuàng)建后發(fā)布OrderCreated事件)。

    • 數(shù)據(jù)庫(kù)變更捕獲(CDC) :如Debezium監(jiān)聽(tīng)MySQL binlog。
    • 業(yè)務(wù)邏輯顯式觸發(fā):代碼中主動(dòng)調(diào)用事件發(fā)布接口。
  • 事件消費(fèi)者(Event Consumer) :訂閱并處理事件,執(zhí)行后續(xù)業(yè)務(wù)邏輯(如庫(kù)存服務(wù)消費(fèi)OrderCreated事件扣減庫(kù)存)。

    • 即時(shí)處理:實(shí)時(shí)響應(yīng)(如發(fā)送短信通知)。
    • 批處理:定時(shí)批量處理(如生成每日?qǐng)?bào)表)。
  • 事件通道(Event Channel) :傳輸和存儲(chǔ)事件的媒介,解耦生產(chǎn)者與消費(fèi)者。

    • 消息隊(duì)列:Kafka、RabbitMQ(支持點(diǎn)對(duì)點(diǎn)、發(fā)布/訂閱)。
    • 事件總線:Apache Pulsar、AWS EventBridge(支持復(fù)雜路由規(guī)則)。

事件驅(qū)動(dòng)架構(gòu)的通信模式

  • 發(fā)布/訂閱(Pub-Sub) :生產(chǎn)者將事件發(fā)布到特定主題(Topic),所有訂閱該主題的消費(fèi)者都會(huì)接收事件。

  • 事件流(Event Streaming) :事件以有序、不可變?nèi)罩拘问匠志没?,支持重放和歷史追溯。

    • Kafka:通過(guò)分區(qū)(Partition)保證事件順序,消費(fèi)者按偏移量(Offset)讀取。
    • 事件溯源(Event Sourcing) :用事件日志作為系統(tǒng)狀態(tài)的唯一來(lái)源(如銀行賬戶通過(guò)交易事件重建余額)。

分層架構(gòu)與CQRS模式

分層架構(gòu)(Layered Architecture)

  • 表現(xiàn)層(Presentation Layer) :處理用戶交互,如HTTP請(qǐng)求、頁(yè)面渲染(Spring MVC、React/Vue前端框架)。
  • 業(yè)務(wù)邏輯層(Business Logic Layer) :封裝業(yè)務(wù)規(guī)則與流程(如訂單創(chuàng)建、庫(kù)存扣減),避免將業(yè)務(wù)邏輯泄漏到表現(xiàn)層或數(shù)據(jù)層。
  • 數(shù)據(jù)訪問(wèn)層(Data Access Layer) :提供數(shù)據(jù)持久化接口,如操作數(shù)據(jù)庫(kù)、緩存(JPA、MyBatis、Redis客戶端)。
  • 基礎(chǔ)設(shè)施層(Infrastructure Layer) :提供通用技術(shù)能力(如日志、消息隊(duì)列、文件存儲(chǔ))。

CQRS模式(Command Query Responsibility Segregation)

  • 命令端(Write Model)

    • 流程:接收命令(如CreateOrderCommand)→ 執(zhí)行業(yè)務(wù)邏輯 → 生成事件(如OrderCreatedEvent)。
    • 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD) :聚合根(Aggregate Root)封裝業(yè)務(wù)規(guī)則。
    • 事件溯源(Event Sourcing) :通過(guò)事件日志重建狀態(tài)(可選)。
  • 查詢端(Read Model)

    • 流程:訂閱事件 → 更新讀模型(如生成訂單列表視圖)。
    • 物化視圖(Materialized View) :定期同步寫庫(kù)數(shù)據(jù)到讀庫(kù)。
    • 實(shí)時(shí)同步:通過(guò)CDC(如Debezium)捕獲數(shù)據(jù)庫(kù)變更。

分層架構(gòu)與CQRS的結(jié)合(DDD架構(gòu))

  • 表現(xiàn)層:接收HTTP請(qǐng)求,區(qū)分命令(POST/PUT)與查詢(GET)。

  • 應(yīng)用層

    • 命令處理器:調(diào)用領(lǐng)域模型執(zhí)行業(yè)務(wù)邏輯,發(fā)布事件。
    • 查詢處理器:從讀模型獲取數(shù)據(jù),組裝DTO。
  • 領(lǐng)域?qū)?/strong>:定義聚合根、實(shí)體、值對(duì)象,封裝核心業(yè)務(wù)規(guī)則。

  • 基礎(chǔ)設(shè)施層

    • 寫存儲(chǔ):MySQL處理事務(wù)性操作。
    • 讀存儲(chǔ):Redis緩存熱點(diǎn)數(shù)據(jù),Elasticsearch支持復(fù)雜查詢。
    • 事件總線:Kafka傳遞領(lǐng)域事件,觸發(fā)讀模型更新。
全部評(píng)論

相關(guān)推薦

用戶增長(zhǎng) - 一面手撕:LRU- 平時(shí)的學(xué)習(xí)成績(jī)?cè)趺礃樱? 請(qǐng)介紹一下你的實(shí)際經(jīng)歷,重點(diǎn)說(shuō)說(shuō)你在貨拉拉做了什么,遇到了哪些問(wèn)題?- 這個(gè)項(xiàng)目是為了解決什么問(wèn)題?- 為什么不使用 MongoDB?這種場(chǎng)景聽(tīng)起來(lái)用 MongoDB 更合適嗎?- 為什么響應(yīng)時(shí)間(RT)會(huì)很大?原因是什么?- 如果 Redis 不可用,你們會(huì)怎么處理?- AES 存儲(chǔ)是下發(fā)給司機(jī)的嗎?我理解是這樣,對(duì)嗎?- 司機(jī)的密鑰和你們的是同一個(gè)嗎?- AES 里面存儲(chǔ)的是什么內(nèi)容?- 如果我拿到了 AES 的 token,是不是就能模擬登錄了?- 這個(gè)和時(shí)間戳有什么關(guān)系?- token 是如何進(jìn)行對(duì)比的?時(shí)間戳怎么對(duì)比?- 時(shí)間戳的作用是什么?- 如果別人拿到了這個(gè) token,能不能直接登錄?- 本地緩存和 Redis 二級(jí)緩存的機(jī)制能詳細(xì)講一下嗎?它解決了什么問(wèn)題?- 緩存的是什么內(nèi)容?是活動(dòng)詳情還是第一層緩存的數(shù)據(jù)?- 活動(dòng)內(nèi)容不會(huì)發(fā)生變更嗎?- 本地緩存具體是怎么實(shí)現(xiàn)的?這對(duì)后端壓力沒(méi)有影響嗎?- 你有做過(guò)性能對(duì)比嗎?- 平時(shí)用 HTTPS 還是 HTTP 比較多?- 有沒(méi)有用過(guò) RPC?- HTTP 有哪些請(qǐng)求方法?- 你了解 PUT 方法嗎?- 用 POST 接口也能實(shí)現(xiàn)刪除操作,為什么還需要單獨(dú)的 DELETE 方法?- 只用 DELETE 不安全嗎?- 既然 POST 更安全,為什么還需要 DELETE 方法?- 你了解 HTTP 的狀態(tài)碼嗎?用戶增長(zhǎng)-二面手撕:- 你覺(jué)得哪段經(jīng)歷對(duì)你的成長(zhǎng)幫助最大?- 你在這段經(jīng)歷中主要負(fù)責(zé)什么?- 在這個(gè)項(xiàng)目中,有什么讓你覺(jué)得驚艷的想法或新技術(shù)?你學(xué)到了什么?- 你剛才提到的是用 Redis 把訂單 ID 和活動(dòng) ID 關(guān)聯(lián)起來(lái)嗎?還是用的其他方式?- 權(quán)益卡的相關(guān)內(nèi)容是怎么生成的?- 你說(shuō)的瓶頸是指下單時(shí)根據(jù)距離和車型獲取活動(dòng) key 列表的壓力嗎?- 為什么說(shuō)是訂單 ID 和活動(dòng)列表的問(wèn)題?- 下單時(shí)還需要再獲取活動(dòng)列表嗎?這個(gè)性能問(wèn)題沒(méi)辦法避免嗎?- 大對(duì)象不會(huì)影響引用數(shù)目,是不是?- 你還做了哪些方面進(jìn)行預(yù)防這種情況?- 如何保證數(shù)據(jù)一致性?- 如果是分布式服務(wù),多臺(tái)服務(wù)器上本地緩存更新不一致怎么辦?- 你是怎么把路由寫入每個(gè)本地緩存的?- 什么時(shí)候通知 Redis 更新數(shù)據(jù)?是寫入時(shí)同時(shí)通知嗎?#牛客AI配圖神器#
點(diǎn)贊 評(píng)論 收藏
分享
評(píng)論
1
收藏
分享

創(chuàng)作者周榜

更多
正在熱議
更多
??途W(wǎng)
??推髽I(yè)服務(wù)