聊聊微服务 架构思想

news2024/11/25 4:38:44

用了好多年微服务架构了,我经常会反思,这个项目为啥用微服务?真的能帮我们解决一些痛点吗?这个项目有必要用微服务吗?这个项目体现出微服务的价值了吗?

我是从2017年开始入手微服务,距今已经五六年了。在此期间,遇到的大小项目,基本都是用微服务架构开发的,其中有数字化工厂项目、教辅系列平台、政府行政审批系列、商城门户SASS平台、大数据平台等待。在这篇文章中,我就不给大家普及微服务的概念及微服务组件框架,主要讨论微服务架构的发展和核心思想。


只要学会举一反三,懂得总结归纳,从常见事务中剥离方法论,你就会发现,其实软件架构的发展,到现在的微服务,都是有迹可循。

先聊聊历史政治的历程

个人认知,说几个关键历程

  1. 最初的人文部落管理,扁平化管理,大家都跟着部落首领干,男的打猎,女的耕织,部落首领说了算。规模不大,统治者一言堂,管得过来。

  2. 随着各部落的壮大发展,部落间混战,最终轩辕氏皇帝征服其他部落,成部落联盟首领,再到后来的夏商周三代,基本形成了分封制的管理格局。规模越来越大,管不过来了。分封而治,权利下放。

  3. 春秋战国,诸侯崛起,周王室衰落,最终秦一统天下。吸取权利下放导致尾大不掉的弊病。于是始皇帝建立郡县制的同时,统一制度,统一思想,收缴天下兵马。权利下放,各管各的,容易失控。需要将权利按职能分类,选择性下放,同时建立统一的管理制度。

  1. 值得一提的,汉孝武黄帝,提出了天下第一阳谋的“推恩令”,彻底维护了郡县制的落实,防止了重返分封制。

  2. 随着长期发展,直到今日,形成了围绕中央政权,成立个多个司法部门,按职能管理的格局。高内聚(按职能成立各种司法部门,统一管理),低耦合(金字塔模式,建立省市县镇村多级。将部分权利逐层下放,各管一方)

简说创业者管理旅程

  1. 常规创业者,创业一开始,所有的活,从生产到销售一条龙服务,都是老板自己干,亲力亲为。

  2. 业务发展到一定规模,老板忙不过来了,请了几个员工一起干,干的好的,积累了经验,可能撇开老板自己出去创业了跟自己竞争了,管理失控,老板尴尬了。

  3. 于是,招聘了不同能力的人,划分智能部门干活,让专业的人干专业的事,离了萝卜坑还在,只要体系在,就能稳固发展,铁打的营盘流水的兵。

  4. 随着公司业务规模越来越大,光靠只能职能部门也没办法管理庞大的业务,于是成立分公司,子公司,大区部门等,建立金字塔模式,逐层下放。这时候的老板管理基本就靠制度、企业文化、战略、组织架构、机制等来管理企业了。

软件架构的发展

软件架构的发展,其实也是一样的,都有个从0到1(质变),从1到n(量变)的过程。不同时期下的管理思想在一定程度上是相似的。(结合个人经验,以web发展发展为例说起)

  1. 微软asp框架说起,asp框架将html,js,css(前端),c#/vb(后端代码),jdbc-sql(数据库),系统配置等全部放在.asp文件中,开发一个功能,直接操作数据库,查询到数据,就遍历渲染了,很直接。开发起来真的很方便简介,但维护起来却非常困难,后期文件极其臃肿,且代码复用性极差,当遇到大的项目,需要大的开发团队,分工、管理、规划就显得极难。

  2. 后来,asp.net框架出来,做到前后端分离(文件维度)html,js,css(前端)放在.asp文件,c#(后端代码)放在.cs文件中。甚至MVC框架的出现,将软件架构进一步拆分为前端展现层-后端(业务控制层-业务处理层-数据库持久层) 4层,从上到下,底层代码的复用性得到了极大的提高,每一层可以隔离开发。(PS:当时我也转JAVA了,java跨平台太香了。asp.net有点对应java的SSH三大框架,以下以java为例接着说)。

  3. 再后来,随着angularJS、restApi的出现,前端只需要接口提供的数据就可完独立完成交互,不再依赖后端渲染,权限、配置控制等,可独立部署,掀起来前后端分离的格局(项目维度),随后angularJS2+、vue、react + spring boot的架构得到开发者青睐。这时候迎来了前后端独立的大发展阶段,前端没了后端的束缚,基于mockjs或node,迅速响应市场,快速提供可见软件,并逐步形成前端框架;后端也是从业务角度,解耦业务,拆分项目,形成一个前端,需要多个后端服务提供接口的局面,然而后端面服务拆分的越多,越难管控。

  4. 微服务框架的诞生就是为这些业务服务提供一系列工具组件去统一管理起来。

总结一下,如下图:

再回头看一下微服务架构,你会发现,核心业务被一堆抽离出来的职能管理服务团团包围。


