《小白学微服务》之,什么是微服务

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,182元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 我们要聊微服务的话,就不得不说系统架构设计的三个阶段了单体集中式架构分布式架构微服务架构


一、单体集中式架构


把所有的功能、模块都集中到一个项目中,部署在一台服务器上,从而对外提供服务(单体架构、单体服务、单体应用)。

直白一点:就是只有一个项目,只有一个war。


image.png


这样做的好处就是在系统规模比较小的情况下工作情况良好,而且部署也是相对简单;但是随着系统规模的扩大,它暴露出来的问题也越来越多,主要有以下几点:


1.复杂性逐渐变高


比如有的项目有几十万行代码,各个模块之间区别比较模糊,逻辑比较混乱,代码越多复杂性越高,越难解决遇到的问题。


2.技术债务逐渐上升


公司的人员流动是再正常不过的事情,有的员工在离职之前,疏于代码质量的自我管束,导致留下来很多坑,由于单体项目代码量庞大的惊人,留下的坑很难被发觉,这就给新来的员工带来很大的烦恼,人员流动越大所留下的坑越多,也就是所谓的技术债务越来越多。


3.部署速度逐渐变慢


这个就很好理解了,单体架构模块非常多,代码量非常庞大,导致部署项目所花费的时间越来越多,曾经有的项目启动就要一二十分钟,这是多么恐怖的事情啊,启动几次项目一天的时间就过去了,留给开发者开发的时间就非常少了。


4.碍技术创新


比如以前的某个项目使用struts2写的,由于各个模块之间有着千丝万缕的联系,代码量大,逻辑不够清楚,如果现在想用spring mvc来重构这个项目将是非常困难的,付出的成本将非常大,所以更多的时候公司不得不硬着头皮继续使用老的struts架构,这就阻碍了技术的创新。


5.无法按需伸缩


比如说电影模块是CPU密集型的模块,而订单模块是IO密集型的模块,假如我们要提升订单模块的性能,比如加大内存、增加硬盘,但是由于所有的模块都在一个架构下,因此我们在扩展订单模块的性能时不得不考虑其它模块的因素,因为我们不能因为扩展某个模块的性能而损害其它模块的性能,从而无法按需进行伸缩。


这些缺点加起来就不得不让我们去试着优化这种架构了,那就是将单体系统按功能按模块拆分(分布式微服务架构)。


二、分布式架构


把所有的功能、模块拆分成不同的子项目,部署在多台不同的服务器上,这些子项目相互协作共同对外提供服务。


直白一点:就是有很多项目,有很多war包,这些项目相互协作完成需要的功能,不是一个war能完成的,一个war包完成不了。


image.png


分布式系统可以解决传统单体是架构的诸多问题,主要优势有以下几个点:


  1. 增大系统容量


垂直或是水平拆分业务系统,让其变成一个分布式的架构


2.加强系统可用


通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性


3.模块重用度高


软件服务模块被拆分,开发和发布速度可以并行而变得更快


4.系统扩展性更高


5.团队协作流程改善


他能很好的解决大规模并发情况下的流量处理问题,因为分布式架构是将多个功能分散部署到不同的服务器上这样就可以通过集群技术把大规模并发请求的负载分散到不同的机器上,以减轻单个系统承受的压力(负载均衡)。


如果分布式系统用到了集群技术的话,还可以大大的提高系统的可用性,当一个集群部署的分布式系统中有一个系统宕机出现问题时则会有其他相同功能的系统来代替它进行工作,从而保证系统的高可用性。


那么有了分布式系统,为什么还会出现微服务系统架构呢!


三、微服务架构


微服务一词源于2012年,于2014年因 Martin Fowler(马丁.福勒)的名为 Microservices 的博文而广为流行, 可以在他的官方博客上找到这篇文章:


http://martinfowler.com/articles/microservices.html


中文翻译版本(本人英文不好,嘿!这篇翻译版强烈推荐):


http://blog.cuicc.com/blog/2015/07/22/microservices/#


简单地说, 微服务是系统架构上的一种设计风格, 它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于 HTTP(dubbo -->dubbo协议 ) 的 RESTful API (controller --> 调用 congtroller)进行通信协作。


被拆分后的每一个小型服务都专注于完成系统中的某一项业务功能,职责单一, 并且每个服务都是一个独立的项目,可以进行独立的测试、开发和部署等。


由于各个独立的服务之间使用的是基于 HTTP 的 JSON 作为数据通信协作的基础,所以这些微服务也可以使用不同的语言来开发。


微服务的经典演变图,出自马丁.福勒的博文。


image.png


微服务架构在设计上遵循以下几个原则:


  • 单一职责原则


