【中间件】中间件的宏观探讨漫谈

中间件探讨

内容管理

    • intro
    • 中间件和框架
    • why use
    • 常用相关Middleware
      • 接入层
      • 服务层


本文主要是宏观上再次探讨一下中间件


cfeng之前单纯的分享过缓存、消息队列、还有就是Spring Cloud下面提供的一些中间件的使用,但是整体上就是感觉很松散的,所以cfeng现在再次重新宏观梳理一下中间件

intro

中间件 Middleware,字面上看就是起中间作用的构件。早期的概念就是再操作系统的基础上,为其他应用软件提供服务的基础软件, 就像一种软件胶水连接系统以及应用服务。 比如中间件简化应用间的通信方式【可以不用再调用复杂系统函数即可数据传输】

img

而现在互联网分布式架构下,中间件是泛指在分布式系统中被广泛使用的中间层软件 ----- (we 所开发的软件不管是B端还是C端都是服务用户,而中间件就是服务于我们所开发的这些软件)

中间件和框架

framework和middleware是两个不同的概念,在软件开发过程中所起的作用不同。

框架Framework: 半成品可扩展

框架是一组预先编写好的代码和规范,提供一种结构,帮助开发者更容易的构建和维护应用程序,它是一种半成品,使用框架进行开发就是在别人搭建好的舞台上进行跳舞。 (要想成为成品,我们需要填入我们自己的业务逻辑。)

通常包含一系列库、工具和相关最佳实践,目的是简化特定类型的应用开发,定义了应用程序的体系结构,提供了通用的功能。比如数据持久、用户认证、路由等。

we使用框架时,就直接在框架的基础上进行搭建,不需要重头开始构建整个应用程序,而是在框架提供的结构下进行代码编写,完成程序的功能,它就是提供了一种模板化的方式,使得开发更加高效

java最常见的Spring Framework就是一个综合性的企业级框架,以IOC和AOP为核心,提供了各种综合性功能,整个生态不断扩大,包含
1. 基础的自动配置的Spring Boot(Spring、SpringMvc)
2. 安全管理的Spirng Security,提供了用户密码认证、OAuth、JWT等诸多特性
3. 数据访问支持的Spring Data -- JPA、MongoDB等
4. 基于webSocket通信的Spring WebScoket
5. 构建分布式系统的Spring Cloud --- Netflix、Alibaba、Config等
......

【Spring特别综合,就是一个重量级的开发框架,基本上构建一个程序的方方面面Spring都可以提供支持,当然这些领域除了Spring还有其他的框架与之竞争】
eg: 安全管理Shiro, 数据访问支持Hibernate、Mybatis-plus 等等, 我们在开发时在选用框架时就需要综合考虑

框架就是实现系统的半成品工具,最终的目的都是服务产品,所以我们开发都是结果产品为导向,那么就需要考虑:我们选用的工具是否恰好

eg: 现在需要将一个螺丝放入产品完成产品封装。你可以选择一个几元的螺丝刀实现,你也可以买一个很贵的多功能工具实现。 这个时候就需要慎重的考虑了

单独的框架是不能发挥作用的,填入用户代码之后才是一个完整的产品。以java为例,常用的Spring框架都是以java实现的,而最终又是以公司自身产品为目的,所以很多时候公司都会进行自定义的工具开发,来更好的适配自己的产品

cfeng在work中,产品可能频繁的需要和客户端交互获取前置的相关数据,所以公司也是直接封装了工具,使用直接一个注解搞定

中间件 Middleware: 可扩展独立运行成品

中间件通常是一种独立的系统软件或服务程序,可以连接多个独立的应用程序。不需要再填充用户代码,只需要作为一个用户来使用将中间件放入产品系统即可。

明显看出,中间件就是服务于我们的系统的,整体处于中间层,那为什么要使用中间件?必须使用吗?

