ant modernweb-modern web architecture design journey · 沒有一個架構能適用所有場景 ....

120
Modern Web Architecture Design Journey Ant [email protected] 2017-08-11

Upload: others

Post on 30-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

Modern Web ArchitectureDesign Journey

Ant

[email protected]

2017-08-11

Page 2: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

2/120

程式開發 X 資訊安全 X 智慧財產權 X 創業

自介

Page 3: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

3/120

程式開發 X 資訊安全 X 智慧財產權 X 創業

自介

懂一點程式開發

Page 4: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

4/120

程式開發 X 資訊安全 X 智慧財產權 X 創業

自介

台灣駭客年會 2 次的演講經驗

待過 3 年資訊安全產業

Page 5: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

5/120

程式開發 X 資訊安全 X 智慧財產權 X 創業

自介

涉獵一點著作權、商標權及專利權

撰寫過數篇發明專利

Page 6: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

6/120

程式開發 X 資訊安全 X 智慧財產權 X 創業

目前負責四間新創公司的技術選型

協助數間友人新創公司的架構討論無償

自介

Page 7: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

7/120

程式開發 X 資訊安全 X 智慧財產權 X 創業

目前負責四間新創公司的技術選型

協助數間友人新創公司的架構討論無償

自介

血淚史

Page 8: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

8/120

程式開發 X 資訊安全 X 智慧財產權 X 創業

目前負責四間新創公司的技術選型

協助數間友人新創公司的架構討論

自介

Page 9: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

9/120

技術選型

技術選型,選擇對公司或團隊最佳的技術組合

Page 10: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

10/120

技術選型

技術選型,選擇對公司或團隊最佳的技術組合理想

Page 11: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

11/120

技術選型

所謂技術選型,大多數情況仍由關鍵人物決定偏好例如 CTO或架構師

現實

Page 12: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

12/120

技術選型

所謂技術選型,大多數情況仍由關鍵人物決定偏好例如 CTO或架構師

現實

這是我遇過最多的抱怨!

Page 13: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

13/120

技術選型

所謂技術選型,大多數情況仍由關鍵人物決定偏好例如 CTO或架構師

現實

很多人認為【空降神兵】能解決問題。

但有時解決的反而是《提出問題的人》。公司內部?顧問?接案 / 外包?

Page 14: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

14/120

技術選型

所謂技術選型,大多數情況仍由關鍵人物決定偏好例如 CTO或架構師

現實

天降神兵: .NET 不行,全部改 Java 。

天降神兵: PHP 開發太慢,全部改 RoR 。

天降神兵: AngularJS 沒人用,全部改 VueJS 。

這些決策未必錯,但問題是《為什麼》

以及更重要的:有無《信服人的理由》

Page 15: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

15/120

偶爾任性是可愛,一天到晚任性是妖孽~ ANT ~

Page 16: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

16/120

➊架構先決 無視人員、流程只講技術,是耍性子

架構會影響公司文化、商業擴展;思維更要超越程式碼層次CTO/ 架構師不該只懂技術

Page 17: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

17/120

➋沒有完美的架構,只有最適的架構無視場景只講架構,是耍流氓

若無法舉出架構的缺陷,代表你還無法掌握盲目套用別人的架構,並不會讓你變得跟他一樣好

沒有一個架構能適用所有場景

Page 18: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

18/120

➌架構是演進的,預想但不過早調優無視未來只求急行軍,是耍短視

兵馬未動,糧草先行,預想下一步,下下一步,甚至下下下一步 ...歡迎進入八奇的思考領域

Page 19: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

19/120

Costreduction

Flexibility

Time to market

Businessdebt

Prematuredebt

Scalabilitydebt

Optimum

Page 20: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

20/120

Costreduction

Flexibility

Time to market

Businessdebt

Prematuredebt

Scalabilitydebt

Optimum

省 好

Page 21: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

21/120

Costreduction

Flexibility

