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

· 浏览次数 : 0

小编点评

**单体架构** * 单元化开发:将整个应用程序作为一个单一的、统一的单元进行开发、部署和扩展。 * 模块化代码:所有功能模块都被打包在一起,共享同一个代码库和数据库。 * 可扩展性差:只能整体扩展,不能按业务模块的特点进行扩展。 * 技术栈受限制:整个系统只能使用单一的技术栈,无法针对业务模块的特点使用不同的技术栈。 * 可维护性差:随着应用程序的功能模块越来越多,代码库也会变得越发庞大和复杂,会导致新人学习周期拉长。 **微服务架构** * 分割应用程序:将整个大型复杂的应用程序拆分成若干个微小的服务。 * 降低耦合度:服务之间的通讯通常采用RPC协议或http协议。 * 提升开发效率:开发人员只需要关注这个服务自己功能模块的代码,所以代码量和功能相对小很多。 * 提升维护性:服务启动速度快,按需伸缩。 * 提升分布式一致性:微服务之间的调用会存在数据一致性问题,需要引入分布式事务解决方案来处理。 * 提高可维护性:如果微服务应用崩溃了,一般情况下不会导致整个应用系统的宕机。

正文

一、传统的单体架构

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

与为什么要使用微服务架构?相似的内容:

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

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

nginx中一个请求匹配到多个location时的优先级问题,马失前蹄了

背景 为什么讲这么小的一个问题呢?因为今天在进行系统上线的时候遇到了这个问题。 这次的上线动作还是比较大的,由于组织架构拆分,某个接入层服务需要在两个部门各自独立部署,以避免频繁的跨部门沟通,提升该接入层服务的变更效率。 该接入层服务之前是使用cookie + 内存session机制的,这次要独立部

HTTPS基础原理和配置-2

〇、概述 作为概述,以下是本文要讲的内容。HTTPS 是什么? 每个人都可能从浏览器上认出 HTTPS,并对它有好感。然后再讲一遍基础知识,再详细讲一下协议版本,密码套件(Cipher Suites),本文的重点会落在如何配置 NGINX,让你的网站使用 HTTPS 服务。 除此之外,还有一个使用

为什么 java 容器推荐使用 ExitOnOutOfMemoryError 而非 HeapDumpOnOutOfMemoryError ?

前言 好久没写文章了, 今天之所以突然心血来潮, 是因为昨天出现了这样一个情况: 我们公司的某个手机APP后端的用户(customer)微服务出现内存泄露, 导致OutOfMemoryError, 但是因为经过我们精心优化的openjdk容器参数, 这次故障对用户完全无感知. :muscle::mu

[转帖]史上坑最少的openVPN搭建

https://www.rrfed.com/2017/09/26/openvpn/ 为什么要搭建vpn 单独购买vpn服务器的成本比较高,可以在公司现有的服务器上搭建vpn服务 可以在任何有网络的地方访问到公司资源,比使用跳板机和高端口访问要安全 爱折腾的小伙伴可以搭建vpn来满足自己的技术需求 选

Linux内存不够了?看看如何开启虚拟内存增加内存使用量

1、为什么要使用虚拟内存 当我们没有多余的钱去购买大内存的云服务器时,但是当前服务器里面的软件和程序运行的比较多导致内存不够用了。这个时候可以通过增加虚拟内存来扩大内存容量。但是在启用虚拟内存时,需要仔细考虑系统的实际需求和硬件配置,以及权衡虚拟内存的优缺点,考虑好利弊后在开启虚拟内存。 2、什么是

Angular项目简单使用拦截器 httpClient 请求响应处理

1:为啥要使用拦截器 httpClient 请求响应处理,其作用我们主要是: 目前我的Angular版本是Angular 17.3,版本中实现请求和响应的拦截处理了。这种机制非常适合添加如身份验证头、错误统一处理、日志记录等功能。 具体的操作步骤 2:注入服务:ng g s services/myh

如何将使用中的域名平滑迁移到京东云?(以原域名注册、域名解析都在万网为例)

首先要了解的是,1、域名注册 2、域名解析,是两个独立的产品。一般情况下,域名服务商(万网、新网等)会提供一站式服务,既提供“域名购买注册”,又提供“域名解析服务”。 但实际上,域名和域名解析是可以分开部署的,域名服务商也支持相关的分离设置。比如:域名在万网进行管理,域名解析可以指向其他域名服务商的NS服务器。更进一步,域名也可以从原域名服务商(万网),迁移到新的域名服务商(新网)。

基于Python的性能分析

1、什么是性能分析 字面意思就是对程序的性能,从用户角度出发就是运行的速度,占用的内存。 通过对以上情况的分析,来决定程序的哪部份能被优化。提高程序的速度以及内存的使用效率。 首先我们要弄清楚造成时间方面性能低的原因有哪些 沉重的I/O操作,比如读取分析大文件,长时间执行数据库查询,调用外部服务例如

实战分享 | 金融数据采集报送平台实践

本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 大数据时代,数据在企业的日常经营中无处不在,各类数据的汇总、整合、分析、研究对企业的决策和发展有着至关重要的作用。企业要进行数字化转型,本质是强化对数据的使用,包含数据