目录

一、什么是微服务

二、微服务的由来

三、微服务的优缺点

四、微服务的设计原则

五、微服务核心组件


一、什么是微服务

简单来说,微服务就是将一个单体应用拆分成若干个小型的服务,协同完成系统功能的一种架构模式,在系统架构层面进行解耦合,将一个复杂问题拆分成若干个简单问题。这样的好处是对于每一个简单问题,开发、维护、部署的难度就降低了很多,可以实现自治,可自主选择最合适的技术框架,提高了项目开发的灵活性。

微服务架构不仅是单纯的拆分,拆分之后的各个微服务之间还要进行通信,否则就无法协同完成需求,也就失去了拆分的意义。不同的微服务之间可以通过某种协议进行通信,相互调用、协同完成功能,并且各服务之间只需要制定统一的协议即可,至于每个微服务是用什么技术框架来实现的,统统不需要关心。这种松耦合的方式使得开发、部署都变得更加灵活,同时系统更容易扩展,降低了开发、运维的难度。

二、微服务的由来

传统的 Java Web 都是采用单体架构的方式来进行开发、部署、运维,所谓单体架构就是将 Application 的所有业务模块全部打包在一个文件中进行部署。在单体架构中,所有的业务模块的耦合性太高,耦合性过高的同时项目体量又很大势必会给各个技术环节带来挑战。项目越进行到后期,这种难度越大,只要有改动,整个应用都需要重新测试,部署,极大的限制了开发的灵活性,降低了开发效率。同时也带来了更大的安全隐患,如果某个模块发生故障无法正常运行就有可能导致整个项目崩溃。

随着业务的发展,开发变得越来越复杂。修改、新增某个功能,需要对整个系统进行测试,重新部署。一个模块出现问题,很可能导致整个系统崩溃。多团队同时对数据进行管理,容易产生安全漏洞。各模块使用同一种技术框架,很难根据具体业务需求选择更合适的框架,局限性太大。模块内容太复杂,如果员工离职,可能需要很长时间才能完成任务交接。为了解决上述问题,微服务架构应运而生。

三、微服务的优缺点

优点:

  • 各个服务之间实现了松耦合,彼此之间不需要关注对方是用什么语言,什么技术开发的,只需要保证自己的接口可以正常访问,通过标准协议可以访问其他微服务的接口即可。
  • 各个微服务之间是独立自治的,只需要专注于做好自己的业务,开发和维护不会影响到其他的微服务,这和单体架构中"牵一发而动全身"相比是有很大优势的。
  • 微服务是一个去中心化的架构方式,相当于用零件去拼接一台机器,如果某个零件出现问题,可以随时进行替换从而保证机器的正常运转,微服务就相当于零件,整个项目就相当于零件组成的机器。

缺点:

  • 各个服务之间是通过远程调用的方式来完成协作任务的,如果因为某些原因导致远程调用出现问题,导致微服务不可用,就有可能产生级联反应,造成整个系统崩溃。
  • 如果某个需求需要调用多个微服务,如何来保证数据的一致性是一个比较大的问题,这就给给分布式事务处理带来了挑战。
  • 相比较于单体应用开发,微服务的学习难度会增加

四、微服务设计原则

  • 服务粒度不能过大也不能过小,提炼核心需求,根据服务间的交互关系找到最合理的服务粒度。
  • 各个微服务的功能职责尽量单一,避免出现多个服务处理同一个需求。
  • 各个微服务之间要相互独立、自治,自主开发、自主部署、自主维护。
  • 保证数据独立性,各个微服务独立管理其业务模块下的数据,可开放出接口供其他微服务访问数据,但是其他微服务不能直接管理这些数据。
  • 使用 REST 协议完成微服务之间的协作任务,数据交互采用 JSON 格式,方便调用与整合

五、微服务核心组件

  • 服务治理(服务注册、服务发现)

