加速 AI 训练,如何在云上实现灵活的弹性吞吐

AI 已经成为各行各业软件研发的基础,带来了前所未有的效率和创新。今天,我们将分享苏锐在AWS量化投研行业活动的演讲实录,为大家介绍JuiceFS 在 AI 量化投研领域的应用经验,也希望为其他正在云上构建机器学习平台,面临热点数据吞吐不足的企业提供一些启发。

1. 背景

JuiceFS 最初是为了解决互联网行业在云上存储大量数据时遇到的问题。随着 AI 技术的发展,一些使用 AI 进行研发的企业开始关注到 JuiceFS,其中包括量化私募机构,有新兴的量化机构,他们从一开始就在云上构建自己的投研平台,也有一些头部老牌基金,他们正从机房开始向云延伸。

量化投研是一种利用数学模型对大量市场数据进行分析和挖掘,以获取市场行情的规律和趋势,并进行投资决策的投研方法。随着人工智能技术的快速发展,机器学习和深度学习等算法已广泛应用于量化投研,成为金融行业中率先应用人工智能的领域之一。下面这张图显示了量化机构每天的任务数量。黄线代表任务数量的变化情况。我们可以看到任务数量在上班时间内明显增多,而下班时间则明显减少。

1.png

目前,大部分量化私募使用的 IT 资源都是在机房内,CPU 核数、内存和存储等都是固定的。在这种情况下,当面临波动的任务负载时,可能会出现以下问题:

  • 机房提供的是固定算力,在低峰期会有过剩的资源,而在高峰期研究员则需要排队等待,这会导致资源的浪费和效率的降低。研究员希望他们的想法能够尽快得到处理,公司也希望最大限度地利用资源。

  • 突然出现的任务负载增加可能会导致计算资源不足。例如,当研究员有灵感时或者在验证新的论文时,需要进行大规模的验证。此外,当招募新员工或高峰期到来时,计算资源不足也会成为一个问题。

  • 由于机房的扩容周期通常为三个月,而硬件缺货时甚至需要等待六个月,供应链的周期很难满足业务需求。

弹性计算是解决上述这些问题的最简单方法。

2. 弹性计算的优势

在过去的两年中,已经注意到越来越多的量化私募从机房开始转向云端。对于直接在云端构建研究平台的机构,可以直接在 AWS 这样的公有云上进行部署。这样,所有的资源都可以轻松地使用,只需简单地点击鼠标即可启动或关闭,从而大大缩短 time to market 的时间。不再需要等待硬件选型和购买的时间,而且所有的计算资源都可以根据需要进行弹性使用,无论需要多少算力都可以灵活分配。

然而,对于那些已经有一定历史的量化私募机构而言,它们已经建设了大量的 IDC 设施,因此不可能将这些全部放弃,然后转向公有云。因此,它们需要先充分利用这些 IDC 设施,并将其与云计算结合起来。

混合云可能是更多机构要选择的方案

机房内现有的资产可以作为一个固定算力,满足平均或低峰期的算力需求。增量部分可以在云上进行扩展,使用的资源按秒计费。通过这种方式,机房内已有的资产也能够得到更好地利用。

弹性算力还有一个重要好处,就是可以更快地使用最新的硬件设备。相比之下,如果自己购买硬件,可能需要等待 3 年或 5 年的折旧期限,这使得我们难以跟上硬件的更新换代。弹性算力的好处也在于可以帮助我们更快地跟上技术的发展。

3. 弹性环境中,存储的痛点

计算只是简单的处理过程,而数据则需要进行持久化,因此存储通常比计算更难弹性化。在弹性计算过程中,需要考虑如何保留已经处理的数据,以便后续使用。同时,在扩展算力时,需要确保存储能够支持相应的需求,并具备高可用性和可扩展性。否则,可能会面临数据丢失或性能下降等问题。

痛点一:性能、成本和效率如何取舍?

在进行存储选型时,企业通常会考虑三个因素:性能、成本和效率。这些因素在存储系统的设计中相互影响。在存储选型时需要综合考虑不同方案的优缺点,以找到最适合企业需求的方案。

在模型训练阶段,用户通常会追求高性能的存储方案。例如,机房里提供全闪存的文件存储,AWS 上提供 FSx for Lustre 等产品都会选择更高级的硬件,这些方案都能提供出色的吞吐性能。然而,存储成本也较高,因此需要寻找低成本的全量数据归档存储方案。在机房里,一些高密度存储方案也可以降低成本,在云上会选择使用 Amazon S3 等对象存储服务。

