存储工具系列文章》主要介绍存储相关的测试和调试工具,包括不限于ddfiovdbenchiozoneiometercosbench等性能负载工具,及strace等调试工具。


1 概述

Iometer 是一个免费的开源的测试磁盘性能的工具。和其他磁盘工具相比,可以测试 I/O 的传输率和平均的 I/O 响应时间。其第一个版本20年前就已经出来了,当时是用于 Windows NT。但它现在仍是一款很有用的工具,因为它也可以在 Win 10/下工做,甚至与 Vista 和 Windows 2008 下。
        Iometer 支持许多不同的设置。在这篇日志中,我只想告诉你如何初步使用这个漂亮的免费磁盘的测量工具。

Iometer由Intel公司研发并经过严格论证,是一个工作在单系统和集群系统上用来衡量和描述I/O子系统的工具。Iometer 为计算机I/O子系统所作的工作就如同测力计为引擎所作的工作一样:它测定在可控制的负荷下系统的性能。

Iometer 既是工作负载生成器(也就是说,它可以进行输入输出操作,以便增加系统的负荷),它还是一个测量工具(也就是说,它检查并且记录I/O 操作的性能和对系统的影响)。它可以被配置为模拟任何程序或者基准测试程序的磁盘和网络I/O的负载,或者用来产生整个综合的I/O负载。它也可以用来产生并测量单系统或者多系统(网络)的负载。

1.1 测试范围

Iometer可以被用来测量和描述:

  • 磁盘和网络控制器的性能
  • 总线的带宽和时延容量
  • 对于附带驱动器的网络吞吐量
  • 共享总线的性能
  • 系统级别的硬件驱动的性能
  • 系统级别的网络性能

1.2 设计组成

Iometer 包含了两个程序,Iometer 和 Dynamo

Iometer 是控制程序。使用图形用户接口(GUI),你可以配置负载,设置操作参数,启动和停止测试。Iometer 告诉Dynamo 去做什么,搜集分析数据,将分析数据输出到文件中。在某一时刻,只能有一个Iometer副本运行;典型的情况是运行在服务器上。

Dynamo 是负载生成器。它没有用户界面。当接收到Iometer 发送过来的命令,Dynamo执行相应的I/O 操作并且记录性能信息,然后将数据返回给Iometer。它可以有多个副本同时运行;典型的情况是服务器上运行一个副本,每个客户端运行一个副本。Dynamo 是多线程的;每一个副本都可以模拟多客户程序的工作负载。Dynamo中的每一个运行的副本称为一个管理者;副本中的一个线程称为工作者。

2 安装部署

Iometer的Windwos版本安装和一般的应用程序一致,不再说明。

Linux版本下只能使用负债生成器Dynamo,在Linux环境下,解压对应的压缩包,如“tar –zxvf iometer-2006_07_27.linux.i386-bin.tgz”到指定目录即可。

3 测试案例

3.1 本机测试

一、启动Iometer.exe,如下图所示:


        设置生成iotw文件大小时,一般默认设置生成4GB大小的文件。在Iometer中文件是以扇区为单位的,一个扇区为512B。但是在测试linux操作系统时,Iometer会强制认为扇区大小为4096B,那么在windows系统中设置为4GB大小时,此处应填写8000000,而在linux系统中,此处填写1000000。

二、切换到Access Specifications标签页,如下图所示

三、编写存储读写规则

上图中需要修改的3处地方,其中传输数据块大小在应用服务器类型测试为4KB,数据库服务器类型测试为8KB;读写百分比在应用服务器类型测试为读100%,数据库服务器类型测试根据实际情况来判断,如纯查询的数据库读100%,一个典型的业务系统的数据库系统,按照默认的67%读即可;随机/连续存取百分比在应用服务器类型测试为100%,数据库服务器类型测试为100%;(测试人员可根据实际情况修改此处数值,典型的OLAP环境:选择顺序的大IO,测试存储所能支持的最大吞吐量以及响应时间;典型的OLTP环境:选择随机的小IO,测试存储所能支持的最大IOPS以及响应时间)

四、切换到Results Display标签

在此处可以设置为刷新时间为10S.

五、切换到Test Setup页签

在此处设置运行时间为30Min。

六、切换到Disk Targets页签

分别为每个worker设定磁盘分区,建议选择同一个磁盘分区。如果是linux系统的话,会看到如下图所示的情况

此处要选择逻辑卷进行测试,一般选择/opt。

七、执行测试

