读书笔记 -《架构修炼之道》

一.网关之道

  1. API网关:将所有API的调用统一接入API网关层,由网关负责输入和输出。有了API网关之后,各个API服务提供团队可以专注于自己的业务逻辑处理,而API网关专注于安全、流量、路由等问题。
  2. 代理与API网关的区别:代理是纯粹的数据透传,协议不会发生变化,而网关在数据透传的背景下,还会涉及协议的转换。
  3. API网关的基本功能包括统一接入、协议适配、流量管控与容错,以及安全防护。
  4. 设计API的时候常用的工具有RAML、Swagger,这两个工具都可以辅助我们设计API和生成API文档。
  5. API网关的基石:泛化调用。泛化调用与普通RPC调用的区别在于不需要接口提供者的客户端JAR包了。
  6. 在API网关中引入管道的概念。将参数校验、黑白名单、限流控制、接口调用等封装成一个个管道,并且按顺序组织起来。管道技术是责任链模式的一种思维演化。
  7. 管道技术与责任链模式的区别在于管道技术更加灵活,它是由我们自定义的一种方式,责任链的使用方式则相对受限。
  8. 网关分为同步网关、半同步网关、全异步网关。同步网关是指,从接收请求到调用API接口提供方的过程都是同步调用;半同步是指将I/O请求线程和业务处理线程分开,但业务线程还是同步调用API接口。
  9. API网关有两大特点:访问量大、依赖系统多。所以建议网关系统进行脱库操作,直接使用缓存。
  10. 同步和异步怎么区分呢?使用一个线程干完的事情都是同步的,有线程切换才能完成的事情都是异步的。
  11. 一般RPC异步模式都是使用队列或Map来实现,然后用一个事件循环线程不停地轮询队列事件。
  12. 热更新:凡是不需要应用服务器就能改变程序对象的属性值的行为。热更新是一种思想,常用的热更新的方法有MQ方式、RPC方式和ZooKeeper方式。
  13. 网关有七种武器:降级、限流、熔断、线程池隔离、管道技术、配置热更新、异步。

二. 分布式之道

  1. 分布式事务:ACID,A(Atomicity)原子性,C(Consistency)一致性,I(Isolation)隔离性,D(Durability)持续性。CAP C(Consistency)一致性,A(Availability)可用性,P(Tolerance of network Partition)分区容错性。CAP不能同时满足的主要原因是存在网路故障。人们在研究CAP定理的时候,演化出了BASE理论。BASE是指基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventual Consistency)。
  2. 基本可用:分布式系统出现故障的时候,允许损失一部分可用性,拿响应时间和功能上的损失来换取可用性。比如大促的时候,访问量非常大,可以对于一些不重要的功能做降级处理,同时在响应时间上做放宽现在来保证可用。
  3. 软状态:也叫弱状态或柔性状态,比如订单系统,在下单完进行支付的过程中,我们可以让页面显示”支付中“,等待支付系统彻底同步数据,订单系统才显示
    支付完成。允许系统存在中间状态,这个中间状态又不会影响系统整体可用性。在比如,数据库读写分离,写库同步到读库,会有一个延时,这个也是一种柔性状态。
  4. 最终一致性:在允许出现中间状态的情况下,经过一段时间之后,各项数据状态才最终达到一致。
  5. 互联网系统最核心的需求是高可用性,所以对于分布式事务,一般不按照老的两段式提交来实现,而会采用BASE理论的方式实现分布式事务来保证系统的性能和业务数据的最终一致性。

三.MQ之道

  1. 数据异构:把数据按需(数据结构、存取方式、存取形式)进行异地构建存储。把数据异构到Elasticsearch、Solr中要解决的问题跟按照多维度来查询的需求差不多,这些存储天然都有聚合的功能。同时还可以提高查询性能,以应对大访问量的请求。
  2. 数据异构的常用方法:完整克隆、标记同步、binlog方式、MQ方式。

四.微服务之道

  1. 分布式与微服务的区别:分布式侧重于分摊压力,而微服务侧重于业务架构的解耦。或者说,分布式侧重于分散压力,微服务侧重于分散能力。集群是物理形态,分布式是工作方式,微服务是一种架构风格。
  2. 从早先单体应用的代码依赖,到微服务的通信依赖,我们不得不考虑以下问题:网路延迟、分布式事务、异步消息等。研发一个系统不是最困难的,治理一个系统才是最复杂的工作。

五.容错之道

  1. 熔断器(breaker)工作原理:系统在运行过程中定时向对应的熔断器报告成功、失败、超时和拒绝的状态,熔断器维护计算统计的数据,根据这些统计的信息来确定熔断器是否打开。