• 分布式存储的七方面问题


    复制、存储引擎、事务、分析、多核、计算、编译

    分布式存储的概念:Partitioning及多机scale,Replication以灾备容错

    1.复制

    复制时解决可用性、可扩展性和高性能的关键。数据的维护离不开复制,复制可转移而不可消除,同时复制也引出了多副本一致性问题,而一致性保证需要考虑各种软件和硬件故障,以及误操作。共识算法和复制日志时解决复制所产生的问题的核心。

    2.存储引擎

    指的是本地的持久化存储引擎,要考虑到cpu和memory系统和持久化设备之间的速度和带宽差异,可以总结为1-3-5:

    1指的是fsync的调用,以及和fsync地位等同的函数的调用。调用次数、频率,设备的带宽和利用率是否合理,fsync的调用如何均摊到更多的io次数和吞吐之上

    3指的是读/写/空间的放大,如何tradeoff,牺牲一个保住两个

    5指的是WAL的五个LSN,分别为prepare point,commit point,apply point,check point,prune point

    3.事务

    事务指ACID,事务可以用来给存储系统做baseline分析,检查系统在原子性、一致性、隔离性、持久化四个方面可以走多远。事务反应了正确性和并发性的折中,作为事物的使用方,理论上并发访问存储系统时,不需要担心结果不正确的问题,假如存在这种担忧,一定是事务处理上牺牲了某些正确性,偏向了并发性,而将错误处理和选择权交给了使用方,使用方需要额外在客户代码插入fence代码和容错处理。

    事务处理的核心是并发控制,其主要解决以下两个问题:

    ①两个并发事务冲突应如何处理,是选择加锁等待还是主动夭折冲突

    ②已经提交的事务对数据库的影响,怎么对当前outstanding事务的读操作可见

    4.分析

    分析处理涵盖了很多东西,从一个角度看,是如何实现SQL语言,从另一个角度看,是如何实现一个分布式系统由SQL驱动起来工作。

    一条SQL语句,经过分词、语法分析、访问catalog和语义分析、关系代数的等价变化,形成逻辑查询计划,然后根据数据的分布,算子自身特点和计算资源状况,生成物理执行计划。

    5.多核

    多核为什么如此重要:

    假设摩尔定律,没有功率墙的限制,显然我们不需要修改老代码,只要增加单核晶体管的数量,老代码就会得到提升,当撞到功率墙后,发现需要增加核数以提升计算速度。现在问题来了,代码已经写成了多线程执行,随着核数的增长,修改worker线程池的大小,老代码的计算能力不会随着核数增加而持续增加。原因是因为多核上scale收阿姆达尔定律的制约,当代码中串行执行的部分占比1%时,256核机器只能加速到72倍,如果是10%,则只能最多加速到10倍。显然修改线程池的大小不是一个好方法,减少代码中的contention才是关键。

    6.计算

    计算主要讲执行引擎,执行引擎是一个很大的scope,目前roadmap已经建立,但是缺乏baseline,待两者都ready之后会补充

    7.编译

    编译对数据库的渗透是全方位的,比如计算引擎在向量化之外可采用编译技术优化性能。数据库中很多case-by-case的性能优化,需要深入研究体系结构,异构计算加速处理也需要使用编译技术。流批DSL脚本使用现有的SQL执行引擎做计算,UDF扩充等。

    来源微信公众号:架构师

  • 相关阅读:
    看动画学算法之:栈stack
    asp.net core使用identity+jwt保护你的webapi(三)——refresh token
    asp.net core使用identity+jwt保护你的webapi(二)——获取jwt token
    与 Python 之父聊天:更快的 Python!
    Oracle使用SPM对含有绑定变量SQL做固定的方法
    Oracle Hint no_merge(merge)、no_unnest(unnest)的作用对象陷阱
    Oracle全表扫描导致的direct path read第一次慢第二次以后变快
    Oracle OEM13C添加主机监控遇到一些问题汇总
    还傻傻分不清楚equals和==的区别吗?看完就明白了
    从0到1实现一个简单计算器
  • 原文地址:https://www.cnblogs.com/Arisf/p/16034787.html
Copyright © 2020-2023  润新知