JavaSpring Cloud

微服务架构深度解析与最佳实践

2021-02-13  本文已影响0人  you的日常

微服务架构的概念,现在对于大家应该都不陌生,无论使用 Apache Dubbo、还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒度且独立部署的 Rest 服务。但是这个过程,具体应该怎么做?现有的条件下到底要不要做微服务?服务拆分成什么粒度才是合适的?遗留的老系统需要如何考虑重构改造?有哪些坑需要我们注意?系统怎么在分布式服务下实现数据的一致性和服务的高可用可伸缩?拆分的过程中系统数量增多,测试、部署、运维、监控,又应该如何处理?

本文将从这些问题的深度分析出发,阐述微服务架构落地的一些设计原则和利弊取舍,结合微服务架构过程的很多最佳实践经验,希望给读者带来一定的启发和思考,避免在实际应用过程中走弯路,能够多快好省的落地实现微服务架构。内容涉及:

  1. 微服务架构的发展过程简介
  2. 微服务架构的特点与常见特性
  3. 微服务架构的常见技术与简单示例
  4. 微服务架构存在的一些问题
  5. 如何合理拆分微服务
  6. 遗留系统应该如何改造
  7. 怎么考虑拆分后的数据一致性
  8. 系统和服务的高可用可伸缩如何实现
  9. 拆分过程的测试和部署如何处理
  10. 拆分后的运维和监控如何处理

第一部分:微服务深度解析

微服务架构的发展过程简介

在这里插入图片描述

微服务架构发展的五个关键时间节点

特别值得一提的是,在微服务架构发展的过程中,还有两位技术大牛的影响不可忽视:

微服务架构的发展趋势

在这里插入图片描述

软件架构的发展趋势,简单的说可以分为这几个阶段(详细介绍可以参见我的上一个文章《软件架构发展历程分享》或者《高可用可伸缩微服务架构:基于 Dubbo、Spring Cloud 和 ServiceMesh》一书):

在这里插入图片描述

我们可以从 Google 的趋势图看到,从 2014 年起,微服务架构架构的热度就直线上升,成为最热门的技术之一。从国内的情况来看,一方面;另一方面,一直到现在,每年的 QCon 大会都会有微服务架构版本,跟大家分享最新的微服务架构知识和实践经验。

什么是微服务架构

在这里插入图片描述

按 Martin Fowler 和 James Lewis 的定义,微服务架构风格是通过实现一系列微小的服务的方式,开发一个独立应用系统的方法,每个服务运行在自己的进程内,通过轻量级的机制与其他服务通信,通常是 HTTP 资源 API 的方式。这些服务都是围绕业务能力来构建,通过全自动部署工具来实现独立部署。这些服务,其可以使用不同的编程语言和不同的数据存储技术,并保持最小化集中管理。

具体包含如下特征:

Chris Richardson 则简化了这种说法,认为微服务是一种架构风格,通过一组服务的方式构造系统,同时需要满足如下条件:

Peter Lawyer 说,微服务很多地方特别像是 Mike Gancarz 总结的 Unix 哲学:

微服务架构就是 Unix 哲学在分布式系统里的应用。微服务架构的哲学本质上等于 Unix 哲学里的“让程序只做好一件事”:

从这里我们可以得出一个结论,一个微服务架构的系统需要满足一系列的条件和原则,而不仅仅是说使用了某个微服务的技术框架就是微服务架构。微服务这个词目前也过于流行以致于有些泛滥了。很多技术组件或者框架,例如可以用来暴露服务,可以用来自动化部署,可以用来管理配置等等,它们都可以用来作为微服务架构设计时的某个组成部分。但是单独用一个,并不代表我们实现了微服务设计,而只能说明我们借鉴了一些微服务的思想。另一方面,我们在做微服务的时候,也不用把市面上所有的微服务组件都拿来用。就像是我们写个业务系统不会用到 JDK 的所有 API,画一幅画之前我们买了一盒 24 支的水彩笔,实际上我们可能做一幅作品最终只用到了 5-6 个颜色的水彩笔。

微服务架构的特点、优势和常见技术

微服务的四个特点和六个能力

在这里插入图片描述

微服务架构首先是一个分布式的架构,其次我们要暴露和提供业务服务能力,然后我们需要考虑围绕这些业务能力的各种非功能性的能力。这些分散在各处的服务本身需要被管理起来,并且对服务的调用方透明,这样就有了服务的注册发现的功能需求。

同样地,每个服务可能部署了多台机器多个实例,所以,我们需要有路由和寻址的能力,做负载均衡,提升系统的扩展能力。有了这么多对外提供的不同服务接口,我们一样需要有一种机制对他们进行统一的接入控制,并把一些非业务的策略做到这个接入层,比如权限相关的,这就是服务网关。同时我们发现随着业务的发展和一些特定的运营活动,比如秒杀大促,流量会出现十倍以上的激增,这时候我们就需要考虑系统容量,服务间的强弱依赖关系,做服务降级、熔断,系统过载保护等措施。

在这里插入图片描述

微服务的优势

在这里插入图片描述

这个图 x 轴是系统复杂度,y 轴是开发的生产力,我们可以看到:

也就是说微服务应用在复杂度低的情况下,生产力反而比单体系统低。在复杂度高的地方,情况恰恰相反。

随着复杂度升高,单体架构的生产力快速下降,而微服务相对平稳,所以,复杂度越高的业务系统,越适合使用微服务架构。

搞清楚了微服务架构与单体架构的生产力的区别以后,我们再来看看微服务有哪些优势,我总结了一下有以下几点:

常见的微服务技术框架

在这里插入图片描述

在互联网出行业务中,用户通过 API 网关访问系统的乘客、司机、出行三个 REST 服务,这三个服务再通过 REST 访问计费、支付和通知三个服务。看起来很简单,也好理解,但是实际的业务系统里,设计和实现一般会是这样:

在这里插入图片描述

Sping Cloud 与 Apache Dubbo、Spring Cloud Alibaba

在这里插入图片描述
上一篇 下一篇

猜你喜欢

热点阅读