关于微服务架构的思考

news2024/9/21 20:34:10

引言

众所周知微服务已经经过了炒作周期的兴奋阶段,但并不是说它现在过时了。微服务架构算是笔者过往印象比较深的项目之一。并且,即使作为行业的最佳实践,但也能看到各种各样失败的案例。所以今天想跟大家分享一下关于微服务相关深度思考的话题。

微服务这个话题已经被讨论的太多太多,但笔者还是想以现在Web应用设计的经验出发,发表一些与众不同的观点。

单体与微服务

首先,单体系统和微服务的区别,在这就不多说了,因为太基础了,懂得都懂。那么,为什么要用微服务呢?业界对单体系统和微服务的普遍观点是:单体系统非常容易开发、测试、部署,但是单体系统面对的问题也很多,例如开发效率变低、维护成本增加、部署影响变大、可扩展性较差、技术选型成本高,而引入了微服务可以实现每个微服务易于开发与维护,便于沟通与协作,很适合小团队敏捷开发与持续交付;每个微服务职责单一,高内聚、低耦合。同时,每个微服务能够独立开发、独立运行、独立部署;每个微服务之间是独立的,如果某个服务部署或者宕机,只会影响到当前服务,而不会对整个业务系统产生影响;每个微服务可以随着系统规模的不断扩大,面对海量用户和高并发,独立做水平扩展与垂直扩展;每个微服务可以使用不同的编程语言以及不同的存储技术,使得我们更容易尝试新的技术。

c0db446c829071bbf7e5e7fa54a3809c.jpeg

简单与复杂

其次,微服务是个大染缸:单体系统让很多人诟病的是其服务内聚混乱,看起来就像一个球。那么,服务化之后,就解决了这个问题了吗?事实上,微服务通过拆分单体系统使其成为多个体积更小的服务来降低单个服务的复杂性,让单个系统看起来更加的职能清晰,但是,整个系统架构变得更加复杂。1c4ae5f96ed9541d36a3df008a3a1b28.jpeg

微服务的数据

接着,微服务中的数据是如何独立的:微服务的一个主流观点是,在每个服务都有自己的缓存和数据库,并且缓存和数据库是相互独立且透明的。因此,共享缓存与共享数据库是不对的。那如果服务 A 需要获取服务 B 的数据怎么办?一般的做法是,服务 B 提供一个获取该数据的 API 接口,而服务 A 通过调用该接口进行业务组装。因此,微服务化之后,服务之间的数据交换都是通过接口来开展的,如果服务 A 越过服务 B 的业务逻辑之间访问服务 B 的数据,其会破坏了微服务之间的数据独立性。

73192542538d41854eaadf9e7f869ec6.jpeg

团队协作

然后,微服务如何进行团队协作:微服务对与组织结构提出了新的要求,它建议将大团队拆分成为多个小团队,而每个团队各自运维开发和运维一个或多个服务,并且需要流程上持续交付、持续部署、DevOps。

不同的服务可能由不同的团队开发与维护,实际场景下,微服务的便利性更多的在于团队内部能够产生闭环,换句话说,团队内部可以易于开发与维护,便于沟通与协作,但是对于外部团队就存在很大的沟通成本与协作成本。如图所示,团队 A 对于服务 C 的了解是一个黑盒,我们不知道它是单体服务还是微服务,它部署了几台服务器,需要依赖哪些下游服务,是否存在限流、熔断和降级策略,以及如何接入。如果我们需要确认这些问题,通常情况下,都需要人工协作和确认。

0e9403c5842b439889e315698086aa7f.jpeg

6c44b0450a2dd3605e743daaab8a2bfe.jpeg

适合场景分析

最后,微服务架构适用场景分析。

在实际开发中,需要考虑多种因素,来决定采取哪种架构模式才适合当前业务发展情况。

