精华内容
下载资源
问答
  • 微服务架构优缺点

    千次阅读 2017-12-30 16:06:56
    微服务架构优缺点 之前转载过一篇对 Martin Fowler 大师写的微服务架构的说明文章:《微服务(Microservices)》。今天再转载一篇对于这个架构的优缺点进行总结的文章。 转载自:《微服务,让开发过程更...

    微服务架构优缺点

    之前转载过一篇对 Martin Fowler 大师写的微服务架构的说明文章:《微服务(Microservices)》。今天再转载一篇对于这个架构的优缺点进行总结的文章。

    转载自:《微服务,让开发过程更简单还是更复杂?》、《有关微服务架构的争论:更简单还是更复杂?》。

     


     

    随着DevOps、持续交付等理念的深入人心,微服务架构开始走进我们的视野。

    那么微服务是业界期待已久的解决方案么?或者说微服务要比整体解决方案更加简单?

    让我们先对微服务下个定义:

    微服务是用一组小服务的方式来构建一个应用,服务独立运行在不同的进程中,服务之间通过轻量的通讯机制(如RESTful接口)来交互,并且服务可以通过自动化部署方式独立部署。正因为微服务架构中,服务之间是相互独立的,所以不同的服务可以使用不同的语言来开发,或者根据业务的需求使用不同类型的数据库。

    来自ThoughtWorks的James Lewis和Martin Fowler分享了他们对微服务架构的理解以及看法。文章中作者详细介绍了微服务的特点以及相对于传统架构的微服务架构的优势。

    微服务的一些优势是显而易见的:

    1. 服务简单,只关注一个业务功能 
      在James看来,传统的整体风格的架构在构建部署和扩展伸缩方面有很大的局限性,其服务端应用就像是一块铁板,笨重且不可拆分,系统中任何程序的改变都需要整个应用重新构建和部署新版本。在进行水平扩展时也只能整个系统扩展,而不能针对某一个功能模块进行扩展。 
      而微服务架构将系统以组件化的方式分解为多个服务,服务之间相对独立且松耦合,单一功能的改变只需要重新构建部署相应的服务即可。
    2. 每个微服务可由不同团队开发 
      传统的开发模式在分工时往往以技术为单位,比如UI团队、服务端团队和数据库团队,这样的分工可能会导致任何功能上的改变都需要跨团队沟通和协调。而微服务则倡导围绕服务来分工,不同的服务可以采用不同的技术来实现,一个团队中应该包含开发所需的所有技能,比如用户体验、数据库、项目管理。
    3. 微服务是松散耦合的 
      微服务架构抛弃了ESB复杂的业务规则编排、消息路由等功能,微服务架构中服务是高内聚的,每个服务都会处理相应的业务,所有的业务逻辑应该尽量在服务内部处理,且服务间的通信尽可能的轻量化,比如使用Restful的方式。
    4. 可用不同的编程语言与工具开发 
      传统的软件开发中经常会使用同一个技术平台来解决所有的问题,而经验表明使用合适的工具做合适的事情会让开发变得事半功倍。微服务架构天生就具有这样的特性,我们可以使用Node.js来开发一个简单的报表页面,使用C++来编写一个实时聊天组件。

    微服务架构的引入为多样化持久保存数据提供可能,持久层可以使用传统关系数据库和NoSQL。不同于传统的应用,微服务架构中,我们可以为每个服务选择一个新的适合业务逻辑的数据库系统,比如MongoDB、PostgreSQL。这样做的好处是显而易见的,首先我们可以根据业务类型(读多还是写多等)来决定使用哪种类型的数据库,其次这样可以减小单个数据库的负载。 
    James的文章在社区引起了广泛的讨论,Contino公司的CTO Benjamin Wootton撰文表示微服务并没有想象中的那么好,并建议开发者在选用此架构时一定要慎重。Benjamin认为微服务架构时可能会面临下面一些挑战:

    1. 运维开销 
      更多的服务也就意味着更多的运维,产品团队需要保证所有的相关服务都有完善的监控等基础设施,传统的架构开发者只需要保证一个应用正常运行,而现在却需要保证几十甚至上百道工序高效运转,这是一个艰巨的任务。
    2. DevOps要求 
      使用微服务架构后,开发团队需要保证一个Tomcat集群可用,保证一个数据库可用,这就意味着团队需要高品质的DevOps和自动化技术。而现在,这样的全栈式人才很少。
    3. 隐式接口 
      服务和服务之间通过接口来“联系”,当某一个服务更改接口格式时,可能涉及到此接口的所有服务都需要做调整。
    4. 重复劳动 
      在很多服务中可能都会使用到同一个功能,而这一功能点没有足够大到提供一个服务的程度,这个时候可能不同的服务团队都会单独开发这一功能,重复的业务逻辑,这违背了良好的软件工程中的很多原则。
    5. 分布式系统的复杂性 
      微服务通过REST API或消息来将不同的服务联系起来,这在之前可能只是一个简单的远程过程调用。分布式系统也就意味着开发者需要考虑网络延迟、容错、消息序列化、不可靠的网络、异步、版本控制、负载等,而面对如此多的微服务都需要分布式时,整个产品需要有一整套完整的机制来保证各个服务可以正常运转。
    6. 事务、异步、测试面临挑战 
      跨进程之间的事务、大量的异步处理、多个微服务之间的整体测试都需要有一整套的解决方案,而现在看起来,这些技术并没有成熟。

    总而言之,微服务架构有很多吸引人的地方,不过在拥抱微服务之前要认清它所带来的挑战。而每一种架构都有其优缺点,我们需要根据项目业务和团队情况来选择合适的架构。







    https://www.cnblogs.com/zgynhqf/p/5679028.html?utm_source=tuicool&utm_medium=referral





    展开全文
  • 微服务架构是一种架构风格和架构思想,它倡导我们在传统软件应用架构的基础上,将系统业务按照功能拆分为更加细粒度的服务,所拆分的每一个服务都是一个独立的应用,这些应用对外提供公共的API,可以独立承担对外...

    传统的整体式架构

    传统的整体式架构都是模块化的设计逻辑,如展示(Views)、应用程序逻辑(Controller)、业务逻辑(Service)和数据访问对象(Dao),程序在编写完成后被打包部署为一个具体的应用。如图所示:

    1531293850128.jpeg

    系统的水平扩展

    如果要对系统进行水平扩展,通常情况下,只需要增加服务器的数量,并将打包好的应用拷贝到不同的服务器,然后通过负载均衡器(Nginx)就可以轻松实现应用的水平扩展。

    整体式架构的缺点

    应用复杂度增加,更新、维护困难。

    易造成系统资源浪费。

    影响开发效率。

    应用可靠性低。

    不利于技术更新。

    面向服务的架构SOA(Service-Oriented Architecture)

    SOA的思路是把应用中相近的功能聚合在一起,以服务的形式提供出去。如图所示:

    1531293851957.jpeg

    缺点

    虽然SOA解决了整体式架构中的问题,但多数情况下,SOA中相互独立的服务仍然会部署在同一个运行环境中。和整体式架构类似,随着业务功能的增多,SOA的服务会变得越来越复杂。本质上看,整体式架构的问题并没有因为使用SOA而变得更好。

    微服务架构

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

    1531293852536.jpeg

    缺点

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

    部署的复杂性。

    增加内存消耗。

    微服务架构与SOA的区别

    1531293852639.jpeg

    如何构建微服务架构

    微服务架构的组件

    (1)服务注册中心:注册系统中所有服务的地方。

    (2)服务注册:服务提供方将自己调用地址注册到服务注册中心,让服务调用方能够方便地找到自己。

    (3)服务发现:服务调用方从服务注册中心找到自己需要调用服务的地址。

    (4)负载均衡:服务提供方一般以多实例的形式提供服务,使用负载均衡能够让服务调用方连接到合适的服务节点。

    (5)服务容错:通过断路器(也称熔断器)等一系列的服务保护机制,保证服务调用者在调用异常服务时能快速地返回结果,避免大量的同步等待。

    (6)服务网关:也称为API网关,是服务调用的唯一入口,可以在这个组件中实现用户鉴权、动态路由、灰度发布、负载限流等功能。

    (7)分布式配置中心:将本地化的配置信息(properties、yml、yaml等)注册到配置中心,实现程序包在开发、测试、生产环境的无差别性,方便程序包的迁移。

    微服务架构的技术选型

    (1)微服务实例的开发:SpringBoot

    (2)服务的注册与发现:Spring Cloud Eureka

    (3)负载均衡:Spring Cloud Ribbon

    (4)服务容错:Spring Cloud Hystrix

    (5)API网关:Spring Cloud Zuul

    (6)分布式配置中心:Spring Cloud Config

    (7)调试:Swagger

    (8)部署:Docker

    (9)持续集成:Jenkins

    1531293852714.jpeg

    如果对java微服务、分布式、高并发、高可用、大型互联网架构技术、面试经验交流。

    可以加我架构圈子群:692-845-439 领取资料,群内每天更新资料,免费领取。

    转载于:https://my.oschina.net/u/3954808/blog/2994942

    展开全文
  • 微服务架构优缺点 关于微服务架构优缺点我们在网络协议:RPC 部分已经简单介绍过,这里我们通过表格的形式更加直观的来对比: 对于小型简单系统来说,单体架构更合适,优势主要体现在开发效率、上手难度、...

    微服务架构的优缺点

    关于微服务架构的优缺点我们在网络协议:RPC 部分已经简单介绍过,这里我们通过表格的形式更加直观的来对比:

     

    对于小型简单系统来说,单体架构更合适,优势主要体现在开发效率、上手难度、运维效率、硬件需求、项目成本;对于大型复杂系统来说,微服务架构有绝对优势,主要体现在硬件需求、项目成本、开发效率、系统设计时的高内聚低耦合和可扩展性、需求变更响应速度、系统升级效率、代码复用性、非功能需求、职责/成就感、风险的可控性。 

     

    但是尽管如此,微服务也不是银弹,它也为系统引入了新的问题比如提高了系统的复杂度,这也导致了开发人员上手难度增加,需要在理解分布式系统设计的基础上才能更好的开发和维护微服务,再就是分布式服务的调用问题,服务的注册和发现、服务之间的分布式事务问题,数据库拆分之后数据报表的处理,数据库查询的复杂度增加,服务之间分布式一致性的问题,此外也为系统运维和管理增加了复杂度,这都是我们在进行微服务架构时要做好的心里准备和技术储备。

    微服务架构的适用场景

     

    所以微服务也不是一招鲜吃遍天,不是能够解决所有问题的万金油,它有其特定的适用场景,用之不慎很有可能带来负面作用,陷入上述提到的微服务泥淖之中无法自拔,一定要在系统进行微服务重构时认识到这一点。那么哪些场景适合使用微服务架构呢?满足以下三个条件即可考虑:

    • 团队规模较大,超过10人;
    • 业务复杂度高,超过5个以上的子模块(业务功能较复杂);
    • 项目需要长期迭代开发和维护(半年以上)。

    以下是一个单体应用于微服务生成效率的曲线,随着业务复杂度的增加,单体应用的效率逐渐降低,甚至在某个临界点出现断崖式下跌,之后,微服务的优势就很明显了,所以很多公司在单体应用的效率低到无法接收时都会开始服务化/微服务重构:

    如果一开始面临的就是一个复杂的满足上述三个条件的系统开发,我们也可以在一开始就引入微服务架构,以避免后续重构引入的额外风险和时间成本。

    展开全文
  • 单体架构和微服务架构优缺点

    单体架构

    单体架构就是把所有的业务模块编写在一个项目中,最终会打包成一个war,然后进行部署运行

    单体服务架构如下:

    单体架构

    单体架构的优点:

    1. 部署简单: 由于是完整的结构体,可以直接部署在一个服务器上即可
    2. 技术单一: 项目不需要复杂的技术栈,往往一套熟悉的技术栈就可以完成开发
    3. 用人成本低: 单个程序员可以完成业务接口到数据库的整个流程

    单体架构的缺点:

    1. 系统启动慢: 一个进程包含了所有的业务逻辑,涉及到的启动模块过多,导致系统的启动,重启周期边长;
    2. 系统错误隔离性差: 可用性差,任何一个模块的错误可能导致整个系统的宕机;
    3. 可伸缩性差: 系统的扩容只能对整个应用扩容,不能做到对整个功能点进行扩容;
    4. 线上问题修复时间长: 任何一个线上问题修复需要对整个应用系统进行全面升级;

    单体服务结构简单,代码是一个统一的工程,容易开发、部署和维护。但是,正由于此,各个模块耦合严重,当工程大到一定程度后,会带来一系列的问题。

     

    微服务架构

    微服务架构是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用的轻量级通信机制(通常用HTTP资源API),这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务公用一个最小型的集中式的管理,服务可用不同的语言进行开发,使用不同的数据储存技术。

    Spring Cloud并不是一个项目,它是一套项目的组合,Spring Cloud中存在很多的子项目,每个子项目都是针对微服务系统架构存在的问题给出的一种解决方案。Spring Cloud是基于Spring Boot实现的。

    微服务架构图如下:

    微服务架构图

    微服务的优点:

    1. 易于开发和维护: 一个服务只关注一个特定的业务功能,所以它业务清晰,代码量少。开发和维护单个微服务相当简单。而整个应用是若干个微服务构建而成的,所以整个应用在被维持在一个可控的状态;
    2. 单个服务启动快: 单个服务代码量少,所以启动快;
    3. 局部修改易部署: 单个应用只要有修改,就得重新部署整个应用,微服务解决了这个问题。一般来说,对某个微服务进行修改,只需要重新部署这个服务即可;
    4. 技术栈不受限: 在微服务架构中,可以结合业务和团队的特点,合理选用技术栈。例如有些服务可以使用关系型数据库Mysql,有的服务可以使用非关系型数据库redis。甚至可根据需求,部分服务使用JAVA开发,部分微服务使用Node.js开发
    5. 按需收缩: 可根据需求,实现细粒度的扩展。例如,系统中的某个微服务遇到了瓶颈,可以结合微服务的特点,增加内存,升级CPU或增加节点。

    微服务的缺点:

    1. 运维要求高: 更多的服务意味着更多的运维投入。在单体架构中,只需要保证一个应用的运行即可,在微服务中,需要保证几十甚至几百个服务器正常运行和协作,这给运维带来了巨大的挑战;
    2. 分布式固有的复杂性: 使用微服务架构的是分布式系统。对于一个分布式系统,系统容错,网络延迟都会带来巨大挑战。
    3. 接口调整成本高: 微服务之间通过接口进行通信

    微服务架构结构复杂,运营维护的成本会增大,但是,由于各个服务进行了拆分解耦,可以由完全不同的团队进行分别维护,适用于比较复杂的工程。

     

    参考链接

    展开全文
  • 微服务架构优缺点

    2020-11-18 11:35:50
    微服务架构的优点: ...微服务架构缺点: 1.分布式部署,调用的复杂性高。 单体应用的时候,所有模块之前的调用都是在本地进行的,在微服务中,每个模块都是独立部署的,通过 HTTP 来进行通信,这当中会产生很多问
  • 微服务架构优缺点、应用? 微服务(micro services)这个概念不是新概念,很多公司已经在实践了,例如亚马逊、Google、FaceBook、Alibaba。微服务架构模式(Microservices Architecture Pattern)的目的是将大型...
  • (1-1) 微服务架构四个核心问题:根本原因!网络不可靠 在服务很多的情况下,客户端怎么去访问 服务之间怎么去通信(http rpc) 服务该怎么治理 如何处理服务挂掉的问题 (1-2) 对于以上问题的解决方案: spring...
  • 什么是微服务微服务优缺点

    千次阅读 2020-07-07 09:02:58
    文章目录1、什么是微服务2、微服务的优缺点2.1、优点2.2、缺点3、微服务技术栈有哪些(2018年整理)4、当前各大IT公司用的微服务架构(2018年整理) 1、什么是微服务 微服务化的核心就是将传统的一站式应用,根据...
  • 微服务架构优缺点、应用? 微服务(micro services)这个概念不是新概念,很多公司已经在实践了,例如亚马逊、Google、FaceBook、Alibaba。微服务架构模式(Microservices Architecture Pattern)的目的是将大型的...
  • 聊聊微服务架构优缺点

    千次阅读 2019-07-15 20:53:13
    正因为微服务架构中,服务之间是相互独立的,所以不同的服务可以使用不同的语言来开发,或者根据业务的需求使用不同类型的数据库。 微服务是相对于它出现之前的巨大单体应用来讲的,我们以电商系统为例进行说明: ...
  • 微服务优缺点

    千次阅读 2017-10-03 18:45:55
    微服务优缺点
  • 什么是微服务微服务优缺点

    千次阅读 2019-05-11 19:42:49
    微服务优缺点? 我们了解了单体应用( https://blog.csdn.net/qq_33249725/article/details/90113650 )我们在了解微服务就会变得很轻松。 什么是微服务微服务就是按照业务划分,将一组特定的业务划分成一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,697
精华内容 12,678
关键字:

微服务架构的优缺点