互联网技术的发展

目录

  • 互联网技术的发展

    web 1.0 阶段

    web 2.0 阶段

    移动互联时代

  • 微服务架构

    单体

    集群

    SOA

    微服务

    docker

    K8S

互联网的发展历程

互联网技术发展可以分成3个阶段:

  • web 1.0 阶段

  • web 2.0 阶段

  • 移动互联阶段

互联网技术属于软件技术,软件技术很大程度上受硬件、网络的影响,我们先从这3个维度上去看看这个时代。

web 1.0 阶段(1990-2000)

硬件:电脑

电脑

​ 32MB内存,6.4G硬盘,1.4M的3.5寸软盘

​ 电脑为什么是从C盘开始?

网速:十几KB/s

产品:主要是门户网站,搜狐(1996)、网易(1997)、新浪(1998)

sohu-19990125092044

这个是1999年1月的搜狐,在门户网站中,搜狐是做的最好的。在这个图中,基本没有输入,也没有图片,页面就是一些连接组成的。

技术

互联网最初的四大要素:浏览器、服务器、HTTP、html。

html:超文本标记语言,网页是由很多的html的元素组成,如<h1>Hello World</h1>

服务器:存放html文档;

浏览器:显示html文档;

HTTP协议就像一条公路,一端是浏览器,另一端是服务器,上面传输着html文档。

互联网模型

  • HTTP/0.9

    时间:1991年8月

    只接受GET一种请求方法,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。

  • HTTP/1.0

    时间:1996年11月

    引入了HTTP头的概念,增加协议版本信息,状态码会在响应开始时发送,使浏览器能了解请求执行成功或失败

  • HTTP/1.1

    时间:1996年1月发布、1999年6月才完善

    HTTP/1.1协议中共定义了八种请求方法,包括了GET、PUT、POST、DELETE等方法

由于缺乏交互,这一时期后端服务器就是网页服务器,服务器就像文件柜,你想要哪个文件,就给你哪个文件。

web 2.0 阶段(2000年-2010年)

硬件:电脑

05年

​ 2006配置大约在1G内存,128G硬盘的

网速:网速在100多KB/s

产品:互联网公司百度搜索引擎、腾讯QQ、阿里电商、论坛、博客等等

百度 天涯论坛

这个时候的的产品与上一时期的产品最大的区别是增加很多的操作,在百度中可以录入想搜素的字段,在论坛中既可以发帖,也可以回复别人。媒体的种类也更多,文字、图片、语音等等。

这一切网速提高、电脑的普及率上升是推动产品发展的外部因素。

技术

由于交互的增多,文件服务器的方式已经落伍了,出现的是这种模板引擎的方式。

后端渲染

它的过程是浏览器向服务器请求数据,服务器向数据库查询数据,然后将返回数据与模板交给模板引擎去渲染,模板引擎将数据渲染到指定的位置上,成为HTML。服务器返回HTML。

移动互联阶段(2010-)

硬件:智能手机

iphone1 诺基亚

网速:几MB/s到几十MB/s

产品:美团、头条、滴滴

抖音 美团

智能手机的普及大大增加了网络接入,上至70-80岁的老人,下到3-4岁的小孩,都接入了互联网。以前有个名词叫“网瘾”,现在不提了,因为大家都上瘾了。

技术

接入量的增大,带来了新的问题:

  1. 如何承载这些数据,这里促进了分布式架构的发展;
  2. 如此多有价值的数据,如何去应用数据,这里促进了大数据、人工智能等技术的发展;

前端框架的出现

前端渲染做了什么事呢?它把JSP做的事情,拿到了浏览器端,这样渲染的算力就从服务器中解放出来。

它的过程如下:

前端渲染

与之前相比,这里出现了前端服务器与后端服务器之分。主页面以及要执行的脚本(JavaScript)从前端服务器获取,然后浏览器根据执行这些脚本,在这个过程中,从后端服务器获取数据,这里的数据,主要以Json对象的形式存在。最后浏览器将取到的数据与主页面一起进行生成HTML页面。

Java Web框架的发展

这个时期出现了很多的技术,我们以Java web为例来简单看看技术的发展。

第一阶段:初始

  • Servlet:一个具有特殊功能的Java类,通常运行于Web服务器端,负责响应HTTP请求并返回相应的web页面。随着Servlet的诞生,Java被应用到了Web领域
  • JSP:一种在HTML等Web页面中结合进Java代码的技术,用于实现Web页面的动态性,JSP是将Java代码嵌入到HTML代码,也就是上图的模板。
  • Struts:一个基于Servlet的Web应用框架,Struts在Servlet和JSP的基础上,按照MVC的架构进行了有效的组织和分离。struts负责传送请求(Request)和接收响应(Response)

struts

第二阶段:SSH

StrutsSpringHibernate框架连用,称为SSH

  • Spring:Spring的IoC容器技术,广泛运用与业务层的逻辑中,为每次范围提供逻辑支持。
  • Hibernate:通过ORM技术,简化了对数据的操作。

SSH

采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。

第三阶段:Spring全家桶