我们需要持续的思考:如果没有某种XXX,我们应该如何做。
eg: 如果不允许使用Spring进行开发,我们应该怎么进行web开发? 
    没有Spring其实就是自己需要开发Spring提供的一些功能。从更基础开始搭建系统罢了
eg: 如果不允许使用Redis,怎么进行分布式缓存和其他相关协作

why use

为什么要使用中间件进行系统的通信和数据交互?主要在于 封装性

  1. 封装了底层操作的复杂性。 中间件可以根据公司具体情况进行经验配置,使用边界条件降级策略进行透明封装,用户不再需要考虑内部复杂性 【这个就是常常提到的原理, 比如Nacos怎么做服务注册的? – 在使用的时候可能不需要深入考虑该问题】
  2. 封装了公共业务模型的具体实现。 也就是降低了学习使用成本,比如redis的使用,就是调用API,降低了调用方的业务逻辑表达能力。
  3. 封装性带来的良好的模块性。 中间件可以理解为公共逻辑的封装, 比如消息中间件处理消息交互的公共逻辑。使用定义清晰的中间件接口,简化业务逻辑架构,同时将缺陷封装在中间件中,可维护性提升。

常用相关Middleware

庞大的业务规模,通常伴随着海量的计算、数据交互、数据处理。同时也就伴随着中间件的使用。 计算机任何问题都可以通过分成解决,如果不行,那就再增加一层。中间件的引入其实也就是分层的思想,解决可用稳定性。

中间件的种类繁多,但是从整个架构层面也就是接入层和服务层来进行考虑

img

接入层

接入层就是首先面对internet中的大流量的冲击,所以常用的相关中间件就是流量相关的负载均衡中间件

  • LVS: linux Virtual Server, 当然现在已经集成到Linux的内核模块中,主要作用就是负载均衡
  • Nginx: 开源的高性能的HTTP和反向代理web服务器。 内存占用少,启动极快。【正向代理的是客户端,比如VPN; 反向代理的是服务器,用户无感知】

服务化: 微服务, 将功能以服务的形式提供,和服务导向架构Service-Oriented Architecture, SOA关联。各个组件以服务形式存在,通过网络进行通信。 后台的程序服务化,接入层也需要进行正确的路由

  • Dubbo: 提供高性能、透明化的远程方法调用(RPC)服务,支持服务治理和负载均衡,RPC是分布式系统间进行数据交互的基本形式

  • Sentinel: 开源的流量控制和防护库,保护分布式系统的服务免受不良请求的影响。 包括流量控制、熔断降级、实时监控、规则配置、异步处理等…

  • Spring Cloud生态:Spring Cloud构建分布式系统的开发工具集合,简化分布式开发,提供了注册发现、负载均衡、分布式配置、断路器、消息总线等功能

    • Eureka: 服务注册发现组件,需要单独创建一个Eureka Server节点

    • Ribbon: 基于HTTP和TCP的客户端负载均衡器, 后续还有Load Balancer等

    • Feign: 基于HTTP的声明式模板化的服务调用

    • Hystrix: 处理服务熔断降级,实现断路器模式,避免单点故障

    • Zuul: API网关服务,提供路由、顾虑和监控等功能

    • Config: 分布式配置中心,支持配置信息集中管理,动态刷新配置

    • Bus: 消息总线,用于微服务架构中传播状态变化或者事件消息

    • Zipkin: 分布式追踪系统,协调处理跨越多个服务的请求

    • Sleuth: 分布式跟踪系统, 收集、追踪微服务架构中的请求链路

    • Consul: 分布式注册中心和配置中心,可替代Eureka和Config

    • Spring Cloud Task: 任务和批处理程序…

其余的还有Nacos、Artemis、Apllo等各种和服务化相关中间件后续再详细展开

服务层

后台系统开发本身也需要使用相关的中间件来完成系统功能,不管是消息队列、定时调度、存储还是链路日志等都可以使用表现良好的中间件来完成功能。