为了追求成本和性能,用户在机房和云上都会构建出两套异构的存储。一套低成本的存储系统用于全量归档,另一套高性能的存储则用于模型训练。这种多套存储的环境也带来了管理数据迁移、数据冷热等问题,尤其是在多个区域、多个云环境下,这种情况会变得更加复杂

因此,我们需要有效的解决方案,既能快速、省钱,同时又能高效地管理存储。

痛点二:存储系统扩容慢

运维过存储系统的人深知存储系统扩容的缓慢。存储系统本质上是一组硬盘,用于存储数据。当需要增加存储容量时,通常的想法增加硬盘。然而,在分布式存储系统中,扩容并不是这么简单的过程,需要对所有数据进行重新平衡,以便更有效地管理存储系统中的所有数据。此外,存储硬件的性能是有限的,如果一部分性能用于数据迁移,就会影响线上业务的服务能力。

举一个简单的例子,我们将一个巨大的存储集群缩小为仅三台机器,每台机器配备两个硬盘,存储一些数据,如下方这个图示。在分布式系统中,为了确保数据的安全,我们通常会将数据复制多份,通常存储三份。下图,圆圈、三角形和菱形各代表一个文件,在分布式架构中,每个图形都有 3 份。

分布式存储-三备份

当存储容量不足时,需要加入新的机器,以扩展存储空间。然而,新的数据并不会只存储在新的机器上,而是必须对现有数据进行重平衡以更有效地管理所有数据。在这种情况下,数据会使用一套算法从旧位置移动到新位置。同时,硬盘提供的能力是有限的,如果我们将一部分固定能力用于数据迁移,则无法为线上业务提供服务。

存储扩容-数据再平衡

运维工程师们深知存储集群扩容的挑战,选择何时迁移和股票投资中择时一样让人难以预测。如何平稳地搬家,以及如何在不影响线上业务的情况下避免事故,都是一项复杂的任务。仅仅靠自动机制很难完成好,因为业务负载的情况是难以预知的,通常要老司机手动挡干预。除了扩容,当集群中出现了硬盘损坏的情况,就要将其中的数据转移至新的硬盘中,同样要确保每份数据存储了三份。因此,即便不进行扩容,大规模的存储集群仍然需要每天都进行数据搬迁。

在这种困难的存储系统扩容条件下,当新的算法、研究员和灵感出现时,存储通常会成为拖累。

痛点三:可用容量很多,性能不足了,为什么?

之前提到的是容量不足导致需要扩容,但是在量化私募这个领域中,我们发现大部分的客户需要扩容的原因并不是容量不足,而是由于吞吐性能不足

硬盘提供的性能是有限的,当现有硬盘的性能跑到极限时,就必须购置新的硬盘来满足性能需求。许多量化客户,虽然他们的存储容量还有很大的富余,但为了满足新的性能需求,他们仍需要扩容。

举个例子,假设现在需要读取的数据存储在下图圆圈所示范围,要求性能非常高,那么圆圈所在硬盘的性能已经达到了极限;接着另一个研究员需要读取同样存储在这块硬盘上的三角形,但这块硬盘的性能也已经到了极限,因此读取三角形数据的速度一定会很慢。

性能不足引发的存储扩容,造成存储空间闲置

为了实现增加性能,需要将三角的数据迁移到新的硬盘上,就是图上没有标红的硬盘。

为什么这个问题在量化私募行业特别明显呢?因为我们的行业最原始的数据可能来自于市场数据。以 A 股的数据为例,过去 10 年的数据加在一起才 240G,而今天硬盘容量都好几 TB 一块,这就意味着我们要处理的原始数据实际上是有限的,可能最多也只有几十 TB 的规模。但这几十 TB 的原始数据可能被数十到数百名研究员共享,他们需要同时读取同一份数据,这导致了性能瓶颈的出现。这是量化行业使用数据的一个特点,即由于数据的共享和读取需求,容量充足但性能不足的情况很常见。这也是最开始有量化基金找到 JuiceFS 这个产品去帮他们解决的一个问题。

因此,对于这类会产生热点数据的场景,即对计算的弹性要求更加极致时,匹配性能可伸缩的存储,可以更好地实现整体的性能和成本得到的平衡。

4.JuiceFS 如何实现性能扩展 & 性价比

在2017年,当我们开始研发 JuiceFS 时就决定要为云环境设计。我们注意到当时市场上的所有文件存储产品都是在 2005 年前后或更早设计的,甚至还有一些是在 90 年代设计的。这些产品仍然广泛地用于量化私募行业中。由于我们的基础设施的基础资源环境已经发生了变化,因此在开发新产品时,必须跟上我们现在所使用的环境的发展趋势。

JuiceFS 企业版架构图

