《架构解密从分布式到微服务》1-5章

《架构解密从分布式到微服务》1-5章

思维导图

1 硬件的发展

冯·诺依曼体系

  • 运算器,控制器,存储器,输入设备,输出设备

硬件的快速迭代

  • 摩尔定律
  • CPU,内存,磁盘

2 网络基础

协议

  • Telant协议,计算机间点对点的控制访问
  • 邮件协议,人与人的网络通信
  • 文件传输协议,文件通信
  • TCP/IP协议簇

数据流动:

  • 网卡(接收)——内核缓冲——进程地址空间——内核缓冲——网卡(发送),共四次上下文切换

  • 磁盘(读)——内核缓冲——进程地址空间——内核缓冲——磁盘(写),共四次上下文切换

  • 零拷贝

    • 减少“内核——进程——内核”中间进程地址空间的拷贝,即:网卡——内核(读取缓冲区)——内核(输出套接字相关的缓冲区)——网卡,磁盘——内核——内核——磁盘。比如Java中的transferTo方法,共三次拷贝,两次上下文切换(内核间拷贝不切换上下文)
    • 网卡支持:收集操作。最终数据流动:网卡——内核(元数据)——内核(元数据)——网卡,仅两次拷贝

IO模型

  • 流程

    • 1:网络上数据分组到达,复制到内核缓冲区
    • 2:内核缓冲区数据拷贝到进程地址空间
    1. 阻塞IO
    1. 非阻塞IO:进程轮询内核,询问数据是否可以复制到进程地址空间(拷贝数据时,进程处于阻塞,拷贝完成进程才返回)
    1. IO多路复用
    • 系统调用:select, poll, epoll
    • 同时等待多个socket,任何一个socket的数据准备可以拷贝时,select/poll/epoll返回可读,然后进程进行recvfrom系统调用拷贝数据
    1. 信号驱动
    1. 异步IO

对象序列化

  • XML格式,SOAP协议,WebService实现
  • JSON格式,HTTP REST
  • 二进制无关,Protocol Buffer或Apache Avro等

3 分布式系统基础理论

目标:提升系统性能和吞吐量

key:不可靠

一致性协议

  • 半数以上
  • Paxos和Zab
  • Raft
  • 最终一致性

Zookeeper

  • 特点:目录树

  • Znode

    • 路径 path
    • 二进制数据
    • ACL
    • Watch
    • 节点类型:Persistent, Ephemeral, Sequectial, 临时有序

CAP

分布式事务

  • 单机单库

    • ACID
  • 单机多库

    • X/Open DTP规范:业界首个分布式事务标准规范
    • 2PC协议
    • Java仿:JTA规范
  • 互联网的分布式事务解决方案

    • ebay

      • BASE
      • 特点:基于本地文本/数据库/消息队列 + 去重表
      • 类似:蘑菇街
    • 支付宝的DTS

      • TCC
      • 特点:不同于2PC的数据库层,TCC是在应用/业务层解决事务问题

4 RPC

特点

  • Socket
  • 通信协议
  • 对象序列化
  • 网络传输

RPC框架:server和client的stub

  • JDK的RMI

  • COBRA

  • SOAP标准实现,WebService(XML格式报文)

    • 异类:HTTP REST(并不属于RPC框架的标准定义,不包含stub,但属于远程调用),这一阶段报文是JOSN格式
  • 新阶段:Thrift, Apache Avro, ZeroC Ice

服务治理框架,SOA

  • 服务注册和服务发现

  • 扩展:微服务架构

    • 1th:基于传统高性能RPC通信,如ZeroC Ice
    • 2th:基于HTTP REST,如Spring Cloud
    • 3th:基于容器,如Kubernetes

5 内存

CPU多级缓存体系:CPU(Cache)——Memory

多核CPU共享内存

  • Cache一致性问题

    • MESI协议,modify+Exclusive+Shared+Invalid
    • Cache最小存储单位:Cache line,64字节,头部两字节表示状态(MESI)
    • Cache Hit/Cache Miss
    • Cache伪共享:比如类T有三个long属性,共24字节,存储在一个Cache line中,现在两个CPU的线程并发访问,一个访问long a,一个访问long b,都会使对方的Cache line无效,使串行变成了并行。解决:Java的@Contented注解

NUMA架构

你可能感兴趣的:(读书笔记)