一个运维人员的编程思维8
流是集上面所有思想与一体的智慧
很早以前 Unix的设计思想中就包含以下三点:
- 1.一个程序只做一件事情,并且把它做好
- 2.程序之间能够协同工作
- 3.程序处理文本流,因为它是一个通用的接口
其实前两点已经很直白,专注,模块化,松耦合,分工协作,这里不准备详细地展开,但是对于第三点,很多人持有保留意见,主要就是针对 文本流,因为它对于人类是友好的,但是对于计算机会产生很多不必要的开销或容易被误用直接引发异常
这里我把它抽象为流,是 数据流 ,并不局限于 文本流
回到程序,我们知道计算机只能干两件事:数据表达 和 数据加工
它是按照下面的流程进行处理的:
输入数据,处理数据,输出数据
(或 加载数据,加工数据,保存数据)
仔细观察就会发现这个处理流程像极了流水线上的其中一个环节,如果将很多个这样的环节对接起来就成了整条流水线,这条流水线可以随时被重新拼装,加入步骤,减少步骤以实现对任意数据的任意加工处理,这其实就是一个程序做的事情
Tip: 其实一台计算机中不是只有一个地方能对数据进行处理,除了CPU以外,内存,硬盘,raid卡,显示芯片,南桥芯片,北桥芯片,网卡芯片都能对数据进行处理,只不过CPU更通用也可以被任意编程,而其它芯片是定向优化处理过的,只针对具体应用场景或特定功能特性,不能随意被编程
大而化之,可以这么看待一个程序,它接受一个对象(可以是人也可以另一个程序)的操作(请求),然后进行处理,最后反馈结果(响应)
既然如此,继续扩大范围,我们的系统架构是否也遵循这一思想呢,当然遵循,现的比较流行的 Restful + 微服务 架构可以看成一种网状流系统,SOA 架构可以看成是星型流系统(由MQ或信息总线来统一调度和管理,这样就更为松耦合,更强扩展性,比较适合大规模和分布式),还有一些现成的Web框架如 MVC ,就是一种星型流的框架,DDD 中的 CQRS 就是一种线(或环)型流的框架
系统的架构或应用的框架可以故意往线型流的方向去靠拢,也可以不太在意,设计得为更随意(没有最好的架构,得看具体场景下的需求和实现成本)
这里有一个典型遵循线型流思想的软件架构
ELK (Elasticsearch , Logstash , Kibana)
Tip: 如果对ELK感兴趣,详细内容可以参考 ELK
其中 Logstash 又是一个遵循线型流思想的软件
Logstash 是这样的处理模型
input threads | filter worker threads | output worker
日常的工作中,可以多使用管道,能节省下大笔的时间
我只想获得以M为单位的空余内存大小
[root@h102 ~]# free -m
total used free shared buffers cached
Mem: 1869 1269 600 2 213 367
-/+ buffers/cache: 688 1180
Swap: 3999 0 3999
[root@h102 ~]# free -m | grep Mem | awk '{print $4}'
600
[root@h102 ~]#
总结
上面都是一些显而易见的道理,但是从显而易见或司空见惯的事物中挖掘出营养却是一个非常值得努力的方向
因为这些司空见惯的的事物太多了,但我们未必真懂得其中的内涵或蕴藏的智慧,哪怕只深掘一层,将会发现遍地都是宝藏
作为运维,不仅要学习各种招式(层出不穷的新技术),还要不断修炼自己的内功(持续提炼和总结),才能逐渐以不变应万变,适应这个日新月异的环境
这条路很长,没有尽头,我依旧在途中,我很乐意将自己看到的风景拿出来与大家分享
纸上得来终觉浅,绝知此事要躬行
原文地址
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十