万能钥匙-中间层

2024-01-09 18:48
文章标签 万能钥匙 中间层

本文主要是介绍万能钥匙-中间层,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近小菜刀重读《程序员的自我修养》,里面提到过一句名言:计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决

上述名言概括了计算机系统软件体系结构的设计要点,整个体系结构从上到下都是按照严格的层次结构设计的。不仅是计算机系统软件整个体系是这样的,体系里面的每个组件比如操作系统本身,应用程序、软件系统甚至很多硬件结构都是按照这种层次的结构组织和设计的。

下面,本文举例带领大家体会这种中间层理念。

01

计算机软件体系结构

如图所示,每层之间都通过接口进行交互。除了硬件和应用程序,其他都是所谓的中间层,每个中间层都是对它下面层的包装和扩展。正是因为这些中间层的存在,才使得应用程序和硬件之间保持相对的独立。

例如虚拟机技术,其就是在硬件和操作系统之间增加了一层虚拟层,使得一个计算机可以同时运行多个操作系统;又如当前大火的Docker容器技术,是在操作系统和应用之间增加的一层虚拟层,为应用提供一致的运行环境。

这就是层次结构带来的好处,在尽可能少改变甚至不改变其他层的情况下,新增加一个层次就可以提供前所未有的功能。

02

计算机存储体系结构

一个典型的寄存器文件只能储存几百字节的信息,而主存里可存放几十亿字节,但是,计算机处理器从寄存器文件中读取数据比从主存中读取几乎要快100倍,而且随着半导体技术的进步,这种差距还在持续增大。

于是,系统设计者在主存和寄存器之间增加了中间层:高速缓存。其利用局部性原理,即程序具有访问局部区域里的数据和代码的趋势。让高速缓存里存放可能经常访问的数据,大部分的内存操作都能在快速的高速缓存中完成。这样就很好的解决了主存和寄存器之间的性能差距问题。

其实,不止在主存和寄存器之间,在整个存储器结构中,我们都可以把上一层的存储器作为低一层存储器的高速缓存。如上图所示,寄存器文件就是L1的高速缓存,L1是L2的高速缓存,L2是L3的高速缓存,L3是主存的高速缓存,而主存又是磁盘的高速缓存,在分布式文件系统中,本地存储就是存储在其他远程系统中磁盘上的高速缓存。

通过这种高速缓存中间层的设计思想,把整个存储体系作为了一个大的存储器池。结果是,其成本与层次结构底层最便宜的存储设备相当,但是却以接近于层次结构顶部存储设备的高速率向程序提供数据。

03

缓存数据库

网站访问数据的特点一般会呈现“二八定律”,即80%的业务访问集中在%20的数据上。例如:百度搜索热词,新浪微博热门事件等,往往这些都是一小部分数据(热数据),大多数数据比较少被访问(冷数据)。

如果网站对冷热数据都通过传统RDS数据库处理,例如MySQL,那么在当该网站的访问量达到一定规模时,数据库的IO操作很容易进入性能瓶颈。因此,引入了中间层即内存数据库,作为热数据的缓存。因为内存数据库,例如Redis,它们的数据运行在内存当中,IO响应会非常的快,所以可以很好地解决上述问题。

04

中间件技术

中间件可能是诠释中间层理念的最佳实践,以下是维基百科给出的中间件示意图。

但中间件其实是一个很宽泛的概念,我国学术界一般认可的定义是:中间件是指网络环境下处于操作系统、数据库等系统软件和应用软件之间的一种其连接作用的分布式软件,主要解决异构网络环境下分布式应用软件的互连与互操作问题,提供标准接口、协议、屏蔽实现细节,以提高应用系统易移植性(北京大学梅宏)。

常见的有消息中间件、数据库中间件、web中间件,容器等。以目前很火的MQ消息中间件为例,它的出现能够帮助系统对用户请求异步处理、应用解耦和流量削峰等。

05

总结

“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”。中间层思想的实践在计算机科学领域中无处不在。除上述之外,代理服务、池技术、网络协议、以及现在热炒的数据中台等,无一不在践行着中间层理念。如果你现在的项目中,交互的两者存在某些不可避免的障碍,不妨考虑是否可通过引入新的中间层解决该问题。

参考:

  1. 《程序员的自我修养》

  2. 《深入理解计算机系统》

  3. https://en.wikipedia.org/wiki/Middleware

  4. https://blog.csdn.net/singit/article/details/71156863

  5. https://blog.csdn.net/xlgen157387/article/details/53230138

  6. https://www.jianshu.com/p/2820561158c4

Golang技术分享

长按识别二维码关注我们

Golang相关学习及视频资源请回复公众号

1024

这篇关于万能钥匙-中间层的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/588081

相关文章

Eureka原理大起底:从菜鸟到高手,轻松玩转服务注册与发现的艺术!Eureka不只是个名字,它是微服务世界的‘万能钥匙’,解锁无限可能!

