iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >什么时候才是微服务拆分的最佳时机?
  • 777
分享到

什么时候才是微服务拆分的最佳时机?

2023-06-05 05:06:52 777人浏览 独家记忆
摘要

提到微服务,服务拆分是绕不过去的话题,但是微服务不是说拆就能拆的,需要很多的前提条件。首先,首先在基础设施层面,要有一个持续集成的平台,使得服务在拆分的过程中,功能的一致性,这种一致性不能通过人的经验来,而需要经过大量的回归测试集,并且持续

提到微服务,服务拆分是绕不过去的话题,但是微服务不是说拆就能拆的,需要很多的前提条件。

什么时候才是微服务拆分的最佳时机?

首先,首先在基础设施层面,要有一个持续集成的平台,使得服务在拆分的过程中,功能的一致性,这种一致性不能通过人的经验来,而需要经过大量的回归测试集,并且持续的拆分,持续的演进,持续的集成,从而保证系统时刻处于可以验证交付的状态,而非闭门拆分一段时间,最终谁也不知道功能最终究竟有没有bug,因而需要另外一个月的时间专门修改bug。

其次在接入层,api和UI要动静分离,API由API网关统一的管理,这样后端无论如何拆分,可以保证对于前端来讲,统一的入口,而且可以实现拆分过程中的灰度发布,路由分发,流量切分,从而保证拆分的平滑进行。而且拆分后的微服务之间,为了高性能,是不建议每次调用都进行认证鉴权的,而是在API网关上做统一的认证鉴权,一旦进入网关,服务之间的调用就是可信的。

其三对于数据库,需要进行良好的设计,不应该有大量的联合查询,而是将数据库当成一个简单的key-value查询,复杂的联合查询通过应用层,或者通过elasticsearch进行。如果数据库表之间耦合的非常严重,其实服务拆分是拆不出来的。

其四要做应用的无状态化,只有无状态的应用,才能横向扩展,这样拆分才有意义。

那么, 满足了服务拆分的基础设施前提之后,我们应该先拆哪个模块,后拆哪个模块呢?在什么情况下一个模块应该拆分出来呢?

切记,微服务拆分绝非一个大跃进运动,由高层发起,把一个应用拆分的七零八落的,最终大大增加运维成本,但是并不会带来收益。

满足上述基本条件后,我们还要看业务变化,才能找到拆分的最佳时机。

第一,有快速迭代的需求。

互联网产品的特点就是迭代速度快,一般一年半就能决出胜负,第一一统天下,第二被第一收购,其他死翘翘。所以快速上线,快速迭代,就是生命线,而且一旦成功就是百亿身家,所以无论付出多大运维成本,使用微服务架构都是值得的。

这也就是为什么大部分使用微服务架构的都是互联网企业,因为对于这些企业来讲收益明显。而对于很多传统的应用,半年更新一次,企业运营相对平稳,IT系统的好坏对于业务没有关键性影响,在他们眼中,微服务化改造带来的效果,还不如开发多加几次班。

第二,提交代码频繁出现大量冲突

微服务对于快速迭代的效果,首先是开发独立,如果是一单体应用,几百人开发一个模块,如果使用git做代码管理,则经常会遇到的事情就是代码提交冲突。

同样一个模块,你也改,他也改,几百人根本没办法沟通。所以当你想提交一个代码的时候,发现和别人提交的冲突了,于是因为你是后提交的人,你有责任去merge代码,好不容易merge成功了,等再次提交的时候,发现又冲突了,你是不是很恼火。随着团队规模越大,冲突概率越大。

所以应该拆分成不同的模块,每十个人左右维护一个模块,也即一个工程,首先代码冲突的概率小多了,而且有了冲突,一个小组一吼,基本上问题就解决了。

每个模块对外提供接口,其他依赖模块可以不用关注具体的实现细节,只需要保证接口正确就可以。

第三,小功能要积累到大版本才能上线,上线开总监级别大会

