大佬指明方向!使用微服务的最佳实践以及如何避免采用微服务架构可能带来的复杂性陷阱

news2024/11/15 13:54:10

什么是微服务

微服务应用是与单体应用区分开来的.
当一个单体项目随着业务的发展会越来越膨胀,变得更加难维护,从一开始仅需一两个人到需要两三个团队,多个团队维护同一个项目无疑是一场灾难,沟通成本大大增加,技术协同也会十分困难.
举个例子,我在上一家公司维护过一个后台项目,它是一个公共后台,全司上下各个团队都可能用它来看数据,都来维护它.面对这样一个项目,明明我只需要维护十几个类,但每次我都需要在几百上千个类中找到它们.一些配置项,公用组件我想改却改不了,因为就算我的部分测试通过,也不能保证以后在其他业务会不会产生新的问题,而且出了问题有时很难追踪是谁的责任.
单体项目膨胀到一定程度后,就需要拆分了.微服务本质上就是对单体应用的解耦,拆分,从业务,功能上抽象成若干个模块.代码上解耦/独立只是第一步,根据实际需求,微服务架构也可能需要做到数据库独立,团队独立等.

为什么需要微服务

如上,微服务的出现是为了解决单体架构带来的问题.这里再敞开具体聊聊.

  • 复杂性逐渐变高
    比如有的项目有几十万行代码,各个模块之间区别比较模糊,逻辑比较混乱,代码越多复杂性越高,越难解决遇到的问题。
  • 技术债务逐渐上升
    公司的人员流动是再正常不过的事情,有的员工在离职之前,疏于代码质量的自我管束,导致留下来很多坑,由于单体项目代码量庞大的惊人,留下的坑很难被发觉,这就给新来的员工带来很大的烦恼,人员流动越大所留下的坑越多,也就是所谓的技术债务越来越多。
  • 部署速度逐渐变慢
    这个就很好理解了,单体架构模块非常多,代码量非常庞大,导致部署项目所花费的时间越来越多,曾经有的项目启动就要一二十分钟,这是多么恐怖的事情啊,启动几次项目一天的时间就过去了,留给开发者开发的时间就非常少了。
  • 阻碍技术创新
    比如以前的某个项目使用struts2写的,由于各个模块之间有着千丝万缕的联系,代码量大,逻辑不够清楚,如果现在想用spring mvc来重构这个项目将是非常困难的,付出的成本将非常大,所以更多的时候公司不得不硬着头皮继续使用老的struts架构,这就阻碍了技术的创新。
  • 无法按需伸缩
    比如说电影模块是CPU密集型的模块,而订单模块是IO密集型的模块,假如我们要提升订单模块的性能,比如加大内存、增加硬盘,但是由于所有的模块都在一个架构下,因此我们在扩展订单模块的性能时不得不考虑其它模块的因素,因为我们不能因为扩展某个模块的性能而损害其它模块的性能,从而无法按需进行伸缩。

那么微服务应该怎么学习呢,这里分享一份使用微服务的最佳实践。以贯穿整书的示例为出发点,由浅入深地阐述使用微服务的最佳实践,以及如何避免采用微服务架构可能带来的复杂性陷阱。

第1章会介绍微服务架构的整体概念,其中包括对微服务的基本定义。之后会快速浏览本书中所使用的样例程序。

第2章将阐明定义微服务组件的指导原则,并说明这些组件如何成为微服务架构的核心支柱。我们会通过Spring Boot 框架的Java 项目来有效地定义微服务组件,进而解释这些指导原则如何在实际中使用。最后,通过- -个微服务样例来实际演示基于Java的微服务组件如何进行配置和服务发现。

第3章会讨论并论证微服务间有效通信的原则。之后介绍使用不同技术(如使Spring框架本身或消息代理)实现同步和异步通信的选择标准。我们也会讲到常见问题的最佳处理方法。

第4章会讨论使用微服务架构时可能会遇到的常见安全问题和安全挑战。可以通过引入JWT、OpenID 和OAuth 2.0来提高微服务架构的安全性。

第5章首先解释基于微服务的数据模型与传统的数据模型的不同之处以及不同的原因。之后会解释数据技术如何被混合使用,以及针对每个微服务组件如何选择适合的数据管理策略。我们还将探索数据模型,解释不同数据模型的选择策略以及选择理由。

