《Akka应用模式:分布式应用程序设计实践指南》读书笔记8

  • 时间:
  • 浏览:6

  导致 节点在系统中不可用的最常见的导致 并有的是 错误,没法来没法多升级!这听起来挺扯的。即使你的应用应用系统进程设计的完美,无需宕机,但不可能 升级的以过后 过后 能停机,没法可用性你是什么指标就无需太高。有点痛 没法你有1150台机器过后 能升级版本的过后,那就更加痛苦了。不可能 你的版本不兼容,没法就导致 1150台机器过后 能一起去关掉,因此一台台部署。想想就固然呵呵。当然了,不可能 你的自动化运维比较完善,就会省事儿没法来没法多有。

  应用应用系统进程一般由有一种构建最好的办法 :单体式架构、微服务架构。一般发生二者后面 情况表。

崩溃恢复/运维监测

  健康检查是一另一个 很好的工具,但它具有滞后性,过后 过后 能 在出现难题的过后才去适当的最好的办法 。没法过后 能预防故障的发生呢?常见的是使用服务指标度量系统,通常是一另一个 时间序列数据库。把系统的服务指标进行可视化展示和响应的分析,就过后 能做到提前检测系统难题了。基于Akka或许多最好的办法 的分布式系统一般有的是将入口点附进的计时器邮包到系统中,用来记录操作过后刚开始英语 了了和过后开始英语 了了的时间,计算差异值,因此存储。但过后 能有点痛 说明的是,一定要注意时间字段获取的准确性!通常情况表下,分布式节点的时间不一定同步不可能 有一定的误差!有点痛 是在金融业务系统中,没法来没法多有机器有的是且日跑批量神马的,比较麻烦。

  即使应用应用系统进程提高了可用性,但不可能 部署时仍过后 能关闭整个应用应用系统进程,没法可用性就会大打折扣。没法来没法多有提高可用性是一件比较困难的事情。

  第七章提到了没法来没法多有导致 系统不可用的因素,因此无法完正出理 出现故障。可用性则要求在出现故障时过后 能找到缓解故障的最好的办法 ,尽不可能 快的恢复系统。

  度量是一另一个 技术活,度量后如何分析就过后 能根据各个业务系统自行设计了。不属于Akka的范畴,就不再没法来没法多分析了。

   与可用性相关的好多个概念在这里稍微提一下,固然本书并没法提及。

  发现了难题就过后 能采取对应的最好的办法 ,首先过后 能有一种通知机制提醒运维人员不可能 开发人员。常用的通知机制有邮件、短信、电话、微信。但过后 能 没法来没法多简单粗暴的进行预警,不可能 预警多了,就会减少运维人员的注意力。不可能 过后 采取许多纠正最好的办法 就更好了,比如重启。

  简单点来说没法来没法多系统过后 能正常使用。不可能 系统过后 及时响应一另一个 请求,则认为是可用的;不可能 响应时间过长不可能 根本不响应,则是不可用的。系统在停机或超载时是不可用的。一般用系统正常运行时长的百分比来计量系统的可用性,类事常常用N个9表示系统的可用性。故障时间秒数=(1-可用性) * 365 * 24 * 31500

  RTO:(Recovery Time Objective,恢复时间目标)是指信息系统从灾难情况表恢复到可运行情况表所需的时间,用来衡量容灾系统的业务恢复能力。

结论

  有界上下文是划分应用应用系统进程的完美起点,但有以过后 过后 能分解成更小的规则。Akka突然把界面和域分成单独的微服务,另一另一个 就过后 能独立地扩展双方。关于你是什么点就过后 能我们歌词 歌词 都都 根据系统的实际情况表来平衡了。但我固然基本的出发点没法来没法多封装变化,并对其进行扩展。

  固然微服务的划分最好的办法 ,每人及有不同的见解。我比较倾向于作者的划分最好的办法 ,也没法来没法多从业务的深度图划分微服务。DDD提供了有一种将应用应用系统进程划分为较小部件的最好的办法 ,有界上下文没法来没法多划分的界限。但他们倾向于从系统的深度图划分微服务,固然没法来没法多将系统的各个模块抽象、独立出来成为一另一个 子系统。比如将一组逻辑上相关的jar包封装起来对外提供服务。你是什么点就见仁见智吧。固然DDD过后 能很自然的映射到Akka的相关技术,这里就不对作者提到的最好的办法 进行阐述了,读者自行体会吧。