点击 ,在弹出的对话框中选择结果文件存储位置后,测试开始运行。

八、查看测试结果

3.2    网络客户端测试

一、打开被测试机的命令行窗口

此时服务器的GUI界面显示如下图:

切换到NetWork Targets页签

其他三个页签的设置同本机测试相同,不再重复

查看测试结果

4 功能介绍

启动Iometer.exe,在windows上双击Iometer图标;在Iometer启动的同时会自动运行Dynamo.exe。如下两图所示:

Iometer用户界面有以下主要元件:

  • Toolbar:工具栏,进行共同的操作例如开始和停止测试。
  • Status bar: 状态栏,显示在测试列中当前正在执行的测试。
  • Topology panel: 拓扑结构面板,显示可利用的管理器(Dynamos) 和工作线程(Worker)。在这个面板上Manager和Worker可以选择应用工具栏、磁盘目标、网络目标和存储规格选项,并且这个面板为结果显示列表选择Manager和Worker。
  • Tabbed panels:被选中的面板,控制测试的参量的几个不同的选项。
  • Disk Targets tab:磁盘目标选项,指定每个磁盘Worker使用的磁盘。
  • Network Targets tab:网络目标选项,指定每个网络Worker使用的网络界面。
  • Access Specifications tab:存储规格选项,指定I/O操作类型,每个Worker执行它的目标。
  • Results Display tab:结果显示选项,显示测试中性能数据。
  • Test Setup tab:测试设置选项,指定在测试系列将执行的测试。

4.1 Toolbar –工具栏

工具栏为共同的命令提供按钮,要执行这些命令中的任一个,便点击此按钮。下面将为每个按钮的简要说明。按钮执行的功能如下:

Open Test Configuration File:打开测试配置文件。

  Save Test Configuration File:保存测试配置文件。(默认setup.icf)

  Start New Manager:开始运行一个新的客户端Manager(Dynamo)。

  Start Disk Worker:在拓扑结构面板上选择Manager,新建一个磁盘Worker。

  Start Network Worker:在拓扑结构面板上选择Manager,新建一个网络服务器Worker。

  Duplicate Selected Worker:在同一个Manager下复制已选择的Worker。

   Start Tests:开始测试,开始一系列的测试,文档提示保存在测试结果中。(默认results.csv)

  Stop Current Test and Save Results:中止当前的测试并保存结果。

  Abort All Tests:中止当前运行的所有测试,不保存测试结果。

  Reset Workers:重新设置Worker。

  Disconnect Selected Worker or Manager:中止已选择的Worker 或Manager。

 Exit:退出,中止Iometer和所有连接Dynamo程序。

  About Iometer:显示Iometer版本和版权信息。

当拓扑结构面板里没有managers时,除了打开,  保存, 开始新的Manager, 退出按钮外,  其他按钮都是灰色的;当运行一个测试时,除了停止,中断, 退出按钮外,其他按钮都是灰色的;当没有测试运行时,停止和中断按钮是灰色的。

4.2 Status Bar –状态栏

当你按下开始测试按钮时,Iometer进行一系列的测试,在Iometer窗口的底部的状态栏里显示通过存储规格选项和测试设置选项里被指定的当前测试数量和将要运行的测试的总数。

例如,在存储规格选项中每个Worker选取两种存储规格,测试设置选项设置两个测试,Iometer将一共运行四个测试:

1.    Access specification #1, test #1 (shown as “Run 1 of 4”)
2.    Access specification #1, test #2 (shown as “Run 2 of 4”)
3.    Access specification #2, test #1 (shown as “Run 3 of 4”)
4.    Access specification #2, test #2 (shown as “Run 4 of 4”)

每次测试运行时间通过测试设置选项里中的测试运行时间控制组来设置,如果运行时间设置为零,直到你按停止按钮,运行的测试才会停止。状态栏也显示其他信息,如失败的测试和预备的驱动器,预备的驱动器信息表明iobw.tst文件将在逻辑驱动器上被创建。

4.3 Topology panel -拓扑结构面板

