不要迷信微服务,但也不要放弃对微服务,中台的迷恋与追逐

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 从公司使用微服务的角度,分析微服务的优缺点

微服务的概念与早期IBM的SOA的概念(08~10年做项目基于上都是套用SOA),有着异曲同工之处,都是基于模块化的思路来实现高内聚低藕合的系统设计理念,只是它们的实现方式不同而已,比如基于EJB(RMI)来实现SOA,基于Spring-cloud/dubbo(Http/RPC)来实现微服务。微服务的概念从提出的那一刻起,已经在技术圈火暴到现在,算是比较成熟的系统设计与开发理论。微服务简单点说就是通过开发一组小型的服务(模块)来构造一个独立的应用系统,每个小型的服务都运行在自己的进程中,通过特定协议的API来相互通信,达到模块化应用系统的目的。

一、从微服务的概念,可以看到有如下的优点:

1、 模块化开发与维护

业务拆分成不同的小型服务,每个小型服务只专注特定的业务(比如商品可为一个小型服务)领域,实现业务功能的高度集中,降低传统业务堆积在一起,难以维护的程序,方便对业务的理解、运维、调度,提升服务的可维护性。(前提是业务和技术要有高度,能很好地划分业务领域与边界,不然会越做越乱)

2、 故障隔离

某个小型服务宕机,不会影响到其他服务继续使用,避免了单体应用宕机后,系统不能使用的情况。(前提是要做好服务与服务之间的融断机制,如果没有处理好融断机制,一样可能引起整个系统的雪崩)

3、快速响应局部需求/修复的上线

基于小型服务的特点,对于线上的问题,或者特定业务领域的需求的开发,可以做到快速的开发与上线,而不会影响到其他小型服务的继续使用,有别于传统的单体服务,需要整个系统重测及停机上线。(前提是需求不会涉及到整体的功能)

4、技术栈不受限制

微服务都会有服务发现与注册中心,来负责调试不同的小型服务,只要小型服务的数据通讯协义是共同,可以采用不同的技术栈来进行开发,如java、.net等,也可以采用不同的数据,如mysql 、oracle、SQL Server等。(前提是要有统一架构标准)

基于微服务的优点,在公司的很多项目中,就在计划及实施微服务,解决单体项目在业务不断扩展,功能不断堆积后的开发,上线及运维的困难,通过不断的研究与测试,开始从与业务无关性的基础服务迁移到微服务体系中,通过一年左右的时间,实现了Java体系的都所系统微服务化,从效果上,确实验证了微服务的优点,服务化后各小型服务专职特定的业务,降低互相依赖的关联,开发人员专注度更高,在当时确实提升了系统运行的稳定性,虽然在过程中不知踩过多坑。

但随着业务的发展及功能的越来越多,小型服务越来越多,微服务的优点是需要付出代价的,它的基础是要有一定的团队规模(与服务数量有关)、运维人员、产品与技术相结合的高度才能保证良好的运作,适用于成熟的系统平台,不适用于项目初期的快速迭代升级。

二、从使用的角度,有以下的问题:

1、降低开发效率,可能增加开会周期

拆成多个小型服务后,可能一个需求的开发,会涉及到多个服务的同时开发,这个在当初的商城开发中经常遇到,尽管当初的开发人员还是比较多,但效率还是低下,微服务是告别直接查询数据库,采用标准协议来通讯(API接口),也就是接口对接,需要多方人员进行沟通确认(沟通成本),结果核对(对接成本),可能还会一份数据存在多个数据库中,通过接口同步来同步去。这个就好比去市场买菜,如果一个去,直接按清单买就完,如果分派多个人去,要先跟每个说买什么买多少,买回来后又要核对一遍。

2、产品与技术的高度

如果产品经理与技术架构不能很好的配合,思路碰不到一起去,那是没办法实施微服务的,最终就是边界不清,没办法将要开发的功能落实到各个小型服务中,反而会确觉这个不适用,那个不适用,不如重新开发一个。到最后会发现,各个服务之间调用比蜘蛛网还要复杂,可能会导致需求都改不动代码,还不不拆时好处理,变得难维护。

3、数据不一致问题(业务数据算多算少的问题)

相信大家都有这样的经历,在传话的过程中,信息会变多或变少,从上往下,如果不记录,路径越长,信息会越来越不准确。实现微服务也有这样的风险,服务拆得越多,调用的路径越长,数据的不一致性会越来明显。但在单体项目中,这种情况会很少,它可以通过事务来统一处理,微服务难通过事务来保证,它的服务调用都是异构环境,一般只能采用数据最终一致性的策略来保证,但这个过程需要架构及开发人员有高水平,不然就会导致业务数据重复,或者丢失,严重的会造成公司的损失(比如处理钱相关的程序)。

4、沟通与人员成本

