真实生产级云原生微服务项目实战-项目目标与主要内容
文章目录
- 真实生产级云原生微服务项目实战-项目目标与主要内容
- 前言
- 项目目标与主要内容
- 1. 掌握微服务架构和前后分离架构设计
- 2. 掌握基于 Spring Boot 搭建微服务基础框架
- 3. 进一步提升 Java/Spring 微服务开发技能
- 4. 掌握 Spring Boot 微服务测试和相关实践
- 5. 理解 SaaS 多租户应用的架构设计
- 6. 理解可运维架构理念和相关实践
- 7. 掌握服务容器化和容器云部署相关实践
- 8. 理解云时代的软件工程流程和实践
- 公众号
- 参考
前言
本项目实战涉及需求分析、架构设计、框架搭建、服务实现、测试、可运维架构和容器云部署等全研发流程环节,其中也会穿插介绍微服务和云原生架构的原理、Java/Spring 编程技术、SaaS 应用多租户架构设计方法以及各种工具。
本项目实战主要内容是纵向的端到端的云原生微服务应用的架构设计与实现,重点放在了应用层。
项目目标与主要内容
本项目实战通过具体案例的形式,使用 Spring Boot 框架,开发一个贴近生产的微服务应用,并一键部署到 Kubernetes 容器云环境。
本项目实战的目标包括:
- 掌握微服务架构和前后分离架构设计
- 掌握基于Spring Boot 搭建微服务基础框架
- 进一步提升 Java/Spring 微服务开发技能
- 掌握 Spring Boot 微服务测试和相关实践
- 理解 SaaS 多租户应用的架构设计
- 理解可运维架构理念和相关实践
- 掌握服务容器化和容器云部署相关实践
- 理解云时代的软件工程流程和实践
1. 掌握微服务架构和前后分离架构设计
首先希望通过这次的学习,能够掌握微服务架构和前后分离架构的设计。
面对一个中小规模的业务应用的需求,我们该如何采用微服务架构的思想将业务领域划分出若干个微服务,设计并给出整体应用的架构。
前后分离架构是现代应用架构的一个主流,他支持前端和后端团队并行开发,支持前端应用的快速迭代和创新。
那么前后分离架构该如何设计呢?需要考虑哪些技术架构的要素?还有目前技术圈内比较火的,像 Double、Spring Cloud、Kubernetes,都是微服务的主流开发框架或者说平台,那我们该如何选型呢?中台架构到底指什么?如何构建中台架构?都会在后续的内容中,以案例的形式给出这些问题的参考答案。
2. 掌握基于 Spring Boot 搭建微服务基础框架
第二点是希望能够掌握如何基于 Spring Boot 搭建微服务基础框架。
Spring Boot 是业界微服务应用开发的主流框架之一,但是在真正开发生产级微服务之前,我们仍然需要对 Spring Boot 进行一些必要的封装,来适应我们的业务和架构的需求,这种封装沉淀下来的就是一个企业的微服务基础框架。
通过标准化和重用这个框架,可以大大提升我们后续开发微服务的效率,那么微服务基础框架该如何构建?有哪些技术架构需要考量?
首先,我们需要抽象出微服务开发过程中的一些公共关注点,并将这些关注点封装集成到我们的微服务开发框架当中。
其次,安全,主要是登录、认证和授权等,是一个微服务架构的关键环节,我们需要设计微服务的安全框架,并且将安全能力集成到微服务开发框架当中。
最后,微服务网关是整个微服务应用的集中入口,是实现前后分离架构的一个关键。同时,网关的可编程性对微服务应用的升级和部署的灵活性非常重要,所以我们需要设计一款轻量级的可编程网关,来应对不断变化的业务需求。
在后面的内容中,会覆盖构建微服务基础框架相关的内容,带大家从零搭建一个微服务基础框架。
3. 进一步提升 Java/Spring 微服务开发技能
第三点收获就是进一步提升 Java/Spring 微服务开发技能。
国内 Gitee 上面有一个开源项目语言统计排行,这个语言排行表明国内有将近 37% 的项目是 Java/Spring 项目。基本上可以认为 Java 语言和 Spring 框架是目前国内企业开发的绝对主流。
深入掌握 Java/Spring 开发技能,是在国内软件开发行业,保持市场竞争力的一个不二选择。
本案例项目中除了前端的两个 SPA 应用,采用 react js 开发,其余所有的微服务全部采用 Java Spring Boot 开发。
在项目中间,也会适当穿插讲解一些 Java/Spring 开发技术和实践,帮助大家学习用好这些主流开发语言和框架。
另外,在项目的最后,也会把用 Spring Boot 开发的主要的微服务给大家做一下全面的剖析。
4. 掌握 Spring Boot 微服务测试和相关实践
第四个收获是帮助大家掌握 Spring Boot 微服务测试技术和相关实践。
微服务应用本质上是一个分布式系统,分布式系统的复杂性对这个测试提出了更大的挑战。
针对这种复杂性,我们将采用分而治之的策略,先将每个微服务进行隔离测试,而在对每一个微服务进行测试的时候,我们会再按照分层的方式进行隔离测试。
测试的过程当中,我们会采用 Mock 等技术手段,合理依赖以简化测试,在确保每个微服务都通过测试以后,我们再进行整个应用的集成测试。
分治和隔离技术可以同时提升测试效率,也提升测试的质量。
在后面 Spring Boot 的服务测试设计和实践当中,展示如何利用 Spring Boot 提供的这个测试支持实现这种分治和隔离测试技术。同时也会拓展介绍一些其他常用的测试方法和工具。
5. 理解 SaaS 多租户应用的架构设计
第五个收获理解如何架构和设计一个 SaaS 多租户应用。
企业 SaaS 应用是当前行业创新的热点,SaaS 应用不同于一般的企业应用,需要支持多租户和租户隔离。在架构上是有一定的挑战的,作为架构师,我们该如何设计一个 SaaS 多租户应用呢?
本项目的这个 staffjoy 案例应用就是一个典型的小型 SaaS 应用,可以作为 SaaS 应用架构的一个参考模板。
后面从系统架构设计和技术栈选型等内容中,将详细剖析 staffjoy 的架构和设计,包括多租户设计。
前面这个五点收获主要内容它是偏向于架构设计和开发测试,在 DevOps 理念当中,它更多的是偏向这个 Dev ,也就是开发的环节。
6. 理解可运维架构理念和相关实践
第六个收获叫可运维架构理念和相关实践。
我们可能在业余时间做过一些简单的项目,但是和企业生产级项目相比,这些项目大都只能算是玩具级的,对生产级和可运维架构理念的认识不足,是一个普遍问题。
企业生产级应用是需要实际上线抗流量的,这类应用关乎企业业务的正常运作。
对可运维性有非常严格的要求,架构的可运维性主要体现在配置、监控、部署这些环节。
其中监控主要包括:日志监控、调用链监控、metrix监控和告警等等。
在后面,可运维架构设计和实践当中,将进一步给大家灌输可运维架构的理念,并且结合这个案例项目,介绍常用的微服务监控工具和相关的实践。
7. 掌握服务容器化和容器云部署相关实践
第七点收获掌握服务容器化和容器云部署相关的实践。
在面对微服务分布式系统的时候,传统的、手工的,基于物理机或者虚拟机这种边的部署方式,显然的这个效率是非常低下,而且容易出错的。
那么 Docker 容器技术的出现,提供了一种可靠的打包和交付微服务的机制。另外,像 Kubernetes 这样的容器调度平台的引入,可以进一步简化分布式微服务的部署和管理。
通过 Kubernetes 我们可以做到一键部署整个微服务应用,也可一键扩容微服务应用。
由此,业界开始提出云原生架构的理念,也就是 cloud native architecture 。也就是说,应用开发不仅以微服务架构的方式进行组织,而且在架构上一开始就要考虑面向容器云部署。
微服务架构和云原生架构是相辅相成的,可以说微服务如果离开了容器和容器云,那么它的部署和运维效率将会大打折扣。
在后面服务容器化和容器部署当中,将介绍 Docker 容器和 Kubernetes 容器云技术,引入云原生架构相关的理念,并展示如何将 staffjoy 这个案例应用部署到本地 docker-compose 环境,再部署到 Kubernetes 环境。
8. 理解云时代的软件工程流程和实践
第八点,也就是最后的一点收获理解云原生时代的软件工程流程和实践。
软件工程一直在不断的演进,它经历了传统经典软件工程、现代敏捷软件工程,现在随着微服务和云原生应用的兴起,我们又来到了云时代的 SaaS 软件工程。
相关的工程流程和技术实践一直在不断的推陈出新,市面上软件工程的书籍不少,但是大众已经跟不上微服务和云原生的脚步了。
通过本次项目实战,试图梳理和总结云时代的一些软件工程流程,从业务需求、架构设计、框架搭建、服务实现、服务测试、可运维架构、一直到容器部署。并且给出各个流程环节的业界的一些实践。
同时通过这次全流程的项目实践,进一步灌输 DevOps 研发运维一体化的理念和视角,成为更全面的 DevOps 型工程师和架构师。
后面这三点收获更多的是偏向部署运维,在 DevOps 理念当中,偏向于 Ops 的环节。