iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
Software Development

什麼都不會還敢說你是 RD 啊?畢業後的後端入職前準備系列 第 2

【Day 2】什麼是分散式系統?RPC?

為了不讓隊友 panic,先發文,正在修改,有興趣可以明日觀看。

1.1 Introduction

為何一個系統要分散?

  • intrinsically distributed:要傳訊息給另一個朋友,這樣的動作一定需要手機間用網路溝通。
  • for better reliability:當某個電腦掛掉時,整個系統還能正常運作。
  • for better performance:向比較近的伺服器要資料,例如 CDN
  • solve bigger problems:有些運算需要大量資料和運算,一台電腦裝不下。

雖然有種種好處,但是一個分散式系統,也有許多問題需要特別注意,
網路不可靠、電腦會當掉,
這也是之後要討論的種種課題~

1.2 Computer Networking

分散式系統能夠成立,建立於計算機網路的基礎。
而種種網路協定、訊息怎麼被封裝和 encode 並在網路中傳輸,都是計算機網路的範圍。

分散式系統的設計則注重於不同 nodes 之間如何合作完成共同的任務,
例如需要傳送哪些訊息?
要怎麼處理收到的訊息?

分散式系統與不可靠的網路

Node:節點,通常是指一台裝置,例如手機或電腦。
Link:節點之間需要某種連結,才能夠溝通。例如用電線把兩台地腦接起來、或是透過 Wifi 連上網路。

可以想見的,
一台電腦可能當機、一支手機可能掉到水裡永久 byebye。
Wifi 訊號常常隔了一個牆就衰減很多;
實體線路的話,可以被牛踩、被鯊魚咬、還能被鐵鍬駭客敲爆。

Latency and bandwidth

  • Latency:訊息傳送到一抵達的時間
  • Bandwidth:單位時間內能傳送的訊息量

如果車車載著超大容量硬碟從台北到墾丁,
這個 latency 挺高的,需要約 5 個小時,到了地點才能開始傳輸資料。
不過 bandwidth 也很高,如果這是一個能夠高速寫入的 SSD。

1.3 Remote Process Call (RPC)

OS 告訴我們,一台電腦中的 process 要互相溝通,
可以使用 shared memory、pipe 等,這些稱作 IPC(Inter-process communication)。

而分散式系統中的節點們若需要互相聯繫溝通,則需要透過網路,
常常使用 RPC(Remote Process Call)。

RPC

遠端 function call,function definition 跟遠端實際的 function 一樣。

  • 其實就是把 input 包一包(稱作 marshall)送一個 request 過去遠端處理,然後把對方吐的 output response 轉成可用的物件。
  • Local Transparency: 希望 call remote function 就像 call local function 一樣。
  • 舉例:REST api, gRPC, Ajax

Service-oriented Architecture (SOA)

  • 也稱為 micro-services
  • 把一個龐大複雜的程式切分成很多跑在不同 node 上的 micro-services,並使用 RPC 互相溝通。

Interface Definition Language (IDL)

不同的服務間要溝通,
但使用的是不同的語言怎麼辦?
可以程式內部自己處理,但就會需要知道對方傳過來的參數長怎樣,聽起來就很不彈性。

嘛,電腦科學的設計上,沒有什麼是加一層 interface 不能解決的問題(#
為此,定義出一個 language independent interface,
這樣 data type 的轉換就透過 RPC 框架統一處理,
而不需要你我操心。

例如:gRPC 中的 Protocol Buffers


上一篇
【Day 1】大綱 / 30 天的學習計畫
下一篇
【Day 3】分散式系統模型、容錯、高可用
系列文
什麼都不會還敢說你是 RD 啊?畢業後的後端入職前準備31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言