拓扑结构面板显示当前活动的管理器(Dynamo)和线程(Worker)的分级表。

  • 点击worker,manager,或All Managers,去查看和修改他的磁盘目标、网络目标和存储规格等选项的设置。
  • 如果你点击一个worker,可以使用这个worker上的磁盘目标、网络目标和存储规格选项,可以修改当前设置,所有改变将被应用于这个worker上。
  • 如果你点击一个manager,上面分布一系列的适合manager的磁盘目标和网络目标选项,可以修改这些选项,(当manager上所有的worker设置相同时,将显示这些数值;反之,worker的数值不同时,将显示灰白色。)所有改变将被应用于这个manager的worker上。
  • 如果你点击“All Managers”,没有目标在磁盘目标或网络目标选项显示,因为managers的目标列表也许是不同的。对他们进行适合类型的相同的修改,这些目标数值将被显示,所有改变将被应用于所有manager上的所有worker上。
  • 双击manager,All Managers,将显示或隐藏它的子选项。
  • 用鼠标右键单击manager更新它的目标列表。
  • 扯拽worker,manager,All Managers,可以在一个表里查看此次测试运行的结果。

出现在拓扑结构面板的标准情况如下:

4.4 Disk Targets tab -磁盘目标选项

磁盘目标选项允许你监测和控制当前在拓扑结构面板上已选择的磁盘worker所使用的磁盘。

逻辑驱动器显示为一个黄色盘图标、驱动器字母和任意名字。(只有当它们是写状态时)

开始运行时,Iometer会写一个名为“\iobw.tst.”的文件存储到逻辑驱动器上,如果这个文件不存在,这个逻辑驱动器图标前将有个红色的左斜杠。在测试的开始时,文件将被创建并且增长,直到磁盘是被填满。

设置在测试期间使用的区段的数量(0扇区=所有扇区,磁盘大小未被分割,会占满所选逻辑盘所有的空间。1扇区=512B,在测试linux操作系统时,Iometer会强制认为扇区大小为4096B)

 设置在测试期间使用的开始磁盘区(0扇区=物理磁盘或iobw.tst文件起点。)

设置并发执行指令数(根据磁盘数量决定)。

指定每张盘是否能在测试期间反复地被打开和关闭,设置事物迭代数(意思是所有磁盘都是在开始访问时开启,在结束访问时关闭。一般来讲:磁盘从“打开”——“访问的IO数”——“关闭”这个过程称为一个连接。如果开启这个值,并指定了一个数,意思就是:Iometer在开始访问磁盘时打开磁盘,发起这个数量的IO后就会关闭磁盘,然后重新打开磁盘、执行IO……,周而复始)。

(注意:如果系统产生的磁盘I/O数非常大,那么,Iometer或Windows也许会停止、挂掉或崩溃。“very large”的确切值取决于磁盘驱动程序和可以利用的物理内存数。这个问题归结于在Windows和一些磁盘驱动程序的局限性,并且不是Iometer软件的问题。)

4.5 Network Targets tab -网络目标选项

网络目标选项允许你监测和控制当前在拓扑结构面板上已选择的网络服务器所使用的网络界面。

点击为网络服务器选择的网络地址,点击Control取消当前已选择的地址,A网络客户机自动地在已选择的manager和当前manager控制界面之间创建通信连接。

为已选择的网络worker的连接末端指定它所使用的网络地址。

一个网络worker发送一个VI目标到等待确认的最大值。

设置测试跌代次数。

如果网络客户端在拓扑结构面板上被选择,网络目标选项显示client的配置,但是你不可能改变它(client的配置总是相同于它的服务器)。

4.6 Access Specifications tab -存储规格选项

存储规格选项让你控制I/O worker执行它已选择目标的类型。每个已命名的存储规格控制以下内容:

    指定大小的传输百分比。
    读写百分比。
    随机或连续存取的百分比。
    突发传输。
    突发延迟。
    I/O磁盘队列。
    如果有回复,每个I/O请求的回复大小。

可以选择多个存取规格,进行多个测试。

4.6.1 各选项介绍

列出存储规格分配在拓扑结构面板上已选择的worker。

把整个列表中选择的存储规范复制到分配的列表中,你可以从一个表直接拖拽到另一个表中。

从分配列表中移除已选定的存储规范,你可以直接拖拽到表外。

当前所有存储规范列表。

新建存储规范,可以编辑。

编辑从整个列表中选择的存储规范的定义。

复制从整个列表中选择的存储规范并且编辑它。

删除从整个列表中选择的存储规范。

在分配列表中上下移动一个存储规范。

4.6.2    Edit Access Specification Dialog -编辑存储规格对话

