“物之所至者,志亦至焉;志之所至者,礼亦至焉;礼之所至者,乐亦至焉:乐之所至者,哀亦至焉。”
微服务是当前软件开发的发展趋势,越来越多的系统采用微服务方式构建。而今天团长分享的这份笔记内容覆盖面非常广。从分布式系统到微服务架构,从Spring Boot到SpringCloud的各种组件,从Docker到Kubernetes,从领域驱动设计到响应式编程和云原生开发,都有作者很多独到的见解。致力于微服务开发的工程师从中汲取并归纳为自己的知识,真是再好不过了。
不BB上干货!
万物皆从原理开始讲起!
- 微服务概述
本章让我们了解什么是微服务、微服务架构产生和发展的背景、云计算时代下微服务与云原生架构的关系、微服务架构的主要特性,及微服务架构与UNIX设计哲学的内在联系。
- 微服务的采用前提
软件世界没有“银弹",不存在理想的软件模型提供全面的解决方案。每一个公司或者企业都需要结合自身的情况和场景来选择是否采用微服务架构。如果你正在基于微服务架构构建或者改造你的系统,那么请注意你使用的技术理念和软件方法论与微服务架构是否存在冲突。总之,在软件工程中,除了技术因素,组织结构、研发流程等都会对微服务架构能否成功落地产生重要影响。
- 微服务构建
领域驱动设计可以保证业务模型和代码模型的一致性,把业务与技术复杂性分离,通过边界划分来控制业务的复杂性,目前微服务架构的兴起带来了实现领域驱动设计的最佳实践环境。软件构建过程本质上是一个复杂的过程,这种复杂性伴随在软件工程的整个生命周期。使用微服务架构、领域驱动的软件建模模式可以让我们找到这种复杂性问题的解决之道。
口头吹没有用,实践即真理
- 脚手架
目前,基于脚手架(基底)模式进行软件构建已经成为微服务架构落地的主流开发方式,可以显著提升开发人员的工作效率。Spring Boot本身基于Spring框架,继承了Spring强大的技术特性。本章我们对Spring Boot框架的核心模块和机制进行了剖析,详细讲解了SpringBoot的自动化配置原理、Starter机制和自定义Starter的工作原理,固化了“约定优于配置""和“开箱即用"”等简洁的开发理念和高效开发方式。同时,本章也是后续Spring Cloud微服务治理的基础,在开始技术进阶之前,务必掌握Spring Boot基础原理,这样才能做到事半功倍。
- 关键技术
微服务架构的关键技术是为微服务提供高可用、可扩展性、可容错性的平台基础设施。Spring Cloud作为微服务的治理平台为我们提供了相关的技术和服务组件,而开源的解决方案往往无法做到满足个性需求,我们需要根据实际场景和业务特性做定制化开发。定制化开发的前提是我们能够充分理解这些关键技术的底层运行原理和工作机制。
- 系统集成
微服务集成架构倾向于使用标准化的HTTP、基于REST API的架构交互模式进行集成。此外,考虑到性能也可以采用RPC的调用方式。对于异步交互过程,使用消息队列可以实现微服务之间的充分解耦和异构集成。Spring Cloud提供了Spring Cloud Stream框架,它可以屏蔽底层通信技术细节,并且实现了基于消息的轻量级微服务集成解决方案。还可用使用Spring Cloud Stream实现基于事件驱动和CQRS的系统架构。
- 微服务数据架构
在微服务架构下,我们强调要根据微服务的数据类型和业务场景选择合适的后端数据存储类型。对于微服务架构下分布式应用中的数据一致性管理,不推荐使用分布式事务,微服务数据架构通过放弃分布式网络的一致性,来提升微服务之间的交互性能。另外,在微服务数据架构中,我们介绍了常见的TCC、Saga、可靠消息模式,可以作为保证数据之间最终一致性的解决方案。
- 微服务交付
相比单体架构,微服务架构在部署灵活性上有了很大改善,然而频繁的服务发布也给微服务架构下的软件质量带来了稳定性的挑战。传统的手动部署方式已经不适用于微服务架构,目前基于容器的交付方式已经成为微服务的标准交付方式,通过持续集成交付工具,配合自动化、可持续交付部署的基础设施,来支撑微服务应用快速地迭代交付,成为软件交付的最佳实践。
- 服务监控治理
监控系统按照原理和作用大致可以分为三类:度量类(Metrics)、日志类(Log)、调用链类(Tracing)。对于不同的监控对象和监控数据类型,需要采用对应的技术栈和监控手段。对于Spring Boot微服务架构,除了开发框架自带的生产就绪组件能够支持服务的健康状态指标查询,我们还需要引入第三方ELK框架作为日志监控组件,与Zipkin和SkyWalking等组件共同实现调用链监控。
学无止境!进阶进阶!
- 响应式微服务架构
构建响应式微服务可以获得异步、响应性、弹性、快速恢复、背压等系统特性,同时响应式微服务架构在资源占用、高并发、高吞吐、异步处理场景中具有更强的优势。目前响应式框架技术选型众多,如果将响应式编程应用到大规模生产系统中,则需要进行周密的调研,并对实际项目周期、人员经验、技术框架等因素进行综合权衡考虑,避免技术的复杂度问题成为业务发展过程中的瓶颈。
- Kubernetes容器管理
Kubernetes作为容器调度运行平台,保证了微服务的弹性、负载、语言无关、扩缩容等强大的DevOps能力,而Spring Cloud框架提供的开发者经验是面向开发人员友好的微服务平台,两个平台都有各自的强项。在微服务实践过程中,我们需要集成它们各自的优势,最终诉求是满足业务场景、解决复杂问题域、提高开发效能、提升服务的交付效率。
- 微服务发展趋势
本书中的内容来源于作者多年的工作积累和实践总结,从理论到实践再到进阶,以全方位递进的方式对微服务的设计和应用进行了解读,能够让大家在日常开发工作中少走弯路,有很强的指导意义。需要获取学习的朋友,可以点击此处来获取就可以了!