杂篇 —— 常识有关(下)

  • 来源:
  • 更新日期:2018-05-08

摘要:目录: 字节(Byte),比特(Bit)和字 网络数据如何传输 云服务器与云虚拟主机的区别 NoSql 简述网站架构的演变过程 tomcat项目部署及注意事项   一、字节(Byte),比特(Bit)和字 存贮容量计算单位 1)网络上的所有信息都是以“位”(bit)为单位传递的,一个位就代表一个0或1。 2)每8个位(bit)组成一个字节(byte)。

目录:

字节(Byte),比特(Bit)和字 网络数据如何传输 云服务器与云虚拟主机的区别 NoSql 简述网站架构的演变过程 tomcat项目部署及注意事项 一、字节(Byte),比特(Bit)和字

y2vzmvxcck4.jpg

存贮容量计算单位

1)网络上的所有信息都是以“位”(bit)为单位传递的,一个位就代表一个0或1。

2)每8个位(bit)组成一个字节(byte)。字节是什么概念呢?一个英文字母就占用一个字节,也就是8位,一个汉字占用两个字节。一般位简写为小写字母“b”,字节简写为大写字母“B”。

3)每一千个字节称为1KB,注意,这里的“千”不是我们通常意义上的1000,而是指1024。即:1KB=1024B。但如果不要求严格计算的话,也可以忽略地认为1K就是1000。

4)每一千个KB就是1MB(同样这里的K是指1024),即:1MB=1024KB=1024×1024B=1,048,576B这是准确的计算。如果不精确要求的话,也可认1MB=1,000KB=1,000,000B

5)每一千个MB就是1GB,即1GB=1024MB,至于等于多少字节,自己算吧现在我们搞清楚了,常听人说什么一张软盘是1.44MB、一张CD光盘是650MB、一块硬盘是120GB是什么意思了。打个比方,一篇10万汉字的小说,如果我们把存到磁盘上,需要占用多少空间呢?100,000汉字=200,000B=200,000B÷1024≈195.3KB≈195.3KB÷1024≈0.19MB网络上的速度计算单位一般网络的速度是以“位每秒”(bps)来表示。注意,是小写b(位),而不是大写B(字节)。例如,我们说一个56K的猫(modem),它的速度就是56Kbps,也就是说它一秒钟可传输56K个bit,换算成字节:56Kb=56×1024b=57344b=57344b÷8b / B=7168B即它一秒钟可传递7168字节(≈0.07MB)。如果用这个猫下载一个2M的文件,需要多少时间呢?大家可以自己算一下。我们还常听说ADSL上网的速度是512K、或某台服务器的带宽是10M、或某个网络设备的速度是100M,那么请注意,速度的单位都是bps(位每秒)。在电脑的计数单位中这两个单位可能是最容易被混淆的了,今天我就来谈一下这两个单位的不同。电脑的计数是以2的次方计数的,容量的几个基本单位的进制都是2的十次方(1024).但是这里有个例外,那就是位与字节。位是最最基本的计数单位,但是不常用。常用的基本计数单位是字节,也就是常说的Byte(位的英文是bit)。1Byte=8bit简写的时候字节用B表示,位用b表示。我们常说的mp3,mp4的容量是多少兆就是多少MB的简称而不是Mb。我之所以要提这两个的区别是因为有的商家太狡猾了,他们总是利用这两个东西来混淆视听,尤其是电子词典。比如有的电子词典在广告上说他有256Mb的内存,如果不是打印错误那你就该注意了,此Mb非彼MB。这里的256Mb实际上只等于我们常说的32MB,也就是它容量的八分之一。除了这里,最大的误解出现在网速上。通信商给我们提供的1M,2M的速率都是以Mb计算的。比如家里常用的1M的网速,它的全称是1Mbps,就是说每秒下载1Mb的东西,换算为字节就是128KB,这个值是理论最大值,只有在特别理想的状况下才能达到。所以1M的网速如是下载速度在70~100KB / s都是正常的。高了或低了都是不正常的(当然我们希望它不正常的高)。若是低的厉害那你就该检修一下线路了,或者修修你的电脑。附:1GB=1024MB1MB=1024KB1KB=1024B1B=8bit

