这篇文章上次修改于 1959 天前,可能其部分内容已经发生变化,如有疑问可询问作者。 1.什么是Consistent Hashing + 一致性hash,使用hash(job)生成2的32次方的int,然后落到最近的hash环,计算机会虚拟出来几个vnode,均匀分布到hash环。 2.分布式architeture---空间---时间解偶(如邮件,两个人发送邮件不需要同时在发送接收,如qq的发送文件就需要点接收),三层OSI7层 3.p2p ,dns---非结构够点对点。cdn--cs+p2p 3.中间件----所有application的general通用部分,可以用于解决遗留系统问题---如拦截器interceptor 4. client ----switch 然后直接和server交流,---称之为tcp hand off 5.上下文切换,包括---cpu上下文,线程上下文,进程上下文 6. out of bind communication ,超界呼叫,有点类似cpu的中断,提供专门的端口来紧急处理紧急的事情。 7. 代码管理code migration + cs模式,client server,代码状态和代码文件都在服务端 + REV + CoD + MA 8.系统资源管理的3中方式---by identifier,by value ,by type 9.osi七层--概括 + 硬件层----》物理层(bit级别的交换)---数据链路层(建立帧frame级别的传输,错误和flow控制) + 软件层----》网络层(包packet的路由,注意好多分布式系统把这个作为最低层)----传输层(分布式系统的交流基础设施,TCP,UDP,IP广播) + 事务层----》Session会话,如:两阶段提交----(和表示层合成---中间件middleware层) ++ midleware layer---提供了common的协议protocol和服务services ,给many应用applications使用 +++ 提供--- ++++a set ofcommunication protocols, ++++(un)marshaling of datafor integerated systems ++++security protocols ++++naming protocols----easy sharing resources如zookeeper 使用文件路径来命令services ++++scaling mechanisms,like replication and cashing. + 表示层----》表示层-----RPC调用,使用相同的格式,client server 用同一种语言说话,如json xml + 应用层 ---------------------------------------系统交流communication--------------------- 10.系统交流类型 communication types,使用中间件,如kafka + 同步,发送请求,等待返回 + 异步,发送请求,等待回调(利用transmision interrupt传输中断) -----以上是双向交流,下面是单向交流 + 只管发送,不等返回和回调。如UDP 11.RPC远程过程调用, + 需要解决调用远程交流透明性,PC是一种机制,可以隐藏caller和callee的communication + 需要解决消息传递marshaling,machine independent,client server agree on same encoding + 需要关注传参问题,a.传递指针(指向一个global data)还是value,b.还有一种方式copy in /out 没有副作用 12.socket + socket 创建一个端点endpoint + bind 附加一个本地地址给socket + listen 告诉系统需要足够的buffer来接收客户端请求 + accept 等待一个连接 + connect 客户端发起三次握手,和accept对应 + send/receive ---当作文件操作 + close 13.中间件---queue (对比socket,时间解偶异步化) + 异步持久化交流 + PUT append 一个message到指定队列 + GET 线程阻塞,一直等到队列非空,获取并删除地一个message + POLL 检查队列,删除第一个msg,但是不阻塞 + NOTIFY 加装一个处理器handler,当消息被PUT时调用。 14.消息代理 message broker ----对比queue,空间的解偶,不再是点到点,而是全部发送给broker,相当与中间商 + 消息队列假定一个通用协议protocal,message broker是一个中心化组件,允许异构系统在同一个消息系统中。 + 转化消息到固定的目标格式 target format + 经常充当application gateway的角色 + 用topic进行路由 + 一般用来拯救遗留系统application的交流 15. 面向流Stream的交流 + 之前讨论的交流是一种非连续的,即时间无关的time-independent信息交流(exchange),而流是一种时间有关的time dependent,如连续媒体continous media---audio video animations ,那么Stream就是一个面向连接的设施---支持等时数据传输isochronous data transmission,如视频,音乐audio + 流一般是不定向的undirectional + 一般是一个源source 流向多个槽 sinks 16. 广播 ------------------------------------------Naming命名-------------------------- 1. 分布式需要命名一个计算机或者其他端点进行访问,如dns,如一些注册中心,feign访问服务也是通过application name访问 + naming + identifier ---无意义的符号,随机字符,一对一,如身份证号 + flat naming ,如arp使用的名字,DHT---一致性hash,fingers tables,hirecal location service 层次化 + 上面都是非结构化的,那么不适合人类阅读,结构化的,如name space(java程序员应该很熟悉) + 基于attribute的命名---如ldap ------------------------同步 sychronisation------------------- 物理时钟----网络时钟 逻辑时钟---happens before ---并行 ------------------------consistency & replication 1. 复制的原因----可靠性和性能 + 操作冲突----读和写 + 操作冲突----写和写 + 全局顺序保证的操作冲突,成本会很高,我们采取稍微弱点的一致性要求 --------------------- 宽松的一致性模型------数据中心-------------------- 2. 数据中心一致性模型 + 基本模型约定----读操作读的值一定是最后一次写操作的值,但是在没有全局时钟的情况下,怎么确定哪一次写是最后一次写是个难题,所以催生了多种一致性模型。 4. 持续一致性continous consistency + Yu and Vahdat (2002) 提出的度量不一致性的三个坐标轴: * 副本之间值偏差--numeric value differ between replicas,如:同一支股票的值差不能超过0.02美元 * 副本之间的新旧程度偏差----relative staleness differ,如天气预报允许时间上的偏差 * 副本之间更新顺序的偏差,ordering of update operations,可以用向量时钟保证vector clock 5. 顺序一致性sequential consistency + 所有process的计算结果都是一致的,如果他们的操作顺序都是按一个顺序(Program指定)来的 6.因果一致性 causal consistency + lamport提出的,如果一个操作B是由另一个操作A引起的,那么我们应当保证他们的顺序性。如通过logic clock 7. 分组操作---如java的sychronized 把一组操作分组加锁,又如innodb的按行锁,其他操作可以不一致(顺序),但是这个同一行必须一致,还有redis对同一个key的写。 --------------------- 宽松的一致性模型------client中心一致性模型-------------------- > 我们讨论这个基于这种系统-----很少发生同时更新同一个数据,或者发生了也很好解决。 + 最终一致性eventualy consitency,现代好多数据库系统中,大部分进程是读操作,很少部分有写的操作。如DNS,只有供应商可以更改,所以不会有写写冲突,只会有读写冲突,这种允许懒惰传播,即更改一段时间后,用户才看到变化。即在一段时间内,允许副本有不一致性。 * 单调读 ---- * 单调写 monotoic * read your writes * write follow read --------------------- 宽松的一致性模型------replica(集群) 管理-------------------- + 副本放置 ----------------------------------异地多活------------------------- http://afghl.github.io/2018/02/11/distributed-system-multi-datacenter-1.html
没有评论