毕竟微服务也不能“包治百病”,不要把它当做万能药。企业研发哪里得病了,觉得只要把“微服务”这服药给用上,就药到病除。哪有这么简单的事情。

微服务有它自身的特点,优点和缺点,有其适用范围,微服务并不能解决所有问题。你需要综合考虑一些情况。

比如 业务所处发展阶段:

  • 刚开始探索
  • 高速发展期
  • 还是成熟期

业务的复杂度:

  • 业务访问量是多还是少
  • 用户量是多还是少

开发人员:

  • 开发人员素质,是初级还是高级
  • 开发人员的数量

产品的形态:

  • APP
  • web
  • 小程序

是否3者都有,等等都是需要综合考虑的因素。

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

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

相关文章

【服务器数据恢复】多块磁盘离线导致RAIDZ崩溃的数据恢复案例

服务器数据恢复环境: SUN ZFS系列某型号存储阵列; 40块磁盘组建的存储池(其中4块磁盘用作全局热备盘),池内划分出若干空间映射到服务器使用; 服务器使用Windows操作系统。 服务器故障: 服务器在…

一文讲解thop库计算FLOPs问题

问题 计算模型的FLOPs及参数大小 FLOPS是处理器性能的衡量指标,是“每秒所执行的浮点运算次数”的缩写。 FLOPs是算法复杂度的衡量指标,是“浮点运算次数”的缩写,s代表的是复数。 一般使用thop库来计算,GitHub: h…

c++ 那些事 笔记

GitHub - Light-City/CPlusPlusThings: C那些事 1. ① extern extern关键字,C语言extern关键字用法详解 如果全局变量不在文件的开头定义,其有效的作用范围只限于其定义处到文件结束。如果在定义点之前的函数想引用该全局变量,则应该在…

45个写规范代码的小技巧

目录 1、规范命名 2、规范代码格式 3、写好代码注释 4、try catch 内部代码抽成一个方法 5、方法别太长 6、抽取重复代码 7、多用return 8、if条件表达式不要太复杂 9、优雅地参数校验 10、统一返回值 11、统一异常处理 12、尽量不传递null值 13、尽量不返回null值…

BN、SyncBN、IN、LN、GN学习记录

1 BatchNormBN的原理BN是计算机视觉最常用的标准化方法,它沿着N、H、W维度对输入特征图求均值和方差,随后再利用均值和方差来归一化特征图。计算过程如下图所示,1)沿着通道维度计算其他维度的均值;2)沿着通…

numpy入门

目录: numpy数据类型numpy维度numpy常用操作 numpy数据类型 numpy的数据类型是numpy.ndarray,它不同于python的array.array,ndarray可以处理多维数据。ndarray的常见属性有dtype,shape,size等,在进行一些…

接口自动化测试框架-Python+Requests+Yaml

零代码极限封装的【接口自动化测试框架】,目前已经完全能够实现真正的零代码落地并在企业中推广。其中用到的最核心的封装技术如下:核心技术1.热加载封装,是全网最早应用于自动化测试框架的封装技术。2.Requests统一请求封装3.接口关联封装以及接口关联封…

微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI RestClient

分布式搜索引擎01-- elasticsearch基础0.学习目标1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容例如:在GitHub搜索代码…

【Python】带你进入字典的世界

如约而至,紧接着上一期文章,小编将会陆续把全套的Python笔记将依次发放给大家,便于大家学习Python、期末备考、巩固基础等(这几期是公众号小插曲,后期发放编程技术的话主要还是会围绕Java来展开~感谢大家支持)字典字典是Python内置…

鸿翼企业网盘 激活企业协作办公

信息化的发展,使企业网盘成为了许多企业必备的“数字基础设施”。鸿翼企业网盘,让网盘不仅是数据存储的“仓库”,更是数据利用的“中枢”,以网盘为载体,激活企业“协作力”。 企业网盘起初是为了解决企业内数据统一存储…

基于SpringBoot+MyBaits_Vue+ElementUi构建项目