Time to market

Businessdebt

Prematuredebt

Scalabilitydebt

Optimum

Architectural debt

{ }省 好

架構債

Page 22: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

22/120

有經驗的技術團隊

Page 23: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

23/120

有經驗的技術團隊

喜歡採用最新、最好、最大的架構

Page 24: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

24/120

You Are Not GoogleFacebookAmazon

別為了高大尚,而迷失自我

Page 25: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

25/120

欠缺架構經驗的團隊

Page 26: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

26/120

Non-reusable CodeNon-HA / NonScalabilityLegacy Code

債築債

問題

Page 27: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

27/120

(起初 )不缺錢的團隊

Page 28: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

28/120

Fund raising !or

Burnout !?利逐債

奔耗

Page 29: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

29/120

Cost reduction Flexibility

Time to market

Businessdebt

Prematuredebt

Scalabilitydebt

Optimum

Architectural debt

Page 30: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

30/120

Cost reduction Flexibility

Time to market

Businessdebt

Prematuredebt

Scalabilitydebt

Optimum

延展性不足以支撐業務成長

架構升級積重難返

約束 (硬限制 )未滿足

Architectural debt

徵兆

Page 31: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

31/120

救世主 ?

Page 32: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

32/120

Page 33: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

33/120

Agile? 敏捷教練?

Page 34: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

34/120

Architect? 架構師?

Agile? 敏捷教練?

Page 35: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

35/120

Agile Architect

Agile與Architect 是有交集的

Page 36: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

36/120

Good architecture brings agility

好的架構帶來敏捷

- Saugatuck -

Page 37: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

37/120

Minimum Viable Product最小可行產品

Page 38: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

38/120

MVP 若沒有控制好,技術債將迅速增長

Minimum Viable Product

先前程式少能復用遺舊程式難以去除架構變動牽扯不清

最小可行產品

Page 39: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

39/120

E = mc2

Page 40: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

40/120

E = mc2

Errors = (more code)2

Page 41: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

41/120

E = mc2

錯誤隨著程式碼數量呈平方次成長

Errors = (more code)2

Page 42: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

42/120

最後廢碼定理程式廢碼產生的速率,隨著接近專案最後死線呈等比倍增

Page 43: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

43/120

真相只有一個,但死相可以有很多個

~ ANT ~

Page 44: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

44/120

Minimum Viable Product

Debt

Time

Debt Ceiling

理想與現實

Debt Baseline

Page 45: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

45/120

Minimum Viable Product

Debt

Time

Debt Ceiling

理想與現實

理想

Debt Baseline

Page 46: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

46/120

Debt

Time

Debt Ceiling

Minimum Viable Product理想與現實

現實

Debt Baseline

Page 47: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

47/120

Debt

Time

Debt Ceiling

Minimum Viable Product

Pivot?

理想與現實

現實

Debt Baseline

Pivot?

Pivot?

Page 48: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

48/120

Pivot聽起來很稀鬆平常,就像放屁一樣,但只有蠟筆小新放屁會飛

~ Ricky Chen ~

Page 49: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

49/120

Minimum Viable Product

市場驗證成功後,我再拿投資人的錢來技術轉型就好了。

大家可能聽過一些說法:

事實上,迅速成長的公司,沒太多時間進行技術轉型。

再加上之前為了快速驗證MVP 所遺留的技術債。

只會讓技術轉型變得遙不可及。

Page 50: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

50/120

Minimum Viable Product

現有團隊不行,我砸錢找大神 (大牛 )重構系統總可以吧。

於是:

Page 51: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

51/120

Minimum Viable Product

強烈的既視感?

Page 52: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

52/120

更重要的是

有考慮過大神 (大牛 )的感受嗎?架構重構是個苦工,很多時候他們也是千百個不願意

Page 53: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

53/120

空中換引擎

落地換引擎

技術難度高。