第6章将探讨测试技术在经常变化和自动部署的系统中的重要性。传统的测试方法和测试标准能完美地匹配微服务架构吗?或者说,我们需要探索完全不同的测试方法来适应微服务架构吗?也许两者都需要。

第7章主要着眼于微服务的部署。在微服务架构中,部署操作是非常频繁的,这是要把部署操作变得尽可能无痛点并且易于使用的一一个原因。另外- -个原因是,对自动化的追求和对系统扩展性的期望,会导致经常中断并部署新的微服务。Docker 会帮助我们定义微服务的部署流程,并将其自动化。

第8章将描述将系统演进至微服务架构的主要机制。这--章还会以示例说明如何演进至微服务架构。

第9章会描述监控和扩展基于微服务的系统的重要概念和准则,还会探索监控和扩展基于Java的微服务的实际方法,并给出示例说明如何进行监控和扩展。

第10章会总结在设计和开发微服务架构时的常见问题,并阐述常见的解决方法或最优方案。

本书从微服务架构本身的特征入手,讨论微服务组件的设计指导原则、有效通信的方式以及常见的安全挑战和数据模型的选择;然后进入微服务架构的测试部分,探讨微服务的测试挑战和解决方法、监控和扩展常用的实践以及如何将现有架构演变为微服务架构:最后总结微服务架构在设计和开发方面遇到的常见问题及解决方案。

本书既适合想学习微服务架构的开发人员作为入门参考书,也适合有微服务开发经验的技术人员在实践中遇到问题时作为技术手册,查阅最佳实践和解决方案。

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

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

相关文章

IP地址虚拟网络与虚拟机网络配置

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 IP地址虚拟网络与虚拟机网络配置1. IP地址与子网划分☞IP地址☞特殊IP地址☞IP地址申请☞子网掩码☞子…

spider

大家好 我是Yhen 今天给大家分享一下 如何爬取卡塔尔世界杯球员榜 数据来源:百度体育 https://tiyu.baidu.com/match/%E4%B8%96%E7%95%8C%E6%9D%AF/tab/%E7%90%83%E5%91%98%E6%A6%9C/current/0 文章目录一.需求分析二.思路分析三.代码实战四.源码获取一.需求分析…

强强联合 加速科技“牵手”清华大学达成深度战略合作

近日,清华大学集成电路学院成功采购了加速科技ST2500系列高性能数模混合测试机(浙江省首台套装备)。加速科技“牵手”清华大学,共同推进集成电路自主技术的创新升级,就集成电路学科教学科研、人才培养展开深度合作。 清…

Java Spring后处理器

Java Spring后处理器 在Spring框架中,交给Spring管理的类信息都会被Spring底层自动加载被封装成对应的BeanDefinition对象存储在beanDefinitionMap的Map集合中去,那么除了直接将类信息配置的方式外,还有别的方式可以对想要交给Spring管理的类…

matlab在管理学中的应用简matlab基础【二】

1、MATLAB语言概述 1.1 MATLAB语言的发展 matlab语言是由美国的Clever Moler博士于1980年开发的 MATLAB Matrix Laboratory 它将一个优秀软件的易用性与可靠性、通用性与专业性 、一般目的的应用与高深的科学技术应用有机的结合 MATLAB是一种直译式的高级语言,比…

【安装Ubuntu18.04遇到的问题】未找到WIFI适配器

大家好,我是小政。好久没有更新文章,近期开始陆续分享一些研究生阶段正在学习的知识和遇到的一些问题。 联想拯救者Y9000P关于安装Ubuntu未找到WIFI适配器的解决方法1.Ubuntu18.042.网卡信息3.解决方法(1)用手机USB连接电脑提供网…

如何判断对象是否该被回收(引用计数法、可达性分析算法)

👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: JVM 🌈 算法类型:Hot100题 &#x1f30…

计算机的应用领域

文章目录计算机的应用领域1、商业2、银行业3、保险行业4、教育行业5、市场营销6、卫生保健7、工程设计8、军事9、通讯10、政府计算机的应用领域 本节,我将带领您了解计算机在各个领域的应用。 1、商业 计算机的功能丰富,极高的计算能力,计…

