使用Python下载的11种姿势
|
这个场景我们显然可以使用 RPC 完成调用,但是实际上,支付系统是不关心的计费系统的结果,两个系统不存在直接强依赖的关系。 大家可以想象一下,用户实际上已经收到银行卡扣款短信了,但是支付系统因为计费系统失败,导致对外返回是失败的结果。这对于用户来讲,不能接受啊。我都付钱了,你却告诉我支付异常。 所以对于这种场景,直接使用 RPC 调用由以下几点不足:
那一定要用 MQ 解决吗? 其实不一定,对于我们上面举的场景,我们其实可以使用异步 RPC 或者线程池异步调用 RPC 就可以解决。 毕竟增加一个 MQ, 系统就变得更加复杂,我们还要单独运维 MQ,这对于小团队来讲,工作量还是很大的。 但是这种方式,还是解决不了,增加一个下游系统,上游系统还要改动的代码囧境。 增加 MQ 解耦 这个场景使用 MQ 解耦,带来几点优点:
数据驱动的定时任务场景举个例子,支付公司每日都需要对账,主要目的是核实自己系统的应收的钱与支付渠道端是否一致,主要流程分为以下几步: 定时任务下载渠道对账文件,下载方式可能为 Http 接口下载,也有可能 SFTP 下载 定时任务解析对账文件,然后将对账数据入库 定时任务将自己本端支付数据与对账数据核对
上面的定时任务使用 Spring-Schedule 调度,假设各个定时任务下载时间如下所示: AES-128需要加密迭代10轮(Round_0至Round_9),在迭代之前,输入的128bits明文会与初始的128bits密钥进行AddRoundKey( )(轮密钥加)操作,其结果会作为迭代的第一轮(Round_0)输入;从第1-9轮每轮的变换次序与步骤相同,第1轮列混合产生的状态矩阵会与第1轮产生的轮密钥进行异或,其运算结果会作为第2轮的输入,以此类推;第10轮则少一个列混合的环节,但是为了和其它轮的操作时间对齐,使得其结果和第10轮产生的轮密钥异或不会出错,所以特意使用一个寄存器Shiftrow_delay延时一拍来代替少了的列混合环节,这样从Shiftrow_delay出来的结果再进行轮密钥加时,就刚好与第10轮产生的轮密钥对齐(在某种意义上可以有效的防止侧信道攻击)[7]。 KeyExpantion是密钥拓展模块,它也是需要10轮运算(RoundkeyGen_0至RoundkeyGen_9),它每轮都依次进行三个步骤:Rotword()、SubByte()、Rcon[j]异或,在第1到第9轮,每轮密钥在进行轮常量异或完之后产生的状态矩阵会与数据列混合之后的状态矩阵进行异或操作,第10轮则是密钥的轮常量异或完的状态矩阵与数据的延时寄存器出来的状态矩阵进行异或,此时会拉高valid_out信号,输出密文[7]。 解密电路设计请参考文献[7]。 3.3 性能评估 通过FPGA的测试与验证,采用tt28nm工艺对该设计进行综合,流水线结构的AES设计面积为0.17mm2,这大约是循环迭代结构(0.018mm2)的10倍,这也是情理之中的结果。该结构的AES数据从输入到寄存器的关键路径用时为0.39ns,从寄存器到输出的关键路径用时也是0.39ns,因此理论上该结构的最大频率为:1GHz/0.39ns=2.56GHz[7]。 【结语】
本文简要介绍了一种AES的流水线结构的IP核设计方法,目前采用的是与CPU同源同频[2]的时钟,当然,推荐与处理器时钟做异步处理,并且配合DMA(Direct Memory Access,直接存储器访问 )使用,这会使得AES工作在接近自身最大频率(当然这也是一个功耗与速度的折中),从而能够最大化缓解CPU的压力,进一步的提升吞吐量与加密效率。 (编辑:阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
