台式电脑翻开百度云盘链接不存在www3344hbcom总提示不存在的

台式电脑312jj打开链接,总提示www312jjcom不存在的_百度知道
台式电脑312jj打开链接,总提示www312jjcom不存在的
我有更好的答案
用浏览器 wq2.hg8.tech 就能浸
ie中毒了!
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。台式电脑312jj打开链接,总提示www312jjcom不存在的_walnutfvfv_新浪博客
台式电脑312jj打开链接,总提示www312jjcom不存在的
   早盘财经快讯
  1.将建100个生态文明示范区
  证券报记者日前获悉,由多部门参与制定的关于加快推进生态文明建设的意见(以下简称“意见”)已上报。意见最重要的内容之一是,有望在全国范围内建设100个生态文明示范区。纳入示范区的地区,除将获生态补偿、财政转移支付等一系列优惠支持外,还可能会编制自然资产负债表。
  2.40强房企年内融资2080亿元 同比大涨85.7%
  根据链家地产市场研究部对上市房企前40强的监测显示,2013年1月-11月,包括万科在内的40家上市房企披露的融资总额约为2080亿元,同比增长85.7%。无独有偶,上海(楼盘)易居房地产研究院向《证券日报》提供的一份研究报告也显示,2013年前三季度,房地产开发企业到位资金增速有所回落,但仍保持高位,房企整体资金状况较好。
  3.中美将加强合作推进页岩气开发
  按照主席和奥巴马总统达成的建设中美新型大国关系的共识,为推进中美经济关系的发展,中美双方通过中美战略与经济对话框架下经济对话,就加强在能源和气候变化、创新和食品药品安全方面的合作进行了磋商。按商定发布《关于加强中美经济关系的联合情况说明》。中方欢迎国内、国际私营企业和投资者参与页岩气勘探开发。美方承诺与中方开展技术、标准、等方面的合作,并促进中方完善有关监管框架,以促进页岩气勘探开发的健康、快速发展。中美双方承诺共同推进页岩气行业的技术创新、环境监管和资源监管,鼓励两国页岩气开发取得成功,从而共同推进在全球范围内对页岩气等非常规天然气资源的负责任的开发利用,保障能源供应安全和能源市场稳定。
  4.纤维板胶合板期货今日上市
  大连商品交易所纤维板、胶合板期货合约(简称两板期货)定于6日正式上市交易。两板期货首日均挂牌8个期货合约。两板期货上市交易合约标的为中密度纤维板和细木工板,交易单位均为500张/手,最小变动价位均为0.05元/张,交易合约月份均为1-12月。两板期货合约交易保证金上市初期暂定为合约价值的7%,涨跌停板幅度为上一交易日结算价的4%,新合约上市首日涨跌停板幅度为挂盘基准价的8%。两板期货合约交易手续费为成交合约金额的万分之一,当日同一合约先开仓后平仓手续费分别按成交合约金额的万分之零点五收取。
  5.11月份物流业景气指数为53.0%
  昨日,物流与采购联合会发布的最新数据显示,11月份物流业景气指数(LPI)为53.0%,比上月回落0.6个百分点。分项指数中,业务总量指数、新订单指数、设备利用率均出现不同程度的回落,但都保持在50%以上,显示出物流业经济仍然保持着平稳较快增长,但增势有所减缓。
  6.新股发行计划昨上报 过会企业抢食IPO重启头啖汤
  证券报记者获悉,已过会企业5日上报新股发行计划。除因券商存在问题而导致IPO搁浅的企业,剩下的企业绝大部分均计划抢食IPO重启头啖汤,预计在20日前后递交会后事项材料,少数企业由于自身或中介机构原因可能将无缘进入首批方阵。
  7.新能源汽车迎大发展机遇
  12月4日,全球锂电产业界期待的“G20-锂电峰会”第一次CEO会议在深圳麒麟山景大酒店召开,在的强力推动和使用环境改善的背景下,
2014年将迎来电动汽车的发展元年。此外,继首批新能源汽车推广应用城市公布后,第二批试点城市推广名单也有望近期出台。受多重利好集中释放的刺激下,昨日新能源汽车概念股表现十分强势.
  8.保监会副主席王祖继:大数据时代要防范创新风险
  昨日,保监会副主席王祖继在21世纪保险(和讯放心保)年会上表示,保险监管需要顺应大数据的要求,深入推进保险业创新发展和监管体系的完善;要防范创新风险,加强对风险的预警跟踪,对于大数据时代下的新的风险形态保持足够的敏感和警惕,促进保险业市场可持续的发展。
    一周行情综述和后市展望
  一.重点信息评论
  今晚重点关注:
  1.三部委放行“递延纳税”
  版401K明年问世
  备受业界期盼的企业年金、职业年金个人所得税递延纳税优惠(下称“递延纳税”),终于破冰。为促进我国多层次养老保险体系的发展,12月6日,财政部、人力资源社会保障部、税务总局联合发布《关于企业年金、职业年金个人所得税有关问题的通知》(下称《通知》)称,自日起,实施企业年金、职业年金个人所得税递延纳税优惠。《通知》规定,对单位和个人不超过规定标准的企业年金或职业年金缴费,准予在个人所得税前扣除;对个人从企业年金或职业年金基金取得的投资收益免征个人所得税;对个人实际领取的企业年金或职业年金按规定征收个人所得税。(本次新政实际上宣布我国走上了国际通行的EET模式,未来年金参保者均可享受递延纳税的好处,相当一部分参保者还会在一定程度上降低个人所得税税负。随着新政推开,的“401K”初露端倪,后续会有更多优惠出台,这对于资本市场也是实质利好消息。)
  2.证监会发布两项与IPO相关的信息披露指引
  证监会发布两项与IPO相关的信息披露指引,一是关于首次公开发行股票并上市公司财务报告审计截止日后,主要财务信息及经营状况信息披露指引;二是关于首次公开发行股票并上市公司与盈利能力相关的信息披露指引.证监会新闻发言人邓舸6日表示,市场化、法治化、常态化是退市制度建设的目标,下一步证监会将严格执行现行退市制度,实现市场运行效益最大化,推动存在可能与需要的公司在规则框架内主动退市,建立交易所市场与场外市场对接机制,疏通退市公司转板交易、重新上市的渠道。维护上市公司、投资者、市场、社会稳定。(资本市场真正意义的退市或许会从2014年开始,随着壳资源价值降低,以及市场投资理念的变化,未来垃圾股炒作会逐步退出历史舞台,相关垃圾股风险巨大。普通投资者还是要尽量回避这些股票。)
  二.一周研报精读
  星宇股份 ( 中投证券)
