网站结构的演变
- 网站访问流程
- 简单的网站访问流程
- 完整的网页请求流程
- 1、用户在自己的浏览器中输入一段web请求地址
- 2、浏览器会对这个请求进行拆分:
- ip地址找对应的服务器
- port端口找服务器上监听该端口的服务
- 然后将最后的具体请求交给web服务去处理
- 3、web服务接收该请求后,处理该请求,
- 4、如果遇到一些数据处理,需要到后端的数据库服务获取数据
- 5、数据库服务返回数据给web服务
- 6、web服务生成完整的web网页,以数据报文的形式发送到客户端的浏览器
- 7、浏览器渲染web网页,最后展示给用户
- URI 、URL 、URN
- 三者的简介
- URI是uniform resource identifier,统一资源标识符,是一个紧凑的字符串用来标示抽象或物理资源唯一的标识。(包括了资源定位符和命名定位符)
- URL是uniform resource locator,统一资源定位器,它是一种具体的URI,它重点是指明了如何定位该资源的主要访问机制(如其网络“位置”)
- URN,uniform resource name,统一资源命名,它是一种具体的URI,它重点是指明了如何命名该资源的主要访问机制。
- 三者的区别
- URI是以一种抽象的,高层次概念定义统一资源标识,URL和URN都是一种具体的URI,URL侧重于资源的定位,URN侧重于资源的命名。当前我们一般使用URL来称呼一个web的浏览器地址,但是规范的术语是URI
- 网站架构的演变
- 单一应用架构
- 应用场景:
- 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。这个阶段:
- 开发框架:
- 因为应用获取数据,是需要和数据库直接打交道的,所以对于单一应用的网站架构来说,用于简化增删改查工作量的 数据访问框架(ORM) 是开发技术关键点。
- 应用架构:
- 因为应用的所有功能都部署在一起,所以他们的架构技术是 All in One
- 应用和服务:
- 因为是单一应用,没有上升到服务的级别,所以这个阶段没有服务,只有应用。虽然我们将某个具体的应用称之为服务,但是从标准上来说,他们还不够格
- 集群:
- 这个阶段我们开发的网站项目是一个简单的, 所以多个应用单独部署在具体的服务器上, 最后整合在一起就可以对外展示了。它这里的服务器数量仅仅是一个简单的说法。
- 垂直应用架构
- 应用场景
- 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
- 开发框架:
- 因为服务的提供对象越来越多,所以在现有的资源下,加速提高开发效率,就是一个重点了,所以各种各样的开发框架就是开发技术关键点,而这些开发框架中比较突出的是 MVC。
- 应用架构:
- 为了配合开发的速度和效率,通过虚拟应用的方式,我们将之前的单一应用,拆分成多个子模块应用,然后子应用之间通过接口交流信息。所以他们的架构应用技术是虚拟应用
- 常见web软件:apache、nginx、tomcat都有虚拟应用服务这一说。
- 应用和服务:
- 因为我们只是在单一应用的基础上, 根据开发框架对应用进行了一个大体上的拆分, 也没有上升到服务的级别,所以这个阶段没有服务,还是只有应用。
- 集群:
- 这个阶段我们开发的网站项目内容开始增多, 将应用部署在一台机器上就会有相应的压力了, 所以在应用拆分的基础上,将拆分后的子应用单独部署在某台服务器上,子应用服务器通过接口整合在一起,项目应用也通过接口整合在一起,最后同一可以对外展示了。所以服务器的数量肯定会有所提升,但是具体的数量还要根据我们公司的具体情况来说。
- 分布式服务架构
- 应用场景:
- 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
- 开发框架:
- 随之业务的大幅度增加,垂直应用越来越多,代表的是对单一应用拆分的颗粒度越来越高,而这些被拆分后的子应用中,肯定有重点和非重点之分,如果把重要的应用单独配置一台服务器的话,那么成本会造成大大的浪费,再一个重点业务肯定会有单点的隐患,所以我们可以将核心业务抽取出来,作为独立的服务去部署,而且服务为避免单点隐患,部署在多台服务器上,然后通过订阅发布技术来将数据发布到普通的应用中,这样可以大大的节省成本,所以用于提高业务复用及整合的 基于远程过程调用技术(RPC)的分布式服务框架就成了这个阶段的技术关键点。
- 注意:
- 这个时候,就不再和开发戚戚相关了,因为我们的开发的底层都是MVC框架,现在我们就聊到架构的层面了。
- 应用架构:
- 因为我们是在垂直应用的基础上进行演变的, 所以会涉及到不同的应用的核心业务, 所以这时的核心业务为了解决单点故障的问题,会采用分布式的方式来部署服务,这样会保证我们的业务架构的健壮性。所以这个阶段的架构应用技术的重点是分布式服务技术。
- 应用和服务:
- 应用数量达到一个层级,量变引起质变,所以对核心的应用进行整合,升级到服务。不同的应用和服务进行信息的交流。
- 集群:
- 这个阶段我们开发的网站项目内容大批量的增多, 子应用部署服务器不再满足我们的需求, 我们需要在原来的应用基础上,分布式的部署核心业务服务器,而且核心业务服务要避免单点问题,所以会有服务器集群来保证,所以服务器的数量和侧重点都会有很大的改变。所以服务器的数量肯定会有大幅提升,但是具体的数量还要根据我们公司的具体情况来说。
- 流动计算架构
- 应用场景:
- 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
- 开发框架:
- 高起点,高标准,业务的量级水平已经在一个很高的层级,那么这个时候,随随便便的一个小地方的定点浪费,都会成为一个巨型的成本消费点,经过粗放式的发展后,肯定会有各种的问题,会逐渐的显现出来,最大的问题就会是资源成本浪费,所以这个阶段我们不能再走老路了,需要先进行革命,在现有的设备基础上,对资源进行合理的分配和整合调度。然后再在标准的新框架中,持续的发展。所以用于提高机器利用率的 资源调度和治理中心(SOA) 就成了本阶段的是技术关键点
- 应用架构:
- 因为我们是在分布式应用的基础上进行演变的, 所以业务的重要性和资源就不再是公司发展的瓶颈点了, 这个时候,量级很大,成本是我们的重要关注点,那么如何好好的控制好成本,方案就是目前的云计算。所以为了解决成本的问题,会采用基于云计算的弹性云服务,这样会大大提升我们的成本控制。所以这个阶段的架构应用技术的重点是弹性云服务技术。
- 应用和服务:
- 在分布式架构中,是应用数量达到一个层级,对核心的应用整合成服务。使用分布式的架构,满足服务的要求,那么在流式计算的架构层级中,我们会基于云计算的技术,将原来的核心服务以及升级出来的其他应用服务,都迁移到云上,通过合理的资源调度和治理,更好的发挥核心业务的发展。
- 集群:
- 公司业务发展到这个程度, 服务器数量和应用数量都已经在一个很大的量级了, 所以具体的数量对我们已经无所谓了。重点是资源的合理使用,达到公司的可持续发展。
Web框架
- Web框架简介
- 我们写一个web应用程序,可以从头开始写,也可以在别人写好的基础上写,这些能写web项目的环境就成为web框架,而我们经常所说的web框架属于第二种,也就是在别人写好的基础上编写web项目。所以从另一方面说:其实Web框架就是创建Web应用的一种方式。
- web框架的主要作用:
- 1、节省时间,提升项目开发效率
- 2、根据框架划分后的功能,可以实现单独功能开发,避免互相影响---- 程序代码上的解耦
- web框架的分类
- 基于请求的:例如MVC
- 基于组件的
MVC框架
- MVC框架简介
- 他是一种基于请求的一种web框架,MVC的全拼为Model(模型)-View(视图)-Controller(控制器)
- MVC框架核心思想
- 它的核心思想就是:解耦。解耦的意思就是:互不干扰。让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。
- MVC 功能简介
- M -- Model -- 模型
- 主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。
- 一句话:跟数据库打交道的模块
- V -- View -- 视图
- 用于封装结果,生成页面展示的html内容。
- 一句话:给用户展示数据用的
- C -- Controller -- 控制器
- 用于接收请求,处理业务逻辑,与Model和View交互,返回结果。
- 一句话:流程控制
- MVC的访问流程
- 1、客户端发起一个web请求,web请求交给MVC框架的控制器
- 2、如何该请求需要获取数据,那么控制器调用model模块
- 3、model模块根据指定操作,去数据库中获取指定的数据
- 4、数据库返回数据给model模块
- 5、Model模块获取到数据库返回的数据后,交个控制器
- 6、控制器要展示数据,怎么办呢,就调用view视图获取模板文件
- 7、视图模块,根据控制器的指令,返回指定的模板文件
- 8、控制器将数据和模板文件整合成一个完整的web页面,然后返回给用户
Django框架
- Django框架的简介
- 是用基于python语言写的全栈一体式的开源web开发框架,并遵循MVC框架设计。Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原则。
- Django框架基于MVC衍变的框架名
- MTV-----Model(模型) -- Templates(模板) -- Views(视图)
- (M T V)分别是
- M -- Model -- 模型
- 类似MVC中的M功能,注意负责和数据库交互,进行数据处理,以及数据库表的创建等
- 一句话:跟数据库打交道的模块
- T -- Template -- 模板
- 类似MVC中的V功能相同,负责封装构造要返回的html。
- 一句话:给用户展示数据用的
- V -- View -- 视图
- 类似MVC中的C功能相同,接收请求,进行业务处理,返回应答。
- 一句话:流程控制用的
- 一句话总结MTV:
- M 跟数据库打交道的模块 --- 我跟数据库是好基友 -- 基友
- T 给用户展示数据用的 --- 我就是Django心灵的窗户 -- 窗户
- V 流程控制用的 --- 此路是我开,要想从这过,留下买路财 -- 强盗
- 一句话MTV本质:
- M 一个包含一大堆class类代码的文件
- 类,那就是内部包含了一大推对象的属性,从这方面说就是数据库表的结构设计
- T 包含一大堆静态语言组成的文件
- html、js、css等等,就只这么一大堆东西
- V 包含一大堆函数代码的文件
- 函数,是能处理某一功能的代码,
- MVC&MVT的区别
- MTV是遵循MVC框架原则,在之前的基础上进行了很多的改变。
- 1、MVC的C(控制器)功能的大部分代码已经融合到了MTV框架中的代码里面了。所以,这是第一个区别,C基本上就没有了
- 2、将MVC的V(视图)功能和C(控制器)的部分功能进行了一个组合拆分,整合成MTV中的T(模板)和V(视图)
- Django访问流程
- 1、用户发起网页的web请求
- http://127.0.0.1:8000/nihao/
- 请求中的ip(127.0.0.1)目的是到达指的的服务器地址
- 请求中的port(8000)目的是交由服务器中监控该端口的服务处理
- 后面的内容是需要服务处理的具体资源
- 2、请求到达django的路由系统:
- 匹配web请求中的资源关键字
- 将匹配到的请求交给指的的视图模块函数去处理
- 3、请求到达视图模块部分,模块主要有两部分功能
- 获取数据
- 获取模板,展示数据
- 4、如果views视图接收的请求需要验证/获取数据,那么调用models模型模块
- models通过内置的orm功能去后端数据库中获取数据
- models将获取到的数据,返回给views视图
- 5、views需要将获取到的数据进行展示
- 从模板模块中获取指定的模板文件
- 根据模板文件中的变量名标签,将获取到的数据填充到指定的位置
- 6、形成一个完整的web页面,返回给客户端
DJango环境安装
- pip软件安装
- apt-get install python-pip -y
- pip 是 python的一个第三方模块管理工具,可以通过pip对所有的python第三方模块进行统一管理。非常方便
- pip常用命令
- install 安装软件
- uninstall 删除软件
- freeze 查看安装的软件列表
- 安装虚拟环境软件
- pip install virtualenv
- 使用虚拟环境的目的:(由于同一个环境下不能安装两个软件的不同版本号)
- 实现python的某个模块的不同版本同时存在
- 不同项目使用专用的python虚拟环境
- python虚拟环境间彼此隔离
- python虚拟环境和宿主机环境也互相隔离
- 安装虚拟环境拓展包
- pip install virtualenvwrapper
- 安装环境拓展包的目的:
- 安装虚拟环境包装器的目的是使用更加简单的命令来管理虚拟环境当前这种情况下,使用虚拟环境比较复杂,没有达到很好管理虚拟环境的目的,所以我们要对环境进行一个优化,编辑用户的一个环境变量文件,然后加载它,我们就可以愉快的使用python虚拟环境了
- 创建一个虚拟环境的专用目录
- mkdir /data/virtual -p
- 编辑 配置文件修改环境变量(使虚拟环境容易管理)
- 追加配置
- echo 'export WORKON_HOME=$HOME/.virtualenvs' >> ~/.bashrc
- echo 'source /usr/bin/virtualenvwrapper.sh' >> ~/.bashrc
- source .bashrc 加载环境变量使之生效
- WORKON_HOME是设置用户的虚拟环境默认创建的位置,可以自己进行设定,这里我们将虚拟环境的存储路径设置为/data/virtual
- $HOME 表示家目录
- 创建虚拟环境时候可以知道python的版本
- mkvirtualenv -p python3 虚拟环境名称
- 备注:
- 创建虚拟环境需要联网
- 只有创建对应虚拟环境的用户才能使用该虚拟环境
- 进入虚拟环境
- workon 虚拟环境名称
- 虚拟环境相关其他命令
- 退出虚拟环境:
- deactivate
- 查看所有虚拟环境:
- workon + 按2次Tab
- 删除虚拟环境
- rmvirtualenv 虚拟环境名称
- 注意:需要先退出虚拟环境才能删除虚拟环境
- 安装django
- workon py_django 进入虚拟环境
- pip install django==1.8.2 安装django框架
- 安装pycharm软件
- 备注:
- 1. 所有的虚拟环境都默认的创建在用户家目录路下的隐藏目录.virtualenvs下,因为我们制定了虚拟环境的家目录/data/virtual,所以我们创建的虚拟环境在WORKON_HOME定义的目录中,可以修改用户家目录下的.bashrc文件来定义虚拟环境创建的目录;
- 2.在ubuntu中使用pip安装软件的默认路径
- python2.7有两个模块安装的目录/usr/local/lib/python2.7/dist-packages和site-packages
- python3.5有两个模块安装的目录/usr/local/lib/python3.5/dist-packages
- 虚拟环境的模块默认安装在虚拟环境的根目录下的 /lib/python3.5/site-packages
- 3.此案例我们设置/data/virtual作为我们存放虚拟环境和项目的目录,我们也可以把虚拟环境的家目录设置为$HOME/data/virtual 同样更改用户家目录下的.barsh文件等,完成配置,这样我们配置的虚拟环境的家目录就是每个用户家目录下的$HOME/data/virtual, 不在是都放在/data/virtual的公共目录下面;
- 4.什么时候使用apt安装,什么时候使用pip安装?
- 当安装和项目相关的包,模块等的时候使用apt安装,当安装主句的应用软件的时候使用apt安装