读书:分布式计算、云计算与大数据

图书馆里尻来的老书,总的来说,给小朋友介绍挺不错的。但是可惜太学院派,缺少真实实战。

云计算的基础

定义/概念:

并行计算、网络计算、对等计算、集群计算、网格计算、云计算、边缘计算、移动边缘计算、大数据

分布式计算依赖于多个计算节点共同协作来处理任务。其不同于C/S架构,还要多节点要协同通信。

主要应用:

GIMPS梅森素数
SETI@Home
Amazon / 互联网

主要挑战:

多点故障
安全性
大规模资源调度的复杂性

概念

并行计算:多CPU计算
网络计算:使用网络
对等计算:P2P
集群计算:将一群计算机连起来进行计算
网格计算:把互联网内分散在不同地理位置的计算机组织成虚拟的超级计算机
云计算:基于互联网的计算模式。IaaS、PaaS、SaaS
IaaS只到虚拟机这一层;PaaS到数据库、中间件,SaaS包括应用。

边缘计算:云计算的计算任务在云计算中心,而边缘计算EAWP在边缘端执行

大数据:
MapReduce
流式计算 数据处理实时性
内存计算 将输出与结果存储在内存中,不需要频繁读HDFS
Serverlesss Computing无服务器计算(服务器无感知)
-> FaaS 函数在云平台书写,通过事件触发
-> BaaS 云平台在后端自动完成后端

分布式计算理论

拜占庭将军问题

不可信通信下的共识问题
BFT容错算法
N > 3F

PBFT 实用拜占庭容错(运用RSA算法保证不被篡改)
多项式级时间复杂度

Paxos算法

可信通信下的共识问题
对于分布式共识问题,很多进程提出(Propose)不同的值,共识算法保证最终只有其中一个值被选定

在该算法下超过一半机器正常工作,即可运转。
下面两篇文章讲的很好,在此不再赘述。
Paxos 图解 (秒懂) - 疯狂创客圈 - 博客园
Paxos算法详解 - 知乎

ACID 强一致性

原子性、一致性、隔离性、持久性

CAP

1985 FLP impossibility: 异步通信场景中,即使有一个进程失败,也没有任何算法能保证非失败进程达成一致性。
2000: CAP 分布式计算系统下,不可能同时满足一致性、可用性、分区容错性

一致性:所有客户端都有相同的数据视图
可用性:每个客户端总可以读写
分区容错性:当集群一些节点宕机时仍能维持服务

大部分web:牺牲一致性换高可用

BASE 最终一致性

基本可用;软状态;最终一致性
在CAP基础上,牺牲强一致性换可用

BOINC,OpenStack,Hadoop,YARN

分布式计算接口、应用

Spark

RDD
抽象弹性数据集
允许内存上计算
四种集群运行模式:Standalone,基于Apache Mesos,基于Hadoop YARN,基于Kubernetes

Kubernetes

基于容器技术的分布式架构方案

开发、测试、调度工具

相关文献

GFS done
MapReduce done
Bigtable done
Chubby lock service:基于Paxos的分布式锁服务;Zookeeper 什么是分布式锁?实现分布式锁的三种方式 - 刘清政 - 博客园
可以仔细想想,为什么Paxos可以实现分布式锁?

Finding a Needle in Haystack: Facebook's photo Storage 脸书如何存储小文件
Windows Azure Storage 云存储架构
GraphLab CMU基于图计算的分布式机器学习框架 GraphChi 百万维度 2-3,min
RDD( Resilient Distributed Datasets)RDD内存计算模式介绍
Parameter Server 李沐。Google、豆瓣的paracell
Dremel 大规模实时分析系统,3秒相应1PB,用查询树优化分析速度
Pregel 大规模图计算系统,作为Google PageRank系统
Spanner 分布式数据库
Dynamo: Amazon NoSQL数据库
S4 Yahoo 流式计算系统:主要广告计算平台
Storm@Twitter 基于Hadoop的流式计算框架

分布式计算与HTTP编程

进程间通信

IPC
单播
组播

最底层抽象API:
Send 传输数据
Receive 接受数据
Connect 建立逻辑连接
Disconnect 允许断开连接

Socket

用于提供IPC功能的库

Windows中叫Winsocket

UDP Socket = datagram Socket
TCP Socket = Stream Socket

