什么是单体应用?什么是微服务?

news2024/10/9 0:41:21

Monolith(单体应用), 也称之为单体系统或者是 单体架构 。就是一种把系统中所有的功能、模块、组件等耦合在一个应用中应用最终打成一个(war,jar)包使用一个容器(Tomcat)进行部署,通常一个应用享用一个数据库。
也就是将所有的代码及功能都包含在一个WAR包中的项目组织方式。它的组成就是由 多个模块(所有资源)打成一个war包,运行在一个服务器上,也就是 一个进程去运行。典型的就是用SSM框架做的web项目,部署在tomact服务器上。

在单体应用中我们通常把应用分为三个组成部分:持久层,业务层,表现层.

单体应用在数据量,并发量到一定程度的时候一定会遇到瓶颈.
缺点:

  • 对于高并发、大数据量 ,处理不占优势
  • 开发时间越长,代码越多,项目越臃肿,杂乱无章
  • 模块与模块,业务与业务耦合高 :比如一个模块挂了,其他模块也挂,一个模块升级,其他模块也要重启
  • 技术选型单一,数据库选型单一
  • 项目体积庞大的时候,会造成,编译慢,项目打包等也慢。
  • 二次开发,维护难
  • 新的程序员对项目需要花很长时间去熟悉,成本高。
  • 不方便局部拓展,只能整体做集群

优点:

  • 项目初期,项目的搭建,开发都比较快

  • 技术成本低,对程序员的要求相对低 , 开发成本较低

  • 项目的部署相对简单 - 就一个tomcat

MicroService(微服务)架构, 是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。由一个或多个微服务组成。
那什么是微服务(分布式)?就是 将一个大的应用拆分成多个小的应用(微服务),这些小的应用相对独立,每个小的应用都有自己的容器(Tomcat),有自己的运行进程,这些小的应用通过网络协议(HTTP Rest)进行相互通信,所有的应用一起工作完成整个项目的业务。
每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。
系统中的各个微服务可被技术选项,独立开发,独立部署,独立运维,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
优点:

  • 方便局部扩展,团队协作方便
  • 技术选型多样化
  • 单个微服务的复杂性低,一个微服务就干一件事
  • 单个微服务容易开发和维护
  • 服务和服务之间相对松耦合
  • 数据库选型多样化(分库)
  • 当项目规模大,微服务整体来说性能好。。。

缺点:

  • 微服务之间数据交互速度受网络影响
  • 技术成本高
  • 开发成本高,如分布式事务处理
  • 整个项目总体来看,比较复杂
  • 微服务的部署比较麻烦

这里给出一张图片,便于理解单体应用和微服务的区别:

 

上面说到技术成本高,那么需要 那些技术栈来实现微服务呢?
一个微服务架构设计需要以下内容:

  1. 服务治理
  2. 服务注册
  3. 服务调用
  4. 服务负载均衡
  5. 服务监控
  6. 服务开发。。。

以上这些都有不同的技术去实现,比如:
服务治理:有阿里的dubbo,
服务注册:有ZooKeeper,Eureka
服务调用:有Rest、RPC,
服务开发:用SpringBoot、Spring、SpringMVC,
服务配置与管理有:阿里的Diamond
服务熔断器有:Hystrix、Envoy
服务负载均衡有: Ribbon、Nginx
服务接口调用(客户端调用服务的简化工具): Ribbon、 Feign
服务配置中心管理有:S pringCloudConfig、Chef
服务路由有(API网关): Zuul
服务监控有: Zabbix、Nagios、Metrics、Spectator
消息队列有: Kafka、RabbitMQ、ActiveMQ
全链路追踪有: Zipkin,Brave、Dapper
服务部署有: Docker、OpenStack、Kubernetes
数据流操作开发包有: SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息)
事件消息总线有: Spring Cloud Bus
而目前较成熟的微服务架构就是阿里的dubbo以及Spring中的SpringCloud。这也是我们需要学习的。
微服务设计几大原则
1) AKF 拆分原则

