# 作业 (March 7, 2023)

### 第1章 分布式计算概述
1. **什么是分布式计算？它的优缺是什么？**

分布式计算是一种在多台计算机之间分散任务和数据的计算模型。这些计算机通过网络进行通信和协调，以共同完成一个任务或处理一个数据集合。这种计算模型的主要目的是提高计算速度和可伸缩性。

优点：

+ 高性能：分布式计算可以同时利用多个计算机的计算资源，从而提高整个系统的处理能力和性能。
+ 可伸缩性：分布式计算可以根据需要添加或移除计算资源，以适应不同规模的计算任务或数据集合。
+ 高可用性：分布式计算系统可以通过复制和备份数据和计算节点来提高系统的可靠性和容错性。
+ 灵活性：分布式计算可以将计算任务分割成小的子任务，以便不同的计算机分别处理不同的子任务，从而提高计算的灵活性和效率。

缺点：

+ 复杂性：分布式计算需要在多个计算机之间协调任务和数据，因此系统的设计和实现相对复杂。
+ 数据传输延迟：在分布式计算中，由于需要在不同的计算机之间传输数据，因此可能会出现网络延迟和数据传输瓶颈，影响系统的性能。
+ 安全性：在分布式计算中，需要处理多个计算机之间的数据传输和共享，因此必须采取相应的安全措施来保护系统的数据和机密信息。
2. **分布式计算与并行计算的区别与联系？**

分布式计算和并行计算都是处理大规模计算任务的方法。

区别：

+ 概念不同：分布式计算是在多台计算机之间分散任务和数据的计算模型，而并行计算是在单个计算机或计算机集群中同时执行多个处理器或核的计算任务。
+ 系统结构不同：分布式计算通常由多台独立的计算机组成，这些计算机通过网络进行通信和协调；而并行计算通常由多个处理器或核组成，这些处理器或核可以在同一台计算机上或在计算机集群中。
+ 编程模型不同：在分布式计算中，程序员需要考虑如何将任务和数据分布到不同的计算机上，并进行协调和通信；而在并行计算中，程序员需要考虑如何将计算任务划分成多个子任务，并协调这些子任务的执行。

联系：

+ 目标相同：分布式计算和并行计算的目标都是提高计算速度和处理能力，以应对大规模计算任务。
+ 技术相互借鉴：分布式计算和并行计算的技术在某些方面是相互借鉴的。例如，分布式计算中的分布式文件系统可以用于并行计算中的数据共享和访问。
+ 应用领域相同：分布式计算和并行计算都可以应用于科学计算、大数据分析、图像处理、人工智能等领域。
3. **简述一下什么是CAP定理？举例说明CAP不能同时满足。**

CAP定理是分布式计算领域的一个基本原则，它指出在一个分布式系统中，不可能同时满足以下三个要求：

+ 一致性（Consistency）：所有节点在同一时间看到的数据是相同的，即数据更新操作在所有节点上都是同时完成的。
+ 可用性（Availability）：系统能够保证在一定时间内对于用户的请求都能够返回响应结果，即系统保证了服务的连续性。
+ 分区容错性（Partition Tolerance）：系统能够在遇到网络分区（网络故障或网络延迟等）的情况下仍然能够继续工作。

举例：假设有一个分布式系统用于在线购物，系统出现网络故障或分区

如果系统优先保证一致性，那么系统在遇到网络分区时，为了保证数据一致性，可能会牺牲可用性，因为系统需要等待所有节点的数据同步完成才能提供服务，这就可能导致用户无法访问系统，即系统不可用。

如果系统优先保证可用性，那么系统在遇到网络分区时，可能会出现数据不一致的情况，因为各个节点上的数据可能存在时间差异，这就可能导致用户在购物时看到的商品信息不一致，即系统缺乏一致性。

如果系统优先保证分区容错性，那么系统在遇到网络分区时，可能会出现数据不一致或系统不可用的情况，但这样可以保证整个系统在网络分区恢复之后仍然能够正常工作。

因此，在分布式系统设计和实现中，需要根据具体的应用场景和需求，权衡一致性、可用性和分区容错性的关系，选择合适的策略和技术来实现系统的要求。

4. **简述一下什么BASE理论，它与CAP的关系。**

BASE理论是分布式计算领域的另一个重要理论，它指出在分布式系统中，不一定要求满足ACID（原子性、一致性、隔离性和持久性）的特性，而可以追求更高的可用性和可扩展性。

BASE是指以下三个要素：

+ 基本可用（Basically Available）：系统能够保证在出现故障或性能下降的情况下，仍然能够正常响应用户请求，即系统保证了服务的连续性。
+ 软状态（Soft state）：系统允许存在一段时间的数据不一致，即允许一些数据在一段时间内是过期的，而不要求立即更新所有节点上的数据，从而提高系统的可用性和性能。
+ 最终一致性（Eventually Consistent）：系统保证在一定时间内，所有节点的数据最终达到一致的状态，即系统允许一段时间的数据不一致，但最终会达到一致状态。

