python web开发之Django
使用Django 开发web项目
说明:本文的部分插图来自于《Python项目开发实战》和《精通Django》,这两本书中都包含了对Django框架精彩的讲解,有兴趣的读者可以自行购买阅读。
Web应用问题1:描述一个Web应用的工作流程。
问题2:描述项目的物理架构。(上图中补充负载均衡(反向代理)服务器、数据库服务器、文件服务器、邮件服务器、缓存服务器、防火墙等,而且每个节点都有可能是多节点构成的集群。当然,架构都是根据业务的需要一步步演进而不是一蹴而就的。)
问题3:描述Django项目的工作流程。(如下图所示)
MVC架构模式问题1:为什么要使用MVC架构模式?(模型和视图解耦合)
问题2:MVC架构中每个部分的作用?(如下图所示)
HTTP请求和响应HTTP请求 = 请求行+请求头+空行+[消息体]
HTTP响应 = 响应行+响应头+空行+消息体
HTTPRequest对象的属性和方法:
method - 获取请求方法
path / get_full_path() - 获取请求路径/带查询字符串的路径
scheme ...
初识 docker
Docker容器技术详解Docker是基于Go语言开发的开源应用容器引擎,遵从Apache Licence 2.0协议,可以让开发者打包应用以及应用的依赖包到一个可移植的容器中,然后发布到各种发行版本的Linux系统上。
Docker简介软件开发中最为麻烦的事情可能就是配置环境了。由于用户使用的操作系统具有多样性,即便使用跨平台的开发语言(如Java和Python)都不能保证代码能够在各种平台下都可以正常的运转,而且在不同的环境下我们安装的软件需要依赖的软件包也是不一样的。
那么问题来了,我们安装软件的时候可不可以把软件运行的环境一并安装?我们是不是可以把原始环境一模一样地复制过来呢?
虚拟机(virtual machine)就是带环境安装的一种解决方案,它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统,在macOS上运行Windows,而应用程序对此毫无感知。使用过虚拟机的人都知道,虚拟机用起来跟真实系统一模一样,而对于虚拟机的宿主系统来说,虚拟机就是一个普通文件,不需要了就删掉,对宿主系统或者其他的程序并没有影响。但是虚拟机通常会占用较多的 ...
mysql性能优化
MySQL性能优化基本原则想要发挥 MySQL 的最佳性能,需要遵循 3 个基本使用原则。
让MySQL回归存储的基本职能:MySQL 数据库只用于数据的存储,不进行数据的复杂计算,不承载业务逻辑,确保存储和计算分离;
查询数据时,尽量单表查询,减少跨库查询和多表关联;
杜绝大事务、大 SQL、大批量、大字段等一系列性能杀手。
大事务:运行步骤较多,涉及的表和字段较多,容易造成资源的争抢,甚至形成死锁。一旦事务回滚,会导致资源占用时间过长。
大 SQL:复杂的SQL意味着过多的表的关联,MySQL 数据库处理关联超过3张表以上的SQL时,占用资源多,性能低下。
大批量:多条SQL一次性执行完成,可以减少一条条执行SQL产生的额外开销,但必须确保进行充分的测试,并且在业务低峰时段或者非业务时段执行。
大字段:blob、text类型的大字段要尽量少用,必须要用时,尽量与主业务表分离,减少对这类字段的检索和更新。
建库建表
必须指定默认存储引擎为 InnoDB,并且禁用 MyISAM 存储引擎,随着 MySQL 8.0 版本的发布,所有的数据字典表都已经转换成了 InnoDB,MyI ...
python 生态下的数据分析学习
定义:数据分析是有针对性的收集、加工、整理数据并采用统计、挖掘等技术对数据进行探索、分析、呈现和解释的科学。
数据分析领域市场与岗位描述HR在发布招聘需求时,通常将数据工程、数据分析、数据挖掘等岗位都统称为数据分析岗位,但是根据工作性质的不同,又可以分为偏工程的数据治理方向、偏业务的数据分析方向、偏算法的数据挖掘方向、偏开发的数据开发方向、偏产品的数据产品经理。我们通常所说的数据分析师主要是指业务数据分析师,很多数据分析师的职业生涯都是从这个岗位开始的,而且这个岗位也是招聘数量最多的岗位。业务数据分析师在公司通常不属于研发部门而属于运营部门,所以这个岗位也称为数据运营或商业分析,这类人员通常也被称为“BI工程师”。通常招聘信息对这个岗位的描述(JD)是:
负责相关报表的输出。
建立和优化指标体系。
监控数据波动和异常,找出问题。
优化和驱动业务,推动数字化运营。
找出潜在的市场和产品的上升空间。
根据上面的描述,作为业务数据分析师,我们的工作不是给领导一个简单浅显的结论,而是结合公司的业务,完成 监控数据 、揪出异常 、找到原因、探索趋势等工作。作为数据分析师,不管是用 Pyt ...
使用 Python 做数据采集(爬虫)
python数据采集爬虫(crawler)也经常被称为网络蜘蛛(spider),是按照一定的规则自动浏览网站并获取所需信息的机器人程序(自动化脚本代码),被广泛的应用于互联网搜索引擎和数据采集。使用过互联网和浏览器的人都知道,网页中除了供用户阅读的文字信息之外,还包含一些超链接,网络爬虫正是通过网页中的超链接信息,不断获得网络上其它页面的地址,然后持续的进行数据采集。正因如此,网络数据采集的过程就像一个爬虫或者蜘蛛在网络上漫游,所以才被形象的称为爬虫或者网络蜘蛛。
主要的应用领域:
搜索引擎
新闻聚合
社交应用
舆情监控
行业数据
主要的实用库,以及前期的页面调研对于数据页面或者数据接口的研究是第一步,你需要掌握html结构,页面渲染方式(ajax、iframe或者其他懒加载机制),以及安全验证(登录),session 保持、auth 等。
httpie, 一个命令行的页面请求工具,可以用于前期的page页面结构观察。doc文档
buildwith 获取网站使用技术
1pip install buildwith
requests 库doc文档这是一个HTTP库,可以用 ...
ElasticSearch 介绍
相关概念1 Elasticsearch概述1.1 Elasticsearch是什么Elasticsearch(ES)是一个基于Apache的开源索引库Lucene而构建的 开源、分布式、具有RESTful接口的全文搜索引擎, 还是一个 分布式文档数据库.
ES可以轻松扩展数以百计的服务器(水平扩展), 用于存储和处理数据. 它可以在很短的时间内存储、搜索和分析海量数据, 通常被作为复杂搜索场景下的核心引擎.
由于Lucene提供的API操作起来非常繁琐, 需要编写大量的代码, Elasticsearch对Lucene进行了封装与优化, 并提供了REST风格的操作接口, 开箱即用, 很大程度上方便了开发人员的使用.
1.2 Elasticsearch的优点
1、横向可扩展性: 作为大型分布式集群, 很容易就能扩展新的服务器到ES集群中; 也可运行在单机上作为轻量级搜索引擎使用.2、更丰富的功能: 与传统关系型数据库相比, ES提供了全文检索、同义词处理、相关度排名、复杂数据分析、海量数据的近实时处理等功能.3、分片机制提供更好地分布性: 同一个索引被分为多个分片(Shard), 利用 ...
消息队列-kafka
1、应用场景1.1 kafka场景 Kafka最初是由LinkedIn公司采用Scala语言开发,基于ZooKeeper,现在已经捐献给了Apache基金会。目前Kafka已经定位为一个分布式流式处理平台,它以 高吞吐、可持久化、可水平扩展、支持流处理等多种特性而被广泛应用。
Apache Kafka能够支撑海量数据的数据传递。在离线和实时的消息处理业务系统中,Kafka都有广泛的应用。
(1)日志收集:收集各种服务的log,通过kafka以统一接口服务的方式开放 给各种consumer,例如Hadoop、Hbase、Solr等;
(2)消息系统:解耦和生产者和消费者、缓存消息等;
(3)用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点 击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时 的监控分析,或者装载到Hadoop、数据仓库中做离线分析和挖掘;
(4)运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作 的集中反馈,比如报警和报告;
(5 ...
Tomcat 详解
整体架构
Server:服务器。Tomcat 就是一个 Server 服务器。
Service:在服务器中可以有多个 Service,只不过在我们常用的这套 Catalina 容器的Tomcat 中只包含一个 Service,在 Service 中包含连接器和容器。一个完整的 Service 才能完成对请求的接收和处理。
连接器:Coyote 是连接器具体的实现。用于与新来的请求建立连接并解析数据。因为 Tomcat 支持的 IO 模型有 NIO、NIO2、APR,而支持的应用层协议有 HTTP1.1、HTTP2、AJP。所以针对不同的 IO 模型和应用层协议请求,在一个 Service 中可以有多个连接器来适用不同的协议的IO请求。
EndPoint :Coyote 通信端点,即通信监听的接口,是具体 Socket 接收和发送处理器,是用来实现 TCP/IP 传输协议的。
Acceptor:用于接收请求的 socket。
Executor:线程池,在接收到请求的 socket 后会从线程池中分配一条来执行后面的操作。
Processor :Coyote 协议处理接口,是用 ...
消息队列-ActiveMQ
消息队列和其作用消息队列是一种业务处理方案,目的是减轻同步业务的压力,缓解突发流量和提高系统可利用率的一种常见处理方式。消息队列中间件是该方案的具体实现和具体产品。
作用: (解耦、消峰、异步)
抵御洪峰流量,(吞吐量)达到保护主业务的目的,消息都给中间件(消峰)
消息给中间件后,等通知,不用一直等着(异步)
消息给了中间件,与消息多少没关系,也就是新模块进来,代码改动最小(解耦
目前比较常见和可靠的MQ的产品具体有:kafka、RabbitMQ、RocketMQ、ActiveMQ
基于产品要求的特点,上面的产品必须要解决以下问题:
技术维度
专业名词
消息中间件
有api发送和接收
不能宕机
高可用性
需要多而不是单机版
集群和容错配置
不能断不能丢
持久化
取消撤回
延时发送/定时投递
有无收到
签收机制
如果没有引入MQ,生产者和消费者互相调用,在大型分布式应用中,系统间的RPC交互繁杂,即每增加一个消费者,生产者都要修改(系统之间的接口耦合比较严重);等待同步消息性存在问题(RPC接口基本上是同步调用,类似“木桶理论”);面对消 ...
消息队列-rocketMQ
官网
概念RocketMQ 的基本概念1 消息(Message)
消息是指,消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。
2 主题(Topic)
Topic表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。 topic:message 1:n message:topic 1:1一个生产者可以同时发送多种Topic的消息;而一个消费者只对某种特定的Topic感兴趣,即只可以订阅和消费一种Topic的消息。 producer:topic 1:n consumer:topic 1:1
3 标签(Tag)
为消息设置的标签,用于同一主题下区分不同类型的消息。来自同一业务单元的消息,可以根据不同业务目的在同一主题下设置不同标签。标签能够有效地保持代码的清晰度和连贯性,并优化RocketMQ提供的查询系统。消费者可以根据Tag实现对不同子主题的不同消费逻辑,实现更好的扩展性。Topic是消息的一级分类,Tag是消息的二级分类。Topic:货物tag=上海tag=江苏tag& ...