(硬盘的计数以1=1000记)我们经常说到网速,而提到网速,经常省略了单位,往往只是说G、M、K,其实G、M、K是数量的简略表示法,换算公式:1G = 1024M,1M = 1024K,1K = 1024,就相当于我们中国人说的亿、万、千、百、十,只是数量的简略表示而已,并不是单位。B是Byte的意思,Byte是字节的意思,是存储空间的基本计量单位bit是位的意思,是说二进制数的长度单位,比如10011001就是8位二进制数这个bit就是网速的基本计量单位bps里的b,bps的意思是bits per Second,即每秒传输多少位数 (二进制)为什么这里是bits而不是bit了呢?这是英文与中文的区别,复数的表示法。二进制数是计算机内部使用的基本表达语言,所以位 (bit)是计算机中最小的数据单位。1字节在计算机里存储为一个8位进制数,这是固定的。提到了字节,不得不再提到“字”这个计量单位: “字”由若干个字节构成,字的位数叫做字长,字长就是说字所对应的二进制数的长度。不同的机器有不同的字长。例如一台8位机,它的1个字就等于1个字节,字长为8位。如果是一台16位机,那么,它的1个字就由2个字节构成,字长为16位。前期的DOS就是8位的,后期的DOS是16位的,Win9X是基于DOS的,所以也是16位的,NT核心的Windows是32位的,现在也有了64位的XP / 2003,CPU也有了64位的,这个操作系统和CPU所说的位就是bit的意思,即二进制数的长度。字节是固定由8位二进制构成,64位系统就代表了64位的二进制代表一个字,换算成字节就是64 / 8 = 8,即是说由8字节构成一个字,32位系统就是32 / 8 = 4,4个字节代表一个字。

在计算机中,一串数码作为一个整体来处理或运算的,称为一个计算机字,简称字。字通常分为若干个字节(每个字节一般是8位)。在存储器中,通常每个单元存储一个字,因此每个字都是可以寻址的。字的长度用位数来表示。
在计算机的运算器、控制器中,通常都是以字为单位进行传送的。宇出现在不问的地址其含义是不相同。例如,送往控制器去的字是指令,而送往运算器去的字就是一个数。
字长
计算机的每个字所包含的位数称为字长。根据计算机的不同,字长有固定的和可变的两种。固定字长,即字长度不论什么情况都是固定不变的;可变字长,则在一定范围内,其长度是可变的。
计算的字长是指它一次可处理的二进创数字的数目。计算机处理数据的速率,自然和它一次能加工的位数以及进行运算的快慢有关。如果一台计算机的字长是另一台计算机的两倍,如果两台计算机的速度相同,在相同的时间内,前者能做的工作是后者的两倍。
一般地,大型计算机的字长为32―64位,小型计算机为12―32位,而微型计算机为4一16位。字长是衡量计算机性能的一个重要因素。

 

二、数据流量传输

比如你用QQ发送文本信息“你好”给对方。 发送过程:

1、QQ先把“你好”转换成ASCII码,并且生成一个报文,此时报文为:(QQ报文头)+(你好的ASCII码)

2、QQ是应用层软件,,理论上应用层应该把报文交给它的下一层,表示层。此时报文变为(表示层报文头)+(QQ报文头)+(你好的ASCII码) 不过,我觉得QQ应该是直接把报文交给了传输层的UDP协议,此时报文变为(UDP报文头)+(QQ报文头)+(你好的ASCII码)。此时还要建立UDP连接,不赘述。

3、然后UDP协议把报文交给网络层的IP协议,报文变为(IP报文头)+(UDP报文头)+(QQ报文头)+(你好的ASCII码)。

4、然后,IP协议把报文交给链路层协议的以太协议,报文变为(以太报文头)+(IP报文头)+(UDP报文头)+(QQ报文头)+(你好的ASCII码)。

5、然后,以太报文被送到网卡上,此时报文被分割为好几个帧,以0101的形式通过物理层发送到网络上。 6、然后,是交换机收到这些帧,把这些帧还原成以太报文,交换机根据以太报文头里的MAC地址查找自己的MAC地址表,找到出接口,把报文从出接口发送出去(把报文送到网关设备上)。发送的时候报文又被分割成多个帧,通过物理层发送出去。

7、网关收到报文后,根据IP报文头里的IP地址,查找自己的路由表和FIB表,找到下一跳地址,然后把报文送到下一跳,这个过程不断重复,直到找到对方的网关。

8、对方的网关再把这个报文发送到对方的电脑上。

