微服务架构定义

微服务架构是一种架构风格和架构思想,它倡导我们在传统软件应用架构的基础上,将系统业务按照功能拆分为更加细粒度的服务,所拆分的每一个服务都是一个独立的应用,这些应用对外提供公共的API,可以独立承担对外服务的职责,通过此种思想方式所开发的软件服务实体就是“微服务”,而围绕着微服务思想构建的一系列体系结构(包括开发、测试、部署等),我们可以将它称之为“微服务架构”。

根据微服务架构的定义,将传统单体架构拆分为微服务架构的方式如图1-4所示。

图1-4传统单体架构拆分为微服务架构

从图1-4中可以看出,微服务架构已将传统单体架构中的订单服务、商品服务和用户服务拆分为了独立的服务,其中的每一个服务都是一个独立的应用,可以访问自己的数据库,这些服务对外提供公共的API,并且服务之间可以相互调用。

注意:微服务和微服务架构是两个不同的概念。微服务强调的是服务的大小,它关注的是某一个点,而微服务架构是一种架构思想,需要从整体上对软件系统进行全面的考虑。

微服务架构的优点

与传统单体应用架构相比,微服务架构有很多优点,具体表现如下:

1.复杂度可控

微服务架构在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰地表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性,并提高了开发效率。

2.可独立部署

由于微服务具备独立的运行进程,所以每个微服务都可以独立部署。当某个微服务发生变更时,无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低了对生产环境所造成的风险,最终缩短应用交付周期。

3.技术选型灵活

微服务架构下,技术的选型是多样化的。每个团队都可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术。由于每个微服务相对简单,当需要对技术进行升级时,所面临的风险较低,甚至完全重构一个微服务也是可行并容易的。

4.易于容错

当架构中的某一组件发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,导致整个应用不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。

5.易于扩展

单个服务应用也可以实现横向扩展,这种扩展可以通过将整个应用完整的复制到不同的节点中实现。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。

6.功能特定

每个微服务有自己的业务逻辑和适配器,并且一个微服务一般只完成某个特定的功能,例如商品服务只管理商品、客户服务只管理客户等。这样开发人员可以完全的专注于某一个特定功能的开发,而不用过多的考虑其他,从而提高开发效率。

除了上述几点好处外,微服务架构还有很多好处,由于篇幅有限,这里就不一一列举了,但从微服务架构的好处可以看出,使用微服务可以很好的解决传统单体架构中的问题。

微服务架构的不足

微服务架构除了有上面所讲的各种优点外,还存在着一些不足,这些不足的具体表现如下:

1.开发人员必须处理创建分布式系统的复杂性

①开发工具(或IDE)是面向构建传统的单体应用程序的,不为开发分布式应用程序提供全面功能上的支持。

②测试更加困难。在微服务架构中,服务数量众多,每个服务都是独立的业务单元,服务主要通过接口进行交互,如何保证依赖的正常,是测试面临的主要挑战。

③开发人员必须实现服务间的通信机制。

④实现用例跨多个服务时,需要面对使用分布式事务管理的困难。

⑤l实现跨多个服务的用例,需要团队之间进行仔细的协调。

2.部署的复杂性

在部署和管理时,由许多不同服务类型组成的系统的操作比较复杂,这将要求开发、测试及运维人员有相应的技术水平。

3.增加内存消耗

微服务架构用多个服务实例取代了1个单体应用程序实例,如果每个服务都运行在自己的JVM中,那么有多少个服务实例,就会有多少个实例在运行时的内存开销。

微服务架构与SOA的区别

通过前3个小节的学习,相信有些读者对微服务架构已经有了一定的了解。在学完后,细心的读者可能会有这样一个疑问,微服务架构与SOA都是对单体架构的拆分,那么他们有什么不同呢?下面通过一个表格对两者的区别进行对比,如表1-1所示。

表1-1微服务架构与SOA的区别

