DDD Taiwan Conf 2020速記

Rex Wang
5 min readDec 10, 2020

--

最近實在有點忙亂,一直找不到時間可以完整的寫下我在DDD Taiwan Conf 2020談的內容,趁著睡不著的晚上,簡單寫下我談的內容。

  1. 關於我

寫過GPS與光碟機韌體

參加過幾個專案:電子採購系統、電子商務系統、支付系統、網路銀行

扮演過程式設計師、分析師、架構師、PM等角色

2. 什麼是設計

紮實的軟體工程比耍花槍重要

設計沒有標準答案,不是:百王之無變,足以為道貫

Design Patterns

Clean Architecture

建築的永恆之道

3. 我認識的DDD

涵蓋軟體開發生命週期的方法論

可以外掛很多方法論與 Design Pattern

就像瑞士刀

有好多可以增強補述的

是很好的軟體工程學習指引

單體應用也應該用

DDD跟微服務沒有絕對的關係XD

4. 我認識的微服務

不要為了微服務而微服務

微服務劃分方法不是只有一種,可以用康威定律劃分、用性能需求/高可用/變動頻繁劃分、用DDD/Event Storming

微服務也有可靠度的數學公式

使用message queue比用API更可靠與方便

從 Bounded Context 對應到每個微服務,應該理解到,以後應以小資料表對應到每個微服務

從梳理資料庫開始切分微服務,可行嗎?想想上百個欄位的資料表,層層堆疊的view,忘記是做什麼用的Store Producer,如果乘上這些東西的owner,還很樂觀的覺得這條路可行?況且,先開始處理資料庫,就是Data Driven不是Domain Driven,不是嗎?XD

5. 事件驅動架構

服務之間不用註冊與發現

Apache Kafka是一個非常好的解決方案

可以運用Avro 做序列化與反序列化

記得搭件Schema Registry,可以享受多版本的序列化與容錯功能

5. 微服務的交易問題與解決方法

SAGA Pattern

試想拿著銀行A的提款卡,到銀行B的提款機,轉帳給銀行C的帳戶,這就是SAGA Pattern

CAP理論告訴我們,分散式系統沒辦法做到強一致性

6. Event Sourcing

你的存摺就是一種Event Sourcing

Oracle DB的 redo log,也是用這個原理

只有寫入,不需要鎖定資料列進行修改,性能更好;可以觀察與重現資料的變化過程

可以用來對帳

能不能做到Event Sourcing 跟微服務無關XD

7. CQRS

CQS是 function等級的設計

CQRS是 module等級的設計

CQS可以讓程式碼更簡潔的規劃方式,也是最起碼可以採用的結構

CQRS的優點,性能更好、容易擴充、單一責任;CQRS不一定要分出讀跟寫的DB

讀跟寫的DB之間需要用CDC工具

能不能做到CQRS跟微服務無關XD

8. Clean Architecture

Uncle Bob 認為DB只不過是一種IO

內層是高層,外層是低層

內層是entity與use case,外層是IO

從內而外思考,由外而內相依;外層是IO與Framework

SOLID Principle

運用反向相依達到解耦合CQRS在Clean Architecture 實作時,在需要的時候,讀的部分可以打破分層原則

每一顆微服務都可以是一個Clean Architecture

有沒有做到Clean Architecture跟微服務無關XD

9. Strangler Pattern

系統遷移不要大爆炸的方式,絞殺者模式才安全

絞殺者模式需要考量資料補遺,以維持原系統可以正常繼續使用

補充資料:

搞笑談軟工 — Clean Architecture之CQRS Pattern(還有很多,喜歡自己挖XD)

http://teddy-chen-tw.blogspot.com/2020/09/clean-architecturecqrs-pattern.html

CAP 定理
https://en.wikipedia.org/wiki/CAP_theorem

Bounded Context
https://martinfowler.com/bliki/BoundedContext.html

Apache Avro™ 1.10.1 Getting Started
https://avro.apache.org/docs/current/gettingstartedjava.html

Schema Registry Overview
https://docs.cloudera.com/csp/2.0.1/schema-registry-overview/topics/csp-schema_registry_overview.html

Developing microservices with aggregates
https://youtu.be/7kX3fs0pWwc

Event Storming and Spring with a Splash of DDD
https://spring.io/blog/2018/04/11/event-storming-and-spring-with-a-splash-of-ddd

Clean Architecture with Spring
https://youtu.be/cPH5AiqLQTo

--

--

Rex Wang

最近看了一些網路技術大神建議,藉由寫部落格來記錄自己的學習歷程,並且可以累積自己的技術能力。於是,繼多年前雜誌技術編輯生涯,我再度展開了屬於自己的技術寫作之旅。