微服务,真的适合你么?

1、什么是微服务?

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。微服务架构模式(Microservices Architecture Pattern)的目的是将大型的、复杂的、长期运行的应用程序构建为一组相互配合的服务,每个服务都可以很容易做局部修改。微服务架构带来可独立部署、高扩展与伸缩、自由选择开发语言、高效利用资源、故障隔离等优点,同时也因为服务多带来分布式事务、服务之间通信、监控、部署等新的问题。

2、为什么要用微服务?

整体式架构应用图(以华为软件开发云为假设-其实他应该属于微服务架构):

整体式架构的不足

使用传统的整体式架构(Monolithic Architecture)应用开发系统易于开发,易于调试,也易于部署。在早期这类应用运行的很好,不幸的是,这种简单方法却有很大的局限性。

1)一个简单的应用会随着时间推移逐渐变大。在每次的sprint中,开发团队都会面对新story,新的task,然后开发许多新代码。几年后,这个小而简单的应用会逐渐变大。

2)一旦你的应用变成一个又大又复杂的怪物,开发团队肯定很痛苦。由于应用太大太复杂,以至于任何单个开发者都不可能搞懂它。因此,修正bug和正确的添加新功能变的非常困难,并且很耗时。

3)整体式架构应用也会降低开发速度。应用越大,启动时间会越长。如果开发者需要经常重启应用,那么大部分时间就要在等待中渡过,生产效率受到极大影响。

4)复杂而巨大的整体式架构应用不利于持续性开发。今天,SaaS应用常态就是每天会改变很多次,而这对于整体式架构模式非常困难。

5)整体式架构应用另外一个问题是可靠性。因为所有模块都运行在一个进程中,任何一个模块中的一个bug,比如内存泄露,将会有可能弄垮整个进程。

6)整体式架构应用使得采用新架构和语言非常困难。比如你的代码使用A框架写的,如果想改成B框架,无论是时间还是成本都是非常昂贵的。因此,这是一个无法逾越的鸿沟。

微服务架构图(以华为软件开发云为例):

微服务架构的好处

第一,通过分解巨大单体式应用为多个服务的方法解决了复杂性问题。在功能不变的情况下,应用被分解为多个可管理的分支或服务。每个服务都有一个用RPC-或者消息驱动API定义清楚的边界。微服务架构模式给采用单体式编码方式很难实现的功能提供了模块化的解决方案,由此,单个服务很容易开发、理解和维护。

第二,这种架构使得每个服务都可以有专门开发团队来开发。开发者可以自由选择开发技术,提供API服务。这种自由意味着开发者不需要被迫使用某项目开始时采用的过时技术,他们可以选择现在的技术。甚至于,因为服务都是相对简单,即使用现在技术重写以前代码也不是很困难的事情。

第三,微服务架构模式是每个微服务独立的部署。开发者不再需要协调其它服务部署对本服务的影响。这种改变可以加快部署速度。团队可以采用AB测试,快速的部署变化。微服务架构模式使得持续化部署成为可能。

最后,微服务架构模式使得每个服务独立扩展。你可以根据每个服务的规模来部署满足需求的规模。甚至于,你可以使用更适合于服务资源需求的云服务。比如,你可以为计算密集型服务选择高配置的云主机,而在为存储密集型的服务选择高带宽高存储的云主机。

3、微服务,真的适合你么?

提到微服务架构时,我们常常会与整体式架构进行比较,整体式架构存在如下缺点:代码维护难度大,臃肿的部署,局限的弹性与扩展能力,阻碍团队与技术革新等等;微服务架构存在如下优点:代码维护简化,可独立部署,高扩展与伸缩,自由选择开发语言等优点。那么整体式架构真的这么差吗?显然不是。

在复杂度较小时采用整体式架构的生产率更高,复杂度到了一定规模时,单体应用的生产率开始急剧下降,这时对其进行微服务化的拆分才是合理的。所以说脱离业务场景,空谈架构绝对是耍流氓。

再牛逼的架构设计,如果无法在业务场景中落地实施,也只是空谈。因此架构需要服务于业务,针对不同的业务场景架构设计也会不同,架构设计不必追求高大上,只要能满足业务发展需求,便是好架构。

此外,好的架构不完全是设计出来的,随着业务量、请求量的增长,好的架构是演化而来的。微服务架构之所以得到广泛认可,源于对于业务多变性的不可预测,微服务架构能够不断的自演化,进而快速适应业务变化。此外,微服务也有他的不足之处:

第一,微服务应用是分布式系统,由此会带来固有的复杂性。

第二,分区的数据库架构在微服务架构应用中,需要更新不同服务所使用的不同的数据库,这对开发者提出了更高的要求和挑战。

第三,测试一个基于微服务架构的应用也是很复杂的任务。

第四,微服务架构模式应用的改变将会波及多个服务。

第五,部署一个微服务应用也很复杂。一个微服务应用一般由大批服务构成。成功部署一个微服务应用需要开发者有足够的控制部署方法,并高度自动化。

鉴于上述原因,如果公司的长期业务规划不需要微服务架构或者公司的实际情况不具备实施微服务一些基本的条件,不建议各位盲目迈向微服务这一新兴架构领域。如果准备早点进行技术积累,也可以从试点开始,逐步在团队中推行微服务架构。

