`

微服务,真的适合你么?

 
阅读更多

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)用华为软件开发云,让华为专家指导你。

分享到:
评论

相关推荐

    微服务实例demo

    微服务架构是一种将大型复杂应用分解为一组小的、独立的服务的软件开发方法...通过深入学习和实践这个“微服务实例demo”,你可以了解到如何设计、实现和运维一个真正的微服务系统,从而提升你在微服务领域的专业技能。

    基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户

    基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于...

    SpringCloudAlibaba笔记 Nacos、Sentinel、RocketMQ Seata、SMS、Dubbo 等

    全面覆盖微服务中各种问题的解决方案,以企业案例为驱动讲解各个解决方案,真的非常适合当下想学习微服务的朋友 目录: 一:微服务介绍 二:微服务环境搭建 三:Nacos DisCovery--服务治理 四:Sentinel--服务容错 ...

    Java思想

    15. **反应式编程**:随着JavaFX和Reactor等库的出现,Java也开始支持反应式编程,这是一种处理异步数据流的新方式,适合高并发和实时系统。 以上只是Java编程思想中的一部分知识点,实际学习过程中,应结合具体的...

    陈军-DevOps转型的那些坑V1.0.pdf

    然而,微服务并不适合所有情况。正如文件中提到的,只有当系统过于复杂,难以作为一个单体应用管理时,才应该考虑采用微服务。过渡过早或盲目追求微服务可能导致不必要的复杂性增加,反而阻碍了效率。 第三个难点...

    Java开发完整学习路线与实践指南

    还包括了对企业级别的框架Spring系列,Jakarta EE等的理解,以及分布式微服务架构的搭建与实践技能,例如微服务、容器管理和Kubernetes集群的使用等内容。此外还会涉及一些进阶课题如:性能优化技术和设计模式的运用...

    java之浅谈深说--教你如何成长

    6. **微服务架构**:学习如何设计和实现基于Spring Cloud的微服务系统。 #### 四、实战项目经验 理论知识与实际项目经验同样重要,参与实际项目的开发可以让你更好地理解和运用所学知识。可以通过以下几种方式获得...

    开源项目-avelino-awesome-go.zip

    "为什么你真的应该停止使用 iris" 这个描述可能是指 Iris,一个流行的 Go Web 框架。Iris 在过去曾因其快速性能和丰富的特性受到赞誉,但随着时间的推移,一些开发者可能发现其他框架如 Gin 或 Echo 在某些方面表现...

    seata-server-1.3.0 .zip

    TCC模式更适合那些可以显式定义补偿操作的服务。 Saga模式是一种长事务处理策略,它将一个大事务拆分为一系列小事务,每个小事务都被称为一个Saga。在Saga中,事务被分解为一组相互补偿的操作序列,如果其中一个...

    合集6、互联网行业案例.docx

    #### 十七、你真的需要一个“中台”这样的武器吗? **核心知识点:** - **中台必要性探讨:** 针对企业是否需要构建中台进行了深入讨论,分析了中台的优势和局限性。 - **适用场景分析:** 提供了关于何时以及如何...

    C#开发基于FreeSql多库分布式事务、跨库查询、跨库分页查询、跨库增删改等功能实现源码+项目说明+sln.zip

    业务的实时性变得越来越高,基于消息队列的这种最终一致性或者说异步事务的方案 越来越不适合我们的项目,这时候就需要同步的事务方案,TCC/SAGE又没有太好的解决方案(我真的没有找到。。),于是想着自己设计一个...

    nodejs入门

    ### Node.js 入门知识点详解 #### JavaScript与Node.js的关系 ...通过实践,你将能够独立构建自己的Web应用,无论是构建实时聊天系统、数据流处理服务还是微服务架构,Node.js都将是你强有力的工具。

    你管這破玩意兒叫Token1

    【标题】:“你管這破玩意兒叫Token1” 【描述】:“1. 首先用户登录,server 会为用户生成一个 session,为其分配唯一的 sessionId,这个 sessionId 是与某个用户绑定的, 1” 【标签】:“git intellij idea” ...

    java版直播间源码-rest-messenger:轻松创建和公开基于SpringREST的API实现,而不会丢失强大的Java消息类型,从而

    对真的。 只看部分。 发布 有关版本的功能列表,请参阅部分。 为什么? 如果你不关心哲学废话,请跳过本节。 你已经被警告过了。 :grinning_face: 这是非常频繁,对于CRUD(C reate与提供单独的端点的标准REST约定的...

    合集7、中台建设方法.docx

    #### 王歆:大热的中台,我拿什么来爱你 王歆女士以其独特视角解读了中台背后的价值与挑战。她认为,虽然中台已经成为业界热议话题,但在实际操作中还需考虑诸多因素,如企业文化、组织架构调整等。因此,在拥抱中...

    seata-demo.zip

    分布式事务是现代软件系统中一个重要的技术挑战,尤其是在大数据、微服务架构中,它确保了在多节点操作中数据的一致性。Seata(前身是FATBOY和SOFATransaction)是一个开源的分布式事务解决方案,由阿里巴巴贡献并...

    1000道 互联网Java工程师面试题 485页_PDF密码解除.pdf

    - **服务拆分:**方便进行微服务拆分。 - **负载均衡:**支持多种负载均衡策略。 - **容错机制:**提供丰富的容错策略。 - **监控机制:**提供服务调用监控。 **2. Dubbo的整体架构设计有哪些分层?** - **Service...

Global site tag (gtag.js) - Google Analytics