学习微服务前需要了解的知识 ——初识微服务架构

更完JAVASE后准备自学springboot,springcloud,spring data jpa一套流

觉得这篇文章很好,特转载过来!提醒自己之后的学习!

单体架构(Monolithic)

十年前左右,我去公司面试时,面试官问我的第一个问题是让我简要介绍下软件设计中的三层设计模型(表示层、业务逻辑处理层、数据访问层):

  • 表示层:通常理解为用于和用户交互的视图层;
  • 业务逻辑处理层:用户提交请求,经过业务逻辑层处理后,对用户请求作出响应;
  • 数据库访问层:主要用于操作数据库。

尽管在软件设计过程中,架构师或者程序设计者遵守了流行一时的经典的三层模型,但由于并未按照业务场景进行划分,使得最终的系统应用将所有的业务场景的表示层、业务逻辑处理层、数据访问层放在一个 Project 中,然后经过编译、打包并部署到一台服务器上。

这种架构适用于用户业务不复杂、访问量较小的时候,甚至可以将应用服务、数据库、文件服务器部署在一台服务器上。但随着用户业务场景变得越来越复杂,单体架构的局限性就很快暴露出来了,主要体现在如下几方面:

  • 随着业务越来越复杂,单体应用代码量急剧膨胀,最终导致代码可 读性、可维护行和可扩展性得不到保证;
  • 随着用户访问量增加,单体应用的并发能力有限;
  • 随着系统代码量的剧增,当修改应用程序或者新增需求时,测试难度成指数级增长;
  • 部署效率低下;
  • 技术选型单一。

SOA 架构(Service Oriented Architecture)

SOA 是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA 可以看作是 B/S 模型、XML(标准通用标记语言的子集)/Web Service 技术之后的自然延伸。

其主要优点有:

  • 把模块(即服务)拆分,使用接口通信,降低模块之间的耦合度;
  • 把项目拆分成若干个子项目,不同的团队负责不同的子项目;
  • 增加功能时只需要再增加一个子项目,调用其它系统的接口就可以;
  • 可以灵活的进行分布式部署。

主要缺点:

  • 和单体架构相比,增加了系统复杂度,系统整体性能有较大影响;
  • 多服务数据通信协议之间转换过程复杂,容易造成 ESB(Enterprise Service Bus)性能瓶颈。

微服务架构(MicroServices)

微服务的概念是 Martin Flower 在2014年写的一篇论文《MicroServices》中提出来的,其主要特点是:

  • 每个服务按照业务划分;
  • 服务之间通过轻量级 API 调用;
  • 可以使用不同语言开发;
  • 可以使用不同的数据存储技术;
  • 可独立部署,服务之间互相不影响;
  • 可针对用户访问流量大的服务单独扩展,从而能够节约资源;
  • 管理自动化。

主要挑战:

  • 微服务粒度大小难以划分,需要设计人员对业务有很好的掌握;
  • 分布式复杂性,主要体现在分布式事务、网络延迟、系统容错等问题解决难度较大;
  • 微服务之间通信成本较高,对微服务之间网络稳定性、通信速度要求较高;
  • 由于微服务数量较大,运维人员运维、部署有较大的挑战。

猜你喜欢

转载自blog.csdn.net/javacoder_juejue/article/details/81192747