• 系统质量属性之——性能


      今天软件体系架构课程讨论了关于系统质量属性之性能,以及同学提出一些关于系统性能的问题,下面是对性能的一些介绍以及对同学提出关于性能问题的总结。

    性能是指系统的响应能力,即对外部刺激(事件)做出反应时所需要的时间或在某段时间内所处理的事件个数。一般我们会用等待时间、处理期限、系统吞吐量、响应抖动、未处理事件、丢失数据等指标了解系统性能。

      等待时间:刺激达到和系统对其做出响应之间的时间。

      处理期限:最长等待时间。

      系统吞吐量:系统单位时间处理事务的次数。

      响应抖动:等待时间的变化。

      缺失率(未处理事件):由于系统太忙因而无法做出响应所导致的未处理事件的数量。

      数据丢失:因为系统太忙所丢失的数据。

      关于系统性能,A同学提出,对于一些小公司,资金不足的情况下,如何在硬件设备比较差的条件下提高系统性能?对此,我觉得可以有以下几点:

      ①  提高系统健壮性,考虑数据库服务器和应用服务器的冗余处理。

      ②  通过使用读写分离技术减轻访问数据的压力。

      ③  使用缓存技术,可以使用Redis缓存服务器提高系统性能。尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存可以大量减少与数据库的交互,提高性能。

      ④  对于数据库的设计不要将所有数据放在一个表中,而是通过分库、分表、分区存储提高可扩展性和访问性能。

      ⑤  优化数据库结构,多做索引,提高查询效率。

      淘宝如何快速查询数据?淘宝的数据产品技术架构是什么样的?

            这两天正好看了一篇讲解淘宝数据架构的文章,在此根据自己的理解对该文章的内容做一个梳理。

      我们知道,淘宝每天会产生海量数据,每天有超过数十亿的店铺信息、商品信息、商品浏览记录、订单信息、用户评价信息等数据。但是,随着淘宝的不断发展,淘宝对于海量数据的计算、存储、检索难度急剧上升。对此,淘宝经过一系列研发,提出了现在我们所熟知的量子统计、数据魔方、淘宝指数等。

      淘宝数据技术架构可分为五层,分别为数据源、计算层、存储层、查询层、产品层。

      数据源包含店铺、商家、商品、交易等数据库,以及用户浏览、检索商品的日志等内容。数据源是数据产品的最根源所在,只有拥有数据源,数据产品才可能对数据进行处理。

    对于计算层,在淘宝中主要有两种计算平台——“云梯”和“银河”,他们是计算层的主要组成部分。“云梯”主要处理数据源层实时产生的数据,这些数据通过淘宝的数据传输组件DataX、DbSync、Timetunnel准确实时地传输到一个拥有大量节点的Hadoop集群上,这个集群我们就称之为“云梯”。在“云梯”上,不同的作业对于这些实时产生的数据根据不同的产品需求会进行不同的MapReduce计算,但是该计算结果可能并不是我们在前端看到的数据,而只是数据冗余与前端计算之间做了一个平衡的结果,它只是一个中间结果,在前端显示的数据是对这些计算结果进一步处理的结果。显然,如果我们希望某些数据可以尽快的传送到前端,这时候我们再使用“云梯”计算就比较慢了,因此就有了“银河”计算平台。“银河”,顾名思义,是“水流”,它是对流式数据进行处理,通过对来自Timetunnel的实时数据做实时计算,然后将计算结果在尽可能短的时间里更新到NoSQL数据库中,以便前端的使用。但是,这两种计算平台都不太适合用于实时的数据查询,“云梯”更适合用于离线计算,“银河”要想实现实时查询,需要完整地将数据接收,实时计算、存储、查询等功能都集成在这个计算平台上,显然,这又需要分层实现,最终又落到目前的架构上。

      因为“云梯”和“银河”无法提供实时数据查询,淘宝针对前端设计了专门的存储层。首先,淘宝选择MySQL的MyISAM引擎作为底层的数据存储引擎。在此基础上,为了应对海量数据,淘宝设计了MyFox,它是分布式MySQL集群的查询代理层,使分区对前端应用透明。在MyFox中,根据需要数据的情况,将MyFox中的节点分为“冷节点”和“热节点”,“冷节点”,顾名思义,存放人们冷落、不太关心的数据,即一些访问频率较低,产生时间较长的数据,与之相对地,“热节点”存放的是最新产生的,用户访问频率较高的数据。不同的数据存放在效率不同的硬盘中,例如,“热节点”中的数据存放在SAS硬盘中,成本较高;“冷节点”中的数据存放在SATA硬盘中,成本较低。

      但是,淘宝有一项功能如下图,

    用户可以自由选择产品属性范围,虽然用用户用着很方便,但是对于开发人员就不那么方便了,用户选择的过滤条件我们无法确定,这时候如何使用SQL运距进行查询呢?也许你会说,用条件语句对所有可能的条件进行判定,那样对于两三个条件来说或许可以,但是对于淘宝这么多条件,要想列举出所有情况显然很难做到。所以对于这种情况,关系型数据库就不那么方便了。对此,淘宝的解决办法是使用Prometheus,并且以HBASE作为Prom的底层存储引擎。在存储数据时,以row-key键值对(属性与属性值的组合)进行存储,而row-key对应的值为column-family,即存放交易ID列表的index字段和原始交易明细的data字段。然后通过建立索引可以快速找到相应的记录,避免复杂的查找算法和磁盘的大量随机读取请求。

      存储层利用了关系层数据库和NoSQL的数据库,为数据产品的不同需求提供了数据存储和底层查询的解决办法。但是各种异构的模块也为前端的使用带了很大的挑战,此外,我们所需要的数据也不会一直都在一个模块中获取。所以,究其本质来说,是异构“表”之间的join操作,淘宝在前端产品与后端存储之间加了一个通用的数据中间层——glider,来屏蔽这些影响,起到隔离作用及缓存管理。它通过HTTP协议对外提供restful方式的接口。数据产品可以通过一个唯一的URL获取到它想要的数据。

      产品层包括数据魔方、淘宝指数等内容,在这里就不过多的解释了,本篇博客主要根据自己的理解对《淘宝数据魔方技术架构解析》这篇文章做了一下梳理,如有不当之处,还请批评指正!

      文章来源:https://kb.cnblogs.com/page/110840/

  • 相关阅读:
    vscode json格式化
    fastjson autoType is not support
    springboot 使用 fastjson序列化
    openfeign 超时到底怎么配
    datax数据同步
    记录接口返回请求时间已过期
    oracle迁移mysql总结
    redistemplate封装
    SCUI学习笔记—【NODE.JS安装】
    原创:uniApp选择题列表:点击不同选择题,答案缓存在本地
  • 原文地址:https://www.cnblogs.com/qilin20/p/10597489.html
Copyright © 2020-2023  润新知