内容目录
Toggle什么是抽象(abstract)?
抽象的概念,可以帮助我们在系统设计时,隐藏一些无关紧要的细节,让我们能够专注于整体架构。脱离细节是一件很重要的事情,因为抽象可以隐藏了系统设计内部的复杂性,从而让我们更专注于,系统设计的结果。
在现在资讯发达的现在,我们都使用电脑进行工作,但我们不会从头开始制造硬体并开发作业系统。我们使用电脑来完成手上的工作,而不是一直深入研究建造系统。
这边也用套件来当作举例,软体工程师都常会使用别人已经写好的套件来开发大型系统。因此如果每一个人都需要自己开发套件,那大家将无法完成工作。相反的如果我们使用别人已经写好的套件,那我们只需要专注在其他功能开发,而这样子就相当于一个抽象概念,「套件」提供了一个简单的介面来使用功能,并隐藏了它们是如何实现的内部细节。一个好的抽象允许开发者在多个具有相似需求的项目中重复使用。
资料库抽象
交易(Transactions)是一种资料库抽象,当大量的用户同时读取、写入或修改资料时,交易(Transaction)隐藏了许多问题,只提供了一个简单的介面,例如:在成功的情况下可以继续,而在失败的情况下中止。无论哪种方式,资料都从一个一致的状态移动到新的一致状态(Consistency)。
这样的抽象概念,可以让使用者不必纠结于高并发(High Concurrent)的资料修改,而是可以专注于商业逻辑(Business Logic)。
分散式系统中的抽象
分散式中的抽象帮助工程师简化他们的工作,并免除他们处理分散式系统底层复杂性的负担。
随着许多科系巨头,例如:Amazon AWS、Google Cloud 和Microsoft Azure 都有提供分散式系统的云端服务,分散式系统的抽象概念已变得越来越受欢迎,每一种云端服务也都提供不同层次的抽象。这些分布式系统的服务也都是直接提供给使用者使用,而不需要真的去了解,例如:CDN、Storage…。这样的好处是让用户只需要专注在程式的开发,而不是花非常多时间去了解一些系统元件怎么从无到有实践。
网络抽象:远端程序呼叫Remote Procedure Calls
这边我参照IBM 的说明文件的中文命名,并且也参考以下文档。
什么是RPC?
「远端程序呼叫(RPC)」是一种通讯协定,提供作业系统中使用的高阶通讯参照范例。也可以说是一种在分散式系统中广泛使用的进程(Process)间通信协议。在网络通信的OSI模型中,RPC跨越了网路传输层和网路应用层。
这边也提供IBM 的详细解释:RPC 假设存在低阶传输通讯协定,例如传输控制通讯协定/Internet Protocol (TCP/IP) 或使用者资料封包通讯协定(UDP) ,以在通讯程式之间传送讯息资料。 RPC 会实作专为支援网路应用程式而设计的逻辑用户端至伺服器通讯系统。
RPC是如何工作的?
当我们进行RPC 时,呼叫环境会先被暂停,过程参数通过网络发送到过程将要执行的环境中。当过程执行完成后,结果返回到互叫环境,执行就像常规过程呼叫一样重新开始。
让我们通过Client Side – Server Side 的程式来做举例,RPC 程式可以分成以下部分,这边我使用 Microsoft 官方文件的图片来做展示:
RPC 系统的包含,Client、Client Stub 和一个RPC运行服务在客户端机器上运行。 Server、Server Stub 和一个RPC运行服务在服务器机器上运行。
RPC 在现实生活中的应用
RPC 在许多现实世界的服务中被使用。看看以下给出的例子:
谷歌
Google GCP 这个知名的云端服务,会把将分散式系统中的某些部分使用RPC。他们开发了 gRPC,一个开源框架,使用RPC 来搭建更高效、高性能的分散式系统。被用于Google Search、YouTube… 等服务,这个RPC 的应用,使整个软体系统在不同系统元件之间的建立连线以及通讯,完成更高效且稳定的连结。
Facebook 的大多数服务都使用 Thrift 进行RPC,一些储存系统使用Thrift 在磁盘上序列化记录(Serializing Record)。这个RPC 应用也有几个好处。例如,可以在不同程式语言之间,进行互通以及互相操作,利如:Python 客户端与C++ 伺服器端的连接。
结论
这边也列下几个重点:
– 抽象是一种概念,可以帮助我们在设计系统时隐藏无关紧要的细节,让我们专注于整体架构。
– 抽象可以隐藏系统设计内部的复杂性,从而让我们更专注于系统设计的结果。
– 资料库抽象、分散式系统抽象、网路抽象都是抽象概念的应用。
– RPC 是一种通讯协定,提供作业系统中使用的高阶通讯参照范例。
– RPC 在许多现实世界的服务中被使用,例如Google GCP 和Facebook。
引用
其他文章
你真的了解 Monorepo 吗?5 分钟了解前端大型架构。