我在很多情况下不建议盲目使用微服务架构

简介: 依托于容器化的普及,Cloud微服务技术当前比较盛行,在以前应该是Dubbo服务,后来慢慢建立了微服务体系,注册中心,分布式配置等各类组件,后面Nefix组件有些开始不维护,再到AlibabaCloud组件,现在很多开源框架、培训机构等依然以这些做一些宣传点。然后从自己的在多个大中小项目和落地的情况,企业运营管理,跟进行业先进技术发展,后期运维效果等多个角度思考,这无形中也会引起另一方面的方向失误

在16年的时候开始落地服务化架构在大中小项目落地,到现在遇到过很多次讨论,基本都是使用服务化技术,这里偏向于架构设计阐述,属于个人观点,供参考。

背景

依托于容器化的普及,Cloud微服务技术当前比较盛行,在以前应该是Dubbo服务,后来慢慢建立了微服务体系,注册中心,分布式配置等各类组件,后面Nefix组件有些开始不维护,再到AlibabaCloud组件,现在很多开源框架、培训机构等依然以这些做一些宣传点。然后从自己的在多个大中小项目和落地的情况,企业运营管理,跟进行业先进技术发展,后期运维效果等多个角度思考,这无形中也会引起另一方面的方向失误。

概述

服务化本身是解决以前旧项目大,更新迭代难,耦合度高,管理开发协助难,较难支撑大并发等问题,这个在大项目上简直是福音,特别是初步切入的时候,大家都感觉看到希望一般,对这个架构难得的喜欢。

在后来几代的微服务,从服务组件的不完善到目前国内外开源组件的健全,基本上技术架构和体系都已经不再是什么难点。然而在这两年接触到的其它团队讨论中,却把这个技术架构和方式带到了另一个极端,看到的景象一般如下:

  • 每个项目都微服务,业务中使用微服务,为什么要上说不清为什么使用
  • 项目超细粒化划分,确实拆分出来是好维护的,而且每个就一个职责
  • 架构设计比较高大上,而且看起来很复杂,很完善,devops/容器化/自动化
  • 常常要搭配上一些社区很多组件,每个组件都能说一大堆好处(不否认)
  • 理论论述很全,组件化,分布式,高并发,消息中间件等名词很多
  • 运维管理也一样是生态体系,prometheus/grafana/skyworking/elk等
  • ……

无可否认,听起来确实解决了很多问题,云原生的生态体系也非常的全的,甚至刚毕业两三年的,都可以很快的学会这套体系的技术,之前遇到的行业都在微服务(这里指的是Java技术),针对自己的项目经验和接触到的情况,看到的可能跟以上的偏差会不太一致,包含有,有自己的思考方式,从几个点阐述:

  • 技术是服务于业务能力上进行阐述,避免脱离业务谈架构
  • 考虑是否需要这样的技术架构,解决的问题是什么
  • 取长补短,新的架构是否可以解决实际问题和业务架构设计

整体思路偏向于个人经验和落地的思路,重点在于内部的落地,我有我思。

整个过程

这里过程从一开始的业务场景到选型进行阐述观点,即从业务场景,再到团队情况,架构设计,后期维护升级几个主线思路,这里主要以实际项目经验和实际案例为参考。

技术是服务于业务能力上进行阐述,避免脱离业务谈架构

脱离业务谈技术,这个是架构师大忌,无法落地的架构不认为叫架构。

每个业务的场景并不一样,然后需要实现的效果也不一样,在这个过程实际的讨论之后,才会选定解决方案和技术架构,当然这些是基础常识。

这里针对的是团队核心型业务讨论,业务从长远来看,对团队来说除了开发,还有运维,运营,战略产品等后期的发力点,并不仅仅是一个开发框架可以或者一种开发架构能解决的,这个过程至少要考虑到3-5年,其中隐性的就结果在开始的时候不会体现,在后面的时候才慢慢展现问题和架构规划的好坏,这里针对的是团队角度,而非末端执行角度。

从某个角度来说,一般末端对架构设计的理念其实并不是特别明确,执行层需要的是经验和能力,照着顶层的架构设计去实施即可,但是对于业务架构设计的人员来说,需要考虑业务的长久运营和管理规划,包括后期的行业发展跟进,架构的先进性和可持续性,产品性能力等等,以确保团队可以长久的运营下去和保持核心的竞争力。

微服务化可以解决一部分问题,但是不是能解决所有的问题,同时也会带来过程的复杂性和技术的复杂性,同步也包括人员技术的要求等,相对于以前单体应用来说,是一个利大于弊的。

这个过程很偏重于服务划分的颗粒度,服务划分的思考角度,服务的职责能力,服务的维护团队能力,当地团队的人才储备,行业或者说市场的发展方向,内部管理层的人员管理水平,技术消化能力等等,要不然容易形成为了技术而技术,然后整体服务化之后,丢在那里而相对于之前没有太大的提升和意义。

从核心业务角度考虑,服务化之后为业务带来什么,是复杂度还是维护,或者成本降低,解决了什么问题。