消息中间件

系统依赖关系解耦利器,常用于消息通信、服务解耦和流量削峰。发布/订阅数据交互模式可以将生产者和消费者的业务逻辑耦合程度降到最低。

  1. RabbitMQ
  2. RocketMQ
  3. Kafka
  4. Hermes
  5. QMQ …

定时调度

定时task的调度是现在很多产品都面临的场景,成熟的task调度能够极大降低系统的开发难度

  1. Xxl- job
  2. Elastic- job …

存储

存储的中间件包含分布式缓存的解决方案、分布式系统下数据库的解决方案和全文搜索解决方案

  1. Redis、 Codis …
  2. MyCat、 Sharding-JDBC …
  3. ElasticSearch …

数据同步

大数据场景下对于数据同步要求也可以通过中间件来解决:

  1. Canal
  2. otter
  3. Flink-CDC …

链路跟踪

链路追踪也是分布式系统下常见的场景

  1. CAT
  2. SkyWalking …

日志采集

分布式环境下产品可能需要采集相关日志进行后台分析或者产品展示

  1. ELK …

除了上面部分领域的部分中间件,现在市场上的各种细分领域的中间件是层出不穷,中间件作为系统架构使用的成品,我们在使用时也需要谨慎思考。同时我们更需要掌握中间件的原理,从而开发更适合自己产品的中间件🌳

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC]

文章目录 金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC] 0x01 前言 免责声明:请…

江苏专转本考试时,遇到不会的题目该怎么办呢??

有很多同学最近在问,如果专转本考试时遇到 不会的题目怎么办?? 考场上题目太陌生没见过会不会凉凉 以学姐自身经验分享,其实未必会凉凉,当时我在16届计算机考试时,遇上了填空题新题型,当时在考…

武汉凯迪正大KDHG-220P互感器综合测试仪

主要特点 武汉凯迪正大KDHG-220P互感器综合测试仪,仅需进行简单的数字设定:设定互感器的额定参数。仪器将全过程自动记录数据,并自动将变比极性、伏安特性曲线等计算并显示出来,省去换线、手动调压、人工记录、整理、描曲线等烦琐…

【旅游行业】Axure旅游社交平台APP端原型图,攻略门票酒店民宿实战模板

作品概况 页面数量:共 110 页 兼容软件:Axure RP 9/10,不支持低版本 应用领域:旅游平台,酒店住宿 作品申明:页面内容仅用于功能演示,无实际功能 作品特色 本作品为「旅游社交平台」移动端…

单链表相关面试题--7.链表的回文结构