拆分之后的微服务首先需要完成的工作就是实现服务治理,包括服务注册和服务发现。这里我们把微服务分为两类:提供服务的叫做服务提供者,调用服务的叫做服务消费者。一个服务消费者首先需要知道有哪些可供调用的微服务,以及如何来调用这些微服务。所以就需要将所有的服务提供者在注册中心完成注册,记录服务信息,如 IP 地址、端口等,然后服务消费者可以通过服务发现获取服务提供者的这些信息,从而实现调用。

  • 服务负载均衡

微服务间的负载均衡是必须要考虑的,服务消费者在调用服务提供者的接口时,可根据配置选择某种负载均衡算法,从服务提供者列表中选择具体要调用的实例,从而实现服务消费者与服务提供者之间的负载均衡。

  • 微服务网关

在一个微服务架构中会包含多个微服务实例,每个微服务实例都有其特定的网络信息,如 IP 地址、端口等,很多时候完成一个需求需要多个微服务来协同工作,那么客户端就需要频繁请求不同的 URL ,不便于统一管理,可以使用微服务网关来解决这一问题,为客户端提供统一的入口,系统内部由网关将请求映射到不同的微服务。

  • 微服务容错

前面我们提到过,各个服务之间是通过远程调用的方式来完成协作任务的,如果因为某些原因使得远程调用出现问题,导致微服务不可用,就有可能产生级联反应,造成整个系统崩溃。这个问题我们可以使用微服务的熔断器来处理,熔断器可以防止整个系统因某个微服务调用失败而产生级联反应导致系统崩溃的情况。

  • 分布式配置

每个微服务都有其对应的配置文件,在一个大型项目中管理这些配置文件也是工作量很大的一件事情,为了提高效率、便于管理,我们可以对各个微服务的配置文件进行集中统一管理,将配置文件集中保存到本地系统或者 Git 仓库,再由各个微服务读取自己的配置文件。

  • 服务监控

一个分布式系统中往往会部署很多个微服务,这些服务彼此之间会相互调用,整个过程就会较为复杂,我们在进行问题排查或者优化的时候工作量就会比较大。如果我们能准确跟踪到每一个网络请求,了解它整个运行流程,经过了哪些微服务、是否有延迟、耗费时间等,这样的话我们分析系统性能,排查解决问题就会容易很多,这就是服务监控。

Spring Cloud

Spring Cloud 基于 Spring Boot 使得整体的开发、配置、部署都非常方便,可快速搭建基于微服务的分布式应用,实现了分布式系统中的公共组件,如服务注册、服务发现、配置管理、熔断器、控制总线等,服务调用方式是基于 REST API,整合了各种成熟的产品和架构。核心组件如下图所示:

