Storm 安装配置

条件供给
JDK 1.6+
java -version
Python 2.6.6+
python -V

图片 1

ZooKeeper3.4.5+
storm 0.9.4+

Alt text

单机方式
上传解压

$ tar xf apache-storm-0.9.4.tar.gz 
$ cd apache-storm-0.9.4

$ mkdir logs
$ bin/storm --help

2017新春,笔者花了大致八个星期写了基于Electron的GitHub
Gist管理软件Lepton。开始只把它看成读书Electron的演习项目,却奇怪它竟然火了一把。

 

正规通知后,Lepton在GitHub的星数在七日左右冲上了一千,接二连三好几天登上了GitHub
daily trending的前十(JS和All
language)。在收受众多幽默的Issue和P奥迪Q5之余,还被Slack一个尖端工程师引荐加入Electron官网的feature
app之一
。甚至还被有些韩国媒体自然电视公布。(这里这里、和这里

下边分别运维ZooKeeper、Nimbus、UI、supervisor、logviewer

图片 2

$ ./bin/storm dev-zookeeper >> ./logs/zk.out 2>&1 &
$ ./bin/storm nimbus >> ./logs/nimbus.out 2>&1 &
$ ./bin/storm ui >> ./logs/ui.out 2>&1 &
$ ./bin/storm supervisor >> ./logs/supervisor.out 2>&1 &
$ ./bin/storm logviewer &

Alt text

 

网上有关在GitHub上塑造高星项指标经历分享不多,少数几篇也是巨牛级其余,令人读书起来无从入手。所以自个儿想把这一次有意思的阅历写下来和豪门大饱眼福。

亟需多等说话,通过jps旁观

Lepton介绍

图片 3

Alt text

Lepton是一款跨平台(Mac/Windows/Linxu)的snippet管理软件,简单的说,“码笼”。

$ jps
6966 Jps
6684 logviewer
6680 dev_zookeeper
6681 nimbus
6682 core
6683 supervisor

功能

  • 查询/新建/修改/删除 Snippet
  • 地点搜索
  • 语言标签 + 个性化标签
  • 格式化Description(title + tag)
  • Markdown渲染
  • 富文本编辑
  • 语法高亮
  • 云端同步 + 跨平台支撑(Win + macOS + Linux)
  • 花色开源

 

初衷

Lepton品类的初衷是制作一款保存snippet的“影象代码”。

作为一名码匠,通常需求把总计的snippet保存在不难管理的地方,就好像常常把笔记保存在回想笔记里同样。若是印象笔记能保存snippet就好了!可惜印象笔记对代码块帮忙不佳,须求在其他地点把代码块高亮,然后再贴回来,并时常出现格式混乱。

咱俩也足以使用谷歌Drive/Dropbox/其余云盘。缺点是,这种依据文件夹的管理不如竹签适合检索。还有一对单机软件比如Snippets
能完成地点代码保存,可惜不协理跨平台联手(比如从Mac到Windows)。

到2017新春结束,GitHub
Gist
只怕是最适合保存snippet的云端。它不只匡助中央的语法高亮、分享、隐秘设置,还会保留代码的持有历史版本,甚至还提供了REST
API协理。美中不足的是,Gist没有提供标签效应,而且网页端支出不完美,全体snippet遵照时间各样堆积在联合署名,难以有效管理。纵然有少数第③方的客户端,比如GistBox,可是都闭源且开发停滞。所以,笔者觉得使用Electron

  • Gist构建跨平台的snippet manager将是3个不易的切入点。

登录ui

技能调查商量

体系开头前,作者在Electron feature
app
网页上探寻其中的开源项目,希望能够借鉴经验,少踩坑。

侥幸的是,笔者在GitHub社区找到了2个技术栈相似的体系pupaFM。作者xwartz提供了详细的commit记录,阅读commit记录就如阅读历史传说一样有意思
。通过在本土重现pupaFM大约前57个commit,作者大体精通了Redux+React+Electron搭建项指标着力方法,也还要点亮Webpack技能点。

Lepton尽管在那些基础上搭建起来的。为了便于其余开发者方便借鉴Lepton经验,作者尽可能保障commit记录的可读性,代码里也提供详细的comment,以传承好开源精神。

http://node1:8080/

社区援救

绝不夸张地说,Lepton花色不是闭门造车,它在开发阶段从太阁程序员社区中收获了非常大的支撑。2014年初时候,社区中的成员1MHz刚宣告了她一如既往基于Electron的著述Knotes,并在社区中享用了她的费用经历,小编读后很受启发。向1MHz请教后,他对Lepton的开发建议了好多尖锐的提出,尤其是UI库采用和自动更新那八个地点;)