健康检查和应用情况表页面

细粒度的微服务

  Akka为我们歌词 歌词 都都 提供了有一种分布式的、最终一致的存储和检索数据的最好的办法 。你是什么最终一致的数据类型被称为无冲突克隆技术数据类型或CRDT(Conflict-Free Replicated Data Types)。关于你是什么CRDT网上的资料有的是 没法来没法多有啊。Akka实现了称为分部署数据的CRDT,目前还不稳定。

可用性

 部署

分阶段部署/滚动重启

  将应用应用系统进程分解为微服务的好处之一没法来没法多过后 能实现优雅降级,但前提没法你的系统得支持优雅降级。优雅降级过后 能你衡量系统的重要性、优先级,也没法来没法多说什么服务是过后 能降级的。熔断器模式过后 能实现优雅降级。比如检测内部系统的故障是一另一个 耗时的操作,不可能 每个后续请求有的是 等待连接超时知道资源再次可用,整个系统将承担没法来没法多有额外的负担。熔断器过后 能快速的使后续请求快速失败,能有无效减少系统的负载,便于系统故障恢复,过后 过后 提高系统的可用性。

  固然应用监测是一另一个 比较大的议题,远超出了Akka的范围。没法来没法多有工具过后 能组合使用,过后 发挥最大的作用。

  固然有一种架构是对“分而治之”思想的不同粒度的解释。单体式应用从微观的深度图拆分系统,微服务从整体的深度图拆分系统。由此来看,并有的是 拆分的越细越好。

  固然可用性跟哪种架构没没法来没法多关联,但系统拆分的粒度不同,则提供可用性和可扩展性的最好的办法 就不同。单体式应用过后 过后 能 一另一个 可部署的单元,此时提高可用性一般没法来没法多把部署单元克隆技术多份。你是什么实施起来简单粗暴,还有效。但有过后不一定能奏效。比如部署单元过后 能克隆技术多份,因此数据库却过后 能 简单的克隆技术多份,毕竟数据才是王道。

  CRDT要求数据类型过后 能带有一另一个 无冲突的合并最好的办法 ,此最好的办法 具有接收有一种不同情况表的数据(来自集群中另一个 不同位置)并将其合并在一起去以创建最终结果的能力。不可能 合并完成没法遇到冲突,没法就过后 能使用此数据社会形态来跨节点进行克隆技术。这没法来没法多CRDT的工作原理,当一另一个 节点收到对数据更新的命令时,它将当前情况表广播给许多节点。许多节点收到更新的情况表时,与人及的情况表进行合并,因此存储最终结果。关于你是什么CRDT过后 能参考wikipedia。不建议使用你是什么东西,毕竟用一另一个 数据库不可能 分布式缓存就过后 能拿下了,还没法麻烦进行广播。你是什么技术过后 过后 能 说明Akka的强大和比较复杂而已。

度量

  Akka为多个微服务通信提供相关的工具。

  单体式应用应用系统进程是指把所有组件都部署为单个单元的应用应用系统进程。一般创建各种独立的库隔离比较比较复杂,因此把什么库编织在一起去构建成一另一个 完正的大系统。微服务则通过较大的应用应用系统进程分成较小的服务来构建,以隔离的最好的办法 执行非常细微的任务,比较比较复杂被隔离在各个独立的微服务之内,因此通过许多微服务进行组合。

  集群可用性的关键指标是过后 识别出故障是什么过后发生的,因此对其进行适当的出理 。当然是越早发现越好,另一另一个 就过后 能提高 可用时间。此时运维监测就非常重要了。

  分布式系统最常用的最好的办法 没法来没法多使用分阶段部署,也成为滚动重启。滚动重启有一另一个 比较关键的技术没法来没法多对请求进行分流,也没法来没法多过后 能将系统的请求暂时路由到旧有系统,当新节点可用时,再将请求回流。当然了,这没法来没法多涉及一另一个 系统,不可能 涉及多个系统,那就更麻烦了。不可能 另一个 系统过后 能同步升级,比如接口变化了,且版本不兼容,想想是有的是 更加固然呵呵?另一另一个 关键的技术没法来没法多版本兼容了。没法来没法多有可用性并有的是 一件容易的事儿。

