偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

微服務(wù)的十大問題

開發(fā) 架構(gòu)
作為工作多年的老司機,我主導(dǎo)過3次微服務(wù)重構(gòu),見過太多團隊掉進微服務(wù)陷阱:拆分時春風(fēng)得意,運維時步履維艱。某電商平臺從單體拆分為120個微服務(wù)后,故障率飆升300%,排障時間從10分鐘惡化到3小時。

前言

作為工作多年的老司機,我主導(dǎo)過3次微服務(wù)重構(gòu),見過太多團隊掉進微服務(wù)陷阱:拆分時春風(fēng)得意,運維時步履維艱。

某電商平臺從單體拆分為120個微服務(wù)后,故障率飆升300%,排障時間從10分鐘惡化到3小時。

這篇文章跟大家一起聊聊微服務(wù)中的10個最常見的問題,希望對你會有所幫助。

1.錯誤的拆分問題

典型場景:按代碼包名拆分服務(wù)

圖片圖片

后果

  • 訂單查詢需調(diào)用4個服務(wù)
  • 接口延遲從50ms→350ms
  • 鏈路追蹤日志爆炸式增長

正確方案:基于業(yè)務(wù)能力拆分

圖片圖片

拆分原則

  1. 單一職責(zé)(一個服務(wù)解決一類問題)
  2. 團隊自治(2 Pizza Team可獨立交付)
  3. 數(shù)據(jù)自治(服務(wù)獨占數(shù)據(jù)庫)

2.分布式事務(wù)問題

錯誤示范:跨服務(wù)數(shù)據(jù)庫操作

@Transactional // 本地事務(wù)失效!  
public void createOrder(OrderDTO dto) {  
    // 1.訂單服務(wù)寫庫  
    orderService.save(dto);  
    
    // 2.調(diào)用庫存服務(wù)  
    stockFeignClient.deduct(dto.getSkuId());  
}

后果:訂單創(chuàng)建成功但庫存未扣減 → 超賣事故

解決方案:Saga模式 + 可靠事件

圖片圖片

代碼實現(xiàn)

@SagaStart  
public void createOrder(OrderDTO dto) {  
    Saga.with("freezeStock", () -> stockClient.freeze(dto))  
        .with("saveOrder", () -> orderService.save(dto))  
        .compensate("saveOrder", () -> orderService.delete(dto.getId()))  
        .compensate("freezeStock", () -> stockClient.unfreeze(dto))  
        .execute();  
}

3.連環(huán)雪崩問題

場景復(fù)現(xiàn):服務(wù)A → 服務(wù)B → 服務(wù)C,C超時導(dǎo)致全鏈路崩潰

圖片圖片

防御方案:熔斷+降級+超時

@FeignClient(name = "stock-service",  
  configuration = FeignConfig.class,  
  fallback = StockFallback.class) // 降級類  
public interface StockClient {  
    @GetMapping("/deduct")  
    @TimeLimiter(fallbackMethod = "defaultResult") // 超時控制  
    CompletableFuture<Boolean> deduct(@RequestParam String skuId);  
}  

// 熔斷配置  
circuitBreaker:  
  failureRateThreshold: 50  
  waitDurationInOpenState: 10s  
  slidingWindowSize: 20

4.配置管理混亂問題

反模式:配置文件散落各服務(wù)

├── user-service  
│   ├── application-dev.yml  
│   ├── application-prod.yml  
├── order-service  
│   ├── application-dev.yml  
│   └── application-prod.yml

后果

  • 修改日志級別需重新部署10個服務(wù)
  • 生產(chǎn)環(huán)境誤用dev配置

正確方案:統(tǒng)一配置中心

圖片圖片

關(guān)鍵配置

spring:  
cloud:
    nacos:
      config:
        server-addr:192.168.1.10:8848
        file-extension:yaml
        shared-configs:
          -data-id:common.yaml# 公共配置

5.日志追蹤碎片化問題

問題現(xiàn)象

[user-service] 用戶查詢成功 userId=100  
[order-service] 訂單創(chuàng)建失敗 userId=100  
[payment-service] 支付超時 userId=100

痛苦:跨3個日志系統(tǒng)拼湊調(diào)用鏈

解決方案:Sleuth+Zipkin全鏈路追蹤

圖片圖片

日志格式

2023-08-20 14:30 [user-service,7a3b,9f2c] INFO 用戶查詢  
2023-08-20 14:30 [order-service,7a3b,d8e1] ERROR 訂單創(chuàng)建失敗

其中:

  • 7a3b:全局Trace ID
  • 9f2c/d8e1:各服務(wù)ID

6.數(shù)據(jù)庫拆分問題

錯誤操作:服務(wù)共用數(shù)據(jù)庫

圖片圖片

