01 体验一次非凡的开源技术之旅
在电影《无敌破坏王2:大闹互联网》中有不少使用动画表现手法生动诠释互联网服务工作原理的片段,比如搜索引擎是如何工作的,又如eBay的拍卖和付款流程等。
那么我们现在也虚构一个场景,假设有一位对计算机和互联网有着强烈兴趣的朋友,对于前面所讲述的整个互联网的技术和计算机架构都是建立在开放源代码之上的产生了浓厚的兴趣,并开始摩拳擦掌,恨不得立即找到所有的入口,研究其运行的过程。接下来我们就以这位朋友的视角,从一个简易的互联网的原初形态入手,全部使用开源软件来完成所有过程,即一次完整的开源技术之旅。
此技术之旅的目的是让读者能够将软件和源代码项目一一对应起来。这是一个非常困难的过程,需要多年的训练才能做到,这里旨在表达原理和过程。
虚构的简单场景
这位朋友用的是一款装载Android操作系统并安装了Chrome浏览器的智能手机,然后使用Chrome访问“开源之道”网站,当网站返回数据时他开始阅读。
◎第一站:终端智能手机
众所周知,软件是硬件的灵魂,当一款智能手机从工厂出货时,它必须搭配相应的操作系统才能有和用户交互的界面,硬件的效能才可以被发挥。截至向导撰写本书的2020年底,这个世界上有72.93%的智能手机安装的是Android操作系统,换句话说,接近3/4的用户使用的是这款开源的智能操作系统。
Android是基于Linux Kernel和其他开源软件开发的一款针对触摸屏的智能手机和平板电脑的移动操作系统,其本身也是开源项目,也就是我们通常所说的Android 开放源代码项目,采用对商业友好的Apache许可协议。Android可以帮助用户管理硬件,即手机的芯片、存储卡、电池、触摸屏、耳机、显示卡、电话SIM卡等;它还为用户提供了一个可操作和交互的可视化界面,人们通常使用手指即可打开和使用上面的App。
◎第二站:连接互联网的入口——浏览器
万维网(World Wide Web,WWW)形成了一个去中心化的、从接入的任何地方都可以访问的全球网络,这让人类的信息共享成为现实。访问这些信息的入口就是Web浏览器,Web浏览器的历史几乎和互联网存在的时间一样长,但是商业化、闭源软件的竞争从来都没有停止过。
不过如今占据85%以上市场的都是开源产品,如Chrome、Edge、Firefox。Web浏览器被安装在用户的计算机操作系统中,或者是以App的方式安装在用户的智能手机、平板电脑等中,通过键入域名,帮助用户从对应的服务器上浏览文字、图片、视频,或者进行购物、付款、聊天等交互。Web浏览器最重要的一个功能,就是可以从一个站点跳到另外一个站点,以无限的方式浏览整个互联网上的信息。
在互联网上,当一台主机要访问另外一台主机时,必须首先获知其地址。在TCP/IP中,计算机只能识别诸如10.0.0.2、192.168.2.25等这样的数字,但是人类非常难以记忆这样的数字,人类有自身的语言,如开源之道站点的域名是opensourceway.community,其对应的IP地址是185.199.108.153。为了方便我们记忆,互联网采用了域名系统(Domain Name System,DNS)来管理域名和IP地址的对应关系。这一技术就是目前互联网上使用最多的开源项目:BIND。
BIND的全称是Berkeley Internet Name Domain,是当前全球互联网的主要域名解析软件,当然所谓根服务器均是该软件在服务。BIND现在由互联网系统协会(Internet Systems Consortium,ISC)负责开发与维护,保持着非常活跃的开发状态。
DNS解析的全过程如图2.1所示。
图2.1 DNS解析全过程
由图2.1可见,当我们在浏览器中敲入域名(opensourceway.community)后,浏览器首先会寻找主机(步骤1),然后主机会在本地(/etc/hosts文件)匹配;如果没有匹配到,就会去远端的根服务器查找(步骤2),根服务器会将最后的域名(.community)返回给主机(步骤3);然后主机向顶级域名(Top Level Domain,TLD)服务器请求域名服务(步骤4),并返回信息(步骤5);主机查询域名的解析结果(步骤6),域名所在的服务器返回给主机IP地址(步骤7);主机告诉浏览器服务器的IP地址(步骤8);浏览器就使用IP地址访问网站服务器(步骤9),网站服务器返回HTML页面(步骤10)。
◎第三站:GNU/Linux服务器操作系统
网页所呈现的内容是需要具体的承载的,也就是说,我们访问的域名,会指向一台实体计算机。这台计算机的操作系统就是GNU/Linux,该系统在互联网服务中占据了超过96%的份额。这是一个超级巨大的开源项目集合,包含有诸如世界上最大的开源项目之一Linux Kernel,GNU旗下的项目GCC、Glibc、Bash等不同的自由/开源软件,这个集合我们通常称之为发行版。据统计,目前世界上有300多种GNU/Linux发行版及其变种。
向导这里使用的是没有商业支持的共同体项目社区企业操作系统(Community Enterprise Operating System,CentOS),它主要是依靠Apache HTTP服务器为自己提供支撑。
◎第四站:Apache HTTP服务器
到达这里,就算是这趟旅程的终点了,这步完成了之后,就要原路返回了。
Apache HTTP服务器是可以将HTML文件发布,并供浏览器以HTTP的方式访问的Web服务器软件。它是Apache软件基金会(Apache Software Foundation,ASF)建立之前的第一个项目,对于ASF有着非常特殊的意义。它可以运行在多个操作系统下,上述的GUN/Linux操作系统就是最为常见的搭载对象。
小结
至此,你手机上的Chrome已经显示出开源之道的内容了。实际上这个过程可能用不了1秒。但是这趟旅程如果是以现实的里程来算的话,需要绕上地球好几圈。这还是最为简单的模式,如果是一次购物,或者是和朋友分享照片,将会比这个复杂得多,还涉及大量的数据和运算,后台的服务器也是大规模的集群,而不是一台简单的服务器。
开源之旅不会结束,它会持续进行,读者的脑海中要形成所谓数据流。开放源代码时时刻刻都在发挥着作用,帮助你更好地工作和生活。你需要做的就是将之视为一趟美妙的旅程。