编辑存储规格对话让你查看和改变存储规格的定义。
 存储规格的名字。
 指定当前的存储规格被分配给那些worker。
 定义一行或多行I/O执行方式。在本例中定义了2种执行方式:a在存取中,27%存取1MB,73%存取64KB。b.在1MB的读写中100%读,在64KB的读写中58%读。在1MB的存取中67%是随机的,在64KB的存取总80%是随机的。
 使用这些按钮可以删除当前存储规则行,在当前行上或行下添加新行。
 当前行的传输请求“大小”,最大值:1023 MB、1023 KB、1023 Bytes(是用于传输的数据块大小;一般来讲数据块越大,那么它的IOPS就越小。具体的大小设定要根据当前服务器的用途来判断).
 设置当前行的存储百分比,所有行的存储百分数加在一起必须是100%。
 随机读写百分比,对于网络workers,写操作是发送,读操作的接收。当相应的服务器是写,网络客户端便是读。反之亦然。
 随机操作和顺序操作的百分比。(对网络worker不起作用 )
 设置当前行的突发延迟时间,以毫秒为单位。(Delay=0 导致连续运算,此时Burst Length无效)
 设置列队,确定每个I/O在磁盘上的列队的多少(Iometer对磁盘进行访问时,每次都是访问这个值的整数倍扇区。如果没有选定”Sector Boundaries“,而是指定一个值2k,同时数据块大小是3k,那么顺序操作就不是顺序的了,这会导致每一个IO和紧接着的IO之间产生1K的空洞)。
 设置回复,确定回复数,请求和回复一起组成一种交易。
注:传输数据块的大小、读写百分比、随机访问百分比等参数要根据实际被测环境进行合理设置。如在进行复制和磁盘备份中,更多的是连续性读写操作发生;在进行多线程FTP/HTTP下载(如FlashGet)时,随机读取将会上升;在进行BitTorrent下载时,绝大部分都会是具有高度随机性的、高队列深度的磁盘IO操作;

4.7 Results Display tab –结果显示选项

当运行测试时,结果显示选项显示性能统计。当测试运行时,你可以改变结果显示选项的所有控制设置。这些改变将立刻生效。

确定显示性能统计表是否是整个测试收集数据的平均值,或最后的更新值。

指定在几秒内,显示统计表被更新。默认∞(无穷大),意味着显示统计表仅在每次测试结束后被更新。

在左边的每个长条型图中,点下突出的按钮,便会显示不同统计表的菜单。

可以选择显示a worker, a manager或 all managers,如果要更改显示,从拓扑面板中直接拖拽到长条图中即可。

每个长条图中间显示,当前已选择的统计表的数字值。
        每个长条图右端显示,当前已选择的统计表的最大可执行值。

显示仪表盘面板

 点击可以看到更多的结果显示数据。

指定仪表盘显示的倍率

显示仪表盘轨迹,在测试期间一个蓝色的弧线显示最大值和最小值。

开始,停止键,如果运行一系列测试时,开始键将变成“Next”,停止键将停止测试系列。

(注意:a.获得运行时间统计表影响系统性能。当运行一个重要的测试系列时,应该把更新频率设置成无穷大。并且,你应该小心不移动鼠标或进行后台处理,避免多余的CPU被利用和中断。b.当测试网络I/O时,a manager或者“All Managers”的总的I/O IOps 和MBps值包括网络服务器和相应的网络客户端。)

4.8  Test Setup tab -测试设置选项

测试设置选项控制在存储规格表里已选存储规格运行测试的选项。

 测试描述,添加上你对当前测试系列喜欢的描述,这些文字被保存到结果文件里。

 为系列里的每个测试指定运行时间,“0”意味着每次测试运行,直到你按停止键来停止此次测试。

在每次测试开始记录统计表之前设置Iometer等待时间(也就是说忽略前N秒的测试数据)。

指定信息被录制在结果文件里,每个worker的结果是它的目标总述;每个manager的结果是它的workers的总述;all managers的结果是所有managers的总述。如果你选择“None,”在测试开始时,将不会提示你输入测试结果文件。

创建manager时,指定workers数量给这个manager。

为每个存取规则指定一系列的测试方法。循环选项可以被用于自动地为当前测试配置在一个种类不同负载量上收集数据。

指定初始worker数,列队和分级类型为测试类型“Workers周期”和“目标和Workers周期”,对所有其他类型的测试是无效的。

指定目标的最初值,列队和分级类型为测试类型“目标周期”,“相应地增加目标”,“连续地增加目标”,“目标和Workers周期”和“outstandingI/Os和目标周期”,对所有其他类型的测试是无效的。