微服务架构的核心思想

软件架构的核心思想是“高内聚、低耦合”,所以任何架构的改造和设计模式都是向这两个核心思想靠拢。

微服务最关键的是拆分微服务,按业务属性和功能属性,可以分为纵向拆分和横向拆分。其拆分的目的,主要还是为了业务解耦。业务解耦的目的:

  1. 并行开发

大的项目,一般开发周期会比较长,如果规划的好,微服务可以并行开发,提高人效和缩短开发周期;

  1. 复用性和可移植性

一个独立完整的功能,可以复用,降低维护成本,提高功能价值。

  1. 降低隐患范围,风险最小化

防止了牵一发动全身,因为一个问题,导致系统全部瘫痪。系统更新,也可以无感局部更新。

  1. 有益于持续交付

基于微服务低依赖性,更容易做单元测试和功能交付。

  1. 灵活交付

特别是toB产品,不同的企业,可能要的功能范围不一样,他不想出那么多钱买你全套,只要部分功能,用微服务就可以很灵活搭配,打包不同范围的产品。

我做过很多大型项目,为了缩短工期,为了能并行开发,敏捷管理,持续交付可用功能,才选型微服务架构。然而,微服务不止是为了解决这些问题,微服务的诞生,更多是为了解决toC高并发,响应慢的问题,单体服务再性能方面扩展有限,且成本很大。而微服务通过集群部署,可以很灵活、很方便的进行性能扩展,同时保证了系统的稳定性。集群部署的目的:

  1. 高并发

通过部署多节点,并发处理业务,突破业务并发瓶颈。

  1. 消灾、灭灾

防止服务宕机,造成系统瘫痪,多节点部署,有备无患。

  1. 热部署

不停机更新服务,系统升级(兼容升级)客户无感知。

举个例子,统计整个学校学生的兴趣爱好。如果没有系统,只能线下统计,大家都能想到最快的方式,逐层统计,由下到上,班主任统计自己班的,统计完交给年级主任,年级主任统计完各年级的交给学段部,学段部校长统计完交给总校长统计。这样一个庞大的工作拆分成四级,由多人完成。不同的人干不同的事,同级别可并行处理,这极大地提升了干活的效率。这也是微服务分布式处理思想的体现,可以很好的纵向扩展业务,不限层级。但是,在统计过程中,逐层上报,汇总的时候,要去重分组筛选,越到后边工作量越来越大,总校长事务繁多,实践投入又很少,总的统计过程还是效率很低。怎么办,很简单,根据实际情况,给他们配备不同数量的助手,协助完成统计工作。即不同的人干同一件事,这降低了流水线上单个节点的压力,同时保证了流水线的运作,每件事,保证始终有人干就行。

这是微服务的集群处理思想的体现,根据业务容量大小,可以灵活横向扩展节点,不限个数,同时保障了系统的可用性。微服务的架构思想,其实还是源于日常生活,没那么复杂,只是有些人善于归纳,提炼方法论并应用到其他领域罢了!毕!

文章转载自:·志坚行远·

原文链接:https://www.cnblogs.com/luze/p/17202222.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/750767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从小白到大神之路之学习运维第59天--------inotify+rsync同步和实时同步(单台同步和多台同步)