在这张图中,三个虚线框代表了文件系统的三个核心组件,元数据引擎、数据引擎和客户端,它们一起实现了文件系统的关键功能。

文件系统可以简单地理解为一种用于组织、管理和访问文件和目录的技术。比如我们电脑上使用的硬盘,文件系统提供了一种与它的交互方式,即通过文件和目录(文件夹)的形式来访问和管理存储在硬盘物理介质上的数据。

例如,在 Linux 中一块硬件格式化文件系统后,挂载到一个目录上,看到的是一个目录树,其中包含目录、文件夹和文件。每个文件都可以设定权限,并具有时间戳,记录了创建时间、上次修改时间等,称为元数据。它们存放在上图左下角的虚线框内所示的Juicedata自研元数据引擎中,这个引擎很大程度上决定了文件系统的性能。

右下角虚线框代表文件内容的存储。这部分是 20 年前存储系统最重要的功能之一,需要管理大量机器和其中的硬盘。例如,在 HDFS 中的 DataNode,Ceph 中的 RADOS,Lustre 中也有 ChunkServer,这些服务需要完成例如数据分块、存储、副本管理、迁移等,很复杂。在云环境中,S3 已经将这个问题解决得非常出色。因此,当我们决定在云上重新构建一个文件存储系统时,我们不再需要管理大量硬盘。相反,我们可以站在 S3 的基础之上,为其增加更多的功能。在 JuiceFS 的设计中,用户存储在 JuiceFS 文件系统中的所有文件内容直接存储在用户自己的 S3 Bucket 中。

图片上方展示的是一个客户端访问系统,JuiceFS 提供了最标准的 POSIX 接口,并支持像 HDFS 等不同的 API 互通。这让开发者在编写程序时更加便利,可以根据自己的需求选择最适合的接口。此外,我们还提供了性能扩展功能,以满足更高的性能需求。

因为 S3 提供的性能和语义不足以满足高性能的模型训练或投研分析的需求,所以我们需要一种中间解决方案来弥补这些不足。例如,PyTorch 需要的是一个 POSIX 文件系统,但 S3 只提供HTTP API。JuiceFS 就是这样一种解决方案,它可以将数据存储在 S3 中,同时提供 POSIX 和其他 API,以满足不同应用的需求,并通过内部优化来提供最佳的性能

要解决上文提到量化机构面临热点数据吞吐不足的问题,需要介绍JuiceFS的缓存功能。 当用户的 GPU 计算节点需要读取数据时,所有数据的访问都会首先从 S3 中拉取一次,然后存储在JuiceFS 缓存中。在以后的访问中,所有数据都可以在缓存中被命中,从而获得与全闪存文件存储相当的性能。JuiceFS 的缓存层可动态伸缩,为用户提供可弹性扩展的吞吐性能。此外JuiceFS 的缓存层可以与计算节点上的高性能存储形成一个分层的多级缓存,进一步提高性能。

JuiceFS 企业版缓存

总结一下,使用JuiceFS,数据都可以保存在低成本的 S3 中,降低了存储成本;同时, 通过一个动态的缓存层为 S3 提供了加速,还实现了吞吐性能的弹性扩展

如果热点数据仍然存储在有限数量的 NVMe 盘中,扩大整个缓存层的规模实际上并没有太大的意义。为了解决数据热点问题,可以使用 cache 分组的方式,让热点数据在每个组中都得到存储。用户只需要根据需求建立多个缓存组,通过简单的配置调整即可在短时间内完成,非常有效地解决了数据热点问题。

JuiceFS 企业版 缓存分组

用户可以设置自己的 cache group,或者为每个团队设置自己的 cache group,这样可以扩展热点数据的性能,并且整个系统的性能也可以基本上线性扩展。此外,如果用户在下班后关闭了这些cache group,就可以避免额外的成本。

对于那些仍然拥有机房资产的量化私募机构,可以使用混合云部署方案,数据仍然存储在 S3 中,但可以预热到机房中的 cache group 进行计算加速。

JuiceFS 混合云部署架构图

JuiceFS 可以在云环境和机房环境中使用两个 JuiceFS 实例进行数据复制,而这个过程对用户来说是透明的,无需进行额外的操作。JuiceFS 自动将热数据存储在高性能的 cache 层中,这意味着不论用户在机房还是云上执行任务,都可以快速访问热数据,从而解决了现有资产和云上弹性部署的混合使用问题。

相关阅读:乾象投资基于JuiceFS 构建云上量化投研平台

本文转载于网络 如有侵权请联系删除