考虑是否需要这样的技术架构,解决的问题是什么

新的技术引入需求,需要解决业务的实际问题,避免盲目引入。

如果某个项目,或者试点项目,建议可以从几下几个维度进行项目结果进行判断。而针对于团队的主要业务或者项目来说,微服务化这类似的变革,一般要落地,更是需要整体公司的推动,整体意识的转变,1年算短的,3-5年算比较正常,这里的3-5年不仅是业务的建设,同时也包括团队的消化和成长,成熟期的判断,需要不断的注入项目进行历练,避免今天微服务,明天单体,对团队和企业的沉淀几乎没有。

在服务化之前,一定要结合业务和场景等,考虑好为什么使用。前期面试过较过的做微服务架构设计人员,在抛出一些技术和场景问题的时候,回应出来的效果感觉不怎么好,比如以下几个问题:

“业务只有几个服务,什么要拆分,拆分的思想是怎么样的,相对于以前有什么好处“

”使用cloud,但是nginx也可以解决为什么还要引入一层复杂的业务“

”项目业务并不复杂,并发的压力可以横向扩展,为什么一定要拆分“

“工程复杂,模块化拆分和开发也可以实现,分开不是还增加分布式事务复杂性?”

“……”

接收到的回应都是五花八门了,有些可能有偏向于执行端有些偏向于技术尝新等,有些可能不了解上层的考虑(比如架构)等,但是从技术设计的角度来说,基本上看到是有些偏悲观的,可能更多的类似于听到的更多的组件化,高并发,易于维护,模块化拆分便利,互相不影响,后期升级便利等等,但是怎么样去组件化,怎么样好维护,拆分就一定方便么,增加的成本怎么考虑,后面说不清如何为业务服务。

技术架构的提升,需要很多考虑点,主流技术并不是代表就是符合。

取长补短,新的架构是否可以解决实际问题和业务架构设计

技术并不代表就是一定要那个样子,其实还可以这个样子,没人说微服务一定要cloud或者alibaba,或者nacos。

架构和业务设计尽量从简化,同时解决业务项目中的痛点和后期维护等考虑,这里提几个点,如果项目和业务来在考虑和设计提升,建议可以考虑:

  • 设计的服务中能不使用分布式事务就尽量避免使用
  • 把不需要的东西去掉,比如依赖n多的外部所谓好的组件
  • 把层级关系尽量标明,调用关系尽量要明确
  • 工程划分以业务标准为主,职责明确,模块为主,尽量少的服务
  • 涉及到互相依赖的包问题尽量减少,耦合关系要明确
  • ……

如果你有过程体验和感受,上面的设计就偏向于宏服务的设计思想,但是并不代表它就有标准,这里没有所谓的标准,如果非要定义一定,自己的理解,符合你的场景的那就是标准,至于使用什么技术,这个相对比较多,也比较成熟,就不过多阐述。

不过有一点滑稽的逻辑是,可以使用微服务架构来实现宏服务架构,类似于以前提到的可以使用微服务架构实现中台服务架构,只是一个架构思想的提升,类似于可以使用单体技术实现微服务架构,工具和架构融合,提升业务。

更推荐根据项目和团队等实际本地的情况,使用单体+业务+微服务架构优势的整合,类似架构如宏服务,但实际深挖远仅宏架构那么简单,一些互联网的名词出现,深挖会发出它会解决掉一些场景和方向,类似于以前的关系型数据库一样。

取长补短,来获取到符合实际业务的架构和方案,得出最优解。

总结

并不否定微服务技术,这里是不建议你盲目使用微服务,微服务技术已经有很多年,在架构设计和技术方向上,不要盲目推崇使用被技术绑架思维,而是在了解之后,以技术解决我们的痛点问题。

以实际情况为主,以团队实际能力为主,以项目实际运行情况为主,在以前没有体系之后,依然也是可以有技术方案可以实现,使用springboot/nginx/k8s一样也可以实现类似的效果,只是看项目大小还有运维管理的成本。

不希望动不动上来就是一套体系,一套方法论,而是针对问题的痛点,去选择合适团队的技术选型和技术方案,并不是方案有多优秀,而是方案有多适合,这是架构能力的体现之一。

以上为微服务技术使用的一些看法,希望可以给不一样的参考和建议。

相关文章
|
7月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
467 3
|
10月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
1256 0
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
2352 71
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
676 12
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
3703 37
微服务架构解析:跨越传统架构的技术革命
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
767 1
|
人工智能 安全 Java
微服务引擎 MSE:打造通用的企业级微服务架构
微服务引擎MSE致力于打造通用的企业级微服务架构,涵盖四大核心内容:微服务技术趋势与挑战、MSE应对方案、拥抱开源及最佳实践。MSE通过流量入口、内部流量管理、服务治理等模块,提供高可用、跨语言支持和性能优化。此外,MSE坚持开放,推动云原生与AI融合,助力企业实现无缝迁移和高效运维。
754 1