大致两周后,Lepton框架和基本功用初具雏形,笔者从太阁程序员社区又诚邀到了首批内测用户,获得不少妙不可言的反映。(尤其感激meilinzAaronice1MHzhongbojingblukpine

本人这一次把项目经验计算成文,也是为了对太阁社区回馈:)

 

技巧落成

Lepton所选择的框架是Electron。Electron把Node.js和Chromium两者结合,开发者能够应用JavaScript进行跨平台的桌面APP开发。同时,项目还采用React

  • Redux来创设前端UI和管理App的气象,并行使Webpack来作为创设工具。

图片 4

Alt text

下边将商量一些技术达成上的底细。

运转测试程序

代码高亮

Lepton采用Highlight.js来展开代码的语法高亮。由于Highlight.js作者很傲娇地不协助line
number
,笔者刚刚利用这几个空子学习那技术。上边是最终效果图。

图片 5

Alt text

$ bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.4.jar storm.starter.WordCountTopology wordcount
$ bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.4.jar storm.starter.WordCountTopology test
代码分行

如上海教室,代码块放在了一个HTML
table中。首先用正则式/\r?\n/把代码分行,并还要总括每行对应的line
number。line number放在上边HTML
Table中的第二列,代码放在第叁列。使用Table的好处是,当某行代码太长导致一行放不下而被迫撤回时,它不会进入line
number的列中。下边是不应用Table时大概会遇见的难点。

图片 6

Alt text

 

永不复制line number

有时候,大家在网上复制代码时,会碰到误选line number,导致如下图中line
number也一块儿被复制的情况。

图片 7

Alt text

Lepton的化解方案是行使data-pseudo-content来标记行数,制止了line
number被误选复制的题材,效果妥妥的!

图片 8

Alt text

下边奉上snippet。详细代码请看那个gist

  let lineNumber = 0
  const contentTable = adaptedHighlightedContent.split(/\r?\n/).map(lineContent => {
    return `<tr>
              <td class='line-number' data-pseudo-content=${++lineNumber}></td>
              <td>${lineContent}</td>
            </tr>`
  }).join('')

  // 最后输出:`<pre><code><table class='code-table'>${contentTable}</table></code></pre>`

一心分布式

Markdown渲染

Lepton采用marked模块举行Markdown渲染(Markdown
转换为 HTML)。感兴趣的话,我们也可以亲身做一款markdown editor!

var marked = require('marked');
console.log(marked('I am using __markdown__.'));
// Outputs: <p>I am using <strong>markdown</strong>.</p>

图片 9

Alt text

三个节点计划ZooKeeper集群 node1为nimbus

React + Redux state

始于时,小编曾把一些Dialog的show/hide作为React component的local
state来拍卖。当时本人认为它们和app的大局state非亲非故,应该放在component中。后来,随着dialog数指标加码(search/create/edit/delete/logout),属于分裂component的dialog出现了互动覆盖、难以调和的情景。最后自个儿只可以把它们改回全局的redux
state。那是一点小经验。

3台机器分别安装解压storm安装包,修改配置文件

标签完成

GitHub Gist本身不支持标签。笔者一初始想尽是经过二个secret
gist来保存和同步标签。后来发现那么些艺术有个别难题。

  1. 频率不高,每回标签变化都要把拥有标签记录重复写入这么些secret
    gist,而且出错后简单丢失记录,最后弃用。
  2. 开发者不该在没有获得用户同意的图景下,私行动用secret
    gist来储存数据。任何有关gist的变动都应当用户来做决定。