微服务对于快速迭代的效果,首先是上线独立。如果没有拆分微服务,每次上线都是一件很痛苦的事情。当你修改了一个边角的小功能,但是你不敢马上上线,因为你依赖的其他模块才开发了一半,你要等他,等他好了,也不敢马上上线,因为另一个被依赖的模块也开发了一半,当所有的模块都耦合在一起,互相依赖,谁也没办法独立上线,而是需要总监协调各个团队,大家开大会,约定一个时间点,无论大小功能,死活都要这天上线。

这种模式导致上线的时候,单次上线的需求列表非常长,这样风险比较大,可能小功能的错误会导致大功能的上线不正常,将如此长的功能,需要一点点check,非常小心,这样上线时间长,影响范围大。因而这种的迭代速度快不了,顶多一个月一次就不错了。

服务拆分后,在接口稳定的情况下,不同的模块可以独立上线。这样上线的次数增多,单次上线的需求列表变小,可以随时回滚,风险变小,时间变短,影响面小,从而迭代速度加快。

对于接口要升级部分,保证灰度,先做接口新增,而非原接口变更,当注册中心中监控到的调用情况,发现接口已经不用了,再删除。

微服务解决的问题还有高并发。互联网一个产品的特点就是在短期内要积累大量的用户,这甚至比营收和利润还重要,如果没有大量的用户基数,融资都会有问题。

因而对于并发量不大的系统,进行微服务化的驱动力差一些,如果只有不多的用户在线,多线程就能解决问题,最多做好无状态化,前面部署个负载均衡,单体应用部署多份。

 第四,横向扩展流程复杂,主要业务和次要业务耦合

单体应用无状态化之后,虽然通过部署多份,可以承载一定的并发量,但是资源非常浪费。因为有的业务是需要扩容的,例如下单和支付,有的业务是不需要扩容的,例如注册。如果一起扩容,消耗的资源可能是拆分后的几倍,成本可能多出几个亿。而且由于配置复杂,在同一个工程里面,往往在配置文件中是这样组织的,这一块是这个模块的,下一块是另一个模块的,这样扩容的时候,一些边角的业务,也是需要对配置进行详细审核,否则不敢贸然扩容。

第五,熔断降级全靠if-else

在高并发场景下,我们希望一个请求如果不成功,不要占用资源,应该尽快失败,尽快返回,而且希望当一些边角的业务不正常的情况下,主要业务流程不受影响。这就需要熔断策略,也即当A调用B,而B总是不正常的时候,为了让B不要波及到A,可以对B的调用进行熔断,也即A不调用B,而是返回暂时的fallback数据,当B正常的时候,再放开熔断,进行正常的调用。

有时候为了保证核心业务流程,边角的业务流程,如评论,库存数目等,人工设置为降级的状态,也即默认不调用,将所有的资源用于大促的下单和支付流程。

如果核心业务流程和边角业务流程在同一个进程中,就需要使用大量的if-else语句,根据下发的配置来判断是否熔断或者降级,这会使得配置异常复杂,难以维护。

如果核心业务和边角业务分成两个进程,就可以使用标准的熔断降级策略,配置在某种情况下,放弃对另一个进程的调用,可以进行统一的维护。

总之,微服务拆分的过程,应该是一个由痛点驱动的,是业务真正遇到了快速迭代和高并发的问题。如果不拆分,将对于业务的发展带来影响,只有这个时候,微服务的拆分才有确定收益,增加的运维成本才值得。

(本文作者为:网易云首席架构师 刘超)

--结束END--

本文标题: 什么时候才是微服务拆分的最佳时机?