walnutfvfv
博客等级:
博客积分:0
博客访问:80
关注人气:0
荣誉徽章:以前的出现了www3344hbCom错误带码_百度知道
以前的出现了www3344hbCom错误带码
我有更好的答案
每个人的(ej7k.biz)境遇不同
采纳率:100%
请问原来不这样吧?如果是,出事前您在电脑上干了什么,下载什么了,什么东西有异常,如果想起什么追问我说说,如果您自己也不知怎么引起的,建议还原系统或重装。Win7810还原系统,右击计算机选属性,在右侧选系统保护,系统还原,按步骤做就是了,如果有还原软件,自带的映像备份,并且进行了备份,也可以用软件、映像备份还原系统。有问题请您追问我。
如果是不能开机或开机卡死机了:反复开关机试试,放一段时间试试,确实不可以就重装系统吧,如果自己重装不了,花30元到维修那里找维修的人帮助您。只要注意自己的电脑不卡机、蓝屏、突然关机,开机就不会这样了。
本回答被网友采纳
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。也不能wwW3344iu打开了,为什么最近3344iucOm总是不能打开_百度知道
也不能wwW3344iu打开了,为什么最近3344iucOm总是不能打开
我有更好的答案
另外的在qyu.ba7.tech里
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&figure&&img src=&https://pic2.zhimg.com/v2-d857d778cc9e7bc_b.jpg& data-rawwidth=&1434& data-rawheight=&618& class=&origin_image zh-lightbox-thumb& width=&1434& data-original=&https://pic2.zhimg.com/v2-d857d778cc9e7bc_r.jpg&&&/figure&&blockquote&作者:孙健波&br&&br&看到题图大家可能会感到熟悉,又或者会觉得部分有些陌生,这是一张汇集了目前大数据生态下大多数成熟组件的架构图。众所周知,大数据生态很复杂,对于个人来说,要全部学会可能要花费好几年时间。而对于企业来说,要最大程度发挥其价值,构建一个成熟稳定、功能多样的大数据平台,期间花费的时间以及人力成本着实难以估量,更何况还需要考虑持续维护的问题。这就是七牛的 &a href=&http://link.zhihu.com/?target=https%3A//qiniu.github.io/pandora-docs/%23/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Pandora&/a& 大数据平台灵感的来源,我们构建一个大数据平台,作为产品提供给用户,快速帮助用户挖掘数据价值。&/blockquote&&hr&&h2&&b&1. Pandora 的背景和解决的问题&/b&&/h2&&p&七牛是以云存储起家的公司,平台上有着大量的数据、业务日志以及运维监控数据,基于对这些数据的管理以及分析的需求,&a href=&http://link.zhihu.com/?target=https%3A//qiniu.github.io/pandora-docs/%23/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Pandora&/a& 诞生了。我们搭建了一个可靠的大数据平台,将大数据生态中的各个组件配套成一个体系发挥作用,用来解决实际业务中碰到的繁琐、复杂、多样化的问题。这个大数据平台的工作从数据的采集便已开始,通过一条数据总线,再根据业务需求分流到不同的下游产品,从存储到数据可视化,从实时的数据变换到离线的算法分析,我们构建一个全栈的大数据分析产品。&/p&&p&与此同时,我们在大数据平台之上构建了业务工作流的概念,让用户只需关心构建符合他们业务模型的工作流,而无需具备大数据技术背景。不仅大大降低了用户挖掘大数据价值的成本,更为重要的是去除了大数据技术门槛,使得各行各业的专家可以更好的施展自己对业务的深度理解。&/p&&p&在工作流上,用户不仅可以清晰的监控自己的数据流动,轻松构建各类实时、离线的数据变化与自定义计算,还可以按需弹性扩容、快速调度云端资源,降低了运维的成本。与此同时,我们集成了社区中大量的优秀开源软件,对其进行优化及定制,一方面以便发挥其更强大的功能,另一方面,也让熟悉使用这类开源软件的用户可以做到快速迁移,无缝切换使用。&/p&&p&&br&&/p&&h2&&b&2. Pandora 的功能特点与应用场景&/b&&/h2&&p&那么,&a href=&http://link.zhihu.com/?target=https%3A//qiniu.github.io/pandora-docs/%23/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Pandora&/a& 到底是一个怎样的平台呢?工作流又是怎样的呢?让我们首先来直观的看一下工作流的使用形态,如图 2 所示。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-5ab2b830ed7de8591a09fef_b.jpg& data-rawwidth=&1016& data-rawheight=&734& class=&origin_image zh-lightbox-thumb& width=&1016& data-original=&https://pic2.zhimg.com/v2-5ab2b830ed7de8591a09fef_r.jpg&&&figcaption&图 2 工作流形态&/figcaption&&/figure&&p&最左边的数据源是工作流的起点,数据源可以是一个,也可以是多个。在实时计算的工作流中,我们只能有一个数据源,这个数据源就是数据收集汇聚的中心,也可以理解为数据总线,所有不同终端的数据打向数据源,再通过数据源根据业务需求分发到不同下游;在离线工作流中,我们可以有多个数据源,不同的数据源代表的是存储在不同地方的离线数据,可以是七牛云存储中的不同文件,又或是 HDFS 等不同类型的数据仓库。&/p&&p&不管是实时还是离线,从数据源开始,你就可以根据需要做不同类型的处理。&/p&&p&最基本的处理是对数据进行一些定制化的计算,比如你可能需要对每天海量的数据进行一个定时分析汇聚的功能,计算每分钟有多少条数据、每小时有多少条数据,从而缩减数据规模节约存储成本,或者从中生成一份数据日报、周报等等;又比如在这个信息爆炸的时代,你从网上抓取了海量的数据,需要对数据进行一些清洗、过滤、删选,以此分析社会热点或其他有价值的信息;又比如你想对数据做一个延伸或扩展,最常见的就是对一个 IP 获取它的运营商、所在区域等信息。那么你就可以创建一个计算任务,最简单的编写一些 SQL 语句就可以做数据变换;进阶一些的使用方式就是编写一些 UDF (用户自定义的函数),做一些较为复杂的变化;更高阶的就是直接编写一类插件,直接使用大量 Java 的类库对数据进行操作。当然,在离线计算中,除了单个数据源的计算任务以外,你还可以对两个数据源,亦或是两个计算任务的结果进行聚合,然后再进行计算等等。计算任务可以满足你对于整个工作流的完整数据处理需求。&/p&&p&在进行过一个基本的计算以后,可能最常见的一个需求就是对这些计算后的数据进行检索,直白的说就可以查询你的数据。那么你可以创建一个导出到日志检索,在这里你就可以搜索你的计算结果。当然,你的数据在数据源中也完全可以不经过任何计算任务,直接导向日志检索。又或者你希望对数据进行更完善的实时监控和数据可视化处理,那么就可以导出到时序数据库,针对带有时间戳的数据做高性能数据写入和查询优化,满足你针对实时海量数据的即席查询需求。&/p&&p&另一方面,你工作流计算后的结果,可以直接再次导出到七牛云存储进行永久保存,或者与后续的数据结合进行分析。你也可以理解为通过大数据服务,七牛的云存储变成了一个数据仓库为客户提供服务。之前已经存储在七牛云上的数据(如 CDN 日志等),完全可以直接使用我们的大数据平台进行计算,无需任何接入过程。&/p&&p&为了方便用户充分利用自己的数据,我们甚至提供了导出到 HTTP 服务,用户可以构建自己的 HTTP 服务器来接受经过 Pandora 大数据平台计算后的数据。&/p&&p&&br&&/p&&h2&&b&3. Pandora 的系统架构与变迁&/b&&/h2&&figure&&img src=&https://pic2.zhimg.com/v2-47c5ee53ea6d40ee95b931_b.jpg& data-rawwidth=&2046& data-rawheight=&1110& class=&origin_image zh-lightbox-thumb& width=&2046& data-original=&https://pic2.zhimg.com/v2-47c5ee53ea6d40ee95b931_r.jpg&&&figcaption&图 3 产品架构图&/figcaption&&/figure&&p&图 3 是 Pandora 的产品架构图,基本的功能在第 2 节中均已介绍,在此不再赘述,在讲解系统架构之前,让我们对照产品架构进行一些基本的系统组件技术名称的对照说明,以便下文描述简洁便于理解。数据通过我们提供的数据上报工具 logkit、各类 SDK 或者用户直接调用开放 API 接入,数据进入后无论是数据源本身还是经过计算任务后的临时数据存储节点,我们都一称作消息队列,技术上称之为 Pipeline,像不同下游提供导出服务的组件我们称之为 Export,在 Pipeline 中承担各类计算任务处理的组件我们称之为 Transform,下游的时序数据库服务我们称之为 TSDB,下游的日志检索服务我们称之为 LogDB。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-3e77dde77b2f2956e34bccd8_b.jpg& data-rawwidth=&709& data-rawheight=&589& class=&origin_image zh-lightbox-thumb& width=&709& data-original=&https://pic1.zhimg.com/v2-3e77dde77b2f2956e34bccd8_r.jpg&&&figcaption&图 4 Pandora 系统架构图&/figcaption&&/figure&&p&有了这些基本概念后,让我们对照图 4 Pandora 系统架构图,开启我们的 Pandora 架构演进之旅。&/p&&p&&b&3.1 数据上报&/b&&/p&&p&最左侧的组件是数据收集的部分,数据来源于客户各种各样的系统。相信大部分用户在接入大数据平台时,都会面临数据收集这一难题,一方面希望数据不重不漏全部收集上来,一方面又要数据收集尽可能高效且不太消耗机器的各类资源,同时还要满足场景各异的不同情况下的数据收集需求。熟悉这块的朋友可能也早已了解,社区已经有很多不同类型的开源数据收集工具,知名的包括 flume、logstash、fluentd、telegraf 等等,他们各有利弊,功能上大都满足需求,但是在性能上和一些非通用需求的场景上不尽如人意。为了更好的满足用户不同类型的需求,我们自主研发了一个可以收集各种各样数据源数据的工具&a href=&http://link.zhihu.com/?target=https%3A//github.com/qiniu/logkit& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&logkit&/a&,图 5 是 logkit 的功能架构示意图。logkit 使用 go 语言编写,以插件的形式定制不同的数据收集解析需求,处理高效、性能损耗低,同时也已经开源(&a href=&http://link.zhihu.com/?target=https%3A//github.com/qiniu/logkit/wiki& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/qiniu/logkit&/span&&span class=&invisible&&/wiki&/span&&span class=&ellipsis&&&/span&&/a&),我们非常欢迎大家一起参与到 logkit 的使用和代码开发定制中来,为 logkit 提提 PR,当然,也非常乐意接受您关于 logkit 的任何意见或建议,只需在 github 提 issues 即可。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-c3e5b6348fb0add0e8dcf24_b.jpg& data-rawwidth=&1700& data-rawheight=&1274& class=&origin_image zh-lightbox-thumb& width=&1700& data-original=&https://pic1.zhimg.com/v2-c3e5b6348fb0add0e8dcf24_r.jpg&&&figcaption&图 5 logkit 功能架构示意图&/figcaption&&/figure&&p&有了这样一款数据收集工具,几乎 90% 的数据收集场景我们已经解决了,但是还会有诸如ios、android 客户端数据直接上报、页面请求点击数据直接上报等需求,为此我们提供了各类语言的 SDK 方便用户使用,以弥补 logkit 功能上无法满足的需求。&/p&&p&&b&3.2 大数据总线 Pipline&/b&&/p&&p&数据收集上来后,就正式进入我们的 Pandora 大数据平台了。所有上报的数据无论最终是否计算或存储,都会统一暂存进入我们的大数据总线 Pipeline。相信经过上面的介绍,很多读者早已发现,Pandora 帮助用户根据不同场景选择最适合的大数据分析方式。而这套模式的核心,毋庸置疑,就是处理数据在不同大数据产品间的流转。&/p&&p&Pipeline 就是这样一条数据总线,在数据总线的基础上我们打通一条条管,根据所需的场景导出到后端相应的存储服务上。同时据此来进行资源分配和任务管理。这样一来,就可以避免用户技术选型及技术架构与使用姿势和业务场景不匹配的情况,同时也可以利用云计算的优势,按需分配、快速扩容。&/p&&p&&b&3.2.1 基于 confluent 的初版&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-b1eee459c13daf4edaa6d2f46b537131_b.jpg& data-rawwidth=&1016& data-rawheight=&653& class=&origin_image zh-lightbox-thumb& width=&1016& data-original=&https://pic2.zhimg.com/v2-b1eee459c13daf4edaa6d2f46b537131_r.jpg&&&figcaption&图 6 Pipeline 第一版&/figcaption&&/figure&&p&如图 6 所示是我们的第一版架构,实现上我们通过定制开源版本的 confluent,并把它作为我们这个架构系统的核心。数据要流入系统,我们首先构建了一个 Points Gate(API 服务器),Points Gate 解析校验用户的数据格式并调用 confluent 中 kafka-Rest 提供的 rest API
将数据写入到 kafka,利用 schema-registry 完成数据格式的校验以及数据解析,通过 kafka 获得数据管道的能力。&/p&&p&在进行元数据创建时,我们的调度器在元数据服务器上创建一个用户元数据存储在 MongoDB 当中。对于 MongoDB 的元数据访问,我们构建了一个二级缓存系统(即图中 qconf),数据在进入或者导出时都会通过二级缓存访问元数据,这样数据就可以快速得到校验,扛住海量的数据吞吐。Kafka 本身包含了 Zookeeper 组件,我们也借此来保证整体系统组件的服务发现以及数据一致性这两个问题。&/p&&p&然而,随着应用的增加,数据量越来越大,这样,单个定制版的 Confluent 并不能满足这些数据量增长的业务压力,以及用户不断增加的场景需求。kafka topic(partition) 不断增长导致整体响应变慢,无法快速切换灾备等待问题日益凸显。在这个基础上,我们对原本的系统架构进行了调整。&/p&&p&&b&3.2.2 Pipeline 的升级&/b&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-a5eaabfbe96c6810dfac_b.jpg& data-rawwidth=&758& data-rawheight=&508& class=&origin_image zh-lightbox-thumb& width=&758& data-original=&https://pic1.zhimg.com/v2-a5eaabfbe96c6810dfac_r.jpg&&&figcaption&图 7 pipeline 的升级&/figcaption&&/figure&&p&如图 7 所示,我们对 Pipeline 的第一次整体升级包含了大量的组件基础架构的调整。首先我们构建了 Confluent 的多集群系统,将单个 Confluent 集群规模控制在100台机器以内,分区数量控制在1万以内,根据需求对集群进行路由。&/p&&p&可见通过多集群系统,我们可以合理控制每个 confluent 集群的规模,同时根据我们的调度器按照需要切换用户到不同的集群上,实现快速切换、扩容、容灾、隔离等调度需求。&/p&&p&其次我们对 Points Gate、Transform、Export 中无状态组件进行了容器化处理,利用我们七牛内部的容器云平台,实现了无状态服务的快速部署、扩容以及灰度发布等需求。&/p&&p&这次架构的调整效果显著,我们成功抗住了每天上百 TB,千亿级数据点的数据增量。&/p&&p&不止于此,为了更高的性能提升以及节约成本,我们在上述升级之后进行了第二次的架构升级。这次升级主要体现在对 Confluent 的进一步定制(或者说替换),我们不再使用 kafka-rest,同时对打点的数据格式进一步优化,又一次节约了近一半的机器成本。&/p&&p&&b&3.3 数据导出服务 Export&/b&&/p&&p&在解决了数据总线问题以后,问题的重中之重自然是如何处理数据导出的问题。众所周知,数据导出其实就是从一个上游系统拉取数据,然后将数据再发送到下游系统的过程。但这里面涉及的难点和调整可能大多数都是不为人知的了。在介绍我们的导出服务架构之前,非常有必要描述一下针对海量数据导出,到底有哪些挑战?&/p&&p&&b&3.3.1 数据导出的挑战&/b&&/p&&p&首先面对的第一大挑战自然是&b&高吞吐量&/b&的问题,海量数据不断涌入带来的必然问题就是网卡和 CPU 分配的问题,一旦流量分配不均,就会出现大量因网卡、CPU 负载过高带来的延迟,严重影响服务可用性。&/p&&p&显然,&b&保证低延迟&/b&就是第二个挑战,一旦各个链路有一个环节配合不均衡,就会带来大量延迟,如何保证导出的上下游始终保持较高的吞吐量,从而保证较低的延迟,是一个非常大的调整。&/p&&p&为了保证低延迟,就要更好地&b&适配多种下游&/b&,使其始终保证高吞吐,了解下游不同服务的特性,并针对这些特性动态的调整资源,亦是一个很大的挑战。&/p&&p&除此之外还有分布式系统的常见问题,需要保证&b&服务高可用&/b&,以及&b&水平扩展&/b&的能力。保证任务单元标准化,任务粒度可以切分扩展;保证调度任务节点故障不影响其他节点的正常导出等等。&/p&&p&最为重要的是&b&自动化运维&/b&,当导出的任务涵盖数十上百台机器后,人力已经无法精细化处理每台机器的任务分配,资源必须可以自动调度、调整以及构建统一的任务监控。&/p&&p&&b&3.3.2 导出服务功能介绍及架构演进&/b&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-f39d515d1233e8bef8c80_b.jpg& data-rawwidth=&1506& data-rawheight=&1268& class=&origin_image zh-lightbox-thumb& width=&1506& data-original=&https://pic1.zhimg.com/v2-f39d515d1233e8bef8c80_r.jpg&&&figcaption&图 8 导出服务功能架构图&/figcaption&&/figure&&p&让我们来看一下导出服务的功能架构图,如图 8 所示。我们的导出服务主要涉及三个层级,一个是元数据管理,在这一层保证任务的分配以及监控展示;第二层则是任务管理层,除了基本的任务切分、并发管理以及通信协议之外,还包含了压力预估模块,根据之前的数据量预估下一阶段的数据流量,从而调整资源分配;再下一层则是数据处理层,在这一层完成诸如数据预取、数据校验、压缩以及推送到下游等任务。&/p&&p&在最初的版本中,我们会在 zookeeper 上面创建一个任务(task) ,Export 通过分布式锁对 task 进行争抢,被抢到的任务则开始直接导出,如图 9 所示。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-959a05ebe7b7b5fb9c4da5e2620723de_b.jpg& data-rawwidth=&953& data-rawheight=&625& class=&origin_image zh-lightbox-thumb& width=&953& data-original=&https://pic3.zhimg.com/v2-959a05ebe7b7b5fb9c4da5e2620723de_r.jpg&&&figcaption&图 9 初版导出服务架构&/figcaption&&/figure&&p&在这样一个初步架构中,我们基本完成了水平扩展以及高可用的需求,同时做了诸如数据预取,延迟报警、数据监控等多种功能和优化。但是流量上来以后,很容易出现某个机器争取的任务流量变大,导致大量数据打到同一台机器上,导致网卡和 CPU 负载过高,延迟急剧升高。本质上就是流量分布不均匀,导致导出性能低下,机器资源的平均利用率也低。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-9d118ea3b092e1ee1e94bacda88826c9_b.jpg& data-rawwidth=&1016& data-rawheight=&738& class=&origin_image zh-lightbox-thumb& width=&1016& data-original=&https://pic2.zhimg.com/v2-9d118ea3b092e1ee1e94bacda88826c9_r.jpg&&&figcaption&图 10 第一次导出服务架构升级&/figcaption&&/figure&&p&此时,我们对该方案进行第一次架构升级,如图 10 所示。我们将原来topic级别的任务按照 parition 进行分布式消费。为了使得每个 partition 粒度的任务大体是均等的,我们将 partition 承载的数据量按照标准化处理,并根据历史流量进行预测,预测结果超过当前我们定制的标准符合的对应容量即触发扩容,这样的标准化有效简化了调度的难度。&/p&&p&同时我们将原来纯粹的 export 改为 master/worker 结构,Master 对收集到的任务进行主动权衡分配,根据任务的历史流量进行流量预测、对任务的 partition 数量、每个 export worker 的机器资源剩余情况,进行综合调度。对于一些特殊任务做机器黑白名单绑定等功能。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-b1dfd3abb611a2b9d544b9e_b.jpg& data-rawwidth=&1016& data-rawheight=&767& class=&origin_image zh-lightbox-thumb& width=&1016& data-original=&https://pic1.zhimg.com/v2-b1dfd3abb611a2b9d544b9e_r.jpg&&&figcaption&图 11 第二次架构升级的导出服务&/figcaption&&/figure&&p&在做了上述工作以后,我们机器的整体利用率有了很大的提升,但是由于下游系统的不同,写入吞吐量始终参差不齐,无法始终保持在一个较高的水平。为了解决该问题,我们再次对架构进行小范围升级,如图 11 所示,我们在导出的 export worker 端增加了一套对下游系统的适配加速模块。其核心思路就是按照下游的吞吐能力进行自动调节请求体大小以及并发度。这个主要是为了解决上下游传输数据速度不匹配,以及下游吞吐量不稳定的问题。&/p&&p&类似于 Flume 的思想,我们构建了一个内存队列,以事务的形式从队列中获取数据(或者失败回滚),根据下游的情况调整单次数据请求的大小和并发度,以及调整出错等待时间等。这样一来,整个导出的吞吐量就可以很有效的进行控制,去除了毛刺,极大的提高了机器资源的使用率以及导出效率。&/p&&p&解决了数据的导出问题,基本上绝大部分数据流转的问题也都解决了。下面我们开始关注 Pandora 下游的一系列服务。&/p&&p&&b&3.4 时序数据库服务 TSDB&/b&&/p&&p&TSDB 是七牛完全自主研发的分布式时序数据库服务。TSDB 针对时序数据定制存储引擎,根据时序数据带有时间戳的特性,我们针对时间戳做特殊的索引,实现数据高速汇入和实时查询获取的能力;同时构建了简单且高性能的 HTTP 写点和查询接口,为查询聚合数据量身定制了类 SQL 语言,完全兼容开源社区 InfluxDB 的 API,支持无缝对接到 Grafana,对数据进行高比例压缩,实现低成本存储。除此之外,TSDB 拥有开源社区版本的 InfluxDB 所没有的分布式、多集群、高可用,水平扩容、以及分库分表能力。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-f7dc8b0ff74f915ddebe7b_b.jpg& data-rawwidth=&953& data-rawheight=&520& class=&origin_image zh-lightbox-thumb& width=&953& data-original=&https://pic4.zhimg.com/v2-f7dc8b0ff74f915ddebe7b_r.jpg&&&figcaption&图 12 TSDB 基本结构示意图&/figcaption&&/figure&&p&如图 12 所示,TSDB 是我们基于 tsm 构建的分布式时序数据库,拥有每秒60万条记录的写入性能以及实时查询聚合分析的能力。在分布式方面,除了基本的多集群、多租户隔离的概念以外,我们还针对性的做了两个强大的扩容功能,一个是根据时序进行纵向集群切割,解决海量数据写入时磁盘的快速扩容问题;另一个则是根据用户的标签进行数据库表横向切割,类似传统数据的分库分表能力。在进行了这两大扩展能力变换后,数据的写入和查询依旧高效,甚至查询速度在分库分表后性能有所提升。&/p&&p&为了实现这样的扩容功能,我们基于此构建了一个分布式计算引擎,解析用户的 SQL 并变成一个个执行计划,将执行计划下推至不同的 TSM 计算引擎实例中进行计算,最后再进行数据 reduce 计算反馈给用户。&/p&&p&除了数据写入性能高以外,还支持数据即时查询,数据写入成功即可查询,数据零延迟;同时支持 InfluxDB 的持续聚合功能,类似于定时任务一样将持续写入的数据不断进行聚合计算;当单个用户数据量过大时,拥有横向拓展能力,集群扩展后写入性能不打折,查询效率更高。针对时序数据的特性,我们将数据进行冷热分离, 对数据按照时间分片,使最近的数据查询性能更高。&/p&&p&&b&3.5 日志检索服务 LogDB&/b&&/p&&p&在了解完我们的时序数据库以后,让我们来看一下下游的另一大服务,日志检索服务,又称 LogDB。日志搜索其实是几乎所有技术开发人员都会需要的服务,传统解决方案 (ELK,Elasticsearch、Logstash、Kibana)
针对小数据量不会出现任何问题。但是当数据量过于庞大时,这些方案也就不那么适用了。&/p&&p&我们 LogDB 的底层可以通过插件的形式接入不同类型的搜索引擎,包括 Solr、Elasticsearch(简称 ES)等,目前承载海量数据搜索任务的底层引擎主要使用的是 ES。与单纯的使用 ES 不同,LogDB 本身是一套分布式系统,管理的单元可以是一个 ES 节点,也可以是一个 ES 集群,所以我们构建了大量的 ES 集群,不同的集群用以适配不同的用户以及不同的搜索需求。&/p&&p&大体上我们将搜索的需求分为两类,一类是 ELK 类需求,针对如程序运行日志、业务访问日志等收集索引,这类需求的普遍特点是数据量大,时效性高,带有时间熟悉,无需存储太长时间,无需更新;另一类需求类似于搜索引擎,数据存在更新需要,且强依赖于不同类型的分词器,数据冷热不明显,不带有明显的时间属性,我们称之为通用检索需求。这两类需求, LogDB 都是完全支持的,但是针对这两类需求,我们做的优化不同。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-0f1fb02b1f71de410ce5b5e26bcc5e84_b.jpg& data-rawwidth=&1016& data-rawheight=&731& class=&origin_image zh-lightbox-thumb& width=&1016& data-original=&https://pic1.zhimg.com/v2-0f1fb02b1f71de410ce5b5e26bcc5e84_r.jpg&&&figcaption&图 13 LogDB 架构图&/figcaption&&/figure&&p&在我们讨论具体的优化之前,让我们先来看一下 LogDB 的架构图, 如图 13 所示。首先是数据的写入,LogDB 是 Pandora 平台下游服务,上游主要是之前提到的 Pipeline 以及 Export。 Export 导出的数据通过 apisever 将数据导入到不同的ES集群当中,根据不同用户的需求给他们提供不同的集群服务,集群之间也可以相互进行切换。&/p&&p&那么如何确认数据到底数据哪个集群呢?为了使得海量的数据快速确认,我们对元数据进行了多级缓存,包括 MongoDB 的实际存储、memcached 的二级缓存,以及本地的缓存,极大提高了数据校验的速度。除此之外,LogDB 本身也是 Pandora 的用户,使用了 TSDB 对自身数据进行监控,使用七牛云存储进行数据快照与备份。同时将计费数据导出到云存储,利用我们的 XSpark 机器进行离线计算。&/p&&p&架构中剩下的部分都是我们针对不同索引做的优化。简而言之,我们首先构建了一个高性能队列,可以让外部的数据持续高吞吐写入;同时我们还会根据历史流量进行动态索引平衡、不同集群的索引跨集群平衡、索引定时清理、VIP 集群隔离等功能;并且会对 ES 的搜索进行分步搜索控制,缓存历史搜索,优化用户搜索的效率和体验等等。关于这一块的详细内容,我们团队在之前已经分享过,可以阅读这篇&a href=&http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzAwMDU1MTE1OQ%3D%3D%26mid%3D%26idx%3D1%26sn%3Deda7cd849d%26chksm%3D813a60a0b64de9b61d13bde8e77b3354be3fffaf701e71c92d878a8c%26mpshare%3D1%26scene%3D1%26srcid%3D0707Brg3flFvbTTiMcm964N7%26key%3D3ca3acd7b7ee2518bdce3c2e0e9e2d49a46ea12b83c037ad5763bd5cfb7eb257d5ae44bbdbd8ef9a7c4a9ff975deda6c176fca62b6c89ffeeae328d0%26ascene%3D0%26uin%3DNzA1NjA1MDIw%26devicetype%3DiMac%2BMacBookPro12%252C1%2BOSX%2BOSX%2B10.12.3%2Bbuild%%26version%3Dnettype%3DWIFI%26fontScale%3D100%26pass_ticket%3D5gBytdtlUoFWshY%252FtouMVkdHhvk%252FyIK3bG6da%252FPeEFVbCbtLm1rwsRWOC1V0cpSW& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《基于&/a& &a href=&http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzAwMDU1MTE1OQ%3D%3D%26mid%3D%26idx%3D1%26sn%3Deda7cd849d%26chksm%3D813a60a0b64de9b61d13bde8e77b3354be3fffaf701e71c92d878a8c%26mpshare%3D1%26scene%3D1%26srcid%3D0707Brg3flFvbTTiMcm964N7%26key%3D3ca3acd7b7ee2518bdce3c2e0e9e2d49a46ea12b83c037ad5763bd5cfb7eb257d5ae44bbdbd8ef9a7c4a9ff975deda6c176fca62b6c89ffeeae328d0%26ascene%3D0%26uin%3DNzA1NjA1MDIw%26devicetype%3DiMac%2BMacBookPro12%252C1%2BOSX%2BOSX%2B10.12.3%2Bbuild%%26version%3Dnettype%3DWIFI%26fontScale%3D100%26pass_ticket%3D5gBytdtlUoFWshY%252FtouMVkdHhvk%252FyIK3bG6da%252FPeEFVbCbtLm1rwsRWOC1V0cpSW& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Elasticsearch&/a& &a href=&http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzAwMDU1MTE1OQ%3D%3D%26mid%3D%26idx%3D1%26sn%3Deda7cd849d%26chksm%3D813a60a0b64de9b61d13bde8e77b3354be3fffaf701e71c92d878a8c%26mpshare%3D1%26scene%3D1%26srcid%3D0707Brg3flFvbTTiMcm964N7%26key%3D3ca3acd7b7ee2518bdce3c2e0e9e2d49a46ea12b83c037ad5763bd5cfb7eb257d5ae44bbdbd8ef9a7c4a9ff975deda6c176fca62b6c89ffeeae328d0%26ascene%3D0%26uin%3DNzA1NjA1MDIw%26devicetype%3DiMac%2BMacBookPro12%252C1%2BOSX%2BOSX%2B10.12.3%2Bbuild%%26version%3Dnettype%3DWIFI%26fontScale%3D100%26pass_ticket%3D5gBytdtlUoFWshY%252FtouMVkdHhvk%252FyIK3bG6da%252FPeEFVbCbtLm1rwsRWOC1V0cpSW& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&构建千亿流量日志搜索平台实战》&/a&公众号文章了解更详细的内容。&/p&&p&&b&3.6 XSpark&/b&&/p&&p&最后有读者看到这里,也许会忍不住想问,如果只是纯粹的想使用一个高度灵活的 Spark 集群,不希望经过 Pandora 各类复杂的计算、导出,甚至数据都没存储在七牛,可不可以享受七牛的 Spark 大数据服务呢?是的,完全可以,这就是我们的 XSpark!&/p&&p&XSpark 不仅与 Pandora 整体完全打通,可以把七牛云存储当成一个数据仓库使用,又完全可以独立使用。即用户除了在 Pipeline 里面做离线计算之外,你还可以选择直接一键生成一个基于容器云的个人专属Spark集群,直接读取你自己的数据源,只要 Spark 支持的数据格式,XSpark 都支持。如果你的数据已经存储在七牛云存储上,XSpark 可以直接高效读取并计算,XSpark 是 Pandora 提供给大数据高端用户的一个高度灵活的离线计算产品。&/p&&p&显然,容器云所具有的优势 XSpark 全都具备,你完全可以根据需要动态伸缩的 XSpark 资源数量与规格,按需启停等等。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-de032c3bfdbecd_b.jpg& data-rawwidth=&1129& data-rawheight=&489& class=&origin_image zh-lightbox-thumb& width=&1129& data-original=&https://pic2.zhimg.com/v2-de032c3bfdbecd_r.jpg&&&figcaption&图 14 XSpark 架构图 &/figcaption&&/figure&&p&图 14 是 XSpark 的架构图。我们将 Spark 的 master 和 worker 分为不同的容器,首先启动 Spark 的 master 容器,获取 master 地址,然后再根据用户的配置,启动相应数量的 worker 容器,worker 容器自动向 master 注册。同时容器云的支撑使得我们的 XSpark 可以在运行过程中进行缩容扩容。&/p&&p&同时 XSpark 也开放了完整的 Spark 监控以及管理控制页面,完全兼容开源社区的 Zepplin 使用方式。&/p&&p&&br&&/p&&h2&&b&4 基于 Pandora 的大数据实战&/b&&/h2&&p&那么我们这样的一套系统,用户体验到底是怎么样的呢?下面我们以收集最常见的 nginx 日志为例来看下实际体验。&/p&&p&首先,为了让用户最舒适的将数据上传到我们平台,用户可以直接部署我们的 logkit 工具,然后打开 logkit 配置页面,如 图15 所示。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-36bda5dea6ce09c97c67415d4beec168_b.jpg& data-rawwidth=&1844& data-rawheight=&1322& class=&origin_image zh-lightbox-thumb& width=&1844& data-original=&https://pic1.zhimg.com/v2-36bda5dea6ce09c97c67415d4beec168_r.jpg&&&figcaption&图 15 logkit 配置页面&/figcaption&&/figure&&p&根据需要一步步选择数据源、配置解析方式、发送方式最后确认并添加。当然,在配置解析方式的页面,你还可以通过页面预先尝试解析器配置是否正确,如 图16 所示。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-154c18cc4d48ee60e271f5dd2176565e_b.jpg& data-rawwidth=&1744& data-rawheight=&1402& class=&origin_image zh-lightbox-thumb& width=&1744& data-original=&https://pic3.zhimg.com/v2-154c18cc4d48ee60e271f5dd2176565e_r.jpg&&&figcaption&图 16 logkit 配置解析器&/figcaption&&/figure&&p&通过简单的几步配置后,你的数据便已经上传到 Pandora 平台,并自动生成了工作流,并且创建好了导出到日志检索服务,如图 17 所示。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-32f8ff44be784c7d3e1defea_b.jpg& data-rawwidth=&1656& data-rawheight=&1214& class=&origin_image zh-lightbox-thumb& width=&1656& data-original=&https://pic3.zhimg.com/v2-32f8ff44be784c7d3e1defea_r.jpg&&&figcaption&图 17 自动创建的实时工作流&/figcaption&&/figure&&p&在工作流中,你还可以创建一些计算任务做一些分析计算,导出到云存储作为数据计算,导出到时序数据库进行复杂的 SQL 查询。之后的大数据分析工作也就会相对容易一些。有了这些准备工作,我们就可以开始进行日志检索查询(图 18 所示)、数据可视化(如图 19 所示)、离线分析(如图 20 所示)等工作。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-7b5ed69db5d8e82b226ebd_b.jpg& data-rawwidth=&1876& data-rawheight=&862& class=&origin_image zh-lightbox-thumb& width=&1876& data-original=&https://pic2.zhimg.com/v2-7b5ed69db5d8e82b226ebd_r.jpg&&&figcaption&图 18 日志检索示意图&/figcaption&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-4568b0baa823e9e01b93d1b_b.jpg& data-rawwidth=&3830& data-rawheight=&1972& class=&origin_image zh-lightbox-thumb& width=&3830& data-original=&https://pic2.zhimg.com/v2-4568b0baa823e9e01b93d1b_r.jpg&&&figcaption&图 19 Grafana 数据可视化&/figcaption&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-8cffcdbd294b6e_b.jpg& data-rawwidth=&1016& data-rawheight=&433& class=&origin_image zh-lightbox-thumb& width=&1016& data-original=&https://pic1.zhimg.com/v2-8cffcdbd294b6e_r.jpg&&&figcaption&图 20 使用 XSpark 离线分析&/figcaption&&/figure&&p&&b&4.1 实时数据分析实战&/b&&/p&&p&在我们这仅仅两三步简单的操作以后,就可以看到哪些十分有价值的数据呢?&/p&&ul&&li&实时总用户访问量(请求数统计),如图 21 所示 &/li&&/ul&&figure&&img src=&https://pic3.zhimg.com/v2-5841b8aab34adf91b4a77a2c6ebf2036_b.jpg& data-rawwidth=&461& data-rawheight=&360& class=&origin_image zh-lightbox-thumb& width=&461& data-original=&https://pic3.zhimg.com/v2-5841b8aab34adf91b4a77a2c6ebf2036_r.jpg&&&figcaption&图 21 实时总用户访问量&/figcaption&&/figure&&p&机器请求数随时间变化趋势,如图 22 所示&/p&&figure&&img src=&https://pic1.zhimg.com/v2-9b729bad48dfabe1eb3113dbeb909068_b.jpg& data-rawwidth=&772& data-rawheight=&334& class=&origin_image zh-lightbox-thumb& width=&772& data-original=&https://pic1.zhimg.com/v2-9b729bad48dfabe1eb3113dbeb909068_r.jpg&&&figcaption&图 22 机器请求数随时间变化趋势&/figcaption&&/figure&&p&实时请求状态码占比,如图 23 所示&/p&&figure&&img src=&https://pic4.zhimg.com/v2-35a5e3e20b_b.jpg& data-rawwidth=&447& data-rawheight=&316& class=&origin_image zh-lightbox-thumb& width=&447& data-original=&https://pic4.zhimg.com/v2-35a5e3e20b_r.jpg&&&figcaption&图 23 实时请求状态码占比&/figcaption&&/figure&&ul&&li&实时请求 TOP 排名,如图 24 所示&/li&&/ul&&figure&&img src=&https://pic3.zhimg.com/v2-512db39e56_b.jpg& data-rawwidth=&818& data-rawheight=&299& class=&origin_image zh-lightbox-thumb& width=&818& data-original=&https://pic3.zhimg.com/v2-512db39e56_r.jpg&&&figcaption&图 24 实时请求 TOP 排名&/figcaption&&/figure&&ul&&li&实时请求来源 IP TOP 排名,如图 25 所示&/li&&/ul&&figure&&img src=&https://pic4.zhimg.com/v2-ac8f9ecb_b.jpg& data-rawwidth=&459& data-rawheight=&295& class=&origin_image zh-lightbox-thumb& width=&459& data-original=&https://pic4.zhimg.com/v2-ac8f9ecb_r.jpg&&&figcaption&图 25 实时请求来源 IP TOP 排名&/figcaption&&/figure&&ul&&li&响应时间随时间变化趋势图,如图 26 所示&/li&&/ul&&figure&&img src=&https://pic2.zhimg.com/v2-f9de871d_b.jpg& data-rawwidth=&908& data-rawheight=&285& class=&origin_image zh-lightbox-thumb& width=&908& data-original=&https://pic2.zhimg.com/v2-f9de871d_r.jpg&&&figcaption&图 26 响应时间随时间变化趋势图&/figcaption&&/figure&&p&实时用户请求的客户端 TOP 排名,如图 27 所示&/p&&figure&&img src=&https://pic2.zhimg.com/v2-c5d01e2303d_b.jpg& data-rawwidth=&1077& data-rawheight=&320& class=&origin_image zh-lightbox-thumb& width=&1077& data-original=&https://pic2.zhimg.com/v2-c5d01e2303d_r.jpg&&&figcaption&图 27 实时用户请求的客户端 TOP 排名&/figcaption&&/figure&&p&实时根据不同情况进行具体数据的查询,包括状态码、响应时间范围进行筛选等,如图 28 所示&/p&&figure&&img src=&https://pic3.zhimg.com/v2-da58fafedda99b9ddc0e808e_b.jpg& data-rawwidth=&1814& data-rawheight=&404& class=&origin_image zh-lightbox-thumb& width=&1814& data-original=&https://pic3.zhimg.com/v2-da58fafedda99b9ddc0e808e_r.jpg&&&figcaption&图 28 实时根据不同情况进行具体数据的查询&/figcaption&&/figure&&ul&&li&其他更多自定义配置...&/li&&/ul&&p&自定义的 Grafana DashBoard 配置示例,如图 29 所示&/p&&figure&&img src=&https://pic3.zhimg.com/v2-7f878ce7f9bcf5bfe847e_b.jpg& data-rawwidth=&1895& data-rawheight=&872& class=&origin_image zh-lightbox-thumb& width=&1895& data-original=&https://pic3.zhimg.com/v2-7f878ce7f9bcf5bfe847e_r.jpg&&&figcaption&图 29 Grafana DashBoard 配置示例&/figcaption&&/figure&&p&可见,仅仅几步简单的操作,你就借助 Pandora 实现了海量日志的实时监控,通过 nginx 日志 完整而详尽的 了解业务的流量入口的各类情况。&/p&&p&&b&4.2 实时数据报警&/b&&/p&&p&有了实时的数据监控,怎么能少得了报警呢,我们还提供了包括 Slack, Email 邮箱, Webhook 等十来种报警方式。&/p&&p&比如说如图 30 ,我们设置了一个响应时间大于1000ms 的报警&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e41d771ac5b623b46b65a7d0a5860274_b.jpg& data-rawwidth=&1905& data-rawheight=&852& class=&origin_image zh-lightbox-thumb& width=&1905& data-original=&https://pic1.zhimg.com/v2-e41d771ac5b623b46b65a7d0a5860274_r.jpg&&&figcaption&图 30 响应时间大于1000ms 报警&/figcaption&&/figure&&p&&b&LogDB 采用的是基于 Elasticsearch 协议的报警,这个基于 Elasticsearch 协议的 Grafana 报警功能是七牛独家哦!TSDB 是基于 InfluxDB 协议,使用 TSDB 同样具备上述实时监控报警功能噢。&/b&&/p&&p&那么您可以看到报警形式是怎么样的呢?&/p&&figure&&img src=&https://pic1.zhimg.com/v2-46b3d2ceb0e4a37eb3faa40d38f81c48_b.jpg& data-rawwidth=&1050& data-rawheight=&830& class=&origin_image zh-lightbox-thumb& width=&1050& data-original=&https://pic1.zhimg.com/v2-46b3d2ceb0e4a37eb3faa40d38f81c48_r.jpg&&&figcaption&图 31 Slack 报警示意图&/figcaption&&/figure&&p&看到图 31 Slack 上的报警了吗?除了基本的文字,还会带上酷炫的报警图片!图片都会被存储到您七牛云存储的 bucket 里面!&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c5eb0bdaf474f_b.jpg& data-rawwidth=&1700& data-rawheight=&1238& class=&origin_image zh-lightbox-thumb& width=&1700& data-original=&https://pic4.zhimg.com/v2-c5eb0bdaf474f_r.jpg&&&figcaption&图 32 邮件报警示意图&/figcaption&&/figure&&p&如图 32 所示,常规的邮件报警内容也一样酷炫!&/p&&p&&b&4.3 离线分析&/b&&/p&&p&如果你使用离线分析,那么可以获得的内容就更多了,只要你数据拥有的维度,就可以统计出来,比如我们以 CDN 日志为例。&/p&&ul&&li&用户地区分布,如图 33 所示&/li&&/ul&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ca09e464b7b2ffc0569ae_b.jpg& data-rawwidth=&1710& data-rawheight=&362& class=&origin_image zh-lightbox-thumb& width=&1710& data-original=&https://pic3.zhimg.com/v2-ca09e464b7b2ffc0569ae_r.jpg&&&figcaption&图 33 用户地区分布&/figcaption&&/figure&&ul&&li&用户机型分布,如图 34 所示&/li&&/ul&&figure&&img src=&https://pic2.zhimg.com/v2-ac16bd5e1a94a3b8a64e06c905bbaa41_b.jpg& data-rawwidth=&1668& data-rawheight=&352& class=&origin_image zh-lightbox-thumb& width=&1668& data-original=&https://pic2.zhimg.com/v2-ac16bd5e1a94a3b8a64e06c905bbaa41_r.jpg&&&figcaption&图 34 用户机型分布述&/figcaption&&/figure&&ul&&li&活跃用户数随时间变化趋势,如图 35 所示&/li&&/ul&&figure&&img src=&https://pic2.zhimg.com/v2-274af588e623c8785a075_b.jpg& data-rawwidth=&1666& data-rawheight=&254& class=&origin_image zh-lightbox-thumb& width=&1666& data-original=&https://pic2.zhimg.com/v2-274af588e623c8785a075_r.jpg&&&figcaption&图 35 活跃用户数随时间变化趋势&/figcaption&&/figure&&ul&&li&各类手机图片下载数,如图 36 所示&/li&&/ul&&figure&&img src=&https://pic4.zhimg.com/v2-e16f3a9b13fdb7e1e0df7_b.jpg& data-rawwidth=&1664& data-rawheight=&274& class=&origin_image zh-lightbox-thumb& width=&1664& data-original=&https://pic4.zhimg.com/v2-e16f3a9b13fdb7e1e0df7_r.jpg&&&figcaption&图 36 各类手机图片下载数&/figcaption&&/figure&&ul&&li&不同时间平均下载速度,如图 37 所示&/li&&/ul&&figure&&img src=&https://pic3.zhimg.com/v2-f4cd43ae550a6cbdce912_b.jpg& data-rawwidth=&1674& data-rawheight=&278& class=&origin_image zh-lightbox-thumb& width=&1674& data-original=&https://pic3.zhimg.com/v2-f4cd43ae550a6cbdce912_r.jpg&&&figcaption&图 37 不同时间平均下载速度&/figcaption&&/figure&&ul&&li&不同时间正常响应比重,如图 38 所示&/li&&/ul&&figure&&img src=&https://pic3.zhimg.com/v2-e3a2cd902d2ccb25e51143d6ecded8a2_b.jpg& data-rawwidth=&1688& data-rawheight=&390& class=&origin_image zh-lightbox-thumb& width=&1688& data-original=&https://pic3.zhimg.com/v2-e3a2cd902d2ccb25e51143d6ecded8a2_r.jpg&&&figcaption& 图 38 不同时间正常响应比重&/figcaption&&/figure&&ul&&li&查询用户系统分布,如图 39 所示&/li&&/ul&&figure&&img src=&https://pic4.zhimg.com/v2-5c50bc79db1d94d2153b_b.jpg& data-rawwidth=&1656& data-rawheight=&686& class=&origin_image zh-lightbox-thumb& width=&1656& data-original=&https://pic4.zhimg.com/v2-5c50bc79db1d94d2153b_r.jpg&&&figcaption&图 39 查询用户系统分布&/figcaption&&/figure&&p&除了上述这些,还支持更细粒度的下钻功能,可以全方位无死角分析你的海量数据。&/p&&p&&br&&/p&&h2&&b&5 总结&/b&&/h2&&p&至此,本次的 Pandora 大数据平台的架构演进与使用实战算是介绍完了,但是我们 Pandora 大数据产品的迭代还在不断向前,还有大量大数据平台建设的细节等待我们去完善。欢迎广大朋友来使用我们 Pandora 的大数据产品,同时也欢迎给我们提提建议,我们非常愿意倾听您的观点!&/p&&p&【联系我们请点击→ &a href=&http://link.zhihu.com/?target=http%3A//qiniuyun.mikecrm.com/srmyU8L& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&七牛云.大数据产品咨询&/a&】&/p&&hr&&blockquote&&b&作者介绍&/b&&br&孙健波,InfoQ 专栏作者,硕士毕业于浙江大学计算机学院,2015年底加入七牛,参与并负责七牛大数据平台整条链路多模块的架构设计以及开发工作,包括大数据计算引擎、时序数据库服务以及日志检索服务。在此之前主要研究和参与 Cloudfoundry、Kubernetes、 Docker 等容器与容器云相关工作,是《Docker 容器与容器云》一书的主要作者之一。&/blockquote&&p&&/p&
作者:孙健波 看到题图大家可能会感到熟悉,又或者会觉得部分有些陌生,这是一张汇集了目前大数据生态下大多数成熟组件的架构图。众所周知,大数据生态很复杂,对于个人来说,要全部学会可能要花费好几年时间。而对于企业来说,要最大程度发挥其价值,构建…
&figure&&img src=&https://pic2.zhimg.com/v2-221b869f6ee71e80b94c6e970fd0f410_b.jpg& data-rawwidth=&600& data-rawheight=&433& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic2.zhimg.com/v2-221b869f6ee71e80b94c6e970fd0f410_r.jpg&&&/figure&&blockquote&&p&本文分两章节,分别讲解如何使用js2image这个库生成可以运行的圣诞树代码 和 js2image的原理。&/p&&p&github地址:&a href=&https://link.zhihu.com/?target=https%3A//github.com/xinyu198736/js2image& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/xinyu198736/&/span&&span class=&invisible&&js2image&/span&&span class=&ellipsis&&&/span&&/a& ps:求star&/p&&p&效果预览:&a href=&https://link.zhihu.com/?target=http%3A//assets.souche.com/assets/js/%lib/jquery-1.7.1.min.js%2Clib/require.js%2Clib/unslider.min.js& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://assets.souche.com/assets/js/$$lib/jquery-1.7.1.min.js,lib/require.js,lib/unslider.min.js&/a&&/p&&/blockquote&&p&其实也不神奇,我们使用了自己写的一个nodejs库,如果您要实现这样的效果,只需要按照下面第一章节的方法即可。&/p&&p&下面分两章节,分别讲解如何使用js2image这个库 和 js2image这个库的原理。&/p&&h2&js2image使用&/h2&&p&github地址:&a href=&https://link.zhihu.com/?target=https%3A//github.com/xinyu198736/js2image& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/xinyu198736/&/span&&span class=&invisible&&js2image&/span&&span class=&ellipsis&&&/span&&/a& 欢迎送上star或者follow。&/p&&p&js2image主要有两个比较特殊的特性:&/p&&ol&&li&将任意js源码 压缩成 用代码堆砌成图形的最终代码。例如圣诞树,圣诞老人,代码和图片都可以自定义。&/li&&li&压缩后的js代码格式虽然被破坏,但是仍然可以运行。这个是关键点!&/li&&/ol&&p&压缩后的示例可以查看这个js&br&&a href=&https://link.zhihu.com/?target=http%3A//assets.souche.com/assets/js/%lib/jquery-1.7.1.min.js%2Clib/require.js%2Clib/unslider.min.js& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://assets.souche.com/assets/js/$$lib/jquery-1.7.1.min.js,lib/require.js,lib/unslider.min.js&/a&&/p&&p&使用方式很简单:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&npm install js2image -g;
&/code&&/pre&&/div&&p&然后在存在js的文件夹中执行:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&js2image -s ./resource/jquery.js
&/code&&/pre&&/div&&p&或者针对某个目录下所有的js执行(慎用),会深度遍历此目录里所有的js文件然后压缩出.xmas.js后缀的结果文件。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&js2image -s ./resource/
&/code&&/pre&&/div&&p&即可生成一个对应的 **.xmas.js 的文件。&/p&&p&如果要将js2image集成到gulp或者其他nodes项目中,可以使用用模块的形式:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&var Js2Image = require(&js2image&);//获取结果的
codeJs2Image.getCode(&./resource/jquery.js&,&./resource/tree.png&,{}).then(function(code){
console.log(code);
&/code&&/pre&&/div&&p&更多的信息可以参照github上的文档。&/p&&p&如果只是要使用这个效果,看到这里就ok啦,下面讲解这个库的原理,有些地方可能比较绕。&/p&&h2&js2image实现原理&/h2&&p&js2image的实现从宏观来说,大体只有3个要点。&/p&&ol&&li&从图片生成字符画,这个有现成的库。&/li&&li&把js代码分割成一小块一小块,尽量小,然后用逐行填充的方式分别替换到上一步生成的字符画里去。&/li&&li&js代码中有诸多不能分开的语法,分块的时候要把这些语法保留在一个块内。这个是这个库的难点所在,也是代码最多最绕的地方。&/li&&/ol&&p&稍有想法的同学估计看到这里基本已经明白是怎么回事了,下面一一讲解这3个要点。&/p&&h4&① 从图片生成2值得字符画&/h4&&p&这里用到了一个现成的npm包:image-to-ascii 。这个库的作用是用指定的字符来还原一个图像。而我们用这个库来生成一个用 ?字符和空格 分别表示黑和白的字符画,然后将字符画的每一行分解成数组的一个元素,供第二步使用,这就是我们中间生成的一个struct,代码见 utils/image-to-struct.js&/p&&h4&② 分割js源码成尽量小的小块。&/h4&&p&这是非常重要的一步,js代码具体可以分解成多细的小块呢?&/p&&p&看下面一段代码:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&
&objec&+&t&)
== typeof module
.exports?module.
exports=e.document?t(e
,!0):function(e){if(!e.
document) throw new Error (
(&jQuer&+&y req&+&uires&+& a wi&
+&ndow &+&with &+&a doc&+&ument&) )
return t (e)}:t(e)}( (&undef&+&ined&)
window ?window:this,function(e,t){var
&/code&&/pre&&/div&&p&这是jQuery开始的一段代码,可以看到,大部分操作符都允许中间插入任意多的空格或者换行,我们正是利用这一特性将js代码解肢,然后拼接成任意形状的图片。&/p&&p&核心代码其实就是一个正则,我们用这个正则把js源码解构成一个数组,然后后续根据每行需要的字符数,从这个数组里不断取片段出来拼接。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&//分离代码,以可分割单位拆分成数组。var lines = hold_code.replace(/([^a-zA-Z_0-9=!|&$])/g,&\n$1\n&).split(&\n&);
有了这个lines数组之后后面就简单了,根据第一步里生成的struct不断遍历从lines抽取代码填充到struct里即可生成最终的代码:
while(lines.length&0){
//循环往struct里填充代码
struct.forEach(function(s){
var chars_arr = s.replace(/ +/g,& &);//一行有多组分离的*****
chars_arr.split(/ +/).forEach(function(chars){
if(chars.length == 0){
var char_count = chars.
//从lines里取出char_count数量的代码来填充,不一定精准,要确保断行正确
var l = pickFromLines(lines,char_count);
r = r.replace(chars,function(){
result += r+&\n&
&/code&&/pre&&/div&&h4&③ 保留不可分割的语法&/h4&&p&注意:到了这一步,还很早,你分解出来的代码是无法运行的,很多不能换行和加空格的代码都被你分开了,自然会报错,那如何处理这些情况呢?&/p&&p&这一步,我们做的工作就是:&/p&&p&在执行代码分拆之前,提取出代码里所有不可分割的语法,将他们保留在一个对象中,并且在源代码中用占位符替代这些语法,然后让占位符参与上个步骤的分离,因为占位符是一个完整的连字符变量,所以不会被分割。在分割完成之后,我们再把这些占位符替换回来即可。&/p&&p&不过,在js中哪些语法必须是连接在一起才能正常运行的呢?&/p&&p&这里总结下:&/p&&ol&&li&字符串不可分割 包括双引号单引号内的内容。&/li&&li&正则表达式绝对不可分割 正则里的转义很难处理,这是这个算法里的难点。&/li&&li&运算操作符 包括2字符的3字符的 例如 以下两种&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&var double_operator = [&==&, &&=&, &&=&, &+=&, &-=&, &*=&, &/=&, &%=&, &++&, &--&, &&&&, &||&, &&&&, &&&&]
var three_operator = ['===', '!==']
&/code&&/pre&&/div&一些固定语法,可以用正则表达,如下:&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&var reg_operator = [
start:&return&,
reg:/^return[^a-zA-Z_0-1&'][a-zA-Z_0-1.]+/ // return 0.1 或者 return function 或者return aaabb
start:&return\&&,
reg:/^return&.*?&/ // return &d& 或者 return &&
start:&return\'&,
reg:/^return'.*?'/
// return 'd' 或者 return ''
start:&throw&,
reg:/^throw [a-zA-Z_0-1]+?/ //throw new 或者 throw obj
&/code&&/pre&&/div&小数点语法,例如 0.01 因为之前我们用点号来分割代码的,但是这里的点号不能作为分割符使用,需要保留前后数字跟点号在一行&br&其他语法,例如 value++ 之类的语法,变量和操作符之间不可分割。&br&那我们如何从源代码中解析出这些语法,然后做处理呢?&/li&&/ol&&p&核心代码均在 utils/keep-line.js 中&/p&&p&核心算法,事实上是通过一个对字符串的遍历来完成的,然后在遍历每个字符的时候都会判断是否进入某个逻辑来跳跃处理。&/p&&p&例如,判断出当前在双引号内,则进入字符串提取逻辑,一直到字符串结束的时候再继续正常的遍历。&/p&&p&其他操作符和正则表达式的算法也是类似,不过里面很多细节需要处理,例如转义字符之类的。&/p&&p&有些比较特殊的,例如小数点语法的提取,在判断到当前字符是点号之后,需要往前和向后循环查找数字,然后把整个语法找出来。&/p&&p&这里不细讲,在keep-line.js 这个文件中又一大坨代码做这个事情的。&/p&&h4&④ 字符串解构&/h4&&p&做到这一步的时候,其实效果已经很不错了,也可以保证代码的可运行,但是代码里有些字符串很长,他们总是会被被保留在一行里,这样就造成他会影响一些图案的边缘的准确性(代码分离原则是越细越好,就是为这个考虑)。&/p&&p&我们如何处理呢,那就是将字符串解构,以5个为单位将字符串分离成小块。&/p&&p&这里有两个比较重要的问题需要处理;&/p&&ol&&li&字符串内的转义字符如何处理,还有一些特殊字符,例如0x01这样的字符,这些字符不能被分离到不同的字符串里,所以分离的时候要保留这些字符串的完整性。&/li&&li&字符串分离成小字符串,然后用+号拼接起来,不过要注意操作符优先级的问题,所以所有分离后的字符串,都要用括号包起来,让这个+号的优先级永远最高。&br&具体算法见 keep-line.js 中的 splitDoubleQuot (分离双引号字符串)。&/li&&/ol&&h2&结语&/h2&&p&至此,整个应用就完成了,可以顺利完成从任意js和图像生成图形代码了。&/p&&p&再说一遍项目开源地址:&a href=&https://link.zhihu.com/?target=https%3A//github.com/xinyu198736/js2image& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/xinyu198736/&/span&&span class=&invisible&&js2image&/span&&span class=&ellipsis&&&/span&&/a& 欢迎star,顺便follow下楼主就更开心了。&/p&
本文分两章节,分别讲解如何使用js2image这个库生成可以运行的圣诞树代码 和 js2image的原理。github地址: ps:求star效果预览:其…
&figure&&img src=&https://pic4.zhimg.com/v2-91ef02bc6efc619969bdb_b.jpg& data-rawwidth=&1440& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&https://pic4.zhimg.com/v2-91ef02bc6efc619969bdb_r.jpg&&&/figure&&p&原文发表于少数派:&a href=&https://link.zhihu.com/?target=https%3A//sspai.com/post/38849%3Futm_source%3Dzhihu%26utm_medium%3Dzhuanlan& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Home Assistant + 树莓派:强大的智能家居系统 · 安装篇&/a&&/p&&p&作者:&a href=&https://link.zhihu.com/?target=https%3A//sspai.com/user/721317& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&cxlwill&/a&&/p&&p&------&/p&&p&最近少数派掀起了一阵树莓派热潮,各色教程涌出水面。将 Pi 接入智能家居控制系统并不新鲜,现有教程本身已经非常全面,但是由于 Homebridge 插件(下称「&b&HB&/b&」)的局限性,使其对智能家居设备的支持广度和深度不足,间接影响了用户使用 HomeKit 的体验。例如,homebridge-aqara 插件并不支持小米网关 2 的自带灯光控制,白白浪费了设备的功能。&/p&&p&为了摆脱这一束缚,我们可以利用另一个强大的智能家居平台:&a href=&https://link.zhihu.com/?target=https%3A//home-assistant.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Home Assistant&/a&(下称「&b&HASS&/b&」)。&/p&&p&Home Assistant 是一个成熟完整的基于 Python 的智能家居系统,设备支持度高,支持自动化(Automation)、群组化(Group)、UI 客制化(Theme) 等等高度定制化设置。背后又有庞大的社群基础,且不断在更新。最重要的是我们可以通过 Homeassistant-homebridge 插件打通两个平台,同样实现设备的 Siri 控制。整套体系的框架如下:&figure&&img src=&https://pic2.zhimg.com/v2-afada823dfce8d8b3285a_b.jpg& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/v2-afada823dfce8d8b3285a_r.jpg&&&/figure&&i&(基本框架)&/i&&/p&&p&本系列将围绕安装、配置、开发等内容,详细介绍 HASS 平台的方方面面,同时针对 HASS 与 HB 兼容与选择,自动化配置方法等等问题给出自己的观点和探索,希望可以给大家玩转智能家居带来新的启发和收获。&/p&&p&HASS 支持大部分平台,简而言之,只要你的主机能跑 Python,基本就能安装 HASS。配合「魔镜」项目,以及便捷性的考虑,我选择的平台是树莓派 3,本系列教程也将基于树莓派展开,兼顾其他平台。&br&&/p&&h2&1. 初始安装&/h2&&p&&b&1.1 树莓派&/b&&/p&&p&在树莓派安装 HASS,有 2 种方法供选择:&/p&&p&1. 以其他操作系统(这里以树莓派官方系统 Raspbian 为例)为根系统,再通过指令安装;&/p&&p&2. 直接安装集成了 HASS 的 Hassbian 操作系统。&/p&&p&以上 2 种方法从性能上来说并无二异,均能实现 HASS 全部功能,Hassbian 实际上亦基于 Raspbian ,唯一需要纳入考虑的是&b&图形化操作界面&/b&的需求。由于树莓派基金会官方尚未公开单独安装图形化操作界面的方法,在当下,如果有该需求,只能通过官方图形化操作系统 Raspbian with Desktop 实现。&/p&&p&&b&方法 1 :&/b&&/p&&p&安装前,请参考 &a href=&https://link.zhihu.com/?target=https%3A//sspai.com/user/714086& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&梓姵君&/a& 的 &a href=&https://link.zhihu.com/?target=https%3A//sspai.com/post/38542& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&文章&/a& 对树莓派进行初始基础设置,重点关注地区、WiFi、源替换的内容,这里不再展开。特别注意:2016 年 11 月后的官方系统默认关闭 &b&SSH&/b& 功能,请务必打开。&/p&&p&使用任何方法连接到树莓派终端,输入以下安装代码:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&$ curl -O https://raw.GitHubusercontent.com/home-assistant/fabric-home-assistant/master/hass_rpi_installer.sh && sudo chown pi:pi hass_rpi_installer.sh && bash hass_rpi_installer.sh
&/code&&/pre&&/div&&p&注意:不要以 sudo 运行,然后泡杯茶,做点别的事情,等待程序跑完。安装时间根据网络情况不等,大约需要 1 - 2 个小时,国内网络环境大家自行改善。&/p&&p&如果你是使用此方法安装 HASS 的话,未来更新指令如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo su -s /bin/bash homeassistant
source /srv/homeassistant/homeassistant_venv/bin/activate
pip3 install --upgrade homeassistant
&/code&&/pre&&/div&&p&&b&方法 2 :&/b&&/p&&br&参考 copriwolf 的 &a href=&https://link.zhihu.com/?target=https%3A//sspai.com/post/39851& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&教程&/a& 使用 Etcher 安装官方最新&a href=&https://link.zhihu.com/?target=https%3A//github.com/home-assistant/pi-gen/releases/latest& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&固件&/a&镜像。&br&&br&&p&感谢少数派友 &b&DJ&/b& 千辛万苦的搬运至&a href=&https://link.zhihu.com/?target=https%3A//pan.baidu.com/s/1dFpaaAH& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&度娘盘&/a&(password: 2e98)&/p&&p&要注意的是,Hassbian 初次启动时需要联网进行原始设置,由于无法在初次启动前设置无线网络,因此务必将树莓派与电脑或者路由器&b&有线连接&/b&起来,以保证树莓派在有网环境下顺利设置。&/p&&p&官方教程告知初次启动需要等待 5 分钟左右,基于国内的网络环境,我这里测试多次,都需要等待&b&近 10 分钟&/b&方可,所以大家不要焦躁,可以看部番剧或者往下研究一下此篇文章以便接下来顺利进展。&/p&&p&&b&如果等待时间过久却没有出现初始界面,可尝试使用以下命令强制初始安装&/b&:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo systemctl enable install_homeassistant.service
sudo systemctl start install_homeassistant.service
&/code&&/pre&&/div&&p&如果使用此方法,未来更新指令如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&$ sudo systemctl stop home-assistant@homeassistant.service
$ sudo su -s /bin/bash homeassistant
$ source /srv/homeassistant/bin/activate
$ pip3 install --upgrade homeassistant
$ sudo systemctl start home-assistant@homeassistant.service
&/code&&/pre&&/div&&p&无论使用哪种方法,等待过后,在浏览器输入:&b&http://树莓派的ip地址:8123&/b&(查找树莓派 IP 地址可以直接前往路由器界面)&/p&&p&如果出现类似下图,则表示初始安装完成;如若没有出现界面,或者无法连接,有很大可能是尚未安装完毕,不要着急再等等。(注意地址冒号为英文字符,请勿输入中文冒号)。&/p&&p&&b&Hassbian 安装注意:初次启动后请等待初始安装出现以下界面后,再进行后续操作,否则你的一切工作都是前功尽弃。并且初次启动时,勿 SSH,勿输入任何代码,保持通电、联网、静置状态!非常重要!&figure&&img src=&https://pic1.zhimg.com/v2-154b0d7d9d49e3ab4a1a3_b.jpg& data-rawwidth=&1120& data-rawheight=&509& class=&origin_image zh-lightbox-thumb& width=&1120& data-original=&https://pic1.zhimg.com/v2-154b0d7d9d49e3ab4a1a3_r.jpg&&&/figure&&/b&&i&(&/i&&i&home-assistant)&/i&&/p&&p&&b&1.2 macOS&/b&&/p&&br&macOS 自带 Python,如果你不小心误删,请先重新安装。macOS 下安装 HASS 也相当简单:&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&$ pip3 install homeassistant
&/code&&/pre&&/div&&h2&2. 附加功能安装&/h2&&p&&b&2.1 SMB(必须)&/b&&/p&&br&SMB 可以帮助我们开启树莓派的网盘模式,方便未来文件传输,这里我们除安装外把该功能加入了系统自启项目。&br&通用安装指令:&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo apt-get install samba
sudo smbpasswd -a homeassistant -n
sudo nano /etc/samba/smb.conf
netbios name = raspberrypi
server string = The Pi File Center
workgroup = WORKGROUP
hosts allow =
remote announce =
remote browse sync =
[HOME ASSISTANT]
path = /home/homeassistant/.homeassistant
comment = No comment
browsable = yes
read only = no
valid users =
writable = yes
guest ok = yes
public = yes
create mask = 0777
directory mask = 0777
force user = homeassistant
force create mode = 0777
force directory mode = 0777
hosts allow =
&/code&&/pre&&/div&Ctrl+X,Y,回车&br&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo systemctl restart smbd.service
&/code&&/pre&&/div&&p&Hassbian 提供了一个附加功能工具包 &b&hassbian-config&/b& ,这使我们的安装更加简便。使用工具包安装原则上已经自动配置好一切,建议大家还是修改一下权限和密码。&/p&&p&安装指令:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo hassbian-config install samba
sudo smbpasswd -a pi
&/code&&/pre&&/div&&p&重启服务&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span& sudo systemctl restart home-assistant@homeassistant.service
&/code&&/pre&&/div&&p&&b&2.2 MQTT&/b&&/p&&br&MQTT是基于二进制消息的发布、订阅编程模式的消息协议,广泛用于物联网部署中。部分智能家居设备需要 MQTT 连接。&br&通用安装指令:&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo apt-get install mosquitto mosquitto-clients python-mosquitto
sudo systemctl start mosquitto
&/code&&/pre&&/div&Hassbian 工具包安装:&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo hassbian-config install mosquitto
sudo systemctl start mosquitto
&/code&&/pre&&/div&&h2&3. Homebridge 安装&/h2&&p&HASS 本身可以通过网页控制,这也赋予了其全平台的控制能力。当然,想必不少人还是冲着语音控制功能考虑智能家居的,对于 iOS 用户来说,想要更自由地使用 HomeKit,HB 依然是绕不开的环节。&/p&&p&HB 的安装我就更不多说了,欢迎大家参考另外几篇文章,这里我根据之前指导派友的经验简单概括一下。&/p&&p&HB 提供一行安装指令:&b&sudo npm install -g --unsafe-perm homebridge&/b& 但是安装成功率比较低,推荐大家使用下面的手动安装指令。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo apt-get install git make
sudo apt-get install g++
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install libavahi-compat-libdnssd-dev
sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gyp
cd /usr/local/lib/node_modules/homebridge/
(注意这里如果显示不存在文件夹,替换成 cd /usr/lib/node_modules/homebridge/)
sudo npm install --unsafe-perm bignum
cd /usr/local/lib/node_modules/hap-nodejs/node_modules/mdns
(注意这里如果显示不存在文件夹,替换成 cd /usr/lib/node_modules/hap-nodejs/node_modules/mdns)
sudo node-gyp BUILDTYPE=Release rebuild
&/code&&/pre&&/div&&br&&p&进行到这里,HB 就已经安装完成了,这里建议大家直接输入homebridge运行一次,以生成示例配置文件,然后 Ctrl + C 退出。&/p&&p&接着,安装 Homeassistant-homebridge 插件,实现平台联动:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo npm install -g homebridge-homeassistant
&/code&&/pre&&/div&&h2&4. 添加自启任务&/h2&&p&忙活了那么久,即将大功告成了。最后临门一脚,我们把 HASS 和 HB 添加至树莓派开机任务中,这样每次启动后就会自动运行上述 2 个进程。&/p&&p&注意:配置 HB 前程序会运行错误,提示缺少配置文件,可先不理会。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&cd /
sudo useradd --system homebridge
sudo mkdir /var/homebridge
sudo cp ~/.homebridge/config.json /var/homebridge/
sudo cp -r ~/.homebridge/persist /var/homebridge
sudo chmod -R 0777 /var/homebridge
cd /etc/default
&/code&&/pre&&/div&&p&&b&sudo nano homebridge&/b& 复制粘贴&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# Defaults / Configuration options for homebridge
# The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others)
HOMEBRIDGE_OPTS=-U /var/homebridge
# If you uncomment the following line, homebridge will log more
# You can display this via systemd's journalctl: journalctl -f -u homebridge
&/code&&/pre&&/div&&p&Ctrl+X,Y,回车&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&cd /etc/systemd/system
sudo nano homebridge.service
&/code&&/pre&&/div&&p&复制粘贴&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&[Unit]
Description=Node.js HomeKit Server
After=syslog.target network-online.target
Type=simple
User=homebridge
EnvironmentFile=/etc/default/homebridge
ExecStart=/usr/lib/node_modules/homebridge/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
WantedBy=multi-user.target
&/code&&/pre&&/div&&p&Ctrl+X,Y,回车&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&cd /
sudo systemctl daemon-reload
sudo systemctl enable homebridge
sudo systemctl start homebridge
sudo systemctl status homebridge
sudo systemctl enable mosquitto
&/code&&/pre&&/div&&p&最后重启:&b&sudo reboot&/b&&/p&&p&OK,重启过后,一切就绪。&/p&&p&我将在下一篇「设备接入篇」中继续介绍如何将智能家居设备接入 HASS 。&/p&&p&欢迎大家加入项目相关 &a href=&https://link.zhihu.com/?target=https%3A//join.slack.com/t/magicmirror-cn/shared_invite/MjExNjg5MzY0NTQ1LTE0OTk5MzQyNjktMjc5YjNmMjU5Mg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Slack&/a& 进行讨论,该讨论组还包括了魔镜项目的内容。&/p&&h2&Changelog&/h2&&br&&b&7.19&/b&:删除 KODI 相关内容,文章系列化。&br&&p&&b&7.16&/b&:今天 HASS 发布了 49.0 更新,终于支持主题和小米扫地机器人了!&/p&&p&&b&7.15&/b&:魔镜项目已经步入收尾阶段,Home Assistant其实是个非常强大的平台,之后我将定期撰文介绍更多有关 Home Assistant 配置方法等,敬请期待。&/p&&p&&b&7.12&/b&: 前天买了 Yeelight 彩光灯带,尝试接入 Home Assistant 平台,开启后发现错误。谷歌一下才知道如果要在 HA 中控制 Yeelight,一定要打开 HA 的开发者模式。考虑到功耗,遂改为直接使用 Homebridge 了。&br&&/p&&p&&b&7.5&/b&:树莓派于前几天推出系统更新 4.9,HA 最新版本为 48.1。另外有一些PI友向我询问如何接入Yeelight。有2种方法:其一通过 Homebridge-yeelight 插件,由 homebridge 接入;其二在 homeassistant 中添加 Yeelight 的 platform。相应的配置我就不赘述了,基本就是安装对应插件,然后修改相关配置文档。还有一些 Pi 友问我如何接入扫地机器人。目前 Homeassistant 上我没看到相关插件,请使用 Homebridge 接入,GitHub 地址 &a href=&https://link.zhihu.com/?target=https%3A//github.com/seikan/homebridge-xiaomi-mi-robot-vacuum& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&在此&/a& 输入:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&npm install -g homebridge-xiaomi-mi-robot-vacuum miio
&/code&&/pre&&/div&&p&&b&6.6&/b&:陆续有 Pi 友出现控制设备失败的现象,大部分由于在 configure.yaml 文件中小米网关的 sid 采用了小写字母。请大家特别注意使用&b&大写字母&/b&。另目前最新版本 Home Assistant 为 46.0。&/p&&h2&鸣谢&/h2&&p&本篇文章参考的代码和内容有:&/p&&ul&&li&威锋网 hhalibo 的 &a href=&https://link.zhihu.com/?target=http%3A//bbs.feng.com/forum.php%3Fmod%3Dviewthread%26tid%3D& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&教程&/a& &br&&/li&&li&什么值得买 &a href=&https://link.zhihu.com/?target=http%3A//zhiyou.smzdm.com/member//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Yang_John&/a& 的 &a href=&https://link.zhihu.com/?target=http%3A//post.smzdm.com/p/530330/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&分享&/a& &br&&/li&&li&少数派网站 Junyi Lou 的 &a href=&https://link.zhihu.com/?target=https%3A//sspai.com/post/38358& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&教程&/a& &br&&/li&&li&Homebridge &a href=&https://link.zhihu.com/?target=https%3A//github.com/nfarina/homebridge& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub&/a& 源码&br&&/li&&li&Home Assistant &a href=&https://link.zhihu.com/?target=https%3A//github.com/home-assistant/home-assistant& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub&/a& 源码&br&&/li&&/ul&&p&感谢以上提及作者的分享。&/p&&p&封面来源:&a href=&https://link.zhihu.com/?target=https%3A//upload.wikimedia.org/wikipedia/commons/6/68/Screenshot_of_Home_Assistant_Frontend.png& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&链接&/a&&/p&
原文发表于少数派:作者:------最近少数派掀起了一阵树莓派热潮,各色教程涌出水面。将 Pi 接入智能家居控制系统并不新鲜,现有教}

我要回帖

更多关于 百度云链接不存在 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信