软件产品是什么?百度百科说:软件产品是指向用户提供的计算机软件、信息系统或设备中嵌入的软件或在提供计算机信息系统集成、应用服务等技术服务时提供的计算机软件。这个定义就像是巫山的云海,让普通人顿时不明觉厉但是依然云里雾里,不知所述。其实我所理解的软件产品常常是一个依靠数据、遵循逻辑建立起来的可操作的应用或者服务。那么一个软件产品应该包含那些部分,各部分之间又怎样交互协调,今天从一个比较宽泛的层面进行梳理,为需要了解的朋友带来一些参考。
首先用一个例子说明什么是一个软件产品,比如我们手机里的微信app就是一个软件产品,我们电脑访问的淘宝网站也是一个软件产品。手机APP和电脑网站这两类产品其实本质并无区别,只是设计模式不一样,前者是C/S架构,后者是B/S架构。C表示客户端,指安装在手机或者电脑等设备中的应用程序;B表示浏览器,指电脑或手机里的用来访问互联网的可统一的应用,其实B和C本质上并无差别,只是一者具有共用性,一者具有专属性,就像是公交车与私家车的区别;而S表示服务提供,这个例子中微信和淘宝都是服务的提供者,普通用户则是服务的访问者或者消费者。
从这个例子中可以看出一个完整的可供使用的软件产品大致包含3个部分,即服务请求者,服务提供者,以及将二者连接起来的网络信号。
如图所示,用户点击手机或者电脑等设备中的应用程序,程序发出一个消息,通过网络信号传输到服务器,服务器处理后重新返给手机或者电脑一个信号,手机和电脑设备将信号以某一格式展示在屏幕上,供用户查看。这就是一个基本的软件产品使用流程。
从计算机的角度来说,整套流程中实际上包含三个部分,分别是软件程序、硬件设备以及网络条件,当然网络条件本质上来说也是通过硬件(线路)对信号的处理,依然逃脱不开软件加硬件的范畴,暂时先不纠结。
从技术的角度看,整个流程就是软件与硬件的组合,从业务的角度看,整个流程就是对数据的处理和传递。用户使用手机或者电脑等设备,通过app和浏览器程序将动作和数据借助网络介质传送给服务端进行分析处理,然后app和浏览器再讲服务端处理后的数据展示出来供用户使用。
在这个流程中有4个问题:
1、客户端如何生成数据或者识别动作?
2、客户端如何将数据发送?
3、服务端如果接受和识别有效数据?
4、服务端如果处理和存储数据?
然后我们对这4个问题进行分析。
一、客户端生成数据或者识别动作
人是一个实体,手机也是一个实体,手机这个实体包含两部分组成:软件程序与硬件组件。当人通过点击、滑动、输入等方式与手机进行交互和“沟通”时,手机中的传感器等组件会对人进行的动作进行识别与感知,然后在通过芯片等组件对将动作转化为数据或者信息,而软件程序则负责对硬件进行调度和信息获取。
二、客户端发送数据和服务端接受数据
APP程序通过硬件设备识别到信息之后,再通过硬件设备对信息进行发送。数据通过网络信号的形式进行传递,但是客户端发送的数据,服务端如何识别,服务端返回的数据,客户端又如何识别?就像是甲和乙两个人在聊天,甲乙双方都必须得搞清楚对方是谁以及聊什么的问题。
客户端和服务端交互的数据信息中一般分为头信息和体信息两部分,体信息为我们一般理解的数据信息,比如我们使用微信与别人聊天时发送的聊天记录信息;头信息为客户端与服务端约定的用于交流的协议以及用于身份识别的信息。上图为使用浏览器产品时的在浏览器端的头信息截图(APP客户端类似)。其中通用信息中描述了数据发送的目标地址(Request URL)与发送方式(Request Method)等;客户端发送的头信息中描述了客户端所能接受的信息格式(Accept)和用于识别客户端身份与操作记录的Cookie信息等;服务端返回的头信息中描述了服务端返回的语言(Content-Language,zh-CN表示中文)和返回内容的类型(Content-Type)等。
客户端与服务端通过这些信息的约定,就像人与人交流使用的文字、语法一样,使得信息能够交互与流通。而客户端则通过Cookie来保存自己的个人信息和经历,就像是人的记忆一样。相对而言,客户端保存身份的信息使用Cookie,服务端则使用Session来得到同样的目的。客户端会将sessioonid发送到服务端,服务端通过sessionid定位到某一个访问的用户,这也就是为什么APP或者网站能区分出用户张三,用户王五以及用户你、我和他的原因。
服务端接收到客户端请求的数据信息后,依据提前约定好的协议规则,进行数据解析,然后进行信息的处理和运算,这也就是通常说的后台服务部分。
三、后台服务的处理和存储
一个软件产品实质上就是对信息进行处理加工,然后进行存储和展示,通常客户端负责对信息进行可视化展现,而服务端则对信息进行加工处理和存储。当然服务端同样也包括软件和硬件两个部分,软件负责整体调度,依赖硬件对信息进行操控,比如软件程序调用CPU进行运算,通过内存或者磁盘进行存储等(而更加细致的说,CPU、内存等同样区分软件(程序)和硬件)。
服务端的软件程序通过提前设定好的规则对数据进行整合、排序、删减等操作,形成最终的目标数据。
四、并不简单的网络传输
如果客户端进行数据的生成和展示,服务端进行数据的处理和存储,则网络层则负责双方的通讯和传输。网络传输层涉及到的内容并不简单,即包括看不到的无线传输,也包括能看到的光缆、电线传输。而网络的传输也并非是一步到位,常常在不同的节点间进行信息转移,不停的进行信息的发送、接受、加密、解密等操作,并且常常也依赖于软件和硬件的结合与协作。
网络一般可区分为内部网络与外部网络。外部网络通常指广义的网络环境,比如互联网;内部网络指企业内部的通讯。在内部网络和外部网络之间常常会有防火墙(防护墙)等策略进行保护,用于对“非安全”访问的过滤和阻止。
最后附上一张最近做的简化版的客户端和服务端交互的流程图,供大家参考:
下一篇文章将从产品的角度进行拆解,敬请期待!
欢迎关注个人公众号:
网友评论