1 热数据和冷数据
热数据:是需要被计算节点频繁访问的在线类数据。
冷数据:是对于离线类不经常访问的数据,比如企业备份数据、业务与操作日志数据、话单与统计数据。
热数据因为访问频次需求大,效率要求高,所以就近计算和部署;冷数据访问频次低,效率要求慢,可以做集中化部署,而基于大规模存储池里,可以对数据进行压缩、去重等降低成本的方法。
目前常见的冷热分离方案是将冷热数据分离到两套不同的系统,这两套系统拥有不同的存储特性、访问方式等,从而在保证热数据访问性能的同时,将冷数据的成本降低下来。在系统选型上,对于热数据系统,需要重点考虑读写的性能问题,诸如MySQL、Elasticsearch等会成为首选;而对于冷数据系统,则需要重点关注低成本存储问题,通常会选择存储在HDFS或云对象存储中,再选择一个相应的查询系统。
2 埋点
用代码去记录用户行为信息的打点动作,我们称之为“埋点”。常见的埋点开发实现分为客户端埋点和服务端埋点。要埋点的信息与业务的分析诉求直接相关的。
3 进程间通信方式(IPC)
每个进程有各自不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到。所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到缓冲区,进程2再从缓冲区把数据读走。内核提供的这种机制就是进程间通信。通信需要媒介,两个进程间通信的媒介就是内存。通信的原理就是让两个或多个进程能够看到同一块共同的资源,这种资源一般都是由内存提供。
3.1 匿名管道(pipe)
管道是IPC最基本的一种实现机制。我们都知道linux下“一切皆文件”,其实这里的管道就是一个文件,管道实现进程通信就是让两个进程都能访问该文件。
匿名管道的特征:
-
只提供单向通信,假设进程1往文件内写东西,那么进程2就只能读取文件的内容。如果要进行双工通信,需要建立两个管道。
-
只能用于具有血缘关系的进程间通信,通常用语父子进程间通信。
-
管道是基于字节流来通信的。
-
依赖于文件系统,它的生命周期随进程的结束而结束。
-
其本身自带同步互斥效果。
3.2 命名管道(FIFO)
命名管道的特征:
-
依然只支持单向的数据流。
-
命名管道以FIFO的形式存储于文件系统中,FIFO是一个设备文件,在文件系统中以文件名的形式存在,能够实现任何两个进程之间通信。而匿名管道对于文件系统是不可见的,它仅限于在父子进程之间的通信。
-
FIFO(first input first output)总是遵循先进先出的原则,即第一个进来的数据会第一个被读走。
3.3 消息队列(Message Queue)
对于MQ来说,其实不管是RocketMQ、Kafka还是其他消息队列,它们的本质都是:一发一存一消费。
生产者先将消息投递给一个叫做队列的容器中,然而再从这个容器中取出消息,最后再转发给消费者。其中消息就是要传输的数据。
MQ的优点:系统解耦,异步通信,流量削峰,延迟通知,最终一致性保证,顺序消息,流式处理等等。
MQ和RPC的差异:
-
引入MQ后,由之前的一次RPC变成了现在的两次RPC,而且生产者只跟队列耦合,它根本无需知道消费者的存在。(MQ可以理解成两次RPC+消息转储)
-
多了一个中间节点队列进行消息转储,相当于将同步变成了异步。