/* 解题思路: 此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。 */ class PalindromeList { public:bool chkPalindrome(ListNode* A) {if (A NULL || A->ne…

【JS】BMI身体质量指数计算工具

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍BMI身体质量指数计算工具的JS实现。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次…

实施方法论

软件实施方法论(通用) 软件项目实施交付模型很多领域流传着别人家的传说:别人家的孩子学习成绩好才艺多还长得帅,别人家的客户钱多人傻速来,别人家的公司不加班产品做得好工资还发的倍儿高。这一切事情实际上都有常量和变量,比如…

iptables的一次修复日志

iptables的一次修复日志 搭建配置wireguard后,使用内网连接设备十分方便,我采用的是星型连接,即每个节点都连接到中心节点,但是突然发生了重启wg后中心节点不转发流量的问题,即每个接入的节点只能与中心节点连接&…

请收好|实验室仪器管理知识大全

实验室的仪器设备是直接用于提供检测结果或辅助检测进行的,是实验室的重要资产,也是重要的检测工具。对检测结果的准确性和可靠性起到至关重要的作用。如何保持仪器设备的有效性和可靠性,使仪器设备处于完好的状态,在产品质量检测…

使用Dockerfile构建hexo博客镜像,并部署

基于centos7.9父镜像构建hexo:1.0镜像&#xff1a; cat << eof > Dockerfile # 根镜像 FROM centos:7.9.2009 MAINTAINER qv123<qv1095322098163.com> # 设置工作目录 WORKDIR /usr/src/app # 暴露端口号 EXPOSE 4000 # 作者注释 MAINTAINER qv123<qv1095322…

“绵柔的,好喝的”海之蓝畅销20年的经典秘诀:做大众喜爱的好酒

执笔 | 尼 奥 编辑 | 萧 萧 在中国白酒历史长河中&#xff0c;有的品牌如大浪淘沙而灰飞烟灭&#xff0c;也有的白酒品牌因为不断创新而经久不衰。我们时常在思考一个产业命题&#xff1a;白酒品牌常青的秘诀到底是什么&#xff1f; 经过20多年的产业发展&#xff0c;中国…

壹基金宣传进瑞金河背街社区 安全家园项目防灾减灾深入人心

11月16日下午&#xff0c;瑞金赋能公益、蓝天救援队等联合象湖镇河背街社区开展家庭安全计划社区活动包挑战赛活动暨壹基金安全家园项目防灾减灾宣传社区行活动。活动得到了救助儿童会北京代表处、壹基金、艾特公益、益心益意公益的指导&#xff0c;得到了阿里巴巴公益平台广大…

【数据结构】链表的八种形态

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 链表的三大"性状" 一.带头链表和不带头链表 头指针与头结点的异同 头指针 头结点 二.循环链表和非循环链表 三.双向链表和单向链表 链表的八大形态 结语…

键盘快捷键工具Keyboard Maestro mac中文版介绍

Keyboard Maestro mac是一款键盘快捷键工具&#xff0c;它可以帮助用户通过自定义快捷键来快速完成各种操作&#xff0c;提高工作效率。Keyboard Maestro支持多种快捷键组合&#xff0c;包括单键、双键、三键、四键组合等&#xff0c;用户可以根据自己的习惯进行设置。此外&…

测试工程师一定要会的Jmeter_性能测试教程:性能测试脚本的优化

性能测试脚本的优化 以PHP论坛为例&#xff1a;http://47.107.178.45/phpwind/ 根据上一篇的性能测试(3&#xff09;的脚本进行优化&#xff1b;见下图&#xff1a; 如上图中&#xff0c;把发帖和回帖的事务添加到随机控制器中&#xff0c;登录操作添加到仅一次控制器中&…

修改el-radio-group样式,自定义单选组件

修改el-radio-group样式,自定义单选组件 自定义组件 MyRadioGroup.vue <template><div class"btnsBox"><el-radio-group v-model"activeIndex" change"handleClick"><el-radio-buttonv-for"(item, index) in list&qu…

万户OA upload任意文件上传漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品&#xff0c;统一的基础管理平台&#xff0c;实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台&#xff0c;将外网信息…

vite vue3配置axios

准备 参考 安装axios yarn add axiossrc下新建request文件夹&#xff0c;该文件下新建index.ts import axios from axios; import { ElMessage } from element-plus;// const errorCodeType function (code: number): string { // let errMessage: string 未知错误; // …

SqlServer_idea连接问题

问题描述&#xff1a; sqlServer安装之后可以使用navicat进行连接idea使用账户密码进行登录连接失败 问题解决&#xff1a; 先使用sqlServer管理工具进行登录 使用window认证连接修改账户密码 启用该登录名 这时idea还是无法连接&#xff0c;还需要如下配置 打开sqlserve…

SVG直线 <line>与折线 <polyline>代码示例

本专栏是汇集了一些HTML常常被遗忘的知识&#xff0c;这里算是温故而知新&#xff0c;往往这些零碎的知识点&#xff0c;在你开发中能起到炸惊效果。我们每个人都没有过目不忘&#xff0c;过久不忘的本事&#xff0c;就让这一点点知识慢慢渗透你的脑海。 本专栏的风格是力求简洁…