sqli-labs/Less-56

这一关的欢迎界面提示我们还是以id作为注入点 我们仍然有14次尝试机会 首先我们还是先来判断一下是否属于数字型注入 输入如下 id1 and 12 回显如下 正确回显 属于字符型 接着输入1 查看回显 这个回显说明两件事情 一个是我们后面不能使用报错注入进行注入了 一个是我们这个…

Elasticsearch:使用反向地理编码在地图上显示自定义区域统计数据

在实际的许多应用中,我们可能并不一定按照行政区来进行划分区域,比如我们常说江浙一代,我们可以理解江苏和浙江这两个省合在一起,而不是把它们分开。我们有时也说长江三角区,它可能是跨几个省市的一个区域,…

每隔一段时间自动敲键盘的的vbs脚本

1. 上代码 set wscreateobject("wscript.shell") do ws.sendkeys "{TAB}" WScript.Sleep Int(6 *Rnd1)*1000 loop2. 代码解释 每隔1~6秒,按一次TAB键 2.1 循环执行操作代码 do ....操作..... loop2.2 按下Tab键 ws.sendkeys "{TAB}" 即…

HTML5期末大作业商城网页设计与实:(手表 3页)HTML+CSS

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 在线商城购物 | 水果商城 | 商城系统建设 | 多平台移动商城 | H5微商城购物商城项目 | HTML期末大学生网页设计作业 HTML:结构 CSS&#…

python中字典的循环遍历的方式

python开发中经常会用到对于字典、列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式。 注意: python2和python3中,下面两种方法都是通用的。 1、只…

两种数据提取框架的比较(scrapy和webmagic)

背景: 最近北京疫情有点严重,状态是居家办公,又是买菜做饭又是核酸检测心情是无比的烦躁还总是会议,无需发言的会议就边听边写写csdn记录一下。这几天在用Java写一个数据抓取的程序,用于数据分析等等。第一是因为原项目…

十二、虚拟 DOM 和 render() 函数(2)

本章概要 用普通 JavaScript 代替模板功能 v-if 和 v-forv-modelv-on事件和按键修饰符插槽 JSX实例:帖子列表 12.3 用普通 JavaScript 代替模板功能 原先在模板中可以使用的一些功能在 render() 函数中没有再提供,需要自己编写 JavaScript 代码来实现…

docker-Cgroups的资源限制

一、Cgroup的介绍 cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespace 隔离起来的资源,还可以 为资源设置权重、计算使用量、操控进程启停等等。所以cgroups (Control groups) 实现了对资源的配额和度量。 cpu时间片的概念 …

atoi函数的介绍和模拟实现

今天我来介绍atoi函数和模拟实现atoi函数。 目录atoi和与其功能相似的函数的介绍atoi函数的模拟实现atoi和与其功能相似的函数的介绍 atoi函数是一个将字符串转换为整数值的函数。 由msdn查询可以得知,atoi函数的返回类型是int类型,参数类型是const ch…

用于不同功率的模块式TEC半导体致冷器超高精度温度控制装置

摘要:针对目前TEC半导体制冷器温控装置对高精度、模块化、可编程和远程控制等方面的技术需求,本文提出了一种高性价比的解决方案。解决方案的具体内容是采用模块式结构,以24位AD和16位DA超高精度PID控制器作为基础单元,采用分立模…

不调参,免训练,VisionBank AI OCR新功能升级上线!

应用背景 OCR字符识别,是指对部件或产品上刻印的字符进行确认、辨别、判定的检测识别。此项技术目前已广泛应用于工业自动化生产的产品质量管理环节当中,企业通过为机器视觉检测设备安装OCR系统,快速完成对产品生产日期、保质期、生产批号、…

红色荧光TAMRA alkyne 5-isomer,945928-17-6,5四甲基罗丹明-炔基

TAMRA alkyne,5-isomer反应原理: 红色荧光四甲基罗丹明炔烃可通过铜催化的点击反应与叠氮化合物反应。点击化学的代表反应为铜催化的叠氮-炔基Husigen环加成反应(Copper-Catalyzed Azide–Alkyne Cycloaddition)。点击化学的概念对化学合成领…