首页 > 其他分享 >为什么要使用微服务架构?

为什么要使用微服务架构?

时间:2024-05-09 14:12:46浏览次数:14  
标签:为什么 服务 代码 单体 功能模块 应用程序 架构

一、传统的单体架构

1、什么是单体架构?

单体架构(Monolithic Architecture)是一种传统的软件架构模式,将整个应用程序作为一个单一的、统一的单元进行开发、部署和扩展。在单体架构中,所有的功能模块都被打包在一起,共享同一个代码库和数据库。

 

2、单体架构的缺点

  • 复杂性高

一个大型的项目可能包含的模块功能非常多,而模块之间的边界比较模糊,依赖关系不是很清晰,代码质量参差不齐,修改一个bug容易造成另一个隐藏的bug。

  • 可扩展性差

只能整体扩展,不能按业务模块的特点进行扩展。比如:当我们发现某一个功能模块的请求压力非常大时,想单独对这个功能做服务节点的扩展,对于单体架构来说是做不到的,只能整个系统做负载均衡。

  • 维护困难

随着应用程序的功能模块越来越多,代码库也会变得越发庞大和复杂,会导致新人学习周期拉长。

  • 技术栈受限制

整个系统只能使用单一的技术栈,无法针对业务模块的特点使用不同的技术栈。

  • 可靠性差

一个功能点的bug可能会导致整个应用程序的崩溃。

二、微服务架构

1、什么是微服务?

微服务架构是将整个大型复杂的应用程序拆分成若干个微小的服务,将系统各功能模块分配到各个微服务中,从而降低系统的耦合度,服务之间的通讯通常采用RPC协议或http协议。

 

2、微服务架构的优点

  • 易于开发和维护

每一个微服务都是独立部署的“小系统”,开发人员只需要关注这个服务自己功能模块的代码,所以代码量和功能相对小很多,开发理解相对也会简单一些,团队成员接手也会容易很多。

  • 服务启动速度快

单个微服务的代码量相对小很多,所以启动速度会快一些。

  • 按需伸缩

当我们发现某个服务的请求压力过大(较小)时,我们只需要对这个服务增加(减少)节点即可。

  • 稳定性更强

如果微服务应用崩溃了,一般情况下不会导致整个应用系统的宕机。

  • 技术栈不受限制

每个微服务可以选择合适的技术栈,不用局限于单一特定的技术体系。

3、微服务架构带来的问题

  • 部署节点变多,管理困难

随着拆分的服务数量越来越多,用传统的方式部署和管理配置会变得麻烦。

  • 分布式事务一致性问题

微服务之间的调用会存在数据一致性问题,需要引入分布式事务解决方案来处理。

  • 调用链路变长,问题追踪定位困难

一个微服务的数据如果依赖于其他服务,如果出现问题,如何定位找到问题的根源所在是相对比较困难的。

4、微服务框架

我们的项目要使用微服务架构模式的开发方式,那么就需要有一个微服务的框架来解决这些问题。推荐一个最接地气的.NET微服务框架Wing,项目地址:

gitee:https://gitee.com/linguicheng/Wing

github:https://github.com/linguicheng/Wing

标签:为什么,服务,代码,单体,功能模块,应用程序,架构
From: https://www.cnblogs.com/linguicheng/p/18182021

相关文章

  • Flink架构与原理
    Flink集群运行剖析Flink运行时由两种类型的进程组成:一个 JobManager 和一个或者多个 TaskManager。Client:Client是提交作业的客户端,虽然不是运行时和作业执行时的一部分,但它负责准备和提交作业到JobManager,它可以运行在任何机器上,只要与JobManager环境连通即可。JobManager......
  • 在云打印服务平台上打印资料有什么优势?
    随着移动互联网和电子商务的发展,现在有越来越多的用户选择在网上购物。而对于学生们来说,现在也有越来越多的同学们开始去网上打印。而云打印的出现,让这些网上打印资料的学生选择了云打印服务。那么在云打印服务平台上打印资料有什么优势?今天小易就带大家来了解一下。 在云打......
  • Qt开发websocket服务
     Qt自带的有网络编程模块,需要再pro文件加上 websockets#pro文件QT+=coreguiwebsockets .h#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QWebSocketServer>#include<QWebSocket>#include<QDebug>QT_BEGIN_NAMESPACEna......
  • MQTT服务器连接不上的问题
    问题描述环境:阿里云服务器Ubuntu22.04.3LTS,安装mosquitto后,在虚拟机端订阅消息出现报错(以前用阿里云Ubuntu20.04LTS的服务器装上就能用),以下服务器ip是我乱填的mosquitto_sub-t/iotstuff-h129.25.125.124-p1883Error:Connectionrefused解决办法云服务器ECS->安......
  • 类为什么要实例化
    类的实例化(见名知意)​ 引言:我们都知道不管是什么编程语言创建一个“类”都要进行实例化,但是网上解释五花八门,各种高大上的解释让初学者看了头疼,这次我就通过Python语言通过自己的简单解释来让大家了解为什么要对类进行实例化。1、网上随便找的一篇对类的解释举例​ 类是一组......
  • websocket-sharp:.NET平台上的WebSocket客户端与服务器开源库
    1.简介:websocket-sharp提供WebSocket客户端和服务器库,基于C#开发的,并遵循WebSocket协议规范,使得开发人员能够轻松地在.NET应用程序中实现WebSocket通信。https://github.com/sta/websocket-sharpwebsocket-sharp特色功能有:1、简洁易用的API:提供清晰且直观的API接......
  • 服务器分层拓扑架构图形化显示工具
    目录服务器分层拓扑架构图形化显示工具---HWLOC下载依赖包安装源码编译安装执行命令示例显示PCI层次结构参考文档服务器分层拓扑架构图形化显示工具---HWLOC 可移植硬件局部(hwloc)软件包提供了现代架构分层拓扑的可移植抽象(跨操作系统、版本、体系结构等),包括NUMA内......
  • OpenFeign 定义后备工厂进行服务降级
    OpenFeign定义后备工厂进行服务降级可以使得远程接口调用失败时进行降级处理,而不会直接报错,影响后续代码逻辑。定义后备工厂的步骤如下:远程接口处定义。@FeignClient(value=ServiceConstants.SYSTEM,fallbackFactory=RemoteFileFallbackFactory.class)publicinterface......
  • 研究微服务,得出我的大服务架构
    之前一个完整的系统,整个系统是一个整体一个数据源=一个数据库实例下,一个数据库;一切思路很简单,没有什么问题;事务也是在同一个数据库里,外键事务这些都很简单;微服务时代要求拆分,假如顺应微服务时代的思路来拆分可以看到挺复杂的,我这只是举个例子,实际上服务的拆分,并不一定要......
  • 微服务Spring Cloud17_Feign9
    在前面的学习中,使用了Ribbon的负载均衡功能,大大简化了远程调用时的代码:如果就学到这里,你可能以后需要编写类似的大量重复代码,格式基本相同,无非参数不一样。有没有更优雅的方式,来对这些代码再次优化呢?这就是接下来要学的Feign的功能了。 一、简介Feign也叫伪装:Feign可以把Re......