《数据密集型应用系统设计》读书笔记--第四章
一、数据编码格式
程序中数据的两种表示形式:
-
内存中,保存在对象、结构体、列表、数组、树、哈希表等数据结构中。对cpu的访问进行了优化。
-
数据写入文件或者通过网络发送时,把其编码成字节序列。
两种行式的转化过程称为序列化和反序列化(编码和解码)。
编程语言的内置编码方案的缺点:
-
不同语言之间访问困难。
-
解码需要能实例化任意类,会导致安全问题,如远程执行任意代码。
-
向前向后兼容困难。
-
效率低。
主要格式:JSON,XML,CSV
二进制编码:Thtift,Protocol Buffers,Avro
二、数据流模式
1、基于数据库的数据流
需要向后兼容和向前兼容。
注意保存未知字段。
归档存储:创建数据库快照,如备份和或加载到数据仓库,用最新的模式编码。
2、基于服务的数据流
服务器通过网络公开API,客户端可以连接到服务器向该API发出请求,服务器公开的API称为服务。
客户端的形式有:web浏览器,应用程序,js中Ajax。
SOA:面向服务的体系结构(微服务)。服务器本身可以是另一项服务的客户端。将大型应用程序按功能区域分解为较小的服务。
面向服务的体系结构的关键设计目标是,通过使服务可独立部署和演化,让应用程序更容易更改和维护。新旧版本的服务器和客户端可以同时运行。、
REST:一个基于HTTP原则的设计理念。强调简单的数据格式,使用URL来标识资源。根据REST原则设计的API被称为RESTful。
SOAP:基于XML的协议,用于发送API请求。SOAP Web服务的API使用被称为WSDL(web services description language)。
RPC:试图使向远程网络服务发出请求看起来与在同一进程中调用编程语言中的函数或方法相同。
3、基于消息传递的数据流
消息代理(消息队列,消息中间件):https://zhuanlan.zhihu.com/p/46201859
消息代理的优点:
-
如果接收方不可用或者过载,充当缓冲区。
-
自动将消息重新发送到崩溃的进程防止消息丢失。
-
防止发送方需要知道接收方的IP和端口。
-