微服务入门指南(一)——走进微服务的世界

RabbitMQ信使
• 阅读 2696
本文是微服务入门系列的第三篇文章,本系列一共有如下内容:
1.《走进微服务的世界》
2.《微服务架构下的分布式事务基础入门》
3.《微服务架构下的分布式事务解决方案》
4.《数据库的服务化切分》
5.《服务部署》

微服务入门指南(一)——走进微服务的世界

1. 什么是微服务?

我们首先给出微服务的定义,然后再对该定义给出详细的解释。

微服务就是一些可独立运行、可协同工作的小的服务。

从概念中我们可以提取三个关键词:可独立运行、可协同工作、小。这三个词高度概括了微服务的核心特性。下面我们就对这三个词作详细解释。

  1. 可独立运行

    微服务是一个个可以独立开发、独立部署、独立运行的系统或者进程。

  2. 可协同工作

    采用了微服务架构后,整个系统被拆分成多个微服务,这些服务之间往往不是完全独立的,在业务上存在一定的耦合,即一个服务可能需要使用另一个服务所提供的功能。这就是所谓的“可协同工作”。与单服务应用不同的是,多个微服务之间的调用时通过RPC通信来实现,而非单服务的本地调用,所以通信的成本相对要高一些,但带来的好处也是可观的。

  3. 小而美

    微服务的思想是,将一个拥有复杂功能的庞大系统,按照业务功能,拆分成多个相互独立的子系统,这些子系统则被称为“微服务”。每个微服务只承担某一项职责,从而相对于单服务应用来说,微服务的体积是“小”的。小也就意味着每个服务承担的职责变少,根据单一职责原则,我们在系统设计时,要尽量使得每一项服务只承担一项职责,从而实现系统的“高内聚”。

2. 微服务的优点

1. 易于扩展

在单服务应用中,如果目前性能到达瓶颈,无法支撑目前的业务量,此时一般采用集群模式,即增加服务器集群的节点,并将这个单服务应用“复制”到所有的节点上,从而提升整体性能。然而这种扩展的粒度是比较粗糙的。如果只是系统中某一小部分存在性能问题,在单服务应用中,也要将整个应用进行扩展,这种方式简单粗暴,无法对症下药。而当我们使用了微服务架构后,如果某一项服务的性能到达瓶颈,那么我们只需要增加该服务的节点数即可,其他服务无需变化。这种扩展更加具有针对性,能够充分利用计算机硬件/软件资源。而且只扩展单个服务影响的范围较小,从而系统出错的概率也就越低。

2. 部署简单

对于单服务应用而言,所有代码均在一个项目中,从而导致任何微小的改变都需要将整个项目打包、发布、部署,而这一系列操作的代价是高昂的。长此以往,团队为了降低发布的频率,会使得每次发布都伴随着大量的修改,修改越多也就意味着出错的概率也越大。
当我们采用微服务架构以后,每个服务只承担少数职责,从而每次只需要发布发生修改的系统,其他系统依然能够正常运行,波及范围较小。此外,相对于单服务应用而言,每个微服务系统修改的代码相对较少,从而部署后出现错误的概率也相对较低。

3. 技术异构性

对于单服务应用而言,一个系统的所有模块均整合在一个项目中,所以这些模块只能选择相同的技术。但有些时候,单一技术没办法满足不同的业务需求。如对于项目的算法团队而言,函数试编程语言可能更适合算法的开发,而对于业务开发团队而言,类似于Java的强类型语言具有更高的稳定性。然而在单服务应用中只能互相权衡,选择同一种语言,而当我们使用微服务结构后,这个问题就能够引刃而解。我们将一个完整的系统拆分成了多个独立的服务,从而每个服务都可以根据各自不同的特点,选择最为合适的技术体系。

当然,并不是所有的微服务系统都具备技术异构性,要实现技术异构性,必须保证所有服务都提供通用接口。我们知道,在微服务系统中,服务之间采用RPC接口通信,而实现RPC通信的方式有很多。有一些RPC通信方式与语言强耦合,如Java的RMI技术,它就要求通信的双方都必须采用Java语言开发。当然,也有一些RPC通信方式与语言无关,如基于HTTP协议的REST。这种通信方式对通信双方所采用的语言没有做任何限制,只要通信过程中传输的数据遵循REST规范即可。当然,与语言无关也就意味着通信双方没有类型检查,从而会提高出错的概率。所以,究竟选择与语言无关的RPC通信方式,还是选择与语言强耦合的RPC通信方式,需要我们根据实际的业务场景合理地分析。

