zl程序教程

您现在的位置是:首页 >  其他

当前栏目

一个运维人员的编程思维8

2023-03-20 14:53:38 时间

流是集上面所有思想与一体的智慧

很早以前 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 ~]#

总结

上面都是一些显而易见的道理,但是从显而易见或司空见惯的事物中挖掘出营养却是一个非常值得努力的方向

因为这些司空见惯的的事物太多了,但我们未必真懂得其中的内涵或蕴藏的智慧,哪怕只深掘一层,将会发现遍地都是宝藏

作为运维,不仅要学习各种招式(层出不穷的新技术),还要不断修炼自己的内功(持续提炼和总结),才能逐渐以不变应万变,适应这个日新月异的环境

这条路很长,没有尽头,我依旧在途中,我很乐意将自己看到的风景拿出来与大家分享

纸上得来终觉浅,绝知此事要躬行


原文地址