码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 盘一盘高性能设计的哪些点(二)


    继续上一篇 盘一盘高性能设计的那些点(一) 文章,继续探讨高性能设计的一些点!

    image

    一、顺序访问

    磁盘内容读取或写入操作都会涉及到一个【寻址过程】,首先找到需要读取或写入的位置,然后去操作磁盘内容读写。

    所谓顺序访问,就是将以存储连续的方式写入、读取磁盘内容。

    下图为不同存储介质顺序、随机访问性能对比:

    image
    图片来源

    就好像快递员送货一样,它会实现规划好路线,一条线送过去,是最省时省力的。

    1、kafka

    Kafka 每条消息都会被 append 到相应的 partition 中,顺序写磁盘,效率非常高。是 Kafka 高吞吐率的一个很重要的保障。

    2、MySQL

    Mysql 顺序读写类文件包括: InnoDB system tablespace 文件及 binary log 及 redo log 日志文件等

    ... ...

    二、零拷贝

    传统方式,数据从存储介质读取到发送到网络整个过程会涉及到多次数据拷贝及上下文切换操作,如下:

    image

    图上层为上下文切换过程,下层为拷贝过程。

    • user context 切换到 kernel context;DAM engine 将数据从磁盘拷贝到内核。

    • 数据从 kernel buffer 拷贝到 user buffer;kernel context 切换到 user context。

    • user context 切换到 kernel context,数据从 user buffer 拷贝到 socket buffer。

    • kernel context 切换到 user context,数据从 socket buffer 拷贝到 protocol engine。

    mmap 方式演进:

    image

    用户进程共享 kernel buffer。

    mmap 上线文切换过程不变,数据传输省略掉了 kernel buffer 和 user buffer 之间的拷贝过程,数据直接从 kernel buffer 拷贝到 socket buffer。

    Sendfile 方式演进:

    image

    Read Write 过程由 Sendfile 机制替代。

    Zero copy:

    image

    DMA 将数据从存储介质拷贝到 kernel buffer 后,不再做任何数据拷贝,直接将带有数据地址及长度信息的文件句柄追加至 socket buffer。

    DMA engine 负责将数据从 kernel buffer 传送至 protocol engine。

    参考文献

    1、Kafka

    TransferableRecords::writeTo 方法实现了 sendfile,更高效的实现消息的收发。

    2、Netty

    依赖于操作系统零拷贝特性直接将缓冲区数据发送到相应的通道。 netty 利用 NIO FileChannel transferTo 方法,通道对通道写数据。
    image

    三、异步非阻塞

    异步的着眼点在于剥离主流程。

    主流程继续执行主线任务,异步逻辑开辟支线处理。

    1、IO

    IO -> NIO -> AIO

    2、异步逻辑

    基于 EventBus 或者 消息队列进行异步逻辑任务的处理。

    如记录操作记录,历史变更等信息。

    image

    四、附加订阅

    订阅

  • 相关阅读:
    Java并发编程—并发和并行、线程上下文
    easyexecl导出100万行execl报字体错误的解决办法
    java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码
    什么是Helm?它是如何提升云原生应用私有化部署效率的
    面试知识点【java基础篇】
    中小企业是否需要微软活动目录联合服务(ADFS)?
    Soa: 一个轻量级的微服务库
    nlp序列完全可以模拟人脑智能
    机器学习实验七:决策树-基于信贷数据集,使用sklearn中相关库实现决策树的构造
    策略验证_卖出口诀_长箭射天股价落地
  • 原文地址:https://www.cnblogs.com/niejunlei/p/17525500.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号