指定outstanding I/Os的最初值和最终值,列队和分级类型为测试类型“# Outstanding I/Os周期”,“# Outstanding I/Os和目标周期”,这些测试类型在磁盘选项表上忽略# Outstanding I/Os,对所有其他类型的测试是无效的。它不影响网络workers 。(网络Workers总是有一个# Outstanding I/Os为1的值)

4.9 保存和打开测试配置文件

4.9.1 Save Test Configuration File -保存测试配置文件

按工具栏里保存测试配置文件按钮,出现保存测试配置文件对话栏。你可以选择想保存在文件里的一些设置,如测试设置选项设置、结果显示选项设置、整个存储规格、managers和Workers等。

Iometer不提示你保存你对测试设置所做的任何变动,你必须通过按工具栏里保存测试配置文件按钮,来保存测试配置文件。

4.9.2 Open Test Configuration File -打开测试配置文件

按工具栏里打开测试配置文件按钮,出现打开测试配置文件对话栏。你可以选择设置还原被保存的文档,并且你可以重新设置或合并当前设置。

Replace/merge不适用测试设置选项和结果显示选项。这些设置,当被恢复时,总是会替换当前设置。

5 性能指标

本章主要讲述在结果显示页签中各个性能指标的含义。

  • Total I/Os per Second(IOPS):每秒I/O次数,包含读I/O和写I/O。对于磁盘来说,一次磁头的连续读或者连续写就是一次I/O。
  • Read I/Os per Second:每秒读I/O次数。
  • Write I/Os per Second:每秒写I/O次数。
  • Transaction per Second:每秒事务处理数。当在存取规则中设置Reply Size为”no reply”时,Transaction per Second=IOPS,即事务只包含发送数据块;当在存取规则中设置了Reply
  • Connections per Second:每秒连接数。
  • Total MBs per Second:每秒数据传输量,也就是常说的吞吐量,包含读取和写入。Total MBs per Second=IOPS*传输数据块大小= Transaction per Second*(传输数据块+接收数据块)
  • Read MBs per Second:每秒读取数据量。
  • Write MBs per Second:每秒写入数据量。
  • Average I/O Response Time(ms):平均I/O响应时间。
  • Avg.Read Response Time(ms):平均读I/O响应时间。
  • Avg.Write Response Time(ms):平均写I/O响应时间。
  • Avg. Transaction Time(ms):平均事务处理时间。
  • Avg. Connections Time(ms):平均连接时间。
  • Maximum I/O Response Time(ms):最大I/O响应时间。
  • Max.Read Response Time(ms):最大读I/O响应时间。
  • Max.Write Response Time(ms):最大写I/O响应时间。
  • Max. Transaction Time(ms):最大事务处理时间。
  • Max. Connections Time(ms):最大连接时间。
  • %CPU Utilization(total):CPU占用率。
  • %User Time:非内核级应用程序占用时间。
  • %Privileged Time:CPU内核程序占用时间,是在特权模式下处理线程执行代码所花时间的百分比
  • %DPC Time:处理器在网络处理上消耗的时间。%DPC Time是%Privileged Time的一部分。
  • %Interrupt Time:中断时间是在采样间隔期间接收和处理硬件中断处理器花费的时间百分比,如系统时钟,鼠标,磁盘驱动器,数据通信线路,网络接口卡和其它外围设备。
  • Interrupts per Second:每秒中断数。
  • CPU Effectiveness:CPU效率的一个表征:将IOPS除以%CPU Utilization即可得到。
  • Network Packets per Second:每秒网络数据包发送/接收数。
  • Packets Errors:错误包个数。
  • TCP Segments Retrans.per Sec:TCP数据段每秒返回数。
  • Total Error Count:总错误数。
  • Read Error Count:读取错误数。
  • Write Error Count:写入错误数。
</article>