2013年,发布了spring mvc,替代了struts的位置。在这次发布中,spring支持这种直接交换数据的方式(RESTful)。也是在此之后,出现了前端的框架,如React,以及vue等。后来又2014年退出了spring boot。

spring全家桶

架构发展

单体

在微服务架构概念之前,很多时候是将多个业务写到一个服务中,这种叫单体服务。如下图:

单体服务

这是一个简单的电商,它由产品、订单、用户、促销、发票等等功能组成,单体服务是将这些功能写到一个服务中。

集群

随着业务的发展,随着业务的发展,大多数公司会将单体应用进行集群部署,并增加负载均衡服务器(例如Nginx),以应对用户量的增加而带来的高并发访问量。此时的系统架构如下图所示:

集群服务

SOA

架构可以简单理解为多个服务之间的结构

这时候的架构,是一种SOA(Service-Oriented Architecture)面向服务架构。最早起的服务,由于比较少,都是两个服务之间通过定义好接口,点对点进行通信。

但是,一旦服务或系统的数量增加,这些服务之间的点到点连接就不再是可扩展和可维护的了。这催生了集中式“服务总线”概念的产生。服务总线通过类似集线器的架构将所有系统连接在一起。这个组件被称为 ESB(企业服务总线),它就像一个中间人在帮助一群服务进行沟通。

SOA

微服务

这样的服务,随着业务扩张,开发难度加大,动一发而迁全身,代码的可读性、可维护性和可扩展性下降,业务扩展带来的代价越来越大,开发都在同一个项目改代码,相互等待,冲突不断。

为了借鉴这些问题就出现了微服务这种架构:

微服务

微服务将单体服务,做了拆分,且为了提高性能,每个服务访问自己的数据库,每一个微服务都能独立完整地运行(所谓的自包含)。

这样做,不仅提高了性能,而且使服务间的依赖降低,每个服务能够单独开发、单独部署、提高了开发-运维的效率。

微服务还要具备一些能力:

  • 全栈监控

    监控指的是将系统,从硬件、到用到的中间件、再到服务进行全方位的监控,并能将监控变成日志,进行数据的分析。

    监控

  • 流量控制

    流量控制是指的当系统面临的流量过大时,为了避免系统崩溃,而提供的流量降级、限流措施。

  • 服务调度

    服务调度指的是指,服务发现,服务间依赖关系,服务的动态伸缩能力等等。

微服务将原来一个服务拆分成了多个,当业务多的时候,微服务的个数就会增大,给部署、运维、管理带了很大的难度。怎么处理呢,就出现了容器技术(docker)与容器编排技术(kubernates简称k8s)。下边就来看看它们。

docker

docker

原来对服务进行部署,需要先在机器上安装各种支持软件(Java、数据库等),然后再去配置环境变量。如果这台系统要运行不同版本的Java那将是一个很头疼的问题。

docker的出现解决了这个问题,它首先程序代码,运行时,lib,环境变量,配置文件等所有资源打包成镜像,然后在容器(container)中运行这个单独的镜像。容器与容器之间完全的隔离,从而使各个服务运行互不影响。

docker

docker的图标很形象的表达了它的作用,docker像是一个一个的集装箱包含着我们的服务,各个集装箱之间相互独立。

常见的命令:

- 遍image
  docker build -t hello-world .

- 列出image
  docker image ls
  
- 运行image
  docker run hello-world

- 查看运行的容器
  docker ps 

k8s

K8S是谷歌开发的编排容器的系统。

架构-1 k8s

k8s是由master与node组成。

master是主控,像是经理,安排工作,包括:

Api Server不仅是外部访问k8s的入口,也是k8s各组件内部的枢纽

Scheduler用于调度deployment的pod在哪个node节点运行

Controller用于控制状态,做一些检测,确定集群运行正常,当有节点宕机,将其上的pod运行到其他节点上。

etcd是一个分布式数据库。

node节点上主要负责实际的工作,运行容器(pod翻译是豆荚,是k8s对容器的一种封装 )。

一个例子.png

api server-大总管;etcd-账房;Scheduler-调度员;Kubelet与Container runtime-工人。

这个例子是有一个pod要运行,

先与api server进行交互;

api server进行存储;

然后交给scheduler进行调度,scheduler根据目前集群的状态,计算该pod运行的位置,并反馈给api server;

api server先进行存储,然后下发给node上的kubelet;

kubelet再在container Runtime下运行起相应的pod(容器)。

总结

  • 技术是分层的,网络,硬件,软件;

    网速达不到,手机就支持不了很多的媒体形式,从而对软件的要求就不高。

  • 技术与需求的相互促进,技术满足人们的需要,人们的需要又对技术提出更高的要求;

    随着接入的增加,对流量的能力、数据的分析能力就提出要求,促进了技术的发展。

  • 技术简化工作的特点;

    K8S的出现,简化了发布、管理系统的工作,很多技术都有震中简化人们的工作的特点。从工程,到机械,到电子,再到软件,都能找到这个脉络。
    过河太麻烦了,建个大桥(工程)吧;建大桥太难了,有个挖掘机(机械)好多了;每天监工真麻烦,有个摄像头(电子)好多了;

    省力化的重点在哪里?

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×