9、对方电脑收到报文后依次剥掉以太报文头、IP报文头、UDP报文头,然后发现应用层协议是QQ,于是把这个报文交给QQ软件处理,QQ再把ASCII码还原成“你好”,显示在对话框里。

 

三、云服务器与云虚拟主机

虚拟主机就是利用技术把一台服务器分成多个“虚拟”的主机,这些划分出来的主机具有独立的域名和完整的Internet服务器功能,共享服务器的带宽和IP。虚拟主机之所以被普遍使用,在于它的易操作性和超高性价比。虚拟主机没有独立的操作系统,用户只需通过提供的图形化控制面板简单操作就可以了。另外,由于这些虚拟主机是共享一台独立服务器,每个用户承受的成本大大降低。

而云服务器又称云主机,它是在一组集群服务器上划分出来的多个类似独立主机的部分,拥有和服务器相同的功能与使用方法,有独立的带宽和IP,用户可以根据需求安装各种操作系统和配置相应的运行环境。由于云主机是从集群服务器中划分的,集群中的每台服务器都会有云主机的一个镜像,任意一台服务器出现硬件故障时,系统都会自动访问其他机器上的镜像备份,避免网站的丢失,提高了稳定性和安全性。

从虚拟主机和云服务器的概念中可以看出,无论是性能还是安全方面云主机都强于虚拟主机,但价格也比后者贵很多。而虚拟主机由于是共享服务器的资源,所需成本并不高,也因为其性价比受到建站用户的欢迎。

不过随着云计算技术的日趋发展,很多IDC公司通过技术把云服务器划分成小型的云虚拟主机,它们的稳定性和安全性大大提高,成为中小型企业建站的最佳选择。

无论是传统的主机,还是云主机,它们都有自己的优势,而对建站用户来说,能满足需求的才是最合适的!

 

四、NoSql

1.文档数据库适合多种数据类型

文档数据库经常用于内容管理系统,收集和处理来自网页和移动应用的数据,比如应用监控。顾名思义,文档数据库以类似文档的结构存储数据,可以采用无模式的形式。MongoDB、CouchDB、Couchbase Server和MarkLogic是典型的文档数据库。

2.键值数据库简化IT

诸如Redis、Aerospike和Riak等键值数据库是形式最简单的NoSQL软件。数据中的每一个值都有专门的键(key)与之匹配,能够实现针对相对简单数据集的超快应用性能。美国咨询和技术服务供应商Caserta Concepts总裁Joe Caserta表示:“键值存储是轻量级的,用户可以实现秒级的浏览和查询。”
3.列式数据库应对海量数据

列式存储在拥有大量列的表中存储数据,在处理大数据集的时候,就可以具备更高的性能和扩展性。通常应用于互联网搜索、其他大规模的网页应用和PB级的分析应用,典型的列式数据库包括Accumulo、Cassandra和HBase
4.图数据库表示数据关系

图数据库,以InfiniteGraph和Neo4j为代表,以类似于图的结构存储数据,便于探索数据之间的联系,可应用于产品推荐和社交网络。英国医疗网站HealthUnlocked的技术负责人Alex Trofymenko表示,图数据库可以用来匹配不同人之间和人与兴趣之间的关系。

 

五、网站架构演变

高并发,大流量

高可用

海量数据

用户分布广泛,网络情况复杂

安全环境恶劣

需求快速变更,发布频繁

渐进式发展:好的互联网产品都是慢慢运营出来的,不是一开始就开发好的,同于网站架构的发展过程

1.初始:应用程序 文件 数据库等所有资源在同一台服务器上

越来越多的用户访问导致性能越来越差,越来越多数据源导致存储空间不足。

2.应用服务于数据服务相分离:应用服务器(大量业务逻辑,需要强大CPU) 文件服务器(大量用户上传文件,大硬盘) 数据库服务器(快速磁盘检索和数据缓存,更快的硬盘和更大内存)

用户再次增多,数据库压力太大导致访问延迟,影响整个网站性能,用户体验受到影响。

3.使用缓存改善网站性能:80/20法则 80%的业务集中在20%的数据上 把这20%的数据缓存在内存中----分布式缓存服务器(快而大的硬盘,远程分布式缓存)

单一服务器能处理的请求连接有限,在网站访问高峰期,应用服务器成为整个网站的瓶颈。

