微服务拆分需要考虑的必要因素与坚持原则

前言:创业公司往往因为有限的时间和投入,把系统所有的功能都聚集在一起。随着业务的不断发展,技术人员开始不断地对架构进行解耦和拆分。微服务在最近几年大行其道,很多公司的研发人员都在考虑微服务架构,或者在做微服务的路上,拆分服务是个很热的话题。那么我们应该按照什么原则将现有的业务进行拆分?是否拆分得越细就越好?这里我想谈谈系统拆分需要考虑的因素和坚持的原则。

业务因素

所有技术方面的考虑,包括架构设计和解耦拆分都要考虑业务的需要。在服务拆分时,先从业务角度确定拆分的方案。拆分的边界要充分考虑业务的独立性和专业性,比如搜索类服务、支付类服务、购物车类服务,按服务的业务功能合理地划出拆分边界。避免按团队来定义服务边界,这样做会出现土匪抢地盘的局面,严重破坏团队之间的信任,削弱创新的潜在机会。

投入产出

衡量拆分收益的标准是拆分后的维护成本要低过拆分前的维护成本,也就是说不能因为拆分而带来更大的维护工作。

拆分前的维护成本 – 拆分后的维护成本 ≧ 0

服务的维护成本包括维护该服务所需要耗费的人力、物力和时间。如果一个系统拆分成两个或两个以上,导致所有的资源都加倍,那将会很失败。最好的结果是原来维护服务的同一套人马分成两个部分,因为拆分后服务的复杂性降低,所需要的维护资源显著减少,或者对人员能力的要求大大降低。

组织结构

拆分不仅仅是架构上的调整,也意味着要在组织结构上做出相应的适应性调整,确保拆分后的服务由相对独立的团队负责维护,尽量不要出现在不同服务之间的交叉调用。在这里要坚持的原则是明确每个服务的分工,充分授权而且自给自足的相对独立。切不可出现一个服务由几个不同的团队共同负责的情况,这会造成无人负责或多方争抢,也不利于团队积累相关服务的经验。

微服务拆分需要考虑的必要因素与坚持原则

系统扩展

拆分的一个重要理由也是最有价值的结果是提高了系统的扩展性。用户对不同的服务有不同的并发和性能方面的要求,因此服务具有不同的扩展性。把具有不同扩展性要求的服务拆分出来分别进行部署,可以降低成本,提高效率。比如电商平台的搜索服务有很多请求,需要特别好的扩展性,应该把搜索服务分离出来,单独考虑其扩展性的需求。这样可以确保不会因为搜索服务突然繁忙而影响其他的服务。也可以根据搜索服务的特点,设计出适合扩展的部署方案。

微服务拆分需要考虑的必要因素与坚持原则

软件发布

系统中经常变动的部分大约只占20%,剩下的80%基本不变或极少变化,因此软件的发布周期完全不同。我们可以把不变的80%分离出来,单独部署,单独管理。这不仅有利于降低系统的复杂性,精简团队的规模;也有利于在系统发生故障的时候快速定位。如果不做这种拆分,系统在扩展的过程中会浪费很多资源。

微服务拆分需要考虑的必要因素与坚持原则

信息安全

不同的服务可能对信息安全有不同的要求,因此把需要高度安全的服务拆分出来,进行特别的部署,比如放在防火墙的后面,可以更有针对性地满足信息安全的要求,也可以降低对防火墙等安全设备吞吐量、并发性等方面的要求,降低成本,提高效率。这就像对家里不同房间的安全做不同的安排,确保需要加锁的加锁,减少了对锁的需求量,也减少了开门的麻烦。

总结

所以我们在考虑服务拆分时,要坚持:面向业务、大道至简、分而治之的三个原则,充分考虑业务需求、投入产出、组织结构、系统扩展、软件发布和信息安全等方面。不能只从技术角度出发,把服务切成很多细微的小块,这样做很有可能会出现劳民伤财、欲速而不达的结果。

