编程这件小事

例如我们正在开车,了解汽车的构造和基本原理业务对于开车这件事情没有过多的帮助,但是对于意外发生时的应对还是可以起到很好的辅助作用的,这点放在计算机行业上面也很类似。

编程这件工作最需要弄明白的一个点就是我们是在做什么的,我们的当然不是在写代码,我们的目的是为了让计算机或者计算机集群按照我们制定的运行方式运行。

对于控制计算机运行这件小事而言,因为我们的计算机都只有一种运作模式,即如下图所示,所以我们的程序最终需要可以被计算机能够使用。所以理论上,我们写的代码,对于计算机而言都是没法用的,那么需要有一个东西帮忙把我们的代码转变成计算机可以执行的内容。

在前叫做编译(编译+链接),在现代开发语言的环境里面叫做build(build+dependency),所以说高等语言实际上真的做到了一次编译到处运行,运行不起来只是dependency没有拷贝完全。看到这里的兄弟,基本可以得出一个结论,用java写的程序,如果本机可以跑,别的地方不可以跑,那么别费劲了,把本地的java和tomcat(或者其他容器)拷贝过去肯定可以的(绝大多数情况下,实在找不到原因仔细进行文件对比是个不错的排错方式)。

image2018-12-24_14-31-46.png?version=1&modificationDate=1545633106458&api=v2

前面所说的内容可以看到,如果要完成在计算机单机进行程序编写,那么你要基本具有代码的编写能力,代码的编译能力以及不同环境的问题定位能力。很多程序员实际上只有第一个能力,第二个能力交给了maven或者ops,第三个能力则只能扯皮了,实际上是不合格的,私人觉着最起码这三个基本能力具备了之后才有资格谈自己是个程序员,才有资格评价所谓的高级或者资深。

实际上有了上面的能力之后,只能说具备了跟实习生一样的技能栈,而真实的知识栈则刚像你展示它“狰狞”的一面,计算机,手持设备,或者其他终端,只是单机单节点运行的应用是没有什么价值的,所以,企业应用或者互联网应用一定是集群的。

一个基本的集群应用结构如下图所示:

image2018-12-24_14-39-56.png?version=1&modificationDate=1545633596786&api=v2

这时候一个很严重的问题就出现了,上面说的三点做到了,一旦放到集群环境里面实际上是没有什么作用的。因为计算机设计的时候是由自身保证其高可用和准确性的,单机的应用充其量需要考虑的只是数据的一致性和应用程序的异常中断,而集群环境里面需要考虑的内容就变的非常复杂,网络的可用性,不同节点的可用性,数据报文收发的一致性等均需要程序进行保证。

所以如果想要成为一个合格的集群程序研发人员,需要具备的基本技术素养需要包含但不限于以下内容:了解数据在集群中的同步机制并了解一套以上的数据一致性保持方法,了解各类RMI方法调用并需要注意的网络异常中断及其处理方案,了解不少于一种集群内请求转移状态保持方案,了解基本的网络数据传输原理并能运行其解决程序出现的极端异常(网络闪断等),了解基本的网络运行原理TCP/IP的基本内容+DNS的同步方案。

上面可以看到,要想了解这些内容需要的已经不仅仅是有某些经验可以搞定的了,私人觉着需要更多的回到图书馆看一下先贤都是怎么思考以上的问题的。

image2018-12-24_14-52-12.png?version=1&modificationDate=1545634333045&api=v2

上图是一个基本的TCP/IP模型,出现某些问题的时候可以协助定位具体发生问题的环节。

image2018-12-24_14-55-48.png?version=1&modificationDate=1545634548866&api=v2

上图是DNS的基本运行原理

 

至于数据库,缓存等等一系列内容,都属于应用所需要的业务数据核心及性能考量等方面引入的,需要在工作的过程中顺便研究和学习的内容。

转载于:https://my.oschina.net/dwbin/blog/2992505

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值