豪翔天下

Change My World by Program

0%

这是一本去年经常出现在我视线里面的一本书,被很多大V推荐过。首先,不得不说,书中的观点确实非常独到而又富有理论依据。用诸多的例子告诉了我们,一个人的成功离不开他所处的环境、家庭教育、机遇运气,甚至民族文化,当然也免不了10000小时的努力。这也正印证了我们的一句古话:天时地利人和。

单纯从本书的文笔上看,感觉同样没有多大趣味,对于普通的读者,几乎没有仔细读下去的欲望。不知道是此书本身的问题还是翻译的问题。译者的名字我是没听过,也没发现他有什么其他的作品。当然也不能就此下结论,即使是逐字翻译的,我也觉得此书的文笔依然不符合我的口味,每个例子都讲得挺详细,但是详细中给了人啰唆的感觉。当然,本来字数就不多,在不啰唆,可能就真没几页了😂。

我小时候一直很崇拜比尔盖茨,一个大学辍学的人也能创造这样一个IT帝国,那是多么地了不起的事业呀。我曾经也幻想,不上大学也一样能成功。直到年龄越来越大,离那个不切实际的梦越来越远的时候,我才意识到,我和他之间差了多少。家庭因素、时代因素,各种各样的因素我都比不上大他,甚至那一万小时的努力我也比不上他。他虽然辍学,但人家是什么学校,我又是什么学校呢。所以比尔盖茨,现在我只能像对待偶像那样看他,永远也不能望其项背。

算一下就知道,我的努力还远远不够。10000小时是什么概念?每天编程6小时,需要花大概5年;即使每天编程24小时,也要花一年多的时间。这还只是平均数,放假过节,谁没有个休息日呢。所以碌碌无为的普通人,连10000小时都做不到,还能跟人家比什么。拼爹?别说笑了,会认真看这本书的人,有几个人有实力拼爹?

说实话,这本书对我们的思想上的帮助非常大,极大地开阔了我们的眼界,但是对我们现实中的帮助缺寥寥无几。机遇很重要,但它终归是可遇不可求的。文化传承、时代背景、社会环境,也不是你我能够改变的。我们能做的依然只有那10000小时的努力,证视自己所处的环境,把握好每一个机遇,继续在我们这个时代奋斗着。

我始终相信努力奋斗的意义,我也始终相信越努力越幸运。

摘录

  • 所谓成功就是“优势积累”的结果
  • 成功就是坚持不懈,就是顽强不屈,就是别人花30秒钟就放弃的事你却花22分钟去思考的坚定信念。
  • 成长就是要持续不断地破坏现有平衡。
  • 为什么很多人不读书?因为他们从小到大一辈子从未感受过学习的力量……不是读书改变不了命运,是读了那些没用的书改变不了命运……读书就是隔时空与作者交流思想。

新家装修,需要组装两台电脑,一台低配NAS主机,一台高配游戏主机。等到新家装修完成,大概就能写完这篇文章啦。

硬盘

选购指导

对于我来说,硬盘只有容量和类型的区别,品牌之间的差距完全可以忽略不计。

机械硬盘(传统硬盘)

如果仅仅是做NAS用,那完全没必要上SSD,因为NAS里面的数据读写频率并不高,机械硬盘的稳定性离固态硬盘的稳定性相差并不大,所以综合考虑,机械硬盘是十分适合NAS的。目前我用的是一块2015年双十一买的7200转的希捷ST1000DM003硬盘,花了273元,现在价格是319元,果然硬盘涨价了呀。

功能分类

  • 桌面硬盘: 希捷尾数为DM001,WD蓝盘,黑盘系列,东芝P300系列等
  • 监控硬盘: 视频监控,要求持续不断地写入
  • NAS硬盘: 7*24小时无间断运行,静音,5400转以下极客。
  • 企业级硬盘: 7200转,

固态硬盘(SSD)

能极大地提高幸福感的东西。

  • M.2接口不一定就比SATA接口好,决定ssd性能的事主控芯片和NAND

移动硬盘

主板

选购指导