微服务入门指南(一)——走进微服务的世界

点赞
收藏
评论区
推荐文章
blueju blueju
4年前
umi + qiankun 动态注册子应用解决方案
前言首发于<br/本篇文章可以被视为上一篇文章()的延续,上一篇文章大致讲述了搭建一个简易微前端平台的过程,其中关于子应用注册的配置是通过硬编码的方式,在构建打包前写入的。<br/<br/但是真实项目中,更需要的是动态注册子应用,比如说我正参与的这个项目。<br/<br/本篇文章的示例代码是基于上一篇文章示例代码改动的,上一篇文
Wesley13 Wesley13
4年前
SOA与微服务
微服务并非它的体积足够小,而是它的责任足够单一,很多人误解了「微」的真实含义,认为服务拆分得足够小就是微服务了,其实并非这样。此外,「微」还有“微不足道”的意思,也就是说,某个服务出现故障,它不会影响整个系统。微服务并非细粒度服务的组合,也就是说,粒度要细到什么程度,这取决于对业务功能的把控能力。此外,微服务是一种架构思想,包括看
徐小夕 徐小夕
5年前
微前端架构初探以及我的前端技术盘点
前言最近几年微前端一直是前端界的热门议题,它类似于微服务架构,主要面向于浏览器端,能将一个复杂而庞大的单体应用拆分为多个功能模块清晰且独立的子应用,且共同服于务同一个主应用。各个子应用可以独立运行、独立开发和独立部署。微前端架构概念的诞生及应用对于提供复杂应用服务的企业来说显然是一种机遇,同样也是一种挑战.本文主要就微前端架构的概念和实现方案做一
Easter79 Easter79
4年前
SpringCloud(一):SpringCould 框架预览
前言 SpringCloud是基于SpringBoot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是跟springboot框架一起使用的话,会让你开发微服务架构的云服务非常好的方便。 SpringBoot旨在
Stella981 Stella981
4年前
Spring Cloud与微服务构建:Spring Cloud简介
SpringCloud简介<fontsize4微服务因该具备的功能</font微服务可以拆分为"微"和"服务"二字。"微"即小的意思,那到底多小才算"微"呢?可能不同的团队有不同的答案。从参与微服务的人数来讲,单个微服务从架构设计、代码开发、测试、运维人数加起来是8~10人才算"微"。那么何为"服务"呢?按照"微服务"概念
Wesley13 Wesley13
4年前
Java架构师之解决分布式事务数据一致性视频教程开发与实践分布式事务实现
Java架构师之解决分布式事务数据一致性视频教程开发与实践分布式事务实现全新JAVA高级架构师,微服务架构,亿级高并发,分布式架构,源码剖析系列,项目实战,设计模式实战,数据结构与算法,消息中间件,并发编程多线程,服务器系列,数据库,分布式事务,大型分布式综合电商项目实战等视频教程
Stella981 Stella981
4年前
SpringBoot2.x基础篇:应用程序在启动时访问启动项参数
!(https://oscimg.oschina.net/oscnet/up0fc757b29ab18ad630d891e2e83eb81fea4.png)知识改变命运,撸码使我快乐,2020继续游走在开源界<br/点赞再看,养成习惯<br/给我来个Star吧,点击了解下基于SpringBoot的组件化接口服务落地解决方案(http
Stella981 Stella981
4年前
SpringBoot入门(简单详细教程)
SpringBoot简介  简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;微服务  martinfowler;微服务:架构风格(服务微化);一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;单体应用:ALLINONE;微服务:每一个功
Easter79 Easter79
4年前
SpringBoot2.x基础篇:应用程序在启动时访问启动项参数
!(https://oscimg.oschina.net/oscnet/up0fc757b29ab18ad630d891e2e83eb81fea4.png)知识改变命运,撸码使我快乐,2020继续游走在开源界<br/点赞再看,养成习惯<br/给我来个Star吧,点击了解下基于SpringBoot的组件化接口服务落地解决方案(http
Easter79 Easter79
4年前
SpringBoot入门(简单详细教程)
SpringBoot简介  简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;微服务  martinfowler;微服务:架构风格(服务微化);一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;单体应用:ALLINONE;微服务:每一个功
linbojue linbojue
1年前
SpringCloud原理解析与实战技巧
SpringCloud原理详解SpringCloud是一套基于SpringBoot的开源微服务架构构建工具集。它提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话和集群状态)环境中设计、构