此时此刻艺术是透过description部分的特殊字符#tags来保存自定义的竹签。优点是标签分散到各种gist中,每回只要求更新该gist对应部分的价签即可,能够联手到云端。而且它可读性高,即便用户有一天舍弃Lepton重临原生的网页端,也能自由读懂description的音信。

图片 10

Alt text

图片 11

Alt text

$ vim conf/storm.yaml

storm.zookeeper.servers:
    - "node1"
    - "node2"
    - "node3"

storm.local.dir: "/tmp/storm"

nimbus.host: "node1"

supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703

UI设计

 

图标

图片 12

Alt text

作为程序员,能把图标制作到那一个水平作者是很知足的了…

Lepton情趣是轻子,是指不参与强互相功能的自旋为ћ/2
的费米子,其香港(Hong Kong)中华电力有限公司子Electron是最知名的轻子。项目起名Lepton,是对Electron框架的致敬。(这一体系的类型爱用物理粒子起名,比如Electron、Atom、Photon等)

始发时候,曾想用β衰变图(β衰变会时有产生三种轻子)来作为Lepton图标,可惜总画倒霉。后来退而求其次,总能画个圆圈图案表现出粒子感吧(其实用圆形代表轻子是很不得法的),最终在写轮眼的诱导下,有了明天的布置性。

图标的制作方法简单、费用低、时间短,但功能不错。具体而言,先用系统自带工具画二个逗号,然后去上边先是个网站把图纸转换来svg,然后再去其次个网站把svg文件转换来Material风格的图标。固然来回折腾一回也等于半钟头的作业。

上边奉上网站链接:

在storm目录中创制logs目录

界面设计

Lepton的界面大概平素不设计,我很战胜地不去添加不供给的因素。

事先做的档次(比如这个,和这个),由于规划过度,到后来已有个别精通不了。这一次吸取经验,
能用Bootstrap原色就用原色,能不添加button就不添加button,能用黑白就无须彩色。这样下去,不仅节省了时光,界面反而被人赞誉赏心悦目。有时开玩笑,说灵感来自清水水泥。

$ mkdir logs

CodeMirror

CodeMirror是一款第1方的text
editor,提供了不少可怜棒的编排效率。(比如代码块的collapse/expand、语法高亮)

图片 13

Alt text

来自GitHub社区wujysh在把CodeMirror集成到Lepton上做了非凡卓绝的办事!正是因为有她的贡献,Lepton本来蹩脚的text
editor进化为了未来的代码编辑利器。

还要他在对成品的选择和布局上也提出了过多精美的视角;)

启动ZooKeeper集群

地方搜索

Lepton初期曾经选用elasticlunr.js来贯彻地点搜索。遗憾的是,它方今只协理英文的整词搜索,比较鸡肋。后来自家改用了fusejs,华丽丽地支持partial
search和国语,搜索效果须臾间满血复活。

图片 14

Alt text

遗憾的是,Lepton并不协理对代码部分的探寻,具体技术上的缘故可以参考那么些Issue。近日帮忙搜索的一对是:description、文件名、tags

 

自动更新

Electron自带了1个autoUpdater模块,可以自动物检疫查和测试server上的新本子,并自动在后台下载。

Lepton并不曾向来动用自带的autoUpdater,而是使用electron-builder合龙的换代模块。每一趟release时候,electron-builder会把包裹文件以及包涵版本音信的meta
data文件上传到GitHub的release页面。当Lepton开拓时候,它会自动物检疫查和测试release页面上的摩登版本新闻,若觉察有新本子,便会唤醒用户下载。

注意,当发表到Mac App Store时候,必供给关闭这一个auto updater的效应。

node1上启动Nimbus

项目推广

$ ./bin/storm nimbus >> ./logs/nimbus.out 2>&1 &
$ tail -f logs/nimbus.log
$ ./bin/storm ui >> ./logs/ui.out 2>&1 &
$ tail -f logs/ui.log