微服务和单体式应用

集群感知路由器

  从本章过后 能看出,提高系统的可用性是一另一个 系统工程,过后 能多种工具、策略来确保。这有过后比分布式系统有一种更加比较复杂。

  使用本地的单个actor系统构建时,路由器过后 能提高可扩展性。出理 分布式系统时,还过后 能将路由器作为一另一个 提供可用性的工具。集群感知路由器与普通路由器类事,只不过它的路由不可能 驻留在集群中的许多节点上,允许什么路由器在可扩展性之外提供可用性。固然路由器有点痛 类事于注册中心,路由器负责下发消息。集群感知路由器过后 能自动感知节点的位置,并根据路由策略发送消息。不可能 一另一个 节点出现故障,路由器过后 能简单的把消息路由到另外一另一个 不通过的活跃节点上。这就额外获得了可用性。

  度量过后发现了异常,下一步就过后 能选用导致 ,日志就变得至关重要了。基于Akka开发分布式一另一个 好处没法来没法多,日志是异步打印的,不太会影响系统的性能。没法来没法多有过后,生产商一般不开日志,不可能 怕影响性能,没法来没法多有日志往往会被忽略。

用有界上下文划分微服务

 分布式数据

日志

  大多数监测工具有的是 依赖有一种健康检查机制。执行健康检查的最常见机制是使用HTTP情况表页面,你是什么点感觉作者说的有点痛 局限,过后 过后 能 说这是有一种常见的显示机制,而有的是 执行机制。即使应用应用系统进程过后 能 HTTP接口,带有Akka HTTP健康检查页面也是一件好事。完正使用actor通信的微服务过后 过后 从用Akka HTTP端点搭建的监控中收益。你是什么页面具体带有什么信息比较灵活,作者建议把内部依赖有无可用、应用应用系统进程版本号或提交HASH带有进来。

  在最终一致的分布式系统中,有以过后遇到瞬态数据,固然也没法来没法多临时数据。我们歌词 歌词 都都 过后 能 保发生数据库,只发生应用应用应用系统进程期间,比如用户的会话信息。瞬态信息在所有节点上保持可用性对系统来说非常重要。比如用户信息不可能 在新节点上不可用,系统就无法继续为该用户提供正常的服务。固然吧,我固然不可能 瞬态数据非常重要,那就保发生数据库呗,固然不行保发生分布式缓存也是好的。Akka为此还单独提供了相关的组件,甜得考虑周到啊。

  集群感知路由器与本地路由器的路由策略稍有不同。比如使用最小邮箱的路由器别问我集群中哪个节点的邮箱比较小。集群感知路由器通过actor的相对路径下发集群中所有符合条件的actor,与单例代理不同,它无需缓存消息,也没法来没法多消息不可能 丢失。

看门狗工具

  微服务没法来没法多把单体式应用拆分为多个子系统,每个系统是独立的,子系统过后 能看做单体式应用按照克隆技术的最好的办法 提高可用性。

  滚动升级的替代方案被称为蓝绿部署,固然还是滚动升级。把150%的节点指定为“蓝绿色”,剩下的150%指定为“绿色”。绿色节点出理 请求时,升级蓝绿色节点,检查运行情况表,因此交替升级。

  RPO:(Recovery Point Obejective,恢复点目标)是指业务系统所允许的在灾难过程中的最大数据丢失量,用来衡量容灾系统的数据冗余备份能力。

  固然熔断器是“分而治之”的逆向思维,有过后过渡分解有的是 一件好事,把检测超时你是什么功能向上抽象汇总,提供统一的出理 最好的办法 ,能有无效的减少系统的负载,带来上述的好处。看来系统固然一定是越精细越好。

优雅降级

蓝绿部署