2) 前后端分离原则
前后端技术分离,可以由各自的专家来对各自的领域进行优化,这样前端的用户体验优化效果更好。
分离模式下,前后端交互界面更清晰,就剩下了接口模型,后端的接口简洁明了,更容易维护。
前端多渠道集成场景更容易实现,后端服务无需变更,采用统一的数据和模型,可以支持多个前端:例如:微信 h5 前端、PC 前端、安卓前端、IOS 前端。
3) 无状态服务
4) 基于RestFul 的通信风格
无状态协议 HTTP,具备先天优势,扩展能力很强。例如需要安全加密,有现成的成熟方案 HTTPS 即可。
JSON 报文序列化,轻量简单,人与机器均可读,学习成本低,搜索引擎友好。
语言无关,各大热门语言都提供成熟的 Restful API 框架,相对其他的一些RPC 框架生态更完善。
微服务远程调用方式
1.RPC:
Remote Produce Call远程过程调用,是一个计算机通信协议。类似的还有RMI。 自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型。
该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。说得通俗一点就是:A计算机提供一个服务,B计算机可以像调用本地服务那样调用A计算机的服务。
两个程序进行通讯,必须约定好数据传输格式。就好比两个人聊天,要用同一种语言,否则无法沟通。所以,我们必须定义好请求和响应的格式。另外,数据在网路中传输需要进行序列化,所以还需要约定统一的序列化的方式。

 2.Http:
http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议。也可以用来进行远程服务调用。缺点是消息封装臃肿。
现在热门的Rest风格,就可以通过http协议来实现。
MVC、RPC、SOA、微服务架构之间的区别
1 MVC 架构
MVC 架构已经很熟悉了,就是一个单体架构。
代表技术:Struts2、SpringMVC、Spring、Mybatis 等。
2 RPC 架构
RPC(Remote Procedure Call):远程过程调用。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。   服务与服务之间隔离的,都是通过应用来触发。
代表技术:Thrift、Hessian 等。
3 SOA 架构
SOA(Service oriented Architecture):面向服务架构
ESB(Enterparise Servce Bus):企业服务总线,服务中介。主要是提供了一个服务与服务之间的交互。
ESB 包含的功能如:负载均衡,流量控制,加密处理,服务的监控,异常处理,监控告急等。
代表技术:Mule、WSO2
4 微服务架构
微服务就是一个轻量级的服务治理方案。
代表技术:SpringCloud、dubbo 等

 

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

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

相关文章

Java版数据结构与算法笔记

文章目录一、数据结构与算法概述及题目1、数据结构和算法的关系2、线性结构与非线性结构Ⅰ-线性结构Ⅱ-非线性结构3、经典面试题Ⅰ-字符串匹配问题:Ⅱ-汉诺塔游戏Ⅲ-八皇后问题:Ⅳ-马踏棋盘算法4、几个实际编程中遇到的问题Ⅰ-字符串替换问题Ⅱ-一个五子棋程序Ⅲ-约…

这家芯片企业,从创立之初就用 Authing 管理身份

在德州仪器和苹果的经验,让我深知统一身份管理要从 Day 1 做起。——Alpha Cen 联合创始人 & CEO 王璠 案例亮点: 打通 2000 主流应用、满足芯片初创企业统一身份需求 一周快速上线,产品开箱即用,后续无需费力运维 基于协同…

Pytorch安装及环境配置详细教程(CUDA版本)

文章目录前言一、查看GPU支持的CUDA版本二、安装CUDA三、确定torch、torchvision和python版本四、安装anaconda五、安装torch和torchvision前言 安装cuda版本的pytorch时踩了不少坑,网上安装pytorch的版本很多,一般的教程都是到pytorch的官网&#xff0…

相比传统专线网络,爱快、飞连等主流SD-WAN方案好在哪里?

当企业发展至一定的规模后,移动办公、异地办公会逐渐成为刚需,这就对企业的网络架构提出了新的挑战。 一般来说,企业在发展中所遇到的这些新增的网络需求,有两种比较常见的解决方案,其中之一是专线连接 。专线虽然简单…

【Unity3D插件】Build Report Tool插件,Build报告,优化包体,查看资源占用

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 本篇文章介绍一下Build Report Tool插件的使用。 Build Repor…

在Visual Studio中调试Linux控制台程序

最近,Visual Studio 2022 17.5 预览版3 面向广大 Linux 开发者提供了一项新特性:在 Visual Studio 集成的终端中调试 C Linux 控制台程序。 如需了解更多关于集成终端的功能以及它在 Visual Studio 中的工作原理,请参考我们之前的一篇文章: I…

Linux系统安装Hadoop步骤详解

一、 安装新的虚拟机。 配置根据电脑内存自由处理,一般来说,虚拟机内存设为电脑内存一半 二、打开虚拟机,设置语言,时区,硬盘分区,密码,用户等 三、修改ip地址,连接xshell 3.1关闭…