第一章 引言 Eureka原理,作为服务发现领域的一个重要理论,对于构建高可用的分布式系统具有指导意义。随着微服务架构的兴起,服务之间的发现和通信变得尤为关键,Eureka原理为解决这一问题提供了有效的方案。本文旨在深入探讨Eureka原理的实践应用,分析其在实际系统中的作用和效果,以期为相关领域的研究和实践提供参考。 在当今的云计算和大数据时代,分布式系统的复杂性和规模都在不断增加,服务之间

HBase的SQL中间层——Phoenix(附大数据入门指南)

大数据依然是当前较为火热的领域,其背后的核心价值是数据。今天分享一个GitHub上一个系类文章,作者是heibaiying,大数据入门指南(2019)地址:https://github.com/heibaiying/BigData-Notes(本文末点击阅读原文进入),内容涉及下图的相关技术。 本文分享其中HBase主题系列里一篇关于Phoenix入门使用的文章,刊载以飨读者,建议复

【实践】express搭建nodeJS中间层(三)

写在前面 之前2篇已经比较详细地介绍用express搭建nodeJS中间层并部署到centOS服务器,用forever管理nodeJS进程,这一系列工作 都是基于 项目已经调试 完毕了。但实际开发过程中会发现 每次修改完 代码后 都需要关闭node进程然后 重启才能生效,特别麻烦,这篇就介绍一个 自动监听并同步的的 node工具——supervisor。 全局安装 supervisor 直接

tensorflow实现transformer,用于处理和卷积神经网络的中间层输出

文章目录 tensorflow版本tensorflow实现附录,torch实现 tensorflow版本 Tensorflow2.16 + python3.12 tensorflow实现 import tensorflow as tfclass Attention(tf.keras.Layer):def __init__(self

系统架构设计师笔记第36期:中间层架构设计

在现代软件开发领域,随着业务复杂度和用户需求的增长,传统的两层架构逐渐暴露出其局限性,如难以处理高并发场景、业务逻辑分散且不易维护等问题。因此,引入中间层(也称为服务层或业务逻辑层)架构成为了提升系统性能、保证数据安全以及促进应用服务高效、灵活和可扩展的重要手段。 一、中间层的作用与价值 中间层作为客户端与数据库之间的桥梁,承担着核心的业务逻辑处理任务。它主要包括以下几个方面的作用: 业务

设计模式学习笔记 - 规范与重构 - 5.如何通过封装、抽象、模块化、中间层解耦代码?

前言 《规范与重构 - 1.什么情况下要重构?重构什么?又该如何重构?》讲过,重构可以分为大规模高层重构(简称 “大型重构”)和小规模低层次重构(简称 “小型重构”)。大型重构是对系统、模块、代码结构、类之间关系等底层代码设计进行重构。 对于大型重构来说,最有效的解决手段就是 “解耦”。解耦的目的是实现代码高内聚、松耦合。关于解耦,今天准备分三个部分来给你讲解。 解耦为何如此重要?如何判定代

AWS的CISO:GenAI只是一个工具,不是万能钥匙

根据CrowdStrike的年度全球威胁报告,尽管研究人员预计人工智能将放大对防御者和攻击者的影响,但威胁参与者在其行动中使用人工智能的程度有限。该公司上个月在报告中表示:“在整个2023年,很少观察到GenAI支持恶意计算机网络运营的开发和/或执行。” 对于GenAI在网络安全中的作用,Chris Betz既不害怕,也不过于乐观,AWS的CISO Betz平衡了它的两端,他对待它的方式

pytorch标准化与模型训练推理以及中间层注意点

1.图像归一化和通道转换操作 a = np.arange(3*3*3).reshape(3,3,3).astype(np.uint8)print(a)function = transforms.ToTensor()#注意只能转换3维度的ndarray或者PIL的Image类型c = function(a)print(c)'''D:\anaconda3\python.exe E:\tes

WIFI万能钥匙CTF RE1——WannaLOL

发现自己似乎很久没有写过东西了,最近认识了很多大佬们,意识到差距真tm巨大,要补的东西还有很多,其实不写博客学习还是要继续的,不过为了潜意识里联系上某位大佬,还是写点东西了吧。 这是2017年的WIFI万能钥匙逆向题的一道,没有花没有反调试,(最近做题老喜欢爆破,所以就选这道题了)先看题目: 对的,没错,error了,也是一个很基础的调用messagebox的程序,找到输入内容的GetDlgI

08 _ 管程:并发编程的万能钥匙

并发编程这个技术领域已经发展了半个世纪了,相关的理论和技术纷繁复杂。那有没有一种核心技术可以很方便地解决我们的并发问题呢?这个问题如果让我选择,我一定会选择管程技术。Java语言在1.5之前,提供的唯一的并发原语就是管程,而且1.5之后提供的SDK并发包,也是以管程技术为基础的。除此之外,C/C++、C#等高级语言也都支持管程。 可以这么说,管程就是一把解决并发问题的万能钥匙。 什么是管程