技术架构的演进之路: 为何须要微服务?

技术架构的演进之路

总体发展概览

服务架构一直处于演变之中,为了适合本身的业务,不断的去调整。java

总体的发展历程以下:git

输入图片说明

开发者视角

从一个 java 开发者,感觉大概经历了下面几个历程:github

第一阶段:单体架构

早期,大部分IT系统都是单体系统,例如传统的SSH架构,此时先后端也没有分离,UI组件也包含在了控制层:web

输入图片说明

这个也就是老马刚毕业时候的架构,SSH 基本是面试必问。面试

不过如今这些都发生了一些变化,主流已经变成了 spring mvc + spring contaienr + mybatis。spring

只能说,spring,java 界永远的春天!docker

第二阶段:分布式架构

为了方便给系统扩容,以及增长系统的复用性,出现分布式系统。后端

另外一方面,系统模块快速膨胀,为了下降系统内部的复杂度,因而对系统模块进行拆解,分不到不一样的系统中,下降模块耦合,加快迭代速度。springboot

ps: 其实主要是下降单个应用的复杂性,让每个应用专一于一件事情。这样可维护成本大大下降,换言之,开发完后之后,可让一个刚毕业的新人作运维。把开发者裁掉,下降成本。服务器

主流主要是 SOA 和 MSA 两种体系。

SOA

早期的分布式系统是基于面向服务的架构SOA。

SOA是微服务的前身,主要是为了摆脱单体应用的问题,达到如下效果:

  1. 充分利用现有的基础设施;
  2. SOA体系结构依赖于消息传递(AMQP,MSMQ)和SOAP做为主要的远程访问协议。
  3. 快速响应业务变化;

架构图以下:

输入图片说明

异构系统,也能够经过消息中间件的协议转换进行相互调用。

这个我却是接触过一段时间,当时业务系统是 C# 开发,我所在的后端服务使用的是 java 技术开发。当时的协议使用的是 webservice。

可是用起来感受不是很顺畅,主要缺点以下:

(1)WebService中经常使用的SOAP通讯协议,一般使用XML格式进行通讯,数据冗余,协议太重

(2)服务治理很不完善。

后来逐渐演变为了如今的 MSA(Micro-Service Archeticture 微服务架构),从而实现了更加松耦合以及更加灵活的系统。

MSA

微服务是一种软件开发技术——面向服务的体系结构(SOA)体系结构样式的变体,它将应用程序构造为松散耦合服务的集合。

在微服务体系结构中,服务是细粒度的,协议是轻量级的

  • 微服务架构图示

微服务架构图示

优势

微服务架构有不少重要的优势。

首先,它解决了复杂性问题。它将单体应用分解为一组服务。虽然功能总量不变,但应用程序已被分解为可管理的模块或服务。

这些服务定义了明确的RPC或消息驱动的API边界。微服务架构强化了应用模块化的水平,而这经过单体代码库很难实现。

所以,微服务开发的速度要快不少,更容易理解和维护。

第三,微服务架构可使每一个微服务独立部署。

最后,微服务架构使得每一个服务均可独立扩展。

如今这种架构模式已经成为主流,我的感觉最深的就是若是你只负责单一服务,你能够把他理解的比较透彻,并且维护起来也没有那么复杂。若是有功能变动,只上线对应的应用便可。

缺点

微服务的一些想法在实践上是好的,但当总体实现时也会呈现出其复杂性。

  • 运维开销及成本增长
  • 必须有坚实的 DevOps 开发运维一体化技能
  • 隐式接口及接口匹配问题
  • 代码重复
  • 分布式系统的复杂性
  • 异步机制
  • 可测性的挑战

我的感受微服务最大的问题在于系统的拆分以后,很难有一我的能够知道系统的全貌,因此定位问题变得很是复杂。

举个例子,若是交易发生一笔失败,你可能要从API网关=》业务系统=》交易核心=》支付核心=》风控系统问一遍才能知道缘由,最后发现是对底层的系统返回了一个失败,这里涉及到多个系统的沟通成本,基本上半天的时间就没了。

SOA vs 微服务

SOA vs 微服务

SOA 微服务架构
应用程序服务的可重用性的最大化 专一于解耦
系统性的改变须要修改总体 系统性的改变是建立一个新的服务
DevOps和持续交付正在变得流行,但还不是主流 强烈关注DevOps和持续交付
专一于业务功能重用 更重视“上下文边界”的概念
通讯使用企业服务总线ESB 对于通讯而言,使用较少精细和简单的消息系统
支持多种消息协议 使用轻量级协议,例如HTTP,REST或Thrift API
对部署到它的全部服务使用通用平台 应用程序服务器不是真的被使用,一般使用云平台
容器(如Docker)的使用不太受欢迎 容器在微服务方面效果很好
SOA服务共享数据存储 每一个微服务能够有一个独立的数据存储
共同的治理和标准 轻松的治理,更加关注团队协做和选择自由

挑战

微服务的挑战能够概述以下:

  • API Gateway
  • 服务间调用
  • 服务发现
  • 服务容错
  • 服务部署
  • 数据调用

PatternsRelatedToMicroservices

不过幸运的是,不少成熟的中间件,已经为咱们解决了这些问题。

第一代微服务框架

dubbo 的架构

Dubbo 的架构以下:

struct

dubbo 针对 rpc 这部分作的很好,单也仅此而已。

可是为何仍是会这么火爆呢?

不少架构的升级都会有历史包袱,除非你是一家新公司,全新的应用。

大部分的应用都是 spring 或者 springboot 的,因此如今大部分公司都是 springboot + dubbo 的技术选型方案,这样可让架构的平滑的迁移。

若是大家公司是全新的技术选型,能够考虑 spring cloud。

spring cloud 架构

Spring Cloud 架构以下:

输入图片说明

你会发现 spring cloud 能够说是 java 技术栈中,比较完善的微服务框架。

固然,spring 再牛,负责的声明周期也只是 jvm 以内,应用的部署运维也是须要考虑的。

输入图片说明

每一项技术都有其优点和局限性,因此须要结合使用。

推荐阅读:

Microservice Architectures With Spring Cloud and Docker

目前 docker 虚拟化技术如日中天,结合 k8s 掌托。

我选称这盛世为,喝不起咖啡的打工人,在春天的货船上,996 搬砖!

下一代微服务:Service Mesh?

Service Mesh 也是目前比较火爆的技术,咱们后续进行详解。

我的感悟

技术架构的演进和生物的进化是相似的,物竞天择,适者生存。

学习技术也不能只局限于如今这一刻,要学会去回顾技术的历史,知道为何是这样?若是有能力,也能够引领技术的将来,为何不是这样呢?

我以为本身很幸运,最初接触的是单体应用,是 spring xml 配置的时代。

我以为本身很不幸,框架层出不穷,技术突飞猛进,若是不持续学习,不出 5 年,就会被完全淘汰。

为了避免被那么快淘汰,本系列将从微服务的发展历史,理论知识,入门使用,应用实战,实现原理,重复造轮子等方面,逐渐理解微服务。

我是老马,期待与你,一块儿见证开发者的春天!

深刻学习

相关文章
相关标签/搜索