intro
一直想学分布式的知识, 上学期写了6.824一个lab后面半途而废了, 刚好这学期开了分布式与云计算这门课, 字节的面试官也建议我学一下, 故选之. 这篇文章主要记录分布式知识点, 一做复习只用, 二真的学点知识, 以后学6.824能够轻松一点. 希望不要挂科!!!
lec1 - 3月11
只要不是单机系统, 只要通过网络互联, 分布式的知识就很重要.
可以看作计算机网络的后续课程.
计算机网络主要讲各种协议, 重心在应用层之下;
分布式计算和协作都在应用层, 认为底层都被计算机网络覆盖了, 已经解决了;
主要是principle 和 paradigm(范例)
范例: 主要讲云计算和区块链
主要课程安排:
理论:
- architecture
- processes
- communication
- naming : different naming in different system
- synchronization : 难, base of distributed system
- consistency and replication: 分布式应用的核心问题
- fault tolerance
- security
云计算系统:
- Google: 与hadoop类似, 实验做hadoop的计算
- amazon
- windows
区块链: 2 ~ 3学时, 架构完全不一样
由computer system 和 computer network 的 快速发展伴随而来, 必须要是一个网络环境
分布式系统定义:
A collection of independent computers appears to its users as a single coherent system
two aspects:
- independent computers(not processor!!!)
- 需求在不断增长, 多处理机SMP虽然是一种不错的架构, 但是存在严重总线竞争, 所以只能通过网络连接起来, smp变成了cluster of smp.
- single system ==> middleware
- 不是完整的, 只要在某一个方面实现了作为逻辑上的单一系统, 我们就认为他是分布式系统.
分布式文件系统:文件管理, 形成单一文件映像, 这是目前分布式最成熟的一块. 由单一unicode(global的) , 用户只要给出这个文件名, 就能够存取, 而不需要知道文件怎么存的, 存在哪儿的.
任务调度: 难, 因为每个计算机都有自己的任务调度.
内存管理:实现一个逻辑上的完整的大内存, 将不同部分的内存映射到不同的机器上. 缺页变成了软件中断: 发起网络通讯, 获取需要的数据. DSM(distributed shared memory), 理论上完全可行, 而且有很多好处, 但是应用很少, 因为性能太差了(需要通过网络来通信, 和磁盘IO的速度相比太慢了);
安全: 很难做, 每个结点都有自己的安全机制
所以只要求在某一方面实现了单一映像, 就认为是分布式系统.
在底层的每台计算机的OS上的装一些应用层的协议, 这些协议被称为分布式中间件. 通过软件来模拟操作系统一部分管理的功能, 分布式系统研究的就是middleware, 操作系统上跑的应用程序.
分布式系统的透明性
www 不提供迁移透明性
分布式系统想要系统可扩展性好的话就需要去中心化 Decentralized algorithm.
跨管理域的问题很难解决.
不一致是绝对的, 一致是相对的.
lec2 3月18日
分布式计算系统:
HPC: high perfromance computing 评价指标: 每秒钟浮点计算次数
HTC: high throughput computing 对磁盘IO要求比较高, 大数据, 小型地震来勘探石油, 数据量比较大
cluster computing: 集群计算, 商业上常用;
- 局域网, 网速 带宽
- 同构的, 相同的os, 几乎相同的硬件
- 单管理结点
- 特点: 成本低, 性能还行
分布式信息系统:
- transaction processing system: lIn many cases, a networked application simply consisted of a server running that application (often including a database) and making it available to remote programs, called clients.
- enterprise application integration: lAs applications became more sophisticated and were gradually separated into independent components (notably distinguishing database components from processing components), it became clear that integration should also take place by letting applications communicate directly with each other.
通信主要是靠:
RPC(Remote Procedure Call): With RPC, an application component can effectively send a request to another application component by doing a local procedure call, which results in the request being packaged as a message and sent to the callee. Likewise, the result will be sent back and returned to the application as the result of the procedure call.
lRPC and RMI have the disadvantage that the caller and callee both need to be up and running at the time of communication. In addition, they need to know exactly how to refer to each other.
MOM(Message-Oriented Middleware): With MOM, applications simply send messages to logical contact points, often described by means of a subject. Likewise, applications can indicate their interest for a specific type of message, after which the communication middleware will take care that those messages are delivered to those applications
分布式普适系统(distributed pervasive system)
There is a next-generation of distributed systems emerging in which the nodes are small, mobile, and often embedded as part of a larger system.
架构 Architecture
Architecutre Styles: focus on concepts
Layered architectures:
- Layered style is used for client-server system;
- 简单, 因为只有上下两层之间会进行沟通
- 90%架构都是分层的
Object-based architectures
- Organize into logically different components, and subsequently distribute those components over the various machines
- 面向对象的架构, 每个component之间都能够进行沟通 n * (n - 1);
Data-centered architectures
- lProcesses communicate through a common (passive or active) repository.
- 组织围绕着数据管理
Event-based architectures
- 同步通讯: 阻塞住, 效率不高
- 异步通讯: 效率高
- 前面的三个系统基本上都是同步通信
- 这个系统实现基本上都是基于消息队列: client 发给消息队列, 消息队列在和server交互, 最后把结果把结果给client, 进行了解耦
- 把通讯改成写文件, 一端写文件, 另外一端读文件
System architectures: focus on implementation
分类标准: centralized 和 decentralized(其实就是有无服务器), 还有一类综合的;
集中式架构: 性能, 可扩性, 可用性不太好, 但是简单, 可管理性好
集中式架构需要解决: delivery failures:
- 如何告诉用户消息丢失了???
- 没法解决, 只能在client端设置个timeout
- 是发送的消息丢了还是回给我的消息丢了??
- lNo great answer, usually can offer only “at most once” service, or “at least once” service.
- 比如去银行存钱: 存100, 消息发给银行了, 没有等到银行回复, 发送消息丢了不会导致问题, 超时再发送消息即可, 如果是银行回复消息丢了, 可钱已经存过了;
- 没法解决;
- 在分布式系统中采用的是语义的办法:
- 而在银行系统中使用的是transaction: 实际上是一种时间冗余;
幂等:
An operation can be repeated multiple times without harm, it is said to be idempotent.
重复点击: 可以通过session_id来解决!!!