拆成小型服务后,需要有匹配的开发人员,也有对应的运维人员,服务拆得越多,需要更多的服务器资源来运行;相对于单体项目,人员的成本会高很多。

5、维护成本加大

服务拆分得越多,维护的成本就越大,需要增加对各种服务的监控、事件的预警;升级改造也会增加工作量(涉及大量服务更新时)。

6、问题排查困难

在传统项目中,可能找问题只需要在一个日志文件中就可以查找,但如果拆成微服务后,用户的一次操作,日志可能会分布在多种服务的多个文件中,在系统出问题时,排查起来的复杂度变高,时长会变长,在评估问题时,需要找到每次服务调的输入输出,不然难分析问题。(但这个不是不能解决,可以部署链路日志收集程序来采集所以的日志,汇总起来供查询)。

7、硬件成本增加

拆成多个小型服务后,需要更多的服务器资源来支撑其运行,如果资源不足,是无法运行的,每个小型服务的运行,是要有一定的资源基础,还有运行产生的日志会占用资源。

这里没有说单体项目有多好,微服务有那些不好,是没有确定的说法,它的存在自有它适用的场景。一般在业务探索的阶段,以快速响应市场需求的变化,是不建议采用微服务,除非团队成员够支撑,不然开发效率反而会降低。试想想,在项目的试错阶段,就去搭建一个大型公司的微服务架构,可能是浪费资源,而且也不能及时显应变化,需要大量的团队成员来维护,不然效率会很低下。如果平台成熟定向,是可以按微服务的方式来运作,按不同的平台功能分支进行扩展,降低具体某个项目的复杂度、维护量,形成多个小型服务,但也必须在产品与架构达成一致的前提下进行。

架构的选择,是平台/系统在发展不同阶段的选择,不能为了架构而架构,过早的去优化架构,在后面都会形成技术的债,可能会让进度陷入困境,但做平台/系统开发,也不能放弃对先进技术的研究与实践,这也就是我说的“不要迷信微服务,但也不要放弃对微服务,中台的迷恋与追逐”。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
消息中间件 监控 领域建模
DDD、中台和微服务的关系是什么?
领域驱动设计(DDD)和中台在企业架构中有着密切的关系。DDD的本质在于通过对业务领域的深入分析和建模,构建高内聚、低耦合的系统。而中台则是对企业核心业务能力的抽象和封装,以实现业务能力的复用和扩展。
71 1
|
消息中间件 Cloud Native 架构师
如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始
如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始
218 0
|
消息中间件 Cloud Native 架构师
如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始
软件架构设计本身就是一个复杂的事情,但其实业界已有一个共识,那就是“通过组件化完成关注点的分离从而降低局部复杂度”。其实现在我们用的无论是容器、中间件、消息、数据库等,在某种意义上都是组件化的产物。这样的好处是在不同的系统里可以复用。在云原生兴起的今天,以通用的、组件化的服务形式更容易为我们所用,所以说现在如果还不享用云原生技术红利,那你就会被时代抛弃。
399 0
如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始
|
消息中间件 Cloud Native 架构师
如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始
业级应用架构是在不断的演进和迭代,但是我始终感觉企业应用架构的形成过程是在一种看起来科学的方法论下,但是又不完全科学的过程中实现的。
如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始
|
Java 测试技术 持续交付
拆完中台再拆微服务
这些年中台、微服务都是技术浪潮中的弄潮儿。两者的命运似乎是所有技术新词的缩影:先谈,再建,后拆,最后平静。 如中台,开始时聊什么都得带上中台,战略层喜欢谈,执行层也喜欢谈,再后面跟随一线大厂纷纷搭建自己的中台,然后就是反思,拆除中台,最后平静看待中台。 中台可以说已经经历完整的生命周期,而微服务周期也差不多,但对于“拆掉”,两者的声势与目标却不太相同。
161 0
|
容灾 Java 领域建模
32份有关微服务、DDD与中台经典架构文档
32份有关微服务、DDD与中台经典架构文档
410 0
|
运维 前端开发 架构师
新书《微服务中台架构开发》
本书得到阿里CIO学院和阿里巴巴副总裁胡臣杰的倾力推介,本书系统全面地介绍基于阿里云 PaaS 平台搭建业务中台的整个过程,是一本开发微服务系统的开发和入门实战书,计划2021年元旦在各大平台上线销售
1056 0
新书《微服务中台架构开发》
|
新零售 Java 应用服务中间件
架构师必须要知道的阿里的中台战略与微服务
  传统企业平台都是烟囱式的系统架构,企业内部为了迎合业务发展不停的打造各种系统,导致各系统间的重复功能建设和维护带来的重复投资。重复投资不仅消耗的是人力,财力还有时间。但打通烟囱式系统间交互的集成和协作成本高昂,各大企业不得不借助ESB产品,构建企业服务总线,打通各系统间的交互问题。
6478 0
|
13天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
57 6
下一篇
无影云桌面