【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


<<:  产品推广就像举办一场美食盛宴

>>:  [Day5]-串列的相关用法

安装seldon

上一篇, 我们已使用 xgboost 完成训练并且产生model档, 这个model的档名为bst_...

Day15 - WooCommerce 金流串接实战

WordPress 的接案者主要区分为两种类型:懂得运用各种外挂、布景主题来满足客户需求的接案者,另...

< 关於 React: 开始打地基| 父组件、子组件、兄弟姐妹组件的关系 >

09-14-2021 本章内容 子组件更新父组件的状态 设定组建间的状态 设定组建间事件处理的程序 ...

自动化 End-End 测试 Nightwatch.js 与 BrowserStack

前一篇提到可以更改 session name 也可以标注 pass/fail 接着就可以将昨天提到的...

Day17 决策树实作

https://github.com/PacktPublishing/Machine-Learni...