4.使用应用服务器集群改善网站的并发处理能力:增加应用服务器改善负载压力(负载均衡)

网站使用缓存后,绝大部分数据读操作可以不通过数据库完成,但有一部分操作(缓存访问不命中,缓存过期)和全部写操作需要访问数据库,在网站的用户达到一定规模,数据库因为负载压力过高成为网站的瓶颈。

5.数据库读写分离:配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一服务器上(服务器的主从热备功能)。

介绍:应用服务器写数据的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据。为了便于应用程序访问读写分离后的数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离对应用透明。

网站访问延迟和用户流失率正相关。

6.使用反向代理和CDN加速网站响应:CDN和反向代理的基本原理都是缓存。区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,从距离自己最近的网络提供商机房获取数据;反向代理部署在网站的中心机房,当用户请求到达中心机房后,首先访问的是反向代理服务器,如果反向代理服务器缓存着用户请求的资源,就将其直接返回给用户。

任何强大的单一服务器满足不了大型网站持续增长的业务需求。

7.使用分布式文件系统和分布式数据库系统:分布式数据库时网站数据库拆分的最后手段,只有在单表数据规模十分庞大的时候才使用。不到不得已时,网站更常用的数据库拆分手段是业务分库,将不同业务的数据库部署在不同的物理服务器上。

网站的业务越来越复杂,对数据存储和检索的需求越来越复杂

8.使用NoSQL和搜索引擎:均为互联网的技术手段,对可伸缩的分布特性具有更好的支持。应用服务器则通过一个统一的数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

9.业务拆分:如大型购物交易网站将首页、商铺、订单、买家、卖家等拆分成不同的产品线,分归不同的业务团队负责。

10.分布式服务:提取共用业务,独立部署。

 

六、tomcat项目部署及注意事项

一、Tomcat的项目部署方式有以下三种:

1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法。

2.在tomcat安装目录中有一个conf文件夹,打开此文件夹,其中包含配置文件server.xml,打开配置文件,并在<host>和</host>之间插入如下语句。

<Context path="/hello" docBase="F:eclipse3.2workspacehelloWebRoot" debug="0" privileged="true"> </Context> 其中,docBase为设置项目的路径。

3.在conf目录中,在Catalinalocalhost(此处需要注意目录的大小写)目录下新建一个XML文件,任意命名,只要和当前文件中的文件名不重复即可,代码如下。

<Context path="/hello" docBase="D:eclipse3.2workspacehelloWebRoot" debug="0" privileged="true"> </Context> 第三种方法相对来说比较灵活,并且可以设置别名。

二、tomcat配置项目的注意事项

Java Web 项目在 Tomcat 下部署有一些不必要的坑需要避免,所以撰写此文方便大家绕过一些坑,以下部署以 linux 为例,windows 与此类似:

1:创建一个目录: /var/www

2:为将要部署的项目创建一个目录, /var/www/my_project

3:将项目打成 war 包, 然后解压到 /var/www/my_project

4:最终的目录结构为:/var/www/my_project/WEB-INF,也即WEB-INF 在项目名称目录之下

5:修改 TOMCAT_HOME/conf/ server.xml 文件找到 Host 标记,在其中添加如下子标记:

<Context path="" docBase="/var/www/my_project" reloadable="false"/>

6:注意 Host 标记中的 appBase 属性不要去修改,让其为默认值 "webapps"

7:启动 tomcat 打完收工

第一个关键点:以上配置中项目是部署在了 TOMCAT_HOME/webapps 目录之外的,这样做是为了避免 tomcat 加载项目两次的坑,因为配置文件中如果配置了该项目会被加载一次,而项目在 webapps 下面又会被自动重复加载一次,这个坑会引发一些莫名奇妙的问题,例如:老版本的tomcat中,多人同时登录后session产生混乱,再例如:有些项目有定时任务,如果重复加载项目,那么定时任务也会被执行多次。所以记住第一点,永远不要将项目放在 TOMCAT_HOME/webapps 目录下面。

第二个关键点:以上配置中的 Context 标记的 path 属性一定要设置为 "" 而不是 "/",否则也会跳入一个坑。 docBase 属性后面放项目名称的绝对地址, windows 下则是类似于这样的值: d:/www/my_project。

简单说 tomcat 下配置分两步,一是在 webapps 目录之外建目录放项目,二是找 Host 标记放入 Context 子标记。