Original: https://www.cnblogs.com/linjiqin/p/15598103.html
Author: Ruthless
Title: 微服务拆分需要考虑的必要因素与坚持原则

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/547769/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 1.Spring Boot 的认识

    以前开发我们都是使用springMVC去开发,但是现在我们全部已经使用springboot了,因为它很方便,我也是便于从头梳理一下springboot,让自己更加深入了结sprin…

    技术杂谈 2023年7月24日
    082
  • Jenkins中插件 pipeline 中声明式流水线的语法

    声明性Pipeline 声明性Pipeline是Jenkins Pipeline 的一个相对较新的补充, 它在Pipeline子系统之上提出了一种更为简化和有意义的语法。 所有有效…

    技术杂谈 2023年5月31日
    073
  • 显微镜的景深

    现在常用的是与实验结果比较一致的Berek 公式焦深也叫景深,其定义是:指使用显微镜观察和拍摄样品表面时,从对准焦点的位置开始,改变物镜与样品表面的距离时,对焦能够保持清晰的范围。…

    技术杂谈 2023年5月31日
    0109
  • 集合remove()方法相关问题

    学习集合的过程中,了解到一个有关于remove()方法的有关特性,特此记录 首先remove方法的格式: collection.remove(Object o); 这是指对集合co…

    技术杂谈 2023年7月25日
    078
  • 利用XtraDiagram.DiagramControl进行流程图形的绘制和控制

    DevExpress提供了一个比较强大的图形绘制工具,可以用于绘制各种图形,如流程图、组织机构图等等,本篇随笔介绍XtraDiagram.DiagramControl的使用,以及利…

    技术杂谈 2023年5月31日
    0102
  • 基础排序算法(附加java实现)

    七种最基本的排序算法:(面试必会!) 冒泡排序: 最基础的排序算法,从数列最前端开始,两两比较,如果前一个数比后一个数大,那么两个数就交换位置,经过一轮遍历之后,最大的数就到了数列…

    技术杂谈 2023年6月21日
    078
  • 分库分表真的适合你的系统吗?聊聊分库分表和NewSQL如何选择

    曾几何时,”并发高就分库,数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官喜欢问,博主喜欢写,候选人也喜欢背,似乎已经形成了一个闭环。 …

    技术杂谈 2023年7月25日
    077
  • Proquest

    ProQuest学位论文比较多。2021年被科睿唯安收购 2021年5月17日, Clarivate公司宣布收购全球领先软件、数据和分析提供商ProQuest。此次收购需耗费约40…

    技术杂谈 2023年5月31日
    090
  • HTB靶场记录之Bank

    本文是 i 春秋论坛作家「皮卡皮卡丘」表哥分享的技术文章,旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。 相关文章>> HTB靶场记录之Bastard; H…

    技术杂谈 2023年5月31日
    0118
  • 《Silverlight 2完美征程》:书稿目录

    内容简介 本书详细介绍了微软下一代富互联网开发技术Silverlight,分为基础篇、进阶篇、高级篇和案例篇四个部分,共22个章节,以Silverlight 2为主要版本从不同的层…

    技术杂谈 2023年5月30日
    073
  • 全排列的详细解析

    好久没有更新了,今天来更新一下。今天来说一下关于全排列的问题那么第一个问题,什么是全排列?全排列可以理解为,数学里面的排列组合更简单的说呢,就是,从一到n这n个数有多少种排列情况?…

    技术杂谈 2023年7月23日
    063
  • Map–部分方法

    1.Map.values()方法:获取Map集合中的所有键值对象 获取 Map 集合中的所有键值对象,这些键值对象将存放在另一个集合对象中 2.getOrDefault() 方法 …

    技术杂谈 2023年7月24日
    084
  • 个人学习记录-Cpp基础-成员初始化列表

    https://blog.csdn.net/XIONGXING_xx/article/details/115553291https://blog.csdn.net/W_Y2010/…

    技术杂谈 2023年6月21日
    083
  • 透视矩阵的推导(最直观、最深入、最还原,看完请点赞。)

    由參数l,r,b,t,n,f定义的透视投影矩阵的推导困惑了我差点儿相同一个多礼拜。这几天差点儿是天天都在思考这个问题。昨天晚上3点多钟我突然醒了,然后我又開始想这个问题,结果最终让…

    技术杂谈 2023年5月31日
    088
  • HTML5封装成桌面应用

    HTML5封装成桌面应用1、准备工作:2、封装3、打包1、准备工作:web项目地址nw.js 下载网址reshacker 下载地址Inno Setup(度娘自行下载安装,有中文版)…

    技术杂谈 2023年5月31日
    088
  • python中整除后结果也是小数

    有人这么回答,这显然不对 先看个例子: ‘//’明明是整除,为什么结果不是整数,而会出现小数? 首先,关于除法有三种概念:传统除法、精确除法和地板除 #1、…

    技术杂谈 2023年7月25日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球