《Spring响应式微服务》读书笔记

Spring响应式微服务: Spring Boot 2 + Spring 5+Spring Cloud 实战
郑天民 著
2019.6出版

云原生基础理论

云原生所需要的能力和特征
在这里插入图片描述

The Twelve Factors

12-Factors经常被直译为12要素,也被称为12原则,描述如何利用云平台提供的便利来开发更具可靠性和扩展性、更加易于维护的云原生应用。
在这里插入图片描述

另外还有补充的三点:

  • API声明管理
  • 认证和授权
  • 监控与告警

云原生应用的三大特征:

  • 容器化封装:
    以容器为基础,提高整体开发水平,形成代码和组件重用,简化云原生应用程序的维护。在容器中运行应用程序和进程,并作为应用程序部署的独立单元,实现高水平资源隔离。
  • 动态管理:
    通过集中式的编排调度系统来动态的管理和调度。
  • 面向微服务:
    明确服务间的依赖,互相解耦。

云原生架构的原则

云原生架构的重点是通过横向扩展、分布式处理,以及自动更换故障组件来实现弹性和扩展。

在这里插入图片描述
云原生架构的高层次元素

  • 系统的功能需求(它应该做什么,例如“以这种格式处理订单…”);
  • 非功能性要求(如“每分钟至少处理 200 个订单”);
  • 约束(超出变更范围的内容,例如“订单必须在我们现有的大型机系统上更新”)。

谷歌云原生架构的 5 条原则

  • 原则 1:自动化设计
  • 原则 2:善用状态
  • 原则 3:支持托管服务
  • 原则 4:深入实践防御
  • 原则 5:架构不止

自动化云原生系统的一些常见领域:

  • 基础设施:
    使用 Google Cloud Deployment Manager 或 Terraform 之类的工具,自动创建基础设施并对其进行更新;
  • 持续集成 / 持续交付(CI/CD):
    使用 Google Cloud Build 、 Jenkins 和 Spinnaker 等工具自动构建、测试和部署构成系统的软件包。不仅应该自动部署,还应该努力实现金丝雀测试和回滚等过程的自动化;
  • 伸缩性(Scale Up/Down):
    除非系统负载几乎从未发生变化,否则应该根据负载的增加自动扩展系统,并根据负载的持续下降进行收缩。通过扩展,可以确保服务仍然可用,并通过按比例收缩来降低成本。这对于大型应用程序(如公共网站)以及具有不规则负载的较小应用程序(例如在某些时段非常繁忙但在其他时间几乎不使用的内部应用程序)来说是很有意义的。对于有时几乎没有流量并且可以容忍一些初始延迟的应用程序,甚至应该考虑将其收缩为零(删除所有正在运行的实例,并在下次需要时重新启动应用程序);
  • 监控和自动恢复:
    应该从一开始就在云原生系统中纳入监控和日志记录。日志记录和监视的数据流可以很自然地用于监视系统的运行状况,除此之外还可以有许多用途。例如,它们可以对系统的使用和用户的行为(有多少人在使用系统,他们在使用什么部分,他们的平均延迟时间是多少等)提供有价值的见解。其次,它们可以通过汇总来衡量整个系统的健康状况(例如,磁盘又快满了,它的填写速度比平时快吗?磁盘使用量和服务占用之间的关系是什么?等等)。最后,它们是添加自动化理想的地方,当磁盘要填满时,可以自动调整磁盘大小以保持系统正常运行,而不仅仅只记录错误。

领域驱动设计

基本概念

  • 通用语言 ubiquitous language
  • 限界上下文 boundary context:语义和语境上的边界
  • 子域 sub-domain
  • 上下文映射 context maping

子域类型

  • 核心域
  • 支撑子域
  • 通用子域

上下文映射的种类

  • 合作关系
  • 共享内核
  • 客户供应商
  • 跟随者
  • 防腐层
  • 开放主机服务
  • 已发布语言
  • 各行其道

战术设计

  • 聚合根
  • 领域事件
  • 事件风暴

设计的技术维度

  • 聚合 aggregate
  • 领域事件 domain event

领域划分原则

  • 服务关联度原则
  • 业务能力职责单一原则
  • 领域名字代表的自然语言上下文保持互相独立
  • 读写分离原则
  • 组织关系原则

微服务划分原则

  • 垂直划分优先原则
  • 持续演进原则
  • 服务自治,接口隔离原则
  • 自动化驱动原则

服务拆分策略

  • 前后端拆分
  • 把经常变更的部分拆分
  • 把公共的部分进行拆分
  • 根据业务拆分
  • 根据领域模型拆分

服务设计核心标准

  • 服务无状态 service statelessness
  • 服务可重用 service reusability
  • 服务可发现 service discoverability
  • 服务自治 service autonomy
  • 服务松耦合 service loose coupling

服务集成模式

  • 接口集成
    • RPC
    • REST
    • Message
    • ESB
  • 数据集成
    • 共享数据库 shared database
    • 数据复制 Data replication
  • 客户端集成
  • 外部集成

微服务核心组件

  • 服务通讯
  • 事件驱动
  • 负载均衡
  • 服务路由
  • API网关
  • 配置管理

在这里插入图片描述

服务注册与发现

组件名 语言 CAP 一致性算法 服务健康检查 对外暴露接口
Eureka Java AP 可配支持 HTTP
Consul Go CP Raft 支持 HTTP/DNS
Zookeeper Java CP Paxos 支持 客户端
etcd Go CP Raft
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章