socket:
由于单个socket只能与单socket进行通信,在C/S架构下通常这样设计:

  1. 通信socket:负责与Client建立通信,然后开启数据socket
  2. 数据socket:与Client传输数据。
    一旦Client结束通信,则数据socket关闭。

RMI

Remote Method Invocation 远程方法调用

客户机内的程序可以远程调用对面的方法

一般在Java RMI API中使用

一般而言可以这么写
Server声明RMI类,然后将RMI类暴露在接口中
Client将根据接口获取Server RMI,随后即可调度RMI,就和本地一样

Web

HTTP 部分略过,太古老了,都是计网的老知识

XML

SGML 标准记录语言的一种
XML用于数据传输及存储
DOM:文档对象模型

JSP

当JSP页面被请求时,分为HTML与Java文件,JSP引擎将JSP页面文件转译成Java文件,再将Java文件转成Java字节码并执行

CGI

公共网关接口
服务器程序给客户端HTML页面提供的接口

Cookie

Java 内直接声明Cookie就可以了
这个东西是Client保存的,然后每次浏览器提交就交这个

Session

跟Cookie类似,但是是服务器保存的客户明细表

Applet

在网页里的小程序,在客户端执行
有固定的生命周期流程

Servlet

在服务器运行的小程序
在每一次相应中,有init, service, destroy过程


Servlet 跟 Applet比,没有图形界面,运行在服务端。

SSH

Struts + Spring + Hibernate
表示 + 事务 + 持久化

J2EE巅峰: Spring

独立应用服务器
低侵入式
服务端
部分Spring

Hibernate
ORM

在这之前,企业用的是EJB

TopLink

云计算

Borg
单机管所有
Mesos 容灾备份
YARN 双层资源调度

虚拟机监控器
此神人做了一个,看看
(27 封私信 / 4 条消息) 晏舒 - 知乎

理解全虚拟、半虚拟以及硬件辅助的虚拟化_全虚拟化 半虚拟化 硬件辅助虚拟化-CSDN博客
半虚拟化指的是虚拟机系统和hypervisor通过交互来改善性能和效率。如图6所示,半虚拟化涉及到修改操作系统内核来将不可虚拟化的指令替换为直接与虚拟化层交互的超级调用(hypercalls)。hypervisor同样为其他关键的系统操作如内存管理、中断处理、计时等提供了超级调用接口。

云存储

NAS 存储在网络上

RAID0 没有容灾
RAID1 100%备份
RAID3 XOR校验
对象存储:有文件数据、属性
OSD 智能设备的集合

云原生

DevOps
微服务:小模块构建

Spring Cloud

  1. 服务发现
    一个API数据库。当用户来问我要这个API时,服务发现导向对应的数据库
    服务发现也可以被服务端进行管理

  2. 负载均衡
    面对动态的应用负载,分配对应的实例

  3. 断路器
    对错误的失败进行异常处理。比如有台机器坏了,断路器就直接说快速失败,别折腾了。

  4. 服务消费者
    使用注解,让客户端开发直接锁定服务端

  5. 服务网关
    路由转发及过滤

  6. 分布式配置
    集中管理配置

Docker
K8s

服务网格

RPC采用AMQP协议实现进程间的通信,在OpenStack中采用的是 RabbitMQ 和 qpid 。

AMQP协议:高级消息队列,基于消息的中间件提供的开放的应用层标准协议,能够有效地支持各种通信模型或者 报文传送方面的应用。

特点:二进制的应用层通信协议,进程之间对称的异步通信协议,消息格式,一系列标准化的但可拓展的消息能力(订阅者和发布者,两个节点无需知道对方是什么节点,也不用管对方节点怎么去处理发送消息)

组成:生产者(Publisher)、消费者(Comsumer)、中间件(Broker)

流程:生产者将消息发布到中间件中,中间件将消息存储到消息队列中,最后订阅者从消息队列中获取消息

云计算
OAuth
访问控制
基于属性、身份的访问控制

云安全

大数据
RDD:数据存储的chunk

GraphLab 2.0
将边分割变为点分割。每条边只存储一次,但是邻居点会被存在多台机器上

总结

比较传统的一本书。
从云计算的开始一直介绍到最终应用。
入门还是挺不错的,可惜缺少企业实战,太学院派。