主板的选择一是要考虑机箱的大小,不同尺寸的主板对应不同尺寸的机箱,而机箱的大小一定要与家装相匹配。另一方面,主板还需要考虑扩展性与兼容性。比如我的NAS直接就集成了CPU和GPU,断了我扩展的后路,不过这正是我想要的,集成了就不用去选择CPU和GPU,强迫症的福音,而且集成过后完全不用考虑兼容问题。

主板规格

  • ATX:俗称“大板”,最流行最常见的一种主板,305mm x 244mm
  • MATX:“小板”,244mm x 244mm
  • ITX(Mini ITX): 170mm x 170mm,我选择的nas主板华擎j3455就是这个规格,考虑到不用加太多的扩展并且正好能利用到以前笔记本剩下的内存条

电源

  • 对于我那只有十几w的NAS主机来说,淘宝随便一个电源就能解决问题,不用考虑起稳定性,再差的电源也能支撑十几w的稳定运行。

机箱

  • 机箱的规格一定要和主板的规格匹配
  • 亚克力是一种不错的DIY机箱的材料
  • 电脑不用机箱也能跑

家庭影音

家庭影音分类

  • 5.1音箱: 由左前置音箱,中置音箱,右前置音箱,左环绕,右环绕和一个低音炮组成。左前置音箱,中置音箱,右前置音箱,左环绕,右环绕五只音箱播放的是完整音乐声道,低音炮,只负责150HZ以下的低音部分。各个声道的声音是完全独立的,各音箱的分工是左前置音箱,右前置音箱主要是播放影片中的背景音乐(各种音乐,枪炮声,各种效果声),中置音箱主要播放对白,让人感觉人说话是从电视或投影幕中出来,左环绕,右环绕主要是播放各种声效如,枪炮来自身后的声音,低音炮主要是播放枪炮,爆炸,风声等声音的朝中低音部分,即150HZ以下的声音。由于低音基本没有方向感,所以低音炮的低音是5声道中任意的。这样做就是为看电影的您营造出电影画面中的效果,举个例子,在《珍珠港》中飞机在荧幕上由左向右飞过,音箱发声的顺序是左前置——中置——右前置。这样给人的感觉就是一架飞机由左至右飞过。(摘录自http://blog.sina.com.cn/s/blog_64ddbfff0100h0p5.html)
  • 2.1音箱:这种音箱是电脑音箱中最多的,有两只高音小音箱和一个低音炮组成,两只高音音箱分别是左右2声道,低音炮的低音是不分左右共用的。d音箱小巧美观,易摆放,声音层次好,由于低音没有方向感,所以这种音箱看电影听音乐都非常不错。但是在购买的时候,最好购买低音喇叭较大的,这样低音效果更好。(摘录自http://blog.sina.com.cn/s/blog_64ddbfff0100h0p5.html)
  • 2.0音箱: 标准的立体声2.0音箱。其实就是2只音箱,没有单独的低音炮。这种音箱用于发烧音箱,监听音箱,舞台音箱等专业的录扩声设备都采用标准的立体声2声道音箱,但是作为电脑桌面音箱需要小巧,所以这种音箱摆放起来不好看,除专业和电脑发烧友以外很少使用。(摘录自http://blog.sina.com.cn/s/blog_64ddbfff0100h0p5.html)

终于看完编程之美的三部曲,其实他们三本书完全不是同一个类型同一个方向的著作,感觉完全是因为中文翻译的书名的原因才把他们放在一起。不过,对比前面两者,我觉得这本书才真正把哲学上的美向大家展示了出来,毕竟,将大数据进行可视化既是当今的流行趋势,又是对数据的直观展现,相比于冷冰冰的数据,可视化的图表才是真的让他们能美起来的东西。当然这也是我觉得这本书更有意思的主要原因。

《数据之美》这本书,给我们提供了丰富的例子来说明,数据可视化的深刻意义以及非常多的应用场景。我对数据挖掘是没有多大兴趣的,但是对爬虫的兴趣倒是很深。我一直保持一个自信:只要正常浏览器能看到的,那么我就能爬取到。所以,我写了很多爬虫。爬取汽车之家的车型车系,爬取房天下的房产数据,都是自娱自乐。也挺喜欢去解决爬虫的难点问题,我自己不知道爬取数据对自己有多大用,但我只是喜欢爬数据而已。

最后,推荐两个数据可视化的前端库,highcharts(可视化的先驱,功能可以说是最强大的)ECharts(百度出的可视化工具,功能强大,但是坑多,不是吹,是真的多),以及一些数据可视化的例子(http://www.datapointed.net/)

随着见闻的逐渐加深,接触或者了解过一些其他的优秀的文档编写工具,由于未深入研究过,所以,仅仅在这里进行简单的列举:

  • APIDOC: 支持大量编程语言的根据注释自动生成文档
  • ApiGen: PHP7的类文档自动生成工具
  • YApi: 极力推荐,开源工具,拥有其他项目的收费功能,并且也支持内网部署及二次开发
  • eolinker: 暂时未了解
  • showdoc: 暂未了解
  • mindoc: 暂未了解

swagger特点

swagger是我见过唯一还算将就的一个API文档制作与展示工具,其实最终都没让我找到一款完美的API文档编写工具。

swagger优点:

  • 一个文件就是一个文档
  • 只针对API,而不针对特定的语言的API,很多自动生成API的工具基本都是只针对特定的API的
  • 支持Json和yaml来编写API文档,并且支持导出为json、yaml、markdown等格式
  • 如果编写好了API了,可以自动生成相应的SDK,没错,可能你的API接口代码还没有开始写,它就能帮你制作相应的SDK了,而且支持几乎所有主流编程语言的SDK
  • 支持自动生成大量主流编程语言/框架的server端
  • 界面清晰,无论是editor的实时展示还是ui的展示都十分人性化,其他的API编写工具基本上都做不到这一点,如果自己仅仅用markdown来编写,又要纠结该如何展现,十分痛苦。
  • 官网有直接的demo,甚至都可以不用自己搞一套服务器

swagger缺点:

  • 貌似无法更改主题
  • 中英文的文档都比较少,其主要原因应该是官网的文档本身就不完善,只有针对不同模块儿的介绍,却没有针对具体用户的文档
  • yaml文件只能和API项目本身放在一起,这一点暂时还不知道有什么解决方案
阅读全文 »

这几个月我正在阅读的是编程之美系列书籍,《架构之美》是我看的第一部。全书只有前面两个部分吸引了我,后面的基本上是食之无味地略过。后来想想,此书成书于2009年,有些思想以及对编程的认识,在那个时候可能还是特别有吸引力的,但是拿到现在,可能并没有那么大的吸引力,一是因为这本书的后面部分讲得并不深入,另一个原因是新时代的语言满天飞,老式的语言对于我这种半吊子来说毫无兴趣。

书的前面部分主要讲了一些架构的基本概念和原则。比如,美丽的架构所展示的一些普遍的原则:

  • 一处一个事实:重复导致错误,所以应该避免
  • 自动传播:由一些构建工具支持
  • 架构包含构建:架构不仅包含运行时系统,而且必须包含它的构建方式
  • 最少量机制:实现某个功能的最佳方式要视情况而定,但是美丽的架构不会追求“最佳”。
  • 构建引擎
  • 增长的阶
  • 抵制熵增

以及相应的更完整的解释:

  • 功能性(Functionality):产品向他的用户提供哪些功能
  • 可变性(Changeability):软件将来可能需要哪些改变?哪些改变不太可能发生,不需要特别容易进行这些改变?
  • 性能(Performance):产品将达到什么性能?
  • 容量(Capacity):多少用户将并发使用该系统?该系统将为用户保存多少数据?
  • 生态系统(Ecosystem): 该系统将与其他系统进行哪些交互
  • 模块化(Modularity):
  • 可构建行(Buildability): 如何将软件构建为一组组建,并能够独立实现和验证这些组件?哪些组件应该复用其他的产品,哪些应该从外部供应商处获得
  • 产品化(Producibiity): 如果产品将以几种变体的形式存在,如何开发一个产品线,并利用这些变体的共性?产品线中的产品以怎样的步骤开发等
  • 安全心(Security)

概念性的东西其实到处都有,但是在第一部分里面,即使是讲述概念方面,作者的表达方式也是非常让人有读下去的欲望的。于是顺着作者的思路就来到了一个伟大软件架构的诞生的历程,不过那几个软件奇葩的名字还真是让人费解。好在作者用了最有效最真实的方法来讲述一个软件架构如何做到完美的。要想往完美的架构迈进,首先要做的就是承认,世界上没有完美的架构,只有在不断演化中,不断适应需求中,架构才能越来越完美。其实架构本身就已经很美了,每次我看到同事画的或是自己画的架构图,都觉得真美呀,特别是当自己画的架构图能够一下子让大家都看懂的时候。正如我在实际工作中所体验的一样,本书也认为架构的输出图是最重要的,有了图,我们的工程师才知道该做什么,才知道为什么要那样做。由于保密的问题,我肯定不会把公司内部的架构图放在这里,但是相信我,我们工程师画的每一张架构图,都是特别美的。

以前的我会认为编程是一件十分简单的事情,因为无论什么语言,只需要花两三天看一下基本的语法就能用那种语言写一个东西出来,但是在实际的工作中,我才明白,编程最重要的绝对不是编程语言,编程语言反而是最次要的,最重要的是如何根据当前的需求以及未来可能出现的需求而设计出的“最完美的架构”。

语录:

软件的架构其实是和公司的组织结构及开发流程相互影响的。当然大多数情况下是软件的架构是被动者。但好的软件架构设计原则反作用于组织机构及开发流程也不是不可能的。

没有完美的架构。架构师就是力求做一个务实的“平衡美人”。不能一边坐拥着间接、长远才见效、容易视而不见的幕后优点,一边又对为了实现前者随之带来的小小应付成本挑三拣四,这样很容易捡了芝麻丢了瓜。。。

好的架构就是要分离关注点,也即“庖丁解牛,分而治之”。降低耦合性,这样复杂性也随着降低了,让参与系统各个方面的开发测试人员只需了解自己需要了解的模块,不需要了解整个系统,就能并行地进行工作了。只有这样才能开发出超越了单个人智慧所能理解的复杂软件生态系统平台。对于复杂系统的大部分参与人员:“知其然,也要知所以然”未必适用。

构架在最初构想的时候,可以脱离实际,思考出解决问题的最佳途径,但是在实施过程中,必须要考虑细节。

架构是一个过程,而非一个结果。

但是,你仍然可以不必过多担心功能就开始设计架构。你关注的是需要满足的品质。

Fred Brooks说,概念完整性是架构最重要的特征:“最好是让系统反映一组设计思想,而不是让系统包含许多好的思想,而这些思想却彼此独立而不协调”(1995)

注意:软件架构不是一成不变的。需要时就改变它。要想做到可以修改,架构就必须保持简单

像一座建筑或一个城市的物理架构一样,系统的架构必须适应环境,利用该架构创建的工件将存在于该环境之中。

在每一种情况下,我们都会先探索所有可能性,然后再做决定。我们会在“最后可能的时刻”做出决定,即不做决定的代价超过了实现该特征的代价。尽管如果一开始就用Spring,有些事情我们可能会做得不一样,但在后来加入它也没有让我们受苦。在早期的迭代中,我们关注的是发现应用想成为什么样子,而不是Spring希望我们如何构建应用。

如果,在采取了所有让任务能够由单人处理的方法之后,架构任务仍然巨大而复杂,不能由一人来完成,那么产品肯定是太复杂了,以致不实用且不应构建。换言之,单个用户必须能够理解计算机的架构。如果计划的架构不能由一个人设计,那它也不能被一个人理解。(1997)

例如,如果我们请你来设计一个“基于Web的应用”,你首先问我们页面布局和导航树,还是问下面这些问题: ·谁提供应用主机托管?托管的环境有什么技术限制吗? ·你想运行在Windows服务器上还是在LAMP栈上? ·你想支持多少并发用户? ·应用需要怎样的安全性?有需要保护的数据吗?应用将运行在公网上还是在私有的内部网上? ·你能为这些答案排列优先级吗?例如,用户数是否比响应时间更重要?

软件架构师的首要关注点不是系统的功能。

架构的最主要产出是什么?我的答案是:图。这里面有两层含义:一层含义是如同建筑师描绘的蓝图一样,用于引导实施者;另一层含义是架构师头脑中清晰的目标系统。如果架构师头脑中没有系统清晰的图像,他是没有办法把它画出来的。

看完《架构之美》过后就开始看《安全之美》,感觉大量的章节读起来的感觉都差不多,并没有深入的体会也没有感觉对我有什么启发。我想,主要的原因可能是我大学本来就是学习的计算机大类里面的信息安全专业,书里面的大部分内容以及相关推理和讨论,学校的教材里面就讲过。当然我推测,学校的教材可能也是借鉴了外国的著作,也有可能是我们学校所使用的教材本来就是高手编写的。

当然,绝对不能说这本书写得差,只能说此书在我现在的阶段所能给我的帮助太少了,如果我刚刚接触信息安全这方面,可能会特别感兴趣,也会学习到很多。不过,确实有一点,安全确实很美,但是这本书却一直没有像预期的那样透过哲学或是其他什么方式突出安全的”美“。后来,我去看了豆瓣对此书的评价,评分只有6.7,果然比《架构之美》的7.1要少。而且评价里面几乎都是差评,即使有好评,也仅仅是读者对安全的评价,并没有对此书做过多的评价。只希望最后一部《数据之美》能不再让我失望了。

我从小就是一个机械迷,喜欢木匠,喜欢硬件开发,喜欢各种DIY,有了自己的房子,我就能搭建自己的小小工作间了。

电器

电机

  • 舵机: 里面有一个控制板和一个普通电机以及减速齿轮。可以精准控制旋转角度,但是只能180度旋转。常用于机器人的手臂旋转等。
  • 减速电机: 和直流电机差不多,但是因为能减速所以扭矩非常大。
  • 直流电机: 普通的一直转的电机,扭矩比较小。
  • 步进电机: 能够控制旋转角度,扭矩属于中等。淘宝链接: 混合式57步进电机,扭矩2.3Nm,高75.5mm

  • 锂电钻: 相比于其他的电钻,主要就是携带方便,小巧玲珑,缺点是功率小,要想用来钻墙基本是不可能的。手上有一个12V不能变速的锂电钻,小幅度提升幸福感,电器的螺丝基本上可以,但是遇到需要强有力的螺丝的时候是凝不紧的,还得用手。试过用钻头钻木材,比较慢;而且夹持范围太小,1cm的钻头都夹不了。
  • 冲击钻: 和电锤原理一样,都是在旋转的时候做小幅度活塞运动。
  • 电锤: 冲击钻打不动的就用电锤了。
  • 石工钻头: 通体银白色,主要用于砖墙。
  • 木工钻头: 头上非常尖锐,主要用于木材。
  • 金工钻头(麻花钻头): 通体黑色,主要用于金属。

切磨

切磨当然是用切磨机,但是有时候也可以用电钻代替,有连接杆可以连接,但是用电钻的话并不方便实用。

  • 羊毛轮(羊毛抛光轮): 专用与抛光或修补擦伤的材料,如玻璃、陶瓷、石材、金属、塑料等
  • 切割片
  • 百叶轮:用来磨的

线

电流只与导线截面积有关。0.2平方的线是1A,0.3平方的线是1.8A,0.5平方的线可以通过2.5A/220V/550W,0.75平方的线是3.75A。

  • 杜邦线: 用于实验板的引脚扩展,可以非常牢靠地和插针连接,无需焊接,可以快速进行电路试验。
  • OK线:比普通导线细,一般用于电路板飞线,PCB跳线等,一般是30号规格,最大承受0.5A电流。价格都非常便宜。

继电器

一种电子控制器件,用较小的电流去控制较大电流的一种“自动开关”,在电路中起着自动调节、安全保护、转换电路等作用。当然,其实也能用弱电控制强电。继电器连线示意图:

继电器端口示意图

注意事项:

  • 继电器的VCC(接直流正极)与GND(接直流负极)是用来接模块的供电,必须是直流电。
  • IN端是模块触发端,当有触发信号时,继电器的输出端开关会闭合,就会通电。
  • 高电平触发(PNP触发): 正极触发,即在触发端与电源负极之间电压达到触发条件的电压时,继电器闭合。(例如,当IN端有3-12V时,继电器闭合,当IN端有0-0.5V时,继电器断开)
  • 低电平触发(NPN触发): 负极触发,即在触发端与电源负极之间电压为0V或接近0V时,继电器闭合。(例如,当IN端由0-4.5V时,继电器闭合,当IN端有大于5.5V时,继电器断开)

非电器

木料

铁料

钉子

  • 水泥钉

  • 膨胀螺丝(膨胀螺栓): 固定式灯具,如无特殊要求,墙壁开孔一般均为6毫米。

    螺栓规格(毫米) 钻孔尺寸 (毫米) 受力性能 (公斤)
    直径 深度 允许拉力 允许剪力
    M6 10.5 40 240 180
    M8 12.5 50 440 330
    M10 14.5 60 700 520
    M12 19 75 1030 740
    M16 23 100 1940 1440

2016总结

2017年是我的本命年,果然,在2017一开始的时候就遇到几件大事,和女朋友吵了一场很大的架,差点错过彼此。可以说,整个一月份都是在吵架、和好的过程中度过的,最后还是和好了,并且我也确定了她,过年的时候居然还订了婚,果然,吵架是情侣关系的一个坎,过去了,就一生一世,过不去,就只是路人。这里又一次,站在农历的过年前,写下了我的总结,再一次感叹,那些每次在新年一开始就写总结的人在最后的一个月里是多么的空闲。

今年,是我和她在一起的第二年,今年吵架的次数肯定是无数次的,吵到要分手的程度也有四五次吧,不过,基本上是我转正过后,准确地说是在我拿到现在这份期待已久的工资的时候。有了这份工资,我终于可以买到自己想要的东西了,也因为有了这份工资,无形中,自己被欲望所奴役,导致忘记了曾经那个理性的自己,忘记了曾经那个善良的自己,少了对她的疼爱,多了对房、车、以及所有希望买的东西的欲望。一直以来我都在忙着做自己的事情,在乎自己在乎的东西,总是觉得自己认为的就是对的,但是我并没有真正去了解她,并没有真正走进过她,被欲望遮住了双眼的我,甚至多次讽刺她,瞧不起她。即使这样,她都还是原谅了我,最终还是和好如初,这样的女人,我怎么可能不把她留在身边呢,所以,我们决定今年请双方家长一起过来团年,明年春节订婚。具体结婚的日期,我希望是2018年10月1日,因为那一天我生日,我在大概10岁的时候就算好了那一天是我的生日,从小学开始我就告诉身边的人,我要在那一天结婚,没想到,这个愿望还真有可能实现。而且晚婚假15天,那天我刚好25岁,真巧。

今年,我们买房了。一套走几分钟才能看到江的”江景房“,两室一厅,不算大,但是住我们倆,再加父母偶尔来一下,完全够了,而且阳台和厨房超大,以后可以更多的享受做饭和休闲的乐趣。旁边有两个公园,距离嘉陵江很近,非常适合养生,感觉住在这里可以多活好几年呢。贷款加上利息接近百万,要还款30年,其实没什么,刚需房,想买的时候就买,毕竟回头看去,只过了两个月,那套房子的价格又涨了我一年多的工资总数。另外,对于爸爸妈妈出钱付首付和花精力来帮我装修房子,还是只能说此生报不完的恩情。

今年,毕业了,正式工作了,虽然工作经验已经有了一年半,但是今年算是真正的开始工作了。毕业答辩有惊无险的过了,对于同班同学,由于大三才呆在一起,所以感情并不大,反而对以前那个班的同学感情比较深一点,当然,最深的还是室友,经常会想起他们,经常想起我在寝室飙歌,可惜,一切都回不去了。现在大家每天都有各自的工作,晚上回到家,大家也都很累,根本没时间大家联系了。不过还是希望大家,前程似锦。工作了三个月顺利转正,由于已经工作一年,对这些并无感,而且上家公司福利待遇超级好,哈哈。

今年,学日语的目标没有达成,连五十音都还不会呀。因为买房,所以给父母做全身检查的目标也没达成,结交IT界好友的目标没达成。。。。唯一达成的是博客日访问量10+盒SegmentFault声望1k+。当然,这些是我在今年年中定下的目标。每次,我的生命中有大事的时候,我就会每天想着它而不能干其他的事情,比如要毕业了,我心里一直想着毕业的事情,要买房了,一直想着买房的事情,要装修就一直想着装修的事情,这样一件接着一件,我觉得我每天都在浪费时间,突然觉得每个人的生命中都会遇到这样或者那样的大事,但可能只有我,需要花特别多的精力在上面,甚至不去想它就无法用心做其他的事情。无论怎样,希望明年的自己能够更强大,能够战胜拖延症。。。

2016,感谢你,让我变成今天的自己。

2017计划

豪翔天下

  • 简书: 1000+喜欢

  • 微信: 100+订阅

  • 微博: 粉丝+1000

  • 博客: 日均20+

  • 专栏: 1个

  • 阅读: 20+本

  • GitHub: 100+ star

  • SegmentFault: 3k+声望

  • 玩玩儿硬件开发

  • 搭建家庭NAS

  • 多做几个side project

  • 日语二级(这是我2014年定下的2015年的目标,2016年并没有完成。。。)

资产

  • 研究理财产品: 10+

  • 和女朋友存款1w+(婚戒、买车),(2017年1月26日,发年终奖了,婚戒已买)

  • 坚持记账

  • 把家装修成想要的样子

健康

  • 平均每天1w+步
  • 每周一次,运动量大一点的运动
  • 参加一次集体运动,如马拉松等

情感

  • 和女朋友至少一次出省旅游
  • 至少一次带家人旅游
  • 和女朋友多次省内旅游
  • 多去和老朋友聚聚会
  • 家人生日尽量回家
  • 带双方父母做健康检查

Aria2简介

Aria2是一个轻量级的多源多线程的跨平台的命令行下载工具,支持HTTP/HTTPs、FTP、SFTP、BitTorrent和Metalink等下载方式。当然,目测,国内更多用于百度云的下载,不过,自从我家里用了linux的nas,并且迅雷已经不能用的情况下,我也更倾向于使用aria2。

相比于you-get以及其他的下载工具,aria2最大的优点是其内部的连接数控制缓存控制能够明显提高下载速度,并且不会轻易失败

Aria2的安装

For Mac: brew install aria2

For Debian: apt-get install aria2

Aria2的使用

1
2
3
4
5
6
7
# 参数说明
--all-proxy=127.0.0.1:8181 # 设置http代理,包括了http/https/ftp
-m 100: 设置重试次数,默认是5
-c: 断点续传,如果有只下载了部分的文件那么继续下载
-k20M: 多大的缓存,默认是20M,建议修改为-k1M,因为网络环境不好
-s5: 使用多少个连接数,默认为5,建议为10
-x1: 每个服务器的最大连接数,默认为1,建议为16
  1. (可选)安装ria2GUI,这是Aria2的桌面GUI程序,集成了aria2c,支持多线程下载,为完成任务退出自动保存,支持PT/BT,可以显示整体下载速度。方便管理,从github进行下载,下载完成后直接解压打开就是个dmg应用了。
  1. 安装百度网盘的导出工具,谷歌浏览器插件下载地址,由于谷歌把它禁用了,得自己下载来使用(貌似是违反了谷歌插件的不能改变网页内容的条例)。

  2. 现在可以打开百度网盘,直接选择导出到rpc即可开始下载了。

重要概念

生产者(Producer)

消费者(Consumer)

消费消息。每个consumer属于一个特定的consumer group。使用consumer high level API时,同一个topic的一条消息只能被同一个consumer group内的一个consumer消费,但多个consumer group可同时消费这一消息。每个partition只会由一个consumer消费。

集群(Cluster)

宏观来看,Kafka主体包含的就是三部分: 生产者、消费者和集群,一个集群就是多个Broker的集合。

Broker

已经发布的消息就会保存在集群中的某个Broker中去。

Topic

用来区别message的种类,比如很多时候,与A相关的日志统一的topic定义为A,B相关的日志统一的topic定义为B,这样就不用一个一个单独地订阅了。物理上不通topic的消息分开存储,逻辑上一个topic的消息虽然保存于一个或多个broker上,但是用户只需指定消息的topic即可生产或消费数据而不必关心数据在哪里。

Partition

Kafka中每个Topic都会有一个或多个Partition,他是Kafaka数据存储的基本单元,每个Partition对应一个文件夹,文件夹下存储这个Partition的所有消息和索引。Kafka内部会根据算法得出一个值,根据这个值放入对应的partition目录中。所以读取时间复杂度为O(1)。分区的每一个消息都有一个连续的序列号叫做offset,用来在分区中唯一标识这个消息。一个topic可以保存在多个partition。Kafka会保证每个partition内部的顺序,但是不能保证跨partition的全局顺序,如果要保证全局有序,那么topic就只能有一个partition。如果一个group内部的consumer数量小于partition数量,那么至少有一个consumer会消费多个partition。当consumer数量和partition数量相等时效率最高。consumer数量不要大于partition数量,否则会有consumer空闲。consumer会自动负载到不同的partition。

  • 对于某一个topic,增加partition可以增加吞吐能力,但无法保证topic级别的有序性。

Segment

一个partition由多个Segment组成,一个Partition代表一个文件夹,一个Segment则代表该文件夹下的文件。Segment有大小限制,由log.segment.bytes 定义。

安装

docker方式安装

docker-compose.yml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
environment:
JMX: 9000
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka # 这个镜像使用文档见https://github.com/wurstmeister/kafka-docker
ports:
- "9092"
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://:9092 # 这是重点,否则,在容器内部启动生产者消费者都会失败的
KAFKA_LISTENERS: PLAINTEXT://:9092
KAFKA_CREATE_TOPICS: "test:1:1" # 自动创建一个默认的topic
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false" # 禁用掉自动创建topic的功能,使用上面的镜像,kafka的参数设置都可以以这样的方式进行设置
volumes:
- /var/run/docker.sock:/var/run/docker.sock
kafka-manager:
image: sheepkiller/kafka-manager # 如果要安装web管理工具可以同时安装这个,最后通过宿主机IP的9000端口进行访问,例如172.31.148.174:9000
links:
- kafka
- zookeeper
environment:
ZK_HOSTS: zookeeper:2181
APPLICATION_SECRET: "letmein"
ports:
- "9000:9000"
expose:
- "9000"

安装命令:

1
2
3
4
5
docker-compose up -d			# 默认只会有一个kafka实例
docker-compose scale kafka=n # 将kafka实例增加到n个,什么都不用修改,就能直接建立一个集群
docker-compose stop # 暂停所有容器
docker-compose start # 开启所有容器
docker-compose rm -f # 删除所有容器

kafka命令

kafka-console-consumer.sh

1
kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic test	# 启动一个消费者,监听test这个topic

kafka-console-producer.sh

1
2
kafka-console-producer.sh --broker-list localhost:9092 --topic test	# 启动一个生产者,直接输入消息回车即可发送消息了
kafka-console-producer.sh --broker-list localhost:9092 --topic test < access.log # 直接将文件内容传入kafka

kafka-consumer-groups.sh

1
2
kafka-consumer-groups.sh --new-consumer --bootstrap-server localhost:9092 --list	# 查看新消费者列表
kafka-consumer-groups.sh --new-consumer --bootstrap-server localhost:9092 --describe --group kafka-python-default-group # 查看某消费者的消费详情,这里的消费者名称就是kafka-python-default-group

kafka-producer-perf-test.sh自带的压测工具

1
kafka-producer-perf-test.sh --topic test --num-records 10000 --record-size 1 --throughput 100  --producer-props bootstrap.servers=localhost:9092	# 总共100条数据,每条大小是1

kafka-topics.sh

1
2
kafka-topics.sh --list --zookeeper zookeeper:2181		# 列出所有的topic
kafka-topics.sh --describe --zookeeper zookeeper:2181 # 查看集群描述

安全认证

Kafka可以配合SSL+ACL来进行安全认证: http://orchome.com/185

TroubleShooting

  • 容器内部启动生产者出现错误:[2016-12-26 03:03:39,983] WARN Error while fetching metadata with correlation id 0 : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)

    是因为docker-compose文件里面的宿主讥IP设置出错,如果是动态IP的话就没办法了,只能删除重新创建了

  • 启动生产者或者消费者出现LEADER_NOT_AVAILABLE:原因是没有执行docker-compose scale kafka=n

拓展阅读