基于SpringBootMyBaits_VueElementUi构建项目 1.Spring Boot 后台搭建 1.1.项目初始化 前期准备:maven,jdk(1.8),idea 1.1.1.下载地址 Spring官方提供了Springboot自定义配置地址,可依照相关选项搭建所…

6.4 实战:实现 Web API 版本控制

第6章 构建 RESTful 服务 6.1 RESTful 简介 6.2 构建 RESTful 应用接口 6.3 使用 Swagger 生成 Web API 文档 6.4 实战:实现 Web API 版本控制 6.4 实战:实现 Web API 版本控制 如果业务需求变更,Web API 功能发生变化时应该如何处理呢&…

易错:List中的add方法添加对象时出现重复的问题

错误&#xff1a; 用list存储User对象信息&#xff0c;当存储多个对象时&#xff0c;发现存储的数据都是一样的 之前代码&#xff1a; User user new User();List<User> list new ArrayList<>();for (int i 0; i < 5; i) {user.setName("Tom"i);…

drf-yasg —— Django REST Framework 文档生成

drf-yasg —— Django REST Framework 文档生成 drf-yasg 安装及全局配置 安装以及这个官方文档非常详细的描述了&#xff0c;我就不多说了。 配置好并运行 Django 项目以后&#xff0c;就可以使用浏览器访问 /swagger/ 和 /redoc/ &#xff08;链接取决于你的 urls 的配置&am…

看见统计——第五章 统计推断:贝叶斯学派

看见统计——第五章 统计推断&#xff1a;贝叶斯学派 引言 推理的频率学派认为&#xff0c;概率在本质上是与频率联系在一起的。这种解释实际上是很自然的。按照频率学派的说法&#xff0c;一枚公平的硬币出现人头的概率是1/2。简单地说&#xff0c;在同一个硬币的无限次独立…

打造一款日志分析工具

一、简介 作为一名安全从业者&#xff0c;网络安全事件的应急响应工作是必不可少的&#xff0c;那么在应急支撑时&#xff0c;针对大量的日志数据便需要借助自动化工具实现快速的归类检测&#xff0c;并提取出所需的关键日志数据。本篇文章主要通过利用python语言编写一款web日…

自带超多工具,好用又免费,这3款手机浏览器你用过了吗

手机浏览器是我们手机中必备的一款软件APP&#xff0c;一款好用的浏览器&#xff0c;可以帮助我们提高工作效率&#xff0c;节省时间。对于懒癌患者来说&#xff0c;手机上安装各种各种的app很麻烦&#xff0c;下面给大家介绍自带超多的工具&#xff0c;好用且免费的浏览器&…

SpringCloud网关Zuul和GateWay区别

getway和zuul没有进行参数调优的时候&#xff0c;getway的性能会远高于zuul。 分析&#xff0c;在空负载的时候&#xff0c;SpringCloud Gateway比zuul 1 性能高50%左右&#xff0c;在模拟处理50ms业务后&#xff0c;&#xff0c;SpringCloud Gateway比zuul 1 性能高9倍左右。 …

嵌入式Qt 开发一个视频播放器

上篇文章&#xff1a;嵌入式 Qt开发一个音乐播放器&#xff0c;使用Qt制作了一个音乐播放器&#xff0c;并在OK3568开发板上进行了运行测试&#xff0c;实际测试效果还不错。 本篇继续来实现一个Qt视频播放器软件&#xff0c;可以实现视频列表的显示与选择播放等&#xff0c;先…

【干货】如何用低代码帮助企业实施OKR?

近年来受疫情的影响&#xff0c;许多企业都开始使用 OKR来进行目标管理。OKR是一套让企业持续保持活力的有效管理工具&#xff0c;能够帮助企业实现目标、激励员工、增加团队凝聚力、减少组织内耗&#xff0c;从而进一步实现创新。但是在实际布局中&#xff0c;很多企业在使用 …