微服务架构是什么?微服务架构与SOA的区别相关推荐

  1. dubbo协议_阿里P8架构师谈微服务架构:Dubbo+Docker+SpringBoot+Cloud

    微服务架构 什么是微服务架构呢?简单说就是将一个完整的应用(单体应用) 按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发.部署.扩展.服务于服务之间通过注入RESTful ...

  2. 为何从单体架构迁移到微服务这么难?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 面对微服务如火如荼的发展,很多人都在了解,学习希望能在自 ...

  3. 分布式服务框架原理与实践pdf_深度解析微服务治理的技术演进和架构实践

    为什么需要服务治理? 第一.业务需求 随着业务的发展,服务越来越多,如何协调线上运行的各个服务,保障服务的SLA,对服务架构和运维人员是一个很大的挑战.随着业务规模的不断扩大,小服务资源浪费等问题逐渐 ...

  4. php微服务架构设计模式,《微服务架构设计模式》读书笔记---第十一章:开发面向生产环境的微服务应用...

    为了部署到生产环境中,需要考虑三个关键的质量属性:安全性,可配置性和可观测性. 开发安全的服务 需要实现安全性的四个方面: 身份验证. 访问授权.验证是否允许访问主体对指定数据完成请求的操作. 审计. ...

  5. 中小型研发团队架构实践:微服务架构

    http://www.infoq.com/cn/articles/architecture-practice-06-microservice-architect 一.MSA 简介 1.1.MSA 是什 ...

  6. 微服务实战(七):从单体式架构迁移到微服务架构

    http://dockone.io/article/1266 希望读者通过本系列文章对微服务优缺点有一个比较好的理解,以及何时使用这种架构.也许微服务架构比较适合你的应用.也许你正在开发一个大型.复杂 ...

  7. SpringCloud系列二:Restful 基础架构(搭建项目环境、创建 Dept 微服务、客户端调用微服务)...

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:Restful 基础架构 2.具体内容 对于 Rest 基础架构实现处理是 SpringCloud 核心所在,其基本操 ...

  8. 微服务架构,多“微”才合适?

    以前的文章讨论过<互联网架构,究竟为啥要做服务化?>,随着数据量.并发量.业务复杂度的增长,互联网架构会出现以下问题: 代码到处拷贝 底层复杂性扩散 基础库(so/jar/dll)耦合 S ...

  9. 微服务实践(七):从单体式架构迁移到微服务架构

    迁移到微服务综述 迁移单体式应用到微服务架构意味着一系列现代化过程,有点像这几代开发者一直在做的事情,实时上,当迁移时,我们可以重用一些想法. 一个策略是:不要大规模(big bang)重写代码(只有 ...

  10. Spring Cloud构建微服务架构(五)服务网关

    通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实 ...

最新文章

  1. iOS 直播专题5-推流
  2. Linux 2.6内核编译与配置安装升级
  3. 006-spring-data-elasticsearch 3.0.0.0使用【四】-spring-data之Elasticsearch Repositories
  4. mysql 对象_查看MySQL中的对象
  5. SPI/I2S调试心得与经验总结
  6. [爬虫][python][入门][网页源码][百度图片][豆瓣TOP250]
  7. windows搜索工具_加快搞定并替代 Windows 10 搜索框搜索文件速度的免费小工具
  8. 《代码大全》代码生成
  9. TypeSrcript如何引入第三方库 如果加d.ts以及async await如何使用 demo,只有代码,文字后续补充...
  10. leetcode64. 最小路径和
  11. 网管人员必备的常用命
  12. CDN的原理技术及使用方法
  13. [实战]200类鸟类细粒度图像分类
  14. android北京实时公交,北京实时公交app
  15. 【Layui+Vue】动态获取表格cols数据并加载
  16. python入门教程陈孟林_Python快速入门指南,没基础没关系
  17. 使用dlib应用(HOG和CNN)进行人脸检测
  18. 【MOOC】华中科技大学操作系统慕课答案-第1~3章单元测试
  19. 搭配Online|原光辉调研沁水县文物保护和城市建设工作
  20. 形容计算机老师风采的句子,形容教师的优美句子

热门文章

  1. Spark 调研报告
  2. 现代通信原理_招生季专业详解读丨天津师范大学电子与通信工程学院
  3. 解决pycharm lanms包错误 “No module named lanms”
  4. Bray-curtis,unifrac,weighted unifrac,jaccard计算方法比较
  5. Unix/Linux编程:网络接口层
  6. 从网站抓取数据并在 Excel 中整合
  7. ArcGIS教程:地图模板的使用
  8. 视频是不能 P 的系列:OpenCV 和 Dlib 实现表情包
  9. Ubuntu 20.04 Gazebo安装 及模型库下载
  10. 公车改革正式启动 助推二手车拍卖