4、微服务,如果真的适合你,应该怎么做?

1)买书学习。

2)上网查资料学习。

3)用华为软件开发云,让华为专家指导你。

时间: 2024-12-20 19:25:39

微服务,真的适合你么?的相关文章

微服务(Microservice)那点事

原文出处: 云栖社区 WHAT – 什么是微服务 微服务简介 这次参加JavaOne2015最大的困难就是听Microservice相关的session,无论内容多么水,只要题目带microservice,必定报不上名,可见Microservice有多火.最喜欢其中一页.关于这个典故,可以参考this,此图适用于一切高大上的名字——技术有SOA,Agile,CLOUD,DevOps等等,古代有道,气,八卦等等.此类名词的最大特点就是 一解释就懂,一问就不知,一讨论就打架. 微服务的流行,Mart

微服务那点事[转]

转自云栖社区:https://yq.aliyun.com/articles/2764?spm=5176.100239.blogcont8611.6.8QZgLe 摘要: 微服务架构被提出很短的时间内,就被越来越多的开发人员推崇,简单来说其主要的目的是有效的拆分应用,实现敏捷开发和部署 .本分享即尝试介绍微服务架构的一些实施细节和要求,探询微服务架构的由来,并最终提供我们团队内部的一些实践总结,希望对大家有帮助. WHAT - 什么是微服务 微服务简介 这次参加JavaOne2015最大的困难就是

关于微服务

摘要: 微服务架构被提出很短的时间内,就被越来越多的开发人员推崇,简单来说其主要的目的是有效的拆分应用,实现敏捷开发和部署 .本分享即尝试介绍微服务架构的一些实施细节和要求,探询微服务架构的由来,并最终提供我们团队内部的一些实践总结,希望对大家有帮助. WHAT - 什么是微服务 微服务简介 这次参加JavaOne2015最大的困难就是听Microservice相关的session,无论内容多么水,只要题目带microservice,必定报不上名,可见Microservice有多火.最喜欢其中一

搞懂分布式技术28:微服务(Microservice)那点事

搞懂分布式技术28:微服务(Microservice)那点事 微服务(Microservice)那点事 肥侠 2016-01-13 09:46:53 浏览58371 评论15 分布式系统与计算 微服务 摘要: 微服务架构被提出很短的时间内,就被越来越多的开发人员推崇,简单来说其主要的目的是有效的拆分应用,实现敏捷开发和部署 .本分享即尝试介绍微服务架构的一些实施细节和要求,探询微服务架构的由来,并最终提供我们团队内部的一些实践总结,希望对大家有帮助. WHAT - 什么是微服务 微服务简介 这次

微服务与SOA:有什么区别?

在优锐课的java架构分享学习中,讨论了关于微服务是新的SOA吗? 人们还在谈论SOA吗? 让我们研究一下整体结构与这两种更新的体系结构之间的区别. 在"什么是微服务"中,了解到具有分布式架构的SOA和微服务比单片架构具有明显的优势. 在本博客中,我将解释基于分层的架构,并告诉你微服务和SOA架构之间的区别. 在深入研究微服务和SOA之间的差异之前,让我告诉你单片式架构,SOA和微服务之间的基本差异: 用外行的术语来说,一个整体类似于一个大容器,其中应用程序的所有软件组件都组装在一起并

阿里P7架构讲解:微服务设计

本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ 前言 微服务是一种分布式系统解决方案,推动细粒度服务的使用,这些服务协同工作,且每个服务都有自己的生命周期.因为微服务主要围绕业务领域建模,所以避免了由传统的分层架构引发的很多问题.微服务也整合了过去十

为什么Docker适合微服务架构?

微服务架构日益成熟,不但得到了初创公司和创新型公司的认可,一些传统企业也在逐步接受微服务架构.我们仍然在学习如何利用其在扩展性,易于维护和构建等方面的优势.当然我们也必须承担微服务增加的成本,比如从SOA架构的迁移,编排,备份,以及对技能提升的需求等等. 一个典型的微服务架构可能是这样的: Touchbase,一个Node.js写的应用作为技术栈的核心: Nginx,作为Touchbase节点的负载均衡: Couchbase,作为数据层: Consul,服务发现: Containerbuddy,

你真的理解微服务架构吗

什么是微服务 首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务. 传统的WEB应用核心分为业务逻辑.适配器以及API或通过UI访问的WEB界面.业务逻辑定义业务流程.业务规则以及领域实体.适配器包括数据库访问组件.消息组件以及访问接口等.一个打车软件的架构图如下: 尽管也是遵循模块化开发,但最终它们会打包并部署为单体式应用.例如Java应用程序会被打包成WAR,部署在Tomcat或者Jetty上. 这种单体应用比较适合于小项目,优点是

你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构

微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业界已经有一些很有影响力的开源微服务架构框架提供了微服务的关键思路,例如Dubbo和Spring Cloud.各大互联网公司也有自研的微服务框架,但其模式都于这二者相差不大. 微服务主要的优势如下: 1.降低复杂度 将原来偶合在一起的复杂业务拆分为单个服务,规避了原本复杂度无止境的积累.每一个微服务专