与CAP理论相比，BASE理论更加强调分布式系统的可用性和容错性，而相对弱化一致性。

### 第2章 分布式计算泛型概述
1. **分析qq和微信采用的通信技术**

qq和微信都使用了TCP协议和HTTP协议，没有用到UDP协议。TCP协议是一种面向连接，可靠的传输协议，HTTP协议是一种应用层的请求-响应协议。qq和微信通讯中使用了HTTP短连接和TCP长连接，并没有用到UDP，其中登陆验证和头像身份信息及日志等功能采用的HTTP，文本消息、语音消息、视频消息、图片消息这些使用的是TCP长连接。通过心跳包来维护长连接状态，300S一个心跳。qq还支持语音和视频聊天，显然,这种场景用点对点的P2P技术最合适，在浏览器里,可以用WebRTC实现.WebRTC里实现点对点的P2P通信,需要一个服务器来帮助建立连接

2. **比较分析 google 的 gRPC, facebook thrift, Hadoop avro**

gRPC、Thrift和Avro都是一些流行的RPC框架，它们可以让不同语言和平台的服务之间进行高效的通信。它们都有自己的优缺点，根据不同的场景和需求，可以选择合适的框架。

+ gRPC是Google开源的基于HTTP/2和Protobuf的RPC框架，它支持多种语言和平台，提供了双向流、拦截器、负载均衡等特性。gRPC的优点是性能高、接口定义简洁、跨语言支持好、支持流式传输；缺点是不支持浏览器客户端、对网络环境要求高、Protobuf不支持map等复杂类型。
+ Thrift是Facebook开源的基于TCP和二进制协议的RPC框架，它也支持多种语言和平台，提供了多种传输层和协议层的选项。Thrift的优点是性能更高、序列化和RPC一站式解决、IDL支持map等复杂类型；缺点是文档较少、功能较少、跨语言兼容性较差。
+ Avro是Apache开源的基于JSON和二进制协议的数据序列化框架，它也可以用作RPC框架，但主要用于大数据场景。Avro的优点是模式演进灵活、序列化速度快、数据压缩率高；缺点是功能单一、IDL不够强大、对Java支持最好。
3. **什么是P2P泛型，它的实现原理是什么，举例说明。**

P2P泛型是一种无中心服务器的对等网络泛型，即Peer-to-Peer的缩写，翻译为点对点或者端对端，也称为对等计算。P2P是一种以非集中化方式使用分布式资源来完成一些关键任务的系统和应用。

P2P泛型的实现原理是利用网络中的每个节点（Peer）既可以作为客户端又可以作为服务器，相互之间直接通信和交换数据，而不需要依赖于中心服务器。这样可以提高系统的可扩展性、容错性、效率和安全性。

举例：比特币就是一个基于P2P泛型的分布式系统，它使用了一种叫做区块链的技术来记录和验证所有的交易记录，并通过共识机制来保证网络中各个节点之间的数据一致性。

4. **什么是微服务框架，它的优势？**

微服务框架是一种架构模式，它将应用程序划分为一组小型的、自治的、松耦合的服务，每个服务负责一个业务领域，并且可以独立部署、扩展和更新。微服务框架的优势有：

+ 提高了系统的可维护性、可测试性和可复用性
+ 降低了系统的复杂度和耦合度
+ 增强了系统的灵活性和可扩展性
+ 支持了不同技术栈和平台的选择
+ 促进了团队的协作和交付
5. **什么是Rest API (Http RestFul)和RPC 的区别？**

Rest API (Http RestFul)和RPC是两种不同的通信协议和架构风格，它们在以下方面有所不同：

+ 架构风格：RPC是基于服务调用的架构，客户端和服务器之间通过远程调用实现数据传输和处理；而RestFul是基于资源的架构，客户端通过URI访问服务器上的资源，并使用HTTP方法（如GET、POST、PUT、DELETE）进行操作。
+ 传输协议：RPC可以使用多种传输协议，如TCP、UDP、HTTP等，而RestFul只能使用HTTP作为传输协议。
+ 数据格式：RPC可以使用多种数据格式，如XML、JSON、二进制等，而RestFul通常使用JSON或XML作为数据格式。
+ 性能：RPC由于使用二进制方式进行通信，所以数据传输量更小，性能更高；而RestFul由于使用HTTP封装数据，所以数据传输量更大，性能相对较低。

根据不同的场景和需求，可以选择合适的通信协议。一般来说，如果需要跨平台、跨语言、易于理解和扩展的接口，可以选择RestFul；如果需要高效、稳定、安全的接口，可以选择RPC。