本文链接: https://www.lsjlt.com/news/241578.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 什么时候才是微服务拆分的最佳时机?
    提到微服务,服务拆分是绕不过去的话题,但是微服务不是说拆就能拆的,需要很多的前提条件。首先,首先在基础设施层面,要有一个持续集成的平台,使得服务在拆分的过程中,功能的一致性,这种一致性不能通过人的经验来,而需要经过大量的回归测试集,并且持续...
    99+
    2023-06-05
  • Java类的加载时机是什么时候
    本篇内容主要讲解“Java类的加载时机是什么时候”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java类的加载时机是什么时候”吧!必须初始化的四种情况有四种情况类是必须要进行初始化的,对于这四种...
    99+
    2023-06-25
  • MySQL数据库的字段什么时候可以拆分
    这篇文章主要为大家展示了“MySQL数据库的字段什么时候可以拆分”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL数据库的字段什么时候可以拆分”这篇文章吧...
    99+
    2024-04-02
  • 云服务器什么时候买最便宜
    云服务器的价格通常在不同地区和时间会有所不同,因此最便宜的购买时间是非常困难的事情。以下是一些建议可能有助于您确定哪些云服务器适合您: 购买前请确保在您所在的地理位置进行访问,以便您可以轻松找到所需的云服务器。 购买前检查供应商的价格以...
    99+
    2023-10-26
    什么时候 最便宜 服务器
  • 阿里云服务器崩溃是什么时候
    阿里云是中国领先的云计算服务提供商,为企业和个人提供各种云服务。然而,即使是像阿里云这样的大型云服务提供商,也无法完全避免服务器崩溃的风险。本文将探讨阿里云服务器崩溃可能发生的时间,并提供一些相关案例。 服务器崩溃的原因服务器崩溃是指服务器...
    99+
    2024-01-17
    阿里 服务器
  • 亚马逊云服务是什么时候开始的
    亚马逊云服务的发展历程可以追溯到2006年,当时亚马逊公司推出了一项名为“亚马逊网络服务”(AWS)的服务,旨在为个人和企业提供可靠的云计算基础设施和服务。AWS最初主要面向企业客户,随着时间的推移,它逐渐扩展到个人用户和开发者客户。 2...
    99+
    2023-10-27
    亚马逊 什么时候开始
  • 云服务器什么时候开始的?
    云服务器是一种基于互联网的服务器软件,它通过互联网连接到用户的个人计算机或服务器设备上,使得用户可以通过浏览器访问服务器中的数据。云服务器是通过虚拟化技术将服务器资源虚拟化后存储在一个云计算平台上,用户无需购买和维护自己的物理服务器,只需使...
    99+
    2023-10-26
    什么时候开始 服务器
  • 云服务器什么时候开始的运行时间
    一般来说,云服务器的运行时间可以从几分钟到数小时不等,取决于云服务器所提供的计算资源的种类和数量。一些高性能云服务器可以提供高达数小时的运行时间,而一些低性能云服务器可能只有数十分钟的运行时间。 云服务器的运行时间受多种因素的影响,其中一...
    99+
    2023-10-28
    什么时候开始 服务器 时间
  • PHP实现分布式实时通信的最佳实践是什么?
    随着互联网的发展,实时通信变得越来越重要。尤其是对于在线游戏、社交应用、电商平台等需要高并发、实时互动的应用来说,实时通信更是必不可少。而分布式实时通信则是在面对大量用户同时在线的情况下,保证高效、稳定地进行通信的重要手段。本文将介绍在P...
    99+
    2023-11-01
    并发 分布式 实时
  • 亚马逊云服务是什么时候开始的呢
    现在,AWS已经成为了许多企业和组织的首选云计算服务提供商之一,包括许多大型科技公司,如微软、谷歌、IBM等。此外,AWS还提供了一系列其他云计算服务,如物联网、人工智能、区块链等,可以满足各种不同的业务需求。 ...
    99+
    2023-10-27
    亚马逊 什么时候开始
  • Git中的实时响应:Java的最佳实践是什么?
    Git是一个非常流行的分布式版本控制系统,它已经成为了现代软件开发中不可或缺的工具之一。作为一个开发者,你可能会遇到需要在Git中进行实时响应的情况。在这篇文章中,我们将探讨在Java中实现Git的实时响应的最佳实践。 Git中的实时响应 ...
    99+
    2023-10-13
    git 实时 响应
  • 云服务器什么时候开始的运行
    云服务器是一种虚拟的基础设施服务,通常是由大型互联网公司或组织提供的,可以由个人或组织购买或租赁。以下是一些关于云服务器在大多数情况下开始运行的原因和时间的信息: 云服务器是由大型互联网公司或组织开发的,所以他们可能拥有强大的计算、存储...
    99+
    2023-10-27
    什么时候开始 服务器
  • 云服务器什么时候开始的使用
    云服务器是一种虚拟的存储和计算服务,它通常在互联网上提供服务。在过去,很多公司和个人可能会选择将服务器托管在公共云计算服务商或者使用自己的设备来存储和处理数据。现在,随着虚拟化技术的发展,云服务器已经越来越普遍地应用在企业和个人中。 云服...
    99+
    2023-10-27
    什么时候开始 服务器
  • 云服务器什么时候开始的运营
    云服务器(Cloud Storage,也称为云计算服务)是一种通过互联网访问的服务器软件,为用户提供按需使用、按使用付费的服务模式。它通常在企业或组织内部使用,用于存储和备份数据、访问互联网、处理文档和其他数据。 在大多数情况下,云服务器...
    99+
    2023-10-27
    什么时候开始 服务器
  • 实时索引打包:Python 中的最佳实践是什么?
    在现代软件开发中,数据检索是一项必不可少的任务。为了提高数据检索的效率和准确性,我们可以使用实时索引技术。Python 作为一种流行的编程语言,提供了许多实现实时索引的方法。在本文中,我们将讨论 Python 中实时索引打包的最佳实践。 ...
    99+
    2023-10-29
    索引 实时 打包
  • 实时Unix数据加载:ASP的最佳实践是什么?
    ASP(Active Server Pages)是一种基于服务器端的Web应用程序开发技术,它可以使用多种编程语言,如VBScript和JavaScript。ASP应用程序通常需要与数据源进行交互,以获取、更新或删除数据。在Unix环境下...
    99+
    2023-08-07
    load 实时 unix
  • Apache实时处理Java文件的最佳方案是什么?
    Apache是一个非常流行的开源软件基金会,其软件产品被广泛应用于各个领域。其中,Apache Flink是一个流处理引擎,它提供了丰富的API,可以用于实时处理Java文件。那么,Apache Flink是否是最佳的方案呢?本文将为您解...
    99+
    2023-10-22
    文件 实时 apache
  • Git中的实时响应和Java:最佳实践是什么?
    Git是一个非常流行的版本控制系统,而Java则是目前最常用的编程语言之一。Git中的实时响应和Java的结合,可以带来很多好处,但同时也需要注意一些最佳实践。 在本文中,我们将探讨Git中的实时响应和Java的结合,以及如何遵循最佳实践来...
    99+
    2023-10-13
    git 实时 响应
  • 实时监控Go文件对象的最佳方法是什么?
    在Go语言中,文件操作是非常常见的操作,特别是在涉及到大量数据处理的场景下,我们需要实时地监控文件对象的变化,以便及时处理数据。那么,实时监控Go文件对象的最佳方法是什么呢?本文将为你介绍几种常见的方法,并提供演示代码。 方法一:使用os...
    99+
    2023-10-07
    文件 对象 实时
  • 什么是 Python 编程算法实时接口的最佳实践?
    Python 编程算法实时接口是一种用于实时数据处理和分析的重要工具。Python 作为一种高级编程语言,已经被广泛应用于数据科学、机器学习和人工智能领域。在这篇文章中,我们将探讨 Python 编程算法实时接口的最佳实践,并提供一些演示代...
    99+
    2023-10-02
    编程算法 接口 实时
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作