第三阶段基础 时 间:2023年7月13日 参加人:全班人员 内 容: inotifyrsync同步和实时同步 目录 一、rsync远程同步 二、源端到发起端同步 安装部署: 源端(服务端): (单台…

ROS安装注意事项

输入roscore报错:"roscore" not found 输入 sudo apt install ros-​melodi​c-roslaunch​

概率论的学习和整理17:EXCEL里直接对应的分布公式计算概率

1EXCEL计算这些特殊分布的方差 1.1 用原始的概率,期望和方差的方法 虽然计算概率,需要用对应分布的公式P(xn) 想了解的随机变量是总次数n,需要对应几何分布,负二项分布P(xk) 想了解的随机变量是成功次数k,需要对应超几…

【Spring】注解读取和存储Bean对象(下)

三、Spring 获取 bean 对象 获取 bean 对象也叫 “对象装配”,“对象注入”, 意思就是把对象取出来放到某个类中。 对象装配(对象注入)的实现有以下三种方法: 1. 属性注入 2. 构造方法注入 3. Setter 注入 接下来…

【Unity面试篇】Unity 面试题总结甄选 |Unity进阶篇 | ❤️持续更新❤️

前言 关于Unity面试题相关的所有知识点:🐱‍🏍2023年Unity面试题大全,共十万字面试题总结【收藏一篇足够面试,持续更新】为了方便大家可以重点复习某个模块,所以将各方面的知识点进行了拆分并更新整理了新…

总结926

总结:今晚状态极佳,回去路上差点被宿管阿姨锁在楼下。之前每每学到晚上脑子都转不动了,不过今晚就像是适应了一样。这也说明,学习,是可以上瘾的。只要循序渐进,步步为营,就不断收获学习的乐趣。…

解决uniapp运行手机基座出现的问题

常见的问题:(往往在更新编辑器版本后会出现以下问题) 问题1.明明已经连接到手机,就是检测不到设备 问题2.同步资源失败,未得到同步资源的授权 解决办法汇总 问题1解决办法: 方法一:进入HBuild…

关系型数据库范式

范式 前置知识第一范式(1NF)第二范式(2NF)第三范式(3NF)BC范式(BCNF)第四范式(4NF)范式化设计和反范式化设计的优缺点? 前置知识 超键(super key)…

mq延时队列使用

一、基本配置 导入依赖 <!--高级消息队列协议amqp--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>application.yml配置 #rabbitmqrabbitmq:host: 192…

02 半同步半反应堆线程池

服务器编程基本框架 主要由I/O单元&#xff0c;逻辑单元和网络存储单元组成&#xff0c;其中每个单元之间通过请求队列进行通信&#xff0c;从而协同完成任务。 其中I/O单元用于处理客户端连接&#xff0c;读写网络数据&#xff1b;逻辑单元用于处理业务逻辑的线程&#xff1b…

ES7~ES13新特性(二)

1 ES7新增特性解析 2 ES8新增特性解析 3 ES10新增特性解析 4 ES11新增特性解析 5 ES12新增特性解析 6 ES13新增特性解析 ES8-对象相关的属性 ---entries的使用 const obj {name: "why",age: 18,height: 1.88,address: "广州市"}// 1.获取所有的keyco…

【NLP】Transformer模型原理(2)

接上文 【NLP】Transformer模型原理(1) 六、零层的transformer 观看涵盖与本节类似内容的视频:0 层理论 在进入更复杂的模型之前,简要考虑一下“零层”变压器很有用。这样的模型获取一个令牌,嵌入它,解嵌它以生成预测下一个令牌的对数: ​

音频数据分割单独处理后再拼接出现跳跃间断点的处理方法

+hezkz17进数字音频系统研究开发交流答疑 1如图所示 问题1: 对于一个81920字节的音频文件,如果是分割成小块4096输入(无重叠,均分),在频域上做去噪算法,每4k数据返回到时域上再拼接成80k的处理结果文件,发现处理结果有异常有跳跃间断点,像是频谱泄露?分割也需要有重…

mysql函数练习

创建表sch 向表中加入数据 1、创建一个可以统计表格内记录条数的存储函数 &#xff0c;函数名为count_sch() CREATE DEFINERroot% FUNCTION count_sch() RETURNS int(11) BEGINDECLARE total INT DEFAULT 0;#Routine body goes here...SELECT count(1) into total from sch;IN…

Linux->初识计算机网络

目录 前言&#xff1a; 1 网络发展背景 2 协议 2.1 网络协议初识 2.2 协议分层 2.3 OSI、TCP/IP层状模型 2.4 协议和操作系统的关系 2.5 根据协议栈的通信 3 网络中的地址管理 前言&#xff1a; 本篇当中没有任何关于网络编程的讲解&#xff0c;全部是对网络的宏观理解…

Go语言github.com/gorilla/websocket框架websocket协议通信实战

websocket是实际开发中比较常用的应用层协议&#xff0c;本文利用github.com/gorilla/websocket框架进行websocket通信实战。 目录 1.下载github.com/gorilla/websocket 2.websocket服务端 3.websocket Go客户端 4.websocket 网页客户端 5.运行结果展示 1.下载github.com…

【UI自动化测试】appium+python+unittest+HTMLRunner

进阶Python接口自动化测试必备教程&#xff08;2023全网最详细&#xff09; 简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下载与安装 下载需要自…

深度学习(28)——YOLO系列(7)

深度学习&#xff08;28&#xff09;——YOLO系列&#xff08;7&#xff09; 咱就是说&#xff0c;需要源码请造访&#xff1a;Jane的GitHub&#xff1a;在这里 上午没写完的&#xff0c;下午继续&#xff0c;是一个小尾巴。其实上午把训练的关键部分和数据的关键部分都写完了…

macOS 怎么安装redis数据库

1 访问redis数据库下载网址 http://download.redis.io/releases/ 访问上述的redis下载的网址&#xff0c;确定你想要的版本 然后下载即可 &#xff08;我选则的是6.2.6&#xff09; 然后下载 下载后 把这个文件解压&#xff0c;放在自己想要放在的位置 2 打开终端 输入对应的…

Hadoop 单机部署和测试(一)

Hadoop单机部署和测试 一.单机部署1.安装 JDK&#xff08;JDK11&#xff09;2.安装 HADOOP3.测试 一.单机部署 系统版本&#xff1a;cat /etc/anolis-release1.安装 JDK&#xff08;JDK11&#xff09; #!/bin/bashTOP_PATH$(pwd) JAVA_PATH/usr/local/java FILEls $TOP_PATH/…