但迅速成長的公司,仍然有很多需求待開發。同時還要處理累積的技術債,很可能因債築債而嚴重惡化。

技術難度低。

但商業模式是否能夠允許新功能推進緩慢或無進展?

空中小修地面重建

資源投入巨大。

不是現行團隊拆分戰力,就是要另招一批團隊開發新引擎。但若問題本質不解決,新引擎未來也會遭遇一樣的問題。

Page 54: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

54/120

架構債

非技術上 技術上

Page 55: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

55/120

架構債

非技術上 技術上

需求的坑

Page 56: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

56/120

架構債

非技術上 技術上

需求的坑 程式的坑

Page 57: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

57/120

架構債

非技術上 技術上

需求的坑 程式的坑

Page 58: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

58/120

架構債

非技術上 技術上

需求的坑 設計的坑 程式的坑

Page 59: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

59/120

架構債

非技術上 技術上

需求的坑 設計的坑 程式的坑

{Agile, Scrum, Kanban, DevOps, TDD, BDD, ...

Page 60: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

60/120

架構債

非技術上 技術上

需求的坑 設計的坑 程式的坑

{Conceptual IntegrityConceptual debt

Agile, Scrum, Kanban, DevOps, TDD, BDD, ...( 概念完整性 )

Page 61: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

61/120

架構之始,在於需求

架構債

非技術上 技術上

需求的坑 設計的坑 程式的坑

Page 62: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

62/120

架構債

非技術上 技術上

需求的坑 設計的坑 程式的坑

我以為你知道!

這本來就是要的,只是我忘了講!

我要的不是這樣!

我要的你應該要替我想到,我又不懂技術

你沒跟我說過。

怪我囉。

可是需求書是這樣 /需求書不明確

你 !!!

出了問題時

需求方 開發方

Page 63: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

63/120

架構債

非技術上 技術上

需求的坑 設計的坑 程式的坑

我以為你知道!

這本來就是要的,只是我忘了講!

我要的不是這樣!

我要的你應該要替我想到,我又不懂技術

你沒跟我說過。

怪我囉。

可是需求書是這樣 /需求書不明確

你 !!!

程式還是要趕,

班還是照加。

出了問題時

需求方 開發方

Page 64: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

64/120

需求永遠是不明確的

但我們能做的是讓架構更具彈性

Page 65: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

65/120

需求永遠是不明確的

但我們能做的是讓架構更具彈性

被動 主動

需求方 開發方 需求方 開發方

Page 66: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

66/120

被動 主動

Dependency inversion principle依賴反轉原則

需求方 開發方 需求方 開發方

需求永遠是不明確的

但我們能做的是讓架構更具彈性

Page 67: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

Modern Web 2016

恰如其分的MySQL設計技巧

[email protected]

2016-08-24

引用去年簡報

Page 68: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

68/120

Business

License

Elastic business

Workload

Technology

Scale-upApplicationConnectionDatabaseFile systemOS KernelHardware

Scale-outReplicationClusteringShardingDisaster RecoveryMulti Regional Resiliency

CONSILIENCE

Architecture

and more ...

引用去年簡報

Page 69: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

69/120

當業務需求變更程式設計時

預想但不過早調優

總工程師不該把每次新需求都認為獨立需求(多想二分鐘,團隊可以不必自虐)

Elastic business引用去年簡報

Page 70: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

70/120

預想但不過早調優

Page 71: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

71/120

Premature optimization is the root of all evil.過早最佳化是萬惡的根源

Page 72: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

72/120

Premature optimization is the root of all evil.過早最佳化是萬惡的根源

手拿菜刀砍電線,一路火花帶閃電

Page 73: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

73/120

Premature optimization is the root of all evil.過早最佳化是萬惡的根源

手拿菜刀砍電線,一路火花帶閃電

Page 74: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

74/120

We should forget about small efficiencies,

say about 97% of the time:

Premature optimization is the root of all evil.

Yet we should not pass up our opportunities in that critical 3%.

Page 75: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

75/120

We should forget about small efficiencies,

say about 97% of the time:

Premature (micro) optimization is the root of all evil.

Yet we should not pass up our opportunities in that critical 3%.

Page 76: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

76/120

Premature (micro) optimization is the root of all evil.

Do some { Architectural optimizations, Algorithms, … } early.

Page 77: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

77/120

Premature (micro) optimization is the root of all evil.

Do some { Architectural optimizations, Algorithms, … } early.

程式與架構需懂得區分【架構】異動會牽扯組件邊界,影響巨大

Page 78: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

78/120

Premature (micro) optimization is the root of all evil.

Do some { Architectural optimizations, Algorithms, … } early.

即未來需求變更時,屬程式異動,還是架構異動?

程式與架構需懂得區分【架構】異動會牽扯組件邊界,影響巨大

簡言之,如果需求發生異動,需花多久時間滿足?

Page 79: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

79/120

狀態

原表格設計

Elastic business

id name ... is_deleted

1 Apple ... 0

2 Banana ... 1

引用去年簡報

Page 80: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

80/120

狀態

新業務需要儲存「鎖定」狀態

Elastic business

id name ... is_deleted

1 Apple ... 0

2 Banana ... 1

id name ... is_deleted is_locked

1 Apple ... 0 1

2 Banana ... 1 0

引用去年簡報

Page 81: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

81/120

狀態

其實若狀態是沒交集的,則可以合併

Elastic business

id name ... status

1 Apple ... 2

2 Banana ... 0

id name ... is_deleted is_locked

1 Apple ... 0 1

2 Banana ... 1 0

{ 0: deleted, 1: enabled, 2: locked }

引用去年簡報

Page 82: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

82/120

標籤雲

原表格設計

Elastic business

id name tag1

1 Apple admin

2 Banana reporter

3 Cherry reporter

SELECT * FROM {Table}WHERE tag1 = ‘admin’

引用去年簡報

Page 83: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

83/120

標籤雲

新增標籤

Elastic business

id name tag1 tag2 tag3

1 Apple admin reporter programmer

2 Banana reporter programmer NULL

3 Cherry reporter admin NULL

SELECT * FROM {Table}WHERE (tag1 = ‘admin’ OR tag2 = ‘admin’ OR tag3 = ‘admin’) AND (tag1 = ‘reporter’ OR tag2 = ‘reporter’ OR tag3 = ‘reporter’)

SELECT * FROM {Table}WHERE ‘admin’ IN (tag1, tag2, tag3) AND ‘reporter’ IN (tag1, tag2, tag3)

ALTER TABLE !!

引用去年簡報

Page 84: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

84/120

Tag

Elastic business

id tag

1 admin

1 reporter

1 programmer

2 reporter

... ...

新增標籤 (另他法 )

標籤雲

id name X X X

1 Apple X X X

2 Banana X X X

SELECT * FROM {Table} INNER JOIN ‘Tag’ AS t1 USING (id) INNER JOIN ‘Tag’ AS t2 USING (id)WHERE t1.tag = ‘admin’ AND t2.tag = ‘reporter’

引用去年簡報

Page 85: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

85/120

Elastic business

或是M:N

標籤雲

id name

1 Apple

2 Banana

id tag_id

1 1

1 2

1 3

2 2

2 3

tag_id name

1 admin

2 reporter

3 programmer

引用去年簡報

Page 86: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

86/120

Elastic business廣告需求

營運有新的需求,受眾在一天內不要看到相同廣告。

瞭解,預計一個工作天。

第一天

引用去年簡報

Page 87: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

87/120

Elastic business廣告需求

營運有新的需求,受眾在小時內不要看到相同廣告。

瞭解,預計二個工作天。

第二天

時間粒度不同

引用去年簡報

Page 88: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

88/120

Elastic business廣告需求

營運有新的需求,受眾在一天內不要看到同類廣告。

瞭解,預計八個工作天。

第三天

目標粒度不同

不能一次講清楚嗎?

引用去年簡報

Page 89: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

89/120

Elastic business廣告需求

受眾在M時間內不要看到 N廣告

預想

該需求的延伸會是什麼?

M → 年 /季 /月 /週 / 時 /分 /秒N → 相同 /同類看到的次數? 1/2/3...裝置有別?區域?廣告主屬性?

引用去年簡報

Page 90: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

90/120

架構債

非技術上 技術上

需求的坑 設計的坑 程式的坑

KISS(Keep it simple, stupid!)DRY(Don't repeat yourself)SOLID Principles...

略過

Page 91: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

91/120

架構債

非技術上 技術上

需求的坑 設計的坑 程式的坑

設計:權衡需求與實現的藝術

Page 92: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

92/120

Business

License

Elastic business

Workload

Technology

Scale-upApplicationConnectionDatabaseFile systemOS KernelHardware

Scale-outReplicationClusteringShardingDisaster RecoveryMulti Regional Resiliency

CONSILIENCE

Architecture

and more ...

引用去年簡報

Page 93: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

93/120

Workload

Processing Intensive Capacity

CPU intensive

Memory intensive

Storage/IO intensive

Bandwidth intensive

OLTP

OLAP

Data warehouse

Throughput

Latency

Memory footprint

Service-level agreement

Bond

Performance

Security

Cost restriction

引用去年簡報

Page 94: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

94/120

Workload

Processing Intensive Capacity

CPU intensive

Memory intensive

Storage/IO intensive

Bandwidth intensive

OLTP

OLAP

Data warehouse

Throughput

Latency

Memory footprint

Service-level agreement

Bond

Performance

Security

Cost restriction

引用去年簡報

Page 95: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

95/120

WorkloadCapacity

Latency Memoryfootprint

Trade-off

Throughput

引用去年簡報

Page 96: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

96/120

WorkloadCapacity

High throughput Low latency

引用去年簡報

Page 97: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

97/120

WorkloadCapacity

High throughput Low latency

重點在於找出需求的【硬限制】

引用去年簡報

Page 98: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

98/120

遇到瓶頸還不是最慘,慘得是過了瓶頸,還有瓶蓋~ Anonymous ~

Page 99: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

99/1202015

千萬人同時在線電子商務、線上出版媒體

低延遲回應廣告平台 RTB(30ms)

高頻交易 (0.5~3ms)

多人線上遊戲 (30fps: 100~150ms, 60fps: 60~70ms)

醫療等關鍵設備

Page 100: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

100/120

WorkloadCapacity

Low latency

非指PHP 無法做到低延遲 (例如30ms),而是

我們願意 (只能 )花多少資源(資金硬限制),以及

我們手中工程師的數量與實力(人力硬限制)。很多事情 (例如 latency)不是靠 Scale Out 能解決

高手人數?訓練成本?

Page 101: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

101/120

WorkloadCapacity

Low latency

此時, PHP相較C/C++/Go通常會更辛苦。

伺服器規格需求較高?較多?

工程師技能要求較高?

徵聘更強的工程師?

案主:不好意思,我只能給你兩台一般的伺服器

PHP Extension ? Swoole ?奇技淫巧?未來徵人的訓練成本?

高手為什麼要來?有無足夠的產品吸引力?足夠的給薪條件?

Page 102: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

102/120Ref: http://eugenedvorkin.com/seven-micro-services-architecture-advantages/

Page 103: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

103/120

Monolith

Microservices

SOA

Nanoservices

Picoservices

SOA

Page 104: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

104/120

Monolith

Microservices

SOA

Nanoservices

Picoservices

SOA

有沒有能力駕馭微服務、奈米服務、微微服務?

Page 105: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

105/120

MonolithFirst

《單體》優先的技術選型

~ Martin Fowler (ThoughtWorks的首席科學家) ~

Ref: https://martinfowler.com/bliki/MonolithFirst.html

對於《微服務》,他注意到了這兩種問題,

➊幾乎所有成功的微服務案例,都是從過大的《單體》拆分的。

➋幾乎所有他見過一開始就投入《微服務》的案例,最後都遭遇嚴重麻煩。

Page 106: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

106/120

MonolithFirst

網友提出不同見解

~ krisdol ~

Ref: https://news.ycombinator.com/item?id=9652893

Fowler 遇到的案例都是出問題的公司。 ThoughtWorks是一家顧問公司,也就是說,他們會在某個公司出現問題時提供幫助。

簡言之, Fowler 所見都是不對的組織採用了錯誤的架構,也就是他會見到一開始採用《微服務》而失敗的公司,但不會見到成功的。

Page 107: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

107/120

MonolithFirst

網友提出不同見解

~ room271 ~

Ref: https://news.ycombinator.com/item?id=9652893

當你是顧問時,一開始很容易提倡採用《單體》,因為你會在《單體》出現問題前,就已經完成專案離開了。

已有兩年《微服務》經驗的他,提出了兩個見解:

➊當公司或團隊很小時,除非你們技藝超群,否則不建議採用《微服務》。

➋當公司或團隊很大時,採用《微服務》有助於解隅組織並促進敏捷。

Page 108: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

108/120Ref: https://www.slideshare.net/ufried/towards-complex-adaptive-architectures (p37)

組織會影響架構

Page 109: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

109/120

Monolith

Microservices

SOA

Nanoservices

Picoservices

SOA

Page 110: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

110/120

救世主 ?

Page 111: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

111/120

Page 112: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

112/120

Serverless

Serverless ≠ Architectureless

Page 113: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

113/120

Serverless

Serverless ≠ Architectureless

Ref: https://martinfowler.com/articles/serverless.html

Page 114: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

114/120

Serverless

Serverless ≠ Architectureless

Ref: https://aws.amazon.com/serverless/

Page 115: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

115/120

➊架構先決

➋沒有完美的架構,只有最適的架構

➌架構是演進的,預想但不過早調優

Page 116: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

116/120

Sacrificial Architecture (犧牲的架構 )

~ Martin Fowler ~

即使捨棄現有架構,重構組件新架構,也未必是一件失敗的事

重點是【為什麼】、【新架構怎麼執行】及【何時執行】

簡言之,如果清楚明白打掉重練比較好,就勇敢執行吧!

Ref: http://www.infoq.com/news/2014/11/sacrificial-architecture

Page 117: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

117/120

Sacrificial Architecture (犧牲的架構 )

~ Martin Fowler ~

即使捨棄現有架構,重構組件新架構,也未必是一件失敗的事

重點是【為什麼】、【新架構怎麼執行】及【何時執行】

簡言之,如果清楚明白打掉重練比較好,就勇敢執行吧!

Ref: http://www.infoq.com/news/2014/11/sacrificial-architecture

但免不了的,還是要面臨這些問題

Page 118: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

118/120

空中換引擎

落地換引擎

技術難度高。

但迅速成長的公司,仍然有很多需求待開發。同時還要處理累積的技術債,很可能因債築債而嚴重惡化。

技術難度低。

但商業模式是否能夠允許新功能推進緩慢或無進展?

空中小修地面重建

資源投入巨大。

不是現行團隊拆分戰力,就是要另招一批團隊開發新引擎。但若問題本質不解決,新引擎未來也會遭遇一樣的問題。

Page 119: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

119/120

共 勉 之

Page 120: Ant ModernWeb-Modern Web Architecture Design Journey · 沒有一個架構能適用所有場景 . 18/120 架構是演進的,預想但不過早調優 ... 更重要的是 有考慮過大神(大牛)的感受嗎?

120/120

[email protected]

https://www.facebook.com/yftzeng.tw