Acer传奇Go电脑开机几分钟就会蓝屏怎么重装系统?

Acer传奇Go电脑开机几分钟就会蓝屏怎么重装系统?有用户使用的Acer传奇Go电脑出现了一些系统故障,电脑正常开机使用几分钟之后,马上就会出现蓝屏的情况,导致无法正常的使用。那么这个情况如何去重装系统呢?来看看以下的…

在产业互联网时代,以生态和边界为代表的有限市场的瓜分业已完成

在这样一个过程中,阿里们更多地思考的是,如何与产业结合,而非独立于产业之外,仅仅只是做一个旁观者和第三方。无论是它们投身到物流、制造、能源化工等行业之中,还是它们对这些产业的传统玩家们深度赋能,几…

第三章 TCG 规范解读【嵌入式工作组】【工业工作组】

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…

Elasticsearch:彻底理解 Elasticsearch 数据操作

Elasticsearch 中有四种基本的数据操作。 每个操作都有自己的资源需求。每个用例都使用这些操作,但它们会优先于某些操作。 Index:在这里被用做动词,而不是其名词索引。处理文档并将其存储在索引中以供将来检索。Delete:从索引中…

【攻防世界】easyphp

废话不多说,打开环境就是一大段的php代码,对于我一个小白来说,还是难阿!只能一点点琢磨构造payload的思路,当然也是在网上参考了别人的wp。记录下来也为了加深自己的印象,有事没事都能翻一翻,温…

快速入门OAuth2

1. 什么是OAuth2.0OAuth2.0是目前使用非常广泛的授权机制,用于授权第三方应用获取用户的数据。举例说明:用户可以通过选择其他登录方式来使用gitee,这里就使用到了第三方认证。来自RFC 6749OAuth 引入了一个授权层,用来分离两种不…

2023年Verasity路线图深度分析

Verasity最近发布了迄今为止最详细和雄心勃勃的2023年路线图之一。它主要集中在VeraViews的商业目标,以及VeraCard的推出,它充满了产品更新和令人兴奋的新功能,既为我们的企业对企业(B2B)产品,也为你&#…

解决PowerShell或vscode无法启动yarn的问题

问题现象:在PowerShell中启动yarn时报错:yarn : 无法加载文件 C:\Users\{{username}}\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅https:/go.microsoft.com/fwlink/?LinkID135170 中的 about…

DL@starter@Perceptron感知机@简单神经网络

文章目录感知机简单感知机基础形式偏置值形式逻辑门感知机机器学习的任务(单层)感知机的局限线性和非线性多层感知机从与非门到计算机小结从感知机到神经网络激活函数🎈非线性激活函数step 函数阶跃函数的实现(numpy)sigmoid functionsigmoid函数sigmoid 函数和阶跃…

PHP前后分离接口加密探讨( AES+RSA )

参考文章: php之RSA加密解密_小吴-斌的博客-CSDN博客_php rsa加密 RSA和AES的区别_LC超人在良家的博客-CSDN博客_aes rsa PHP实现非对称加密的方法 | 私钥及公钥加密解密的方法_php 公钥 私钥_LordForce的博客-CSDN博客 RSA非对称加密 特点: 只需交换公钥&…

2、python框架Unitter轻量级框架

类与对象定义 面向过程与面向对象 面向过程编程: 根据操作数据的函数或语句块来设计程序的。 面向对象编程: 数据和功能结合起来,用称为对象的东西包裹起来组织程序的方法; 在大多数时候你可以使用面向过程编程,…

Hudi系列11:Flink CDC 将MySQL的数据写入Hudi

文章目录一. 下载依赖包二. 源端数据准备三. 使用Flink cdc mysql连接器创建flinkSQL映射表四. 创建FlinkSQL Hudi连接器创建hudi表五. 将数据从CDC表插入hudi表六. 测试增删改参考:一. 下载依赖包 将 flink-sql-connector-mysql-cdc-2.2.1.jar 下载后,上传到$FLIN…

动手深度学习-欠拟合和过拟合

目录训练误差和泛化误差K-折交叉验证欠拟合和过拟合模型复杂性数据集大小权重衰减权重衰减简洁实现暂退法(Dropout)从零开始实现Dropout简洁实现参考教程:https://courses.d2l.ai/zh-v2/ 训练误差和泛化误差 训练误差(training …