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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 依托于容器化的普及,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一样也可以实现类似的效果,只是看项目大小还有运维管理的成本。

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

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

相关文章
|
6天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
5天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
9天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
48 6
|
9天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
26 1
|
16天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
5天前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
16 1
服务架构的演进:从单体到微服务的探索之旅
|
4天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
24 5
|
7天前
|
监控 API 微服务
后端技术演进:从单体架构到微服务的转变
随着互联网应用的快速增长和用户需求的不断演化,传统单体架构已难以满足现代软件开发的需求。本文深入探讨了后端技术在面对复杂系统挑战时的演进路径,重点分析了从单体架构向微服务架构转变的过程、原因及优势。通过对比分析,揭示了微服务架构如何提高系统的可扩展性、灵活性和维护效率,同时指出了实施微服务时面临的挑战和最佳实践。
25 7
|
6天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构下的微服务治理策略
随着云原生技术的不断成熟,微服务架构已成为现代应用开发的主流选择。本文探讨了在云原生环境下实施微服务治理的策略和方法,重点分析了服务发现、负载均衡、故障恢复和配置管理等关键技术点,以及如何利用Kubernetes等容器编排工具来优化微服务的部署和管理。文章旨在为开发者提供一套实用的微服务治理框架,帮助其在复杂的云环境中构建高效、可靠的分布式系统。
19 5
|
5天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####