每个微服务只需要实现自己的业务逻辑就可以了,比如订单管理模块,它只需要处理订单的业务逻辑就可以了,其它的不必考虑。


  • 服务自治原则


每个微服务从开发、测试、运维等都是独立的,包括存储的数据库也都是独立的,自己就有一套完整的流程,我们完全可以把它当成一个项目来对待。不必依赖于其它模块。


  • 轻量级通信原则


首先是通信的语言非常的轻量,第二,该通信方式需要是跨语言、跨平台的,之所以要跨平台、跨语言就是为了让每个微服务都有足够的独立性,可以不受技术的钳制。


  • 接口明确原则


由于微服务之间可能存在着调用关系,为了尽量避免以后由于某个微服务的接口变化而导致其它微服务都做调整,在设计之初就要考虑到所有情况,让接口尽量做的更通用,更灵活,从而尽量避免其它模块也做调整。


四、分布式与微服务的区别


从概念理解,分布式服务架构强调的是服务化以及服务的分散化,微服务则更强调服务的专业化和精细分工。


从实践的角度来看,微服务架构通常是分布式服务架构,反之则未必成立。


所以,选择微服务通常意味着需要解决分布式架构的各种难题。


分布式的模块拆分是根据不同业务模块进行拆分并且部署道不同的机器上,各个业务模块之间通过接口进行数据交互。而微服务的拆分则注重功能及耦合度,并且微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。


分布式架构:重在资源共享与加快计算机计算速度(分散压力)


微服务架构:重在解耦合,使每个模块都独立(分散能力)


好了,今天的内容到这里就结束了,关注我,我们下期见


目录
相关文章
|
Java PHP C++
使用moviepy生成视频时,提示找不到ImageMagick
使用moviepy生成视频时,提示找不到ImageMagick
734 0
使用moviepy生成视频时,提示找不到ImageMagick
|
机器学习/深度学习 算法
区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归时间序列区间预测
区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归时间序列区间预测
|
关系型数据库 MySQL Java
对比下 datax 的 OceanBase/MYSQL 不同数据同步方案的效率差异 || 聊聊参数 rewriteBatchedStatements
对比下 datax 的 OceanBase/MYSQL 不同数据同步方案的效率差异 || 聊聊参数 rewriteBatchedStatements
|
消息中间件 Serverless Kafka
基于 EventBridge 轻松搭建消息集成应用
基于 EventBridge 轻松搭建消息集成应用
22310 71
|
监控 物联网
低功耗广域网(LPWAN)技术概述
【6月更文挑战第1天】LPWAN是物联网的关键技术,专为低功耗、远距离和大容量连接设计。它功耗低,传输距离远,支持大量设备连接,广泛应用在智能抄表、农业和物流等领域。尽管面临标准兼容性和网络覆盖挑战,但随着技术进步,LPWAN将在未来持续推动物联网发展,创造更多可能性。
525 3
|
运维 供应链 安全
SaaS模式云HIS数字化医院信息系统源码
云HIS具有可扩展、易共享、易协同、低成本、体验号、更便捷、易维护的优势,重新定义了数字化医院信息系统,实现数字化医院信息系统的转型升级。云 HIS 系统具有功能完善,涵盖临床各业务部门,采集、抽提、汇总、存贮、展现所有的临床诊疗资料(包括:数据、文本、图形、图像、声音等),是医疗机构实现临床信息化的理想信息平台。
271 1
|
编解码 图计算 iOS开发
iPhone手机屏幕尺寸与倍图计算公式(更新至iPhone 14 Plus)
iPhone手机屏幕尺寸与倍图计算公式(更新至iPhone 14 Plus)
699 0
|
传感器 人工智能 监控
智慧工地管理平台+智慧工地app源码
以施工现场风险预知和联动预控为目标,将智能AI、传感技术、人像识别、监控、虚拟现实、物联网、5G、大数据、互联网等新一代科技信息技术植入到建筑、机械、人员穿戴设施、场地进出关口等各类设备中,实现工程管理与工程施工现场的整合,并构建成为一个完整的智慧工地管理系统,实现对工地现场的“人、机、物、环、危、事”等信息数据进行实时采集分析处理,并可对危险事件进行智能预警和联动管控集成管理,从而有效提升施工现场的风险感知、风险预控、信息共享能力。 另外通过智慧工地app提高工程各干系组织和岗位人员之间的交互的效率、灵活性和响应速度。工程各干系组织还可通过智慧工地app可实现对施工现场的移动管理。
233 0
智慧工地管理平台+智慧工地app源码
|
存储 搜索推荐 程序员
配置Picgo图床之COS、OSS、Github图床
配置Picgo图床之COS、OSS、Github图床