后果

  • 訂單表鎖阻塞用戶注冊
  • 無法獨立擴縮容

正確設(shè)計:數(shù)據(jù)庫垂直拆分

圖片圖片

分庫分表策略

// 用戶ID取模分片  
public String determineDatabase(Long userId) {  
    int dbIndex = userId % 4;  
    return "user_db_" + dbIndex;  
}

7.接口兼容性問題

血案:訂單服務(wù)升級v2接口,未通知支付服務(wù)

圖片圖片

解決方案:三版本策略

/v1/createOrder (舊版)  
/v2/createOrder (新版)  
/v3/createOrder (預(yù)發(fā)布)

Spring Cloud灰度發(fā)布

spring:  
cloud:
    gateway:
      routes:
        -id:order_v2
          uri:lb://order-service
          predicates:
            -Header=version,v2
          filters:
            -StripPrefix=1

8.持續(xù)集成問題

典型問題:120個服務(wù)獨立構(gòu)建 → 流水線擁堵

圖片圖片

優(yōu)化方案

  • 分層構(gòu)建

圖片圖片

  • 并行構(gòu)建
// Jenkinsfile并行配置  
stage('Parallel Build') {  
  parallel {  
      stage('Service A') { steps { sh './build-serviceA.sh' } }  
      stage('Service B') { steps { sh './build-serviceB.sh' } }  
  }  
}

9.監(jiān)控缺失問題

慘痛教訓(xùn)

  • 磁盤寫滿8小時無人察覺
  • 數(shù)據(jù)庫連接池耗盡導(dǎo)致全站崩潰

監(jiān)控體系黃金四件套

圖片圖片

關(guān)鍵告警規(guī)則

rules:  
-alert:HighErrorRate
    expr:sum(rate(http_server_requests_errors_total[5m]))>0.5
    for:2m
-alert:DBConnectionExhausted
    expr:db_connections_active>db_connections_max*0.9
    for:1m

10.團隊協(xié)作問題

現(xiàn)實困境

團隊

技術(shù)棧

部署方式

用戶組

Java+MySQL

K8s

訂單組

Go+Postgres

VM

支付組

Node+Mongo

Serverless

解決方案

10.1統(tǒng)一技術(shù)公約

  1. RESTful接口規(guī)范
  2. 錯誤碼全局定義
  3. 日志格式標準
  4. 健康檢查端點/actuator/health

10.2基礎(chǔ)設(shè)施共享

圖片圖片

總結(jié)

由此可見,微服務(wù)如果用不好問題還是挺多的,需要有豐富的實戰(zhàn)經(jīng)驗,才能把微服務(wù)項目真正的做好。

微服務(wù)的三層防御體系

圖片圖片

微服務(wù)的十條軍規(guī)

  1. 服務(wù)粒度按業(yè)務(wù)能力而非代碼量
  2. 跨服務(wù)事務(wù)用最終一致性替代強一致
  3. 必須配置熔斷超時閾值
  4. 配置中心統(tǒng)一管理所有環(huán)境參數(shù)
  5. 全鏈路追蹤ID穿透所有服務(wù)
  6. 每個服務(wù)獨占數(shù)據(jù)庫
  7. 接口版本兼容至少2個迭代
  8. 建立分層構(gòu)建流水線
  9. 核心指標監(jiān)控覆蓋率100%
  10. 制定跨團隊技術(shù)公約


微服務(wù)的本質(zhì)不是技術(shù)升級,而是組織關(guān)系的重構(gòu)。

責(zé)任編輯:武曉燕 來源: 蘇三說技術(shù)
相關(guān)推薦

2019-10-21 08:31:34

容器微服務(wù)docker

2022-03-09 23:28:31

Java開發(fā)異常

2022-06-16 11:02:18

IT領(lǐng)導(dǎo)者首席信息官

2023-09-19 10:19:24

2012-02-14 09:59:09

NoSQLCouchDB

2013-07-25 14:56:37

JavaEE 性能

2013-06-21 14:36:02

JavaEEx性能

2015-11-02 14:15:05

2009-07-16 10:04:56

Java語言

2009-12-08 14:42:30

Windows 7操作

2024-06-21 14:13:45

2014-01-16 09:25:46

2013-01-18 11:18:02

2023-08-03 09:45:52

2021-03-05 11:09:46

Go框架微服務(wù)

2011-03-11 14:36:56

SQL Server數(shù)

2011-11-16 09:43:07

2011-03-16 13:54:51

十大問題應(yīng)用iOS

2013-08-29 09:50:07

云性能測試云安全聯(lián)盟CSA

2017-09-27 15:02:27

SDN開源項目網(wǎng)絡(luò)
點贊
收藏

51CTO技術(shù)棧公眾號