[转帖]iometer - 性能压力测试工具的更多相关文章

  1. [AapacheBench工具]web性能压力测试工具的应用与实践

    背景:网站性能压力测试是性能调优过程中必不可少的一环.服务器负载太大而影响程序效率是很常见的事情,一个网站到底能够承受多大的用户访问量经常是我们最关心的问题.因此,只有让服务器处在高压情况下才能真正体 ...

  2. Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程 - VPS侦探

    Web服务器性能/压力测试工具http_load.webbench.ab.Siege使用教程 - VPS侦探 http://soft.vpser.net/test/http_load/http_loa ...

  3. Web服务器性能压力测试工具http_load、webbench、ab、Siege使用教程

    Web服务器性能压力测试工具http_load.webbench.ab.Siege使用教程 作者: feng 日期: 2012/07/25 发表评论 (0) 查看评论   一.http_load 程序 ...

  4. Web服务器性能/压力测试工具http_load、webbench、ab、Siege、loadrunner

    回头看看 Web服务器性能/压力测试工具http_load.webbench.ab.Siege.loadrunner

  5. 三种web性能压力测试工具

    三种web性能压力测试工具http_load webbench ab小结 题记:压力和性能测试工具很多,下文讨论的是我觉得比较容易上手,用的比较多的三种 http_load 下载地址:http://w ...

  6. (总结)Web性能压力测试工具之WebBench详解

      PS:在运维工作中,压力测试是一项很重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验.但是,在压力测试中存在一个共性,那就是压力 ...

  7. Web性能压力测试工具之Siege详解

    PS:Siege是一款开源的压力测试工具,设计用于评估WEB应用在压力下的承受能力.可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进 ...

  8. Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程

    一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般 ...

  9. 网站性能压力测试工具--apache ab使用详解

    ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对其它类型的服务器进行压力测试.比如nginx.tomcat.IIS等. 下面我们开始介绍 ...

  10. MySQL自带的性能压力测试工具mysqlslap

    mysqlslap是从MySQL的5.1.4版开始就开始官方提供的压力测试工具. 通过模拟多个并发客户端并发访问MySQL来执行压力测试,同时提供了较详细的SQL执行数据性能报告,并且能很好的对比多个 ...

随机推荐

  1. P1990-覆盖墙壁

    分情况: \[\left\{ \begin{aligned} & 条形 \left\{ \begin{aligned} 横着\\ 竖着\\ \end{aligned}\right. \\ &a ...

  2. OCR性能优化:从神经网络到橡皮泥

    摘要:在这个算力还可以的时代,我们的研究人员一方面致力于不断地去研究各中不同的场景中的的通用网络,一方面致力于优化神经网络的学习方式,这些都是在试图化减少AI需要的算力资源. 本文分享自华为云社区&l ...

  3. Java的这个强大功能,很多人都不知道

    摘要:大多数框架采用单一的语言所开发.JNI这项Java中提供的强大功能,却逐渐的被人遗忘了. 本文分享自华为云社区<Java中一个逐渐被遗忘的强大功能,强到你难以置信!!>,作者:冰 河 ...

  4. CWE 4.7中的新视图:工业控制系统的安全漏洞类别

    摘要:CWE今年的第一个版本在5/1前发布了,做为软件安全的重要分类标准,我们来看下这个版本有那些变化. 本文分享自华为云社区<CWE 4.7中的新视图 -- 工业控制系统的安全漏洞类别> ...

  5. 浏览器史话中chrome霸主地位的奠定与国产浏览器的割据混战

    作为前端老鸟,从IE的6.7.8开始做前端,各种兼容性折磨死人.js还好有了jQuery.chrome出来后,真是救苦救难,解救程序员的于水火.但是可恶的boss还是要求兼容ie6,7.感谢淘宝团队的 ...

  6. 优化 uniapp 发行操作:一键打包、混淆代码

    ​ uniapp一键发行代码并混淆代码 第一步.在项目根目录下安装插件 npm install javascript-obfuscator -g 安装完成后,javascript-obfuscator ...

  7. AtCoder Regular Contest 124

    比赛链接:Here A - LR Constraints 赛时做这个好迷啊,英文题面解释不清楚,还是看了日语原文才搞懂 \(n\) 个卡牌上有两个 字符 + 数字 组合,L 的右边所有元素 + 1,R ...

  8. 领域驱动设计(DDD)实践之路(四):领域驱动在微服务设计中的应用

    这是"领域驱动设计实践之路"系列的第四篇文章,从单体架构的弊端引入微服务,结合领域驱动的概念介绍了如何做微服务划分.设计领域模型并展示了整体的微服务化的系统架构设计.结合分层架构. ...

  9. Spring Boot 2.x :日志框架@Slf4j的使用和logback文件配置

    为什么是SLF4J? 默认情况下,Spring Boot会用SLF4J + Logback来记录日志,并用INFO级别输出到控制台. 怎么使用SLF4J? 如果我们在一个Spring Boot 的程序 ...

  10. 如虎添翼!高德地图+Serverless 护航你的假日出行

    ​ 作者 | 刘金龙(福辰) 高德团队 引言 ​ "前方事故多发地段,请注意保持车距..." "您已疲劳驾驶,请注意休息..." "前方经过泰山旅游景 ...