相关文章

  • 第16篇:Weblogic 2019-2729反序列化漏洞绕防护拿权限的实战过程

    Part1前言大家好,我是ABC_123。前两期分享了《第14篇:Struts2框架下Log4j2漏洞检测方法分析与总结》、《第15篇:内网横向中windows各端口远程登录哈希传递的方法总结》,本期讲解一个Weblogic拿权限案例。最近安服的同事打比赛,给我陆续发了好几个没有拿下来的Weblogic的站点,一直在想尽各种办法研究,争取拿下权限。各种WAF防护、终端防护、不出网、SUID不一致、EXP没回显等等原因,造成了现有工具、EXP都没法利用,难度都挺大的。接下来分享一个实战案例,一个Weblogic站点,T3、IIOP协议都关闭。我粗略看了一下,初步判断是有waf及终端防护在,绕过的过程还是曲折的,于是把过程记录下来,分享给大家,为了防止打码不全造成项目信息泄露,我还是拿一个虚拟机环境做演示吧,但是思路都是完整的。Part2技术研究过程Weblogic中间件判断打开weblogic站点,输入一个不存在的路径,服务器返回如下,证明是Weblogic中间件。后续经过扫描探测发现T3、IIOP协议同时关闭了,仅限HTTP访问。于是回想了一下,Weblogic在HTTP下大致有以下几

  • 终于打通了视频号跳小程序,直播带货搞起来

    为了帮助开发者通过视频号直播变现,微信官方提供了小程序接入视频号的能力。这算是一个新功能,也不能说是新开放的,因为从内测到半全量也有一段时间了。这个小程序包含了在微信侧开的小商店,也包含了商户自己开发的小程序,对应上官方的词,就是标准版交易组件和自定义版交易组件。 当视频号和小程序打通之后,视频号所属的商业价值也渐渐体现出来了,视频号不仅可以给商家做品牌宣传,同时也能利用视频号为自己的小程序商城引流。特别要说的是在视频号中开直播,还可以上架自己小程序的商品,用户在看直播的过程中点击商品链接直接跳到商家的小程序去下单,商家可以在自己开发的小程序上加入各种营销逻辑,可以说这个功能是万千想通过视频号直播卖货的小程序开发者所期盼已久的。我们要说的是自定义版交易组件,按官方给的文档操作一遍,把流程记录下来,便能开通自定义版交易组件。上传商品审核准备好调用接口的工具,比如postman,接口地址: https://api.weixin.qq.com/shop/spu/add?access_token=xxxxxxxxx请求参数:{ "out_product_id":"

  • Requests库(十八)复杂json解析

    Requests库分享系列:Requests库(一)Requests库(二)Requests库(三)如何获取接口传参参数Requests库(四)如何传递不一样的参数Requests库(五)接口返回状态码Requests库(六)接口返回响应头和请求CookiesRequests库(七)重定向和超时Requests(八)代理和会话对象Requests库(九)准备的请求和SSL证书验证Requests库(十)接口请求认证Requests库(十一)实战请求钉钉群机器人 Requests库(十二)实战获取今日头条24小时热文Requests库(十三)利用钉钉机器人打造一个钉钉群定时推送今日头条24小时热闻Requests库(十四)一文揭秘如何获取快手关注的视频Requests库(十五)一文解决解析text/html格式返回数据Requests库(十六)一文展示如何利用Requests请求xml格式接口Requests库(十七)一文展示如何利用Requests发送form表单请求Requests库(十八)Requests发送application/x-www-form-urlencoded请求 前

  • “推荐系统”加上“图神经网络”

    作者|PlatoSIGIR'19的一篇论文NeuralGraphCollaborativeFiltering(NGCF)介绍了用图神经网络(GNN)来增强协同过滤推荐系统的方法。今天我们来聊一聊下面几个话题: 什么是协同过滤?如何用协同过滤做推荐?NGCF是如何构图的?NGCF在基础的GNN上有哪些改动?如何用NGCF做推荐?协同过滤协同过滤(CF)是一种常用的推荐系统做法。协同,指收集广大用户的口味;过滤,指过滤出『我』可能喜欢的物品。这个方法通过收集用户的兴趣和口味,给用户推荐口味相近的人喜欢的物品。在构建推荐系统的过程中,我们收集了很多用户与物品的交互历史,比如豆瓣电影中用户对电影的打分;淘宝中用户对物品的浏览、购买等。这些交互历史能够表示成一个用户、物品的交互矩阵。协同过滤模型需要1.用向量表示用户的口味、物品的特性;2.通过用户的口味、物品的特性去近似交互历史;3.给用户推荐交互得分最高的物品。矩阵分解(MF)是一种基础的协同过滤模型。MF视频[1]截图,有编辑MF大致过程如下(另可参考视频[1]):将用户看成矩阵,物品看做矩阵,为embedding长度使用矩阵的乘

  • 全勤矿工systemdMiner最新变种利用暗网代理下载恶意模块

    近日,深信服安全团队捕获到一款新型的Linux挖矿木马,该木马通过bash命令下载执行多个功能模块,通过SSH暴力破解、SSH免密登录利用、HadoopYarn未授权访问漏洞和自动化运维工具内网扩散,且该木马的文件下载均利用暗网代理,感染后会清除主机上的其他挖矿木马,以达到资源独占的目的。感染现象被感染的Linux服务器上,可以明显看到一个CPU占用率很高的进程,名字为随机字符:查看进程对应的可执行文件,是以一串疑似MD5的字符命名(并非文件真实MD5),但已经被删除:通过crontab–l命令可以看到可疑的定时任务:定时任务对应的sh脚本内容为base64编码过的命令:病毒母体-int该ELF文件是作为病毒的母体和守护进程,运行后会将自身进程名重命名为一个随机的字符串:删除自身对应的可执行文件:解码并创建目录/tmp/.X11-unix,检测目录中是否存在00文件,该文件是用于记录进程的pid:创建子进程:通过setsid,将子进程脱离当前会话并且创建新的会话并将新的会话进程ID写入/tmp/.X11-unix/00文件:执行base64编码的bash命令,共有5个不同的bash命令

  • 经典Bug永流传---每周一“虫”(二)

    XSS:跨站脚本攻击,Cross-SiteScripting,为了和前端的css避免重名,简称为XSS,是指通过技术手段,向正常用户请求的HTML页面中插入恶意脚本,执行。基础知识吸收型Bug:web端:账号登录以后,在短信息页面,选择任意一个好友进行聊天,在聊天输入框,输入“<script>alert("hello")</script>”,确定后,会弹框提示,并发出内容显示test!!!期望:显示alert("hello")产生原因:开发没有对js进行过滤,造成的;经典原因:在编辑框,新手或者没有培训过这个XSS注入测试,容易丢失这个测试点;XSS注入测试,是可以避免窃取cookie、放蠕虫、网站钓鱼等,属于安全测试范畴,可以让网站的安全性提高,保护用户的使用安全;测试场景:在web/APP或者接口数据珠宝输入框地方;预防:问题提交Bug,并分享到到测试讨论组,进行不同项目同样场景的验证;(除了这种,还有接口数据抓包,修改数据也要注意这个测试项,后续分享)百度谷歌XSS含义,以及还有其他方式,并对其他常用的测试方式和测试

  • mall整合RabbitMQ实现延迟消息

    本文主要讲解mall整合RabbitMQ实现延迟消息的过程,以发送延迟消息取消超时订单为例。项目使用框架介绍RabbitMQRabbitMQ是一个被广泛使用的开源消息队列。它是轻量级且易于部署的,它能支持多种消息协议。RabbitMQ可以部署在分布式和联合配置中,以满足高规模、高可用性的需求。RabbitMQ的安装和使用1.安装Erlang,下载地址:http://erlang.org/download/otpwin6421.3.exe2.安装RabbitMQ,下载地址:https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.14/rabbitmq-server-3.7.14.exe3.安装完成后,进入RabbitMQ安装目录下的sbin目录4.在地址栏输入cmd并回车启动命令行,然后输入以下命令启动管理功能:rabbitmq-pluginsenablerabbitmq_management复制5.访问地址查看是否安装成功:http://localhost:15672/6.输入账号密码并登录:guestguest7.创建帐号并设置

  • 同时开左右两个SAPGUI编辑器显示同一段ABAP代码

    很多文本编辑器都支持同时开左右两个窗口显示同一段代码,使用场景可能是比较同一段代码的不同版本差异,或者是ABAP里,同一段代码在Netweaver不同版本里的实现差异,比如版本为SP1的系统A和版本为SP2的系统B。假设我想同时显示系统A和系统B上的一段ABAP代码,使用菜单Versions->Versionmanagement:点击按钮”Remotecomparison”:指定一个RFCdestination,这个destination指向待比较的另一个SAP系统:然后就能看到比较结果:如果想在同一系统通过左右两个SAPGUI窗口同时打开同一段代码,只需使用事务码SE39。输入Left和Right两个窗口待打开的程序名称:结果如下:

  • 图解LeetCode第 344 号问题:反转字符串

    该文已加入开源项目:LeetCodeAnimation(用动画的形式呈现解LeetCode题目的思路,目前8500Star)。地址:https://github.com/MisterBooo/LeetCodeAnimationLeetCode上第344号问题:ReverseString题目描述编写一个函数,其作用是将输入的字符串反转过来。示例1:输入:"hello" 输出:"olleh"示例2:输入:"Aman,aplan,acanal:Panama" 输出:"amanaP:lanaca,nalpa,namA"思路解析直接从两头往中间走,同时交换两边的字符即可动画演示动画演示参考代码1//344.ReverseString 2//https://leetcode.com/problems/reverse-string/description/ 3//TwoPointers 4//时间复杂度:O(n) 5//空间复杂度:O(1) 6classSolution{ 7public: 8stringreverseS

  • LOHO、瑞幸、喜茶们如何“围剿”老品牌?

    2018年是中国互联网行业从消费互联网进入产业互联网的分水岭,也是中国新经济崛起的元年。新老品牌势力转换开始,宜家、无印良品、星巴克等老品牌在中国市场无不感受到了一股被“围剿”的压力,这背后是越来越多中国本土的新锐的新零售品牌的崛起,日前召开的36krWISE大会就验证了这样的趋势。36kr联合多家知名投资机构和第三方数据研究公司发布了“我们是新经济之王”的榜单,覆盖40个赛道上的近500家新锐企业,引发了行业高度关注,堪称新经济行业的“奥斯卡”,其中“新品牌之王”榜单上的玩家,就是让老品牌感受到压力的新锐品牌,其中品牌都是近年来在新零售大潮中崛起的新锐品牌,如gaga鲜语、roseonly、乐纯、幸福西饼、造作、江小白、喜茶、LOHO眼镜、花点时间等。为什么它们能够获奖?36kr的颁奖词是这样说的: “好用、不贵、创新是新国货标签下的硬实力:LOHO眼镜用ZARA模式将眼镜消费做成快时尚,喜茶奈雪的茶让大众相信传统茶饮文化将诞生下一个星巴克,积累多年的制造能力和本土作战优势,是它们能够成长的原因,接下来,到了抛开标签、用产品在消费升级洪流突围的时刻。”这些品牌崛起的背后是新经济的方兴

  • 【RL-TCPnet网络教程】第3章 初学RL-TCPnet的准备工作及其快速上手

    第3章      初学RL-TCPnet的准备工作及其快速上手俗话说万事开头难,学习一门新的知识,难的往往不是知识本身,而是如何快速上手,需要什么资料和开发环境。一旦上手后,深入的学习就相对容易些了。本章节就起到这样的作用,主要说明初学RL-TCPnet需要做的准备工作。3.1 初学者重要提示3.2 开发环境说明3.3 配套例子重要说明3.4 RL-TCPnet参考资料3.5 RL-TCPnet调试方法3.6 总结3.1  初学者重要提示1、学习本网络教程,大家没有任何网络基础也没有关系,因为本教程以实战为主。更深入的网络协议知识,需要大家专门去学习,特别推荐书籍《TCP/IP详解》。2、网络教程涉及到的实战操作比较多,大家初学一定不要嫌麻烦,其实首次实现电脑端和开发板之间的通信,还是非常兴奋的。3、本教程配套的所有例子都使能了DHCP,所以强烈推荐将网线接到路由器或者交换机上面测试,可以自动获取IP地址。如果需要固定IP进行测试,学习第57章即可。4、本教程配套的大部分例子都是裸机,uCOS-III,RTX和FreeRTOS四个版本。针对这三款操作系统,我们都有教程。(1)FreeR

  • Zookeeper-watcher机制源码分析(一)Watcher的基本流程

    Watcher的基本流程ZooKeeper的Watcher机制,总的来说可以分为三个过程:客户端注册Watcher、服务器处理Watcher和客户端回调Watcher客户端注册watcher有3种方式,getData、exists、getChildren;以如下代码为例来分析整个触发机制的原理|ZooKeeperzookeeper=newZooKeeper(“192.168.11.152:2181”,4000,newWatcher(){publicvoidprocessor(WatchedEventevent){System.out.println(“event.type”);}});zookeeper.create(“/mic”,”0”.getByte(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateModel.PERSISTENT);//创建节点zookeeper.exists(“/mic”,true);//注册监听zookeeper.setData(“/mic”,“1”.getByte(),-1);//修改节点的值触发监听|ZooKeeperAPI的初始化

  • 你在微信不经意点开的链接 可能成为别人追踪你的标靶

    一条八卦新闻、一个微信红包、一次小游戏邀请……你会不会在微信对话框中经常收到类似链接?如果你不小心点开了,那你的地理位置信息很有可能就被对方“盯上”了。记者调查发现,一些不法商家打着“查出轨”“抓老赖”等看似正义的名义,通过淘宝、百度贴吧、QQ群等方式出售微信定位权限牟利,这条交易他人隐私信息的产业链正在快速形成。这样的微信链接,实际上出卖了你的隐私信息“精定位准”、“小三克星”、“一个链接轻松定位老赖”……记者调查发现,目前在淘宝、微信公众号及百度贴吧上存在不少“精准定位找人”商家,他们声称,只要一个简单的链接,就能轻松定位你想找的人的地理位置。记者在淘宝网上搜索相关关键词发现,一家名为“知情者云平台”的店铺里售卖的唯一一款商品,名为“汽车微型gps定位跟踪器远程无线强磁迷你超小追踪器”。记者以需要定位服务的名义与卖家沟通,该卖家告诉记者,目前微信链接定位这种方式使用最多,定位效果也是最好的,使用较多的微信定位链接有三种形式:第一种是向对方发送文章链接获得对方的地理位置;第二种是邀请对方玩小游戏获得对方的地理位置;第三种是向对方发送红包获得对方地理位置。卖家表示,当被定位者点开这些链

  • 移动商业化,巨头们着急了

    百度在移动收入突破20%之后,开始力推百度移动网盟,本周四将在黄山召开一年一度的百度联盟峰会,很可能会宣布移动更多商业化举措,例如更诱人的分成比例,更多的开发者服务等。腾讯则在大力推进广点通广告平台,以分成等诱人策略向开发者示好。阿里在去年便推出了淘宝客无线开放平台。显而易见的是,移动商业化,巨头们都开始着急了。 移动互联网从布局到变现创业必须经历一个从初期用户原始积累,到中期探索变现,再到后期压榨式变现的过程。移动互联网作为巨头们的二次创业,已完成原始积累。1、移动App用户已抢无可抢。微信用户和手机百度用户数早已突破5亿,几乎与中国智能手机存量重叠。新增的智能手机用户数已放缓,Q1中国智能手机出货量出现第一次下滑。这意味着,供互联网巨头们抢食的用户已经不多了。2、用户导入移动带来的冲击。互联网公司在将用户和流量不断导入到移动时,却又未能获得与PC端匹配的变现价值。导入的过程实质是在打击PC端已建立的商业模式。因此互联网公司对于移动端的商业化早已急不可耐,只是此前时机并不成熟。移动化越成熟的公司,商业化越饥渴。微信、百度和阿里均已完成布局。3、移动商业化支撑体系已成。移动商业化有三大

  • 李飞飞:人工智能应以人为本

    美国斯坦福大学人工智能实验室主任李飞飞接受美国麻省理工《技术评论》杂志采访时表示,人工智能应以人为本。作为斯坦福大学人工智能实验室主任以及GoogleCloud(谷歌云端平台)现任首席科学家,李飞飞一直致力于推动人工智能变革。但这项变革需要更多人参与进来。在接受麻省理工《技术评论》杂志高级编辑威尔·奈特(WillKnight)的采访时,她谈及了为什么每个人都会受益于我们对技术的人性化方面的重视。《技术评论》:您为什么会加入谷歌?李飞飞:研究前沿人工智能技术让人感到满足和有收获,但我们正在见证历史上这一伟大的觉醒时刻。对我而言,考虑人工智能对世界的影响十分重要,而最重要的一项任务则是让这项技术变得大众化。云端是巨大的计算机器,可以为每个行业提供计算服务。《技术评论》:您到目前为止学到了什么?李飞飞:我们需要更加以人为本。如果要谈论我们目前在人工智能领域取得的进展,我会认为这是模式识别的伟大胜利。模式识别极度以任务为中心,缺乏情境认知,也没有人类所拥有的灵活学习能力。我们还想要开发这样一种技术,它能够让人类的生活变得更美好,让我们的世界变得更安全,让我们的生产效率变得更高,让我们的产品质量

  • Python快速学习第八天

    本文内容全部出自《Python基础教程》第二版 10.1模块现在你已经知道如何创建和执行自己的程序(或脚本)了,也学会了怎么用import从外部模块获取函数并且为自己的程序所用:>>>importmath >>>math.sin(0) 0.0复制让我们来看看怎样编写自己的模块。10.1.1模块是程序任何Python程序都可以作为模块导入。假设你写了一个代码清单10-1所示的程序,并且将它保存为hello.py文件(名字很重要)。代码清单10-1一个简单的模块 #hello.py print"Hello,world!"复制程序保存的位置也很重要。下一节中你会了解更多这方面的知识,现在假设将它保存在C:\python(Windows)或者~/python(UNIX/MacOSX)目录中,接着就可以执行下面的代码,告诉解释器在哪里寻找模块了(以Windows目录为例):>>>importsys >>>sys.path.append("c:/python")复制注:在UNIX系统中

  • APP 端签名方案

    支持方法POST\GET请求携带Header字段字段名备注是否参与签名X-App-Versionapp版本yesX-Device-Idapp设备idyesX-Platformapp设备类型yesX-Timestampunix时间戳(秒)yes,时间戳与服务器时间戳相差超过60s则会失败X-App-Key业务申请,服务端下发,需要保存在数据库内,客户端切记不能泄露,每一个appkey对应一个appSecretyesX-Nonce随机数,客户端可以用md5(timestamp+guid+rand(0,1000))yesX-Signature客户端签名结果noContent-Typeapplication/josn, application/x-www-form-urlencodedno签名方法签名字符串:X-App-Key+X-App-Version+X-Device-Id+X-Platform+x-Nonce+$RequestMethod+$RequestPath+$Body+X-Timestamp其中 RequestMethod为请求方法,这里为:POSTRequestPath 为请求

  • WPF开发快速入门【0】前言与目录

    前言 WPF是一个生不逢时的技术,刚推出的时候由于是XP时代,WPF技术有两个不方便的地方: 1、由于操作系统没有自带Framework,需要另外安装,比较麻烦; 2、程序第一次启动时,由于要加载Framework,所有显得有点慢。 后来,这些问题都不存在了:操作系统自带Framework了,机器性能提高了,但是WEB时代来了,做桌面应用的本来就不多了,加上WinForm又比较简单易用,谁还用WPF呢! 在这种情况下写一个WPF快速开发入门的教程的意义是什么呢?本教程是针对具备WinForm经验的.NET开发人员,我希望他们能尽快转到WPF上来。 推荐WinForm开发者转向WPF的原因有以下几点: 1、WonForm的布局已经完全不匹配目前Win10的布局风格,虽然可以通过代码实现相关效果,但远不如WPF实现的那么自然; 2、WPF能实现的界面效果比WinForm好,对于WPF初学者而言,可能效果还不如WinForm拉的控件漂亮,但不能因为这个原因就否定WPF,WPF的可能性是大于WinForm的; 3、WPF支持MVVM框架,MVVM模式是非常值得学习掌握的开发框架; 4、未来的开

  • 扩展LVM 逻辑卷存储空间

    原因: 运行在XenDomU的磁盘空间不足,需要扩展。DomU的存储主要为【os镜像文件+lv逻辑卷】的形式,现要对逻辑卷进行扩展。 过程(离线方式): 卸载逻辑卷 umount/dev/VolGroup00/pgLogSlave2复制 对逻辑卷进行扩展 lvextend-L+500G/dev/VolGroup00/pgLogSlave2//在当前空间的基础上增加500G空间复制 检查逻辑卷文件系统 e2fsck-f/dev/VolGroup00/pgLogSlave2//-f强制检查复制 扩张文件系统 resize2fs/dev/VolGroup00/pgLogSlave2复制      

  • Django之视图函数

    Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python函数(类),它接受Web请求并且返回Web响应。 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。 无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。 简单的视图 fromdjango.httpimportHttpResponse importdatetime defcurrent_datetime(request): now=datetime.datetime.now() html="<html><body>Itisnow%s.</body></html>"%now returnHttpResponse(html) 复制  让我们来逐行解释下上面的代码: 首先,我们从django.ht

  • 51nod 1501 石头剪刀布威力加强版

    分析:很容易想到lcm(n,m)是个周期。不妨设n<=m,设k=a*lcm+b*n+c,(0<=b*n<lcm,0<=c<n),记g=gcd(n,m),然后枚举数字num=0,1,2,枚举i=0,1,...,g-1,然后从i开始以n为步长走,直到回到原地,就得到了坐标为j*n+i的所有点走一个周期对答案的贡献。 然后就是a数组以n为步长在b数组上平移,共移b-1次,可以dp做一下,类似前面的思路,还是枚举数字,然后枚举余数,最后c次直接模拟即可,全部加起来就是答案了。 复杂度是O(n+m)的。。然而。。1015msT了。。。改成C就变成500+ms了。。orz 1#include<stdio.h> 2#defineSWAP(x,y){llt=x;x=y;y=t;} 3#definelllonglong 4constintmaxn=5e5+5; 5intx[maxn],y[maxn]; 6llW[3][maxn],L[3][maxn]; 7llw[3][maxn]={0,0,0},l[3][maxn]={0,0,0}; 8inlineintS

相关推荐

推荐阅读