springcloud(一)微服务概述相关推荐

  1. Springcloud微服务概述

    1. 微服务的概述 常见的面试题目: 1. 什么是微服务? 2. 微服务之间是如何独立通讯的? 3. SpringCloud 和 Dubbo有那些区别? 4. SpringBoot 和 SpringC ...

  2. 基于SpringCloud的微服务架构演变史?

    系统架构演变概述 在公司业务初创时期,面对的主要问题是如何将一个想法变成实际的软件实现,在这个时候整个软件系统的架构并没有搞得那么复杂,为了快速迭代,整个软件系统就是由"App+后台服务&q ...

  3. SpringCLoud实战微服务之——微服务简介以及入门使用

    微服务概述 微服务是什么?微服务解决了什么问题?微服务有什么特点? 单体架构是什么? 一个归档包包含了应用所有功能的应用程序,我们通常称之为单体应用.架构单体应用的架构风格,我们称之为单体架构,这是一 ...

  4. 【SpringCloud】微服务笔记

    写在前面 官方代码地址:https://github.com/zzyybs/atguigu_spirngcloud2020 本文地址:https://blog.csdn.net/hancoder/ar ...

  5. Go语言云原生与微服务(二)微服务概述

    Hello,我是普通Gopher,00后男孩,极致的共享主义者,想要成为一个终身学习者.专注于做最通俗易懂的计算机基础知识类公众号.每天推送Golang技术干货,内容起于K8S而不止于K8S,涉及Do ...

  6. Aooms_基于SpringCloud的微服务基础开发平台实战_002_工程构建

    为什么80%的码农都做不了架构师?>>>    一.关于框架更名的一点说明 最近在做年终总结.明年规划.还有几个项目需要了结.出解决方案,事情还比较多,死了不少脑细胞,距离上一篇文章 ...

  7. SpringCloud学习--微服务架构

    目录 微服务架构快速指南 SOA Dubbo Spring Cloud Dubbo与SpringCloud对比 微服务(Microservice)架构快速指南 什么是软件架构? 软件架构是一个包含各种 ...

  8. 计算机毕业设计springcloud基于微服务的家居体验平台的设计与实现

    最新200套计算机专业原创毕业设计参考选题都有源码+数据库是近期作品 如果题目不合适,可以评论留下题目,或add_用户名,有时间看到机会给您发 1 ssm高校大学生就业系统 2 ssm智创员工管理系统 ...

  9. 牛批了第一次见到这么清晰的微服务概述,助你轻松入门到进阶

    前言 随着各行各业的快速发展,业务规模的不断扩大,不可避免地造成原有架构不能够适应快速的增长和变化.这时,微服务就进入大家的视野,其实在微服务之前,很多公司已经做过服务化的改造,并且取得了一定的成果, ...

  10. 499、Java分布式和集群12 -【SpringCloud视图微服务 - 消息总线Bus】 2021.06.01

    目录 0.RabbitMQ 1.先运行,看到效果,再学习 2.pom.xml 3.bootstrap.yml 4.application.yml 5.ProductDataServiceApplica ...

最新文章

  1. Linux第二周学习笔记(7)
  2. FFT与多项式、生成函数题目泛做
  3. 湖南打工妹逆袭,从北大才女到“网络红娘”,她用1000元赚了5个亿
  4. Ubuntu下安装vscode c++环境
  5. 初学js----------一些API
  6. linux yum及yum仓库
  7. VTK:Utilities之CommandSubclass
  8. c语言的锁和Python锁,Python中全局解释器锁、多线程和多进程
  9. sql 如何根据月份查询数据总数_什么是慢查询?如何通过慢查询日志优化?
  10. 提高编程水平的一段必经之路,研读官方文档
  11. sqlmap源码入门笔记系列
  12. wifi芯片_全新蜕变!康希通信第四代WIFI 6 FEM芯片将于2020年Q1量产
  13. [SDOI2009]HH的项链 BZOJ1878
  14. 年底互联网寒冬,裁员直线上升
  15. linux主机名hostname老是被更改为broad原理分析和恢复
  16. 武汉大学计算机学院乒乓球室,武汉大学经济管理学院教职工乒乓球队在武汉大学师生乒乓球赛中获佳绩...
  17. 物联网竞赛-LoRa和NB-IOT模块学习知识汇总
  18. Vue中qrcode的使用方法(生成二维码插件) / 前端页面根据URL链接生成二维码
  19. T1076 正常血压(信息学一本通C++)
  20. PC浏览器添加背景音乐 VS 手机浏览器添加背景音乐

热门文章

  1. Microsoft SQL Server 2012(附序列号)
  2. R语言入门第一集 R语言、RTools、RStudio的简介、安装与使用
  3. Flutter高仿微信-第51篇-群聊-修改群名
  4. 《宣州谢朓楼饯别校书叔云》-(李白明月姑娘之七)
  5. 你既言而无信,我即出尔反尔
  6. MySQL 递归 sql语句 WITH表达式实现
  7. args在python中什么意思_Python中*args、**args到底是什么、有啥区别、怎么用
  8. 布兰迪斯大学计算机科学专业,布兰迪斯大学计算机科学专业
  9. 暨大计算机研学教育,暨大数学复试线平台,统计学
  10. 内卷时代,文章排版当然要快人一步(附公文排版插件)