# 內部微服務,隊友開發更快速
### 2019 LaravelConf議題分享
<div style="font-size: 50%; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;">
微程式 / 業四 / Backend / 林鈺卿<br>
投影片:https://tinyurl.com/yyaaevel
</div>
---
## Outline
+ 在LaravelConf上聽到了什麼
+ 什麼是Monolithic
+ Microservice 的介紹
+ 兩者差異
---
## 在LaravelConf上聽到了什麼?
---
### 講者介紹
+ Eric
+ 任職於奧丁丁
+ 後端工程師
+ https://github.com/ericliao79
---
### 實際情境
一個電子商務網站可能會需要那些功能?
+ 銷售前端 <!-- .element: class="fragment" data-fragment-index="1" -->
+ 會員系統 <!-- .element: class="fragment" data-fragment-index="2" -->
+ 金流(信用卡, 匯款, 電子支付...) <!-- .element: class="fragment" data-fragment-index="3" -->
+ Email <!-- .element: class="fragment" data-fragment-index="4" -->
+ SNS <!-- .element: class="fragment" data-fragment-index="5" -->
---

---
需要開發第二個電子商務網站?
---

---
那開發第三個電子商務網站呢?
---
這樣的架構稱為<span style="font-size: 1.6em;">**Monolithic**</span>
---
## 什麼是Monolithic
一個單體式應用程式裡面有許多的邏輯、服務,
並且都有密不可分的關係。
---
當Monolithic系統持續擴大到一個限度後,
會開始會發現...
---
### 瓶頸現身
1. 各種服務之間依賴關係的複雜度迅速上升 <!-- .element: class="fragment" data-fragment-index="1" -->
2. 系統強健度的問題 <!-- .element: class="fragment" data-fragment-index="2" -->
3. 程式不易維護與擴展 <!-- .element: class="fragment" data-fragment-index="3" -->
4. 編譯、部署時間過長 <!-- .element: class="fragment" data-fragment-index="4" -->
---
那該怎麼辦呢?
---
其實還有一個與Monolithic相反的架構稱為**Microservice**
---
## 什麼是Microservice
---
### Microservice
是一種以<span style="font-size: 1.2em;">**業務功能**</span>為主的服務設計概念。
---
每一個服務都是<span style="font-size: 1.2em;">**自主運行**</span>,
並可用不同的技術上實現它們。
---
這聽起來很抽象!!
---
舉個例子

---
### 好處
1. 獨立部署 <!-- .element: class="fragment" data-fragment-index="1" -->
2. 獨立開發 <!-- .element: class="fragment" data-fragment-index="2" -->
3. 故障隔離 <!-- .element: class="fragment" data-fragment-index="3" -->
4. 可用不同的編程語言與工具開發 <!-- .element: class="fragment" data-fragment-index="4" -->
5. 易擴充 <!-- .element: class="fragment" data-fragment-index="5" -->
---
那使用Microservice有什麼缺點嗎?
答案是有的。<!-- .element: class="fragment" data-fragment-index="1" -->
---
要享受Microservice的好處是要付出<span style="font-size: 1.6em;">**代價**</span>的
---
### 需面臨的挑戰
1. 維運難度提高 <!-- .element: class="fragment" data-fragment-index="1" -->
2. 可能有重複的工作 <!-- .element: class="fragment" data-fragment-index="2" -->
3. DevOps要求 <!-- .element: class="fragment" data-fragment-index="3" -->
4. 資料一致性 <!-- .element: class="fragment" data-fragment-index="4" -->
5. 由於遠程調用而增加延遲 <!-- .element: class="fragment" data-fragment-index="5" -->
---
聽完了Monolithic與Microservice架構後
再來回顧一下<span style="font-size: 1.2em;">**兩者差異**</span>為何
---
簡單來說
---
把Monolithic比喻成<span style="font-size: 1.2em;">**大貨櫃**</span>
---
那麼Microservice就是將大貨櫃切成不同的<span style="font-size: 1.2em;">**小貨櫃**</span>

---
### Monolithic vs Microservice

---
## Thank you for listening.
{"metaMigratedAt":"2023-06-14T23:32:17.155Z","metaMigratedFrom":"Content","title":"內部微服務,隊友開發更快速","breaks":true,"contributors":"[{\"id\":\"10bd2c0b-6523-4e19-90a5-d1a7b1220838\",\"add\":7373,\"del\":4345}]"}