表达文档

其余2个GitHub项目都应该有一份完善的表达文档,以利于旁人驾驭那么些项目。小编个人的习惯是,尽管类型做不完,也会把做不完的缘故和当下的进程在验证文书档案上写清楚,做到有始有终。

那是本人写表达文书档案的一部分例子:例子1例子2例子3

Lepton的初期成功得益于较为完整的文书档案,不少用户还对文书档案内容提出了革新的提议。那里奉上曾经总计过的写表达文书档案的能源

节点node2和node3运转supervisor,根据布置,每运行1个supervisor就有了多少个slots

初次亮相

品种一起初放在了V2EX社区上宣告,获得了很正确的报告,相当谢谢。在各位热心用户的汇报下,Lepton从初期只襄协助调查看gist的简短客户端,稳步发展变成集
Tag + Search + CRUD
一身的APP。未来能够很不夸大的说,Lepton时下的不少用户体验要优惠基于网页客户端的GistBox。

Lepton最初收获的关切扶助它连接好几天进入GitHub的daily
trending,那为它掀起了许多国际开发者的保养。(这是自身后来才发觉的,一发轫还很奇怪那个国际友人从哪个地方据书上说Lepton

$ ./bin/storm supervisor >> ./logs/supervisor.out 2>&1 &
$ tail -f logs/supervisor.log

开源同盟

Lepton在GitHub上获取许多开发者的孝敬,下边一并谢谢:

 

持续考虑

自然,那是四个很有意思的经历,不仅仅是积累了成都百货上千技术(在开发Lepton过程中,我要好就动用Lepton记录了大量的gist),还在产品上有了越来越多的思辨。

花色开销前两周,笔者具备注意力都汇聚到集成GitHub
API、达成基本的CRUD功用上,作者所关怀的是HOW。当进入第④全面第5周,产品为主成效(Tag

  • Search +
    CRUD)稳步健全,受到关心更加多,作者越多商讨那几个类型是何许(WHAT)。作者是要把GitHub自带的Gist网页端复制到桌面吗?依旧经过Lepton自行建造3个snippet生态?大家理应如何接纳平衡效率吗?

自家的定论是,Lepton要变为能保存代码的回忆笔记,姑且驾驭为“纪念代码”。它的终点目标是以开源自身来回馈开源社区;它的第2手手段是援救程序员有效运用收集的点滴智慧(读作dai
ma),在抱StackOverflow大腿之余,也能够抱自个儿大腿。所以,小编在新作用的抉择上以下面“四个有利”作为衡量圭臬:

  1. 是不是有利于用户收集代码 (比如引入CodeMirror)
  2. 是否方便人民群众用户便捷获取代码 (比如引入Local Search、copy/share
    button)
  3. 是或不是方便用户专心分析代码 (比如 Immersive mode)

而且在社区的增派以及自个儿时刻允许范围内开始展览。

最后,Lepton那段经历告知我们,构建叁个GitHub上千星项目,进程实际上没有那么神秘,重点在于清晰的花色对象和乐于分享的动感。

一些意料之外的是,有人想到了把Lepton用作一款扶助markdown的轻量级“影象笔记”来使用。

登录ui

致谢

  • 一年前参预了太阁程序员社区,从里面包车型地铁免费讲座和系列实战中学到不少!那里强力推荐一下!
  • 1MHz
    给了很多技术帮助,欢迎我们也去参观一下他的Electron文章Knotes
  • xwartz
    PupaFM详尽的commit记录对本人读书Electron扶助一点都不小,希望大家去也给这一个系列点个赞。
http://node1:8080/

运作测试程序

$ bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.4.jar storm.starter.WordCountTopology test

 

环境变量配置

export STORM_HOME=/usr/storm
export PATH=$PATH:$STORM_HOME/bin

 

观看关闭3个supervisor后,nimbus的双重调度
双重运转八个新的supervisor后,观看,并rebalance

发表评论

电子邮件地址不会被公开。 必填项已用*标注