response

Nginx负载均衡

血红的双手。 提交于 2020-02-08 15:13:36
一、什么是负载均衡   负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服 务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 负载均衡,英文名称为 Load Balance,其意思就是分摊到多个操作单元上进行执行, 例如 Web 服务器、FTP 服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完 成工作任务。 二、负载均衡策略 1、 轮询(默认)   每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。 2、指定权重   指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 3、IP 绑定 ip_hash   每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务 器,可以解决 session 的问题。 4、fair(第三方)   按后端服务器的响应时间来分配请求,响应时间短的优先分配。 5、url_hash(第三方)   按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器, 后端服务器为缓存时比较有效。 三、轮询(默认) 1、模拟集群    设置两个Tomcat同时访问一个servlet    import javax.servlet.ServletException; import javax

记一次下载大文件存在数据异常问题排查

徘徊边缘 提交于 2020-02-08 11:29:04
最近遇到了一个很诡异的问题,有用户反馈从文件下载服务测试环境下载一个视频文件,每次MD5都不一样。。。 对于文件下载服务来说,下载文件内容错乱是个很严重的问题了,但是之前一直也没遇到过文件内容错乱的问题。看了一下问题文件,是一个视频文件,大小为1.08GB。第一个反应就是可能是一个大文件下载才会触发的问题。接着问用户如何发现这个问题的,答曰因为这个视频文件播放到最后很卡,第二个反应是下载到最后存在数据错乱。 自己测试了一下,测试环境是100%复现,每次的MD5都是不一样的。改用另外的大于1G的文件,一样能复现,排除了特定文件的可能。接着测试500MB的文件和900MB,发现没问题,推测问题是出在大于1GB的文件上。但是,生产环境却没有这个问题。。。 本地起Tomcat测试,竟然发现没有复现,结合该应用稳定运行多年,线上也没有人反馈文件异常问题,推测应用本身的逻辑应该是正常的。怀疑的焦点转移到了Nginx上。直接访问测试环境的Tomcat,发现也是正常的,确定是Nginx问题。 查看Nginx日志,发现有很重要的信息: 2019/06/28 11:28:27 [error] 15032#15032: *5973942305 upstream prematurely closed connection while reading upstream, client: 192.168

01-requests库基本使用

耗尽温柔 提交于 2020-02-08 05:24:51
requeses库 安装 pip install requests 中文文档:http://docs.python-requests.org/zh_CN/latest/index.html github地址:https://github.com/requests/requests import requests 发送get请求 最简单的发送get请求就是通过requests.get来调用 response = requests . get ( 'http://www.baidu.com/' ) response <Response [200]> 添加headers和查询参数 如果想添加 headers,可以传入headers参数来增加请求头中的headers信息。如果要将参数放在url中传递,可以利用 params 参数。相关示例代码如下 kw = { 'wd' : '中国' } headers = { "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" } # params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()

Scrapy使用shell调试

有些话、适合烂在心里 提交于 2020-02-08 04:41:34
使用shell尝试爬取 $ scrapy shell https: / / www . zhipin . com / c101280100 / 2020 - 02 - 07 10:42:20 [scrapy.utils.log] INFO: Scrapy 1 . 8 . 0 started ( bot: scrapybot ) 2020 - 02 - 07 10:42:20 [scrapy.utils.log] INFO: Versions: lxml 4 . 5 . 0 . 0 , libxml2 2 . 9 . 10 , cssselect 1 . 1 . 0 , parsel 1 . 5 . 2 , w3lib 1 . 21 . 0 , Twisted 19 . 10 . 0 , Python 3 . 8 . 0 ( v3 . 8 . 0:fa919fdf25 , Oct 14 2019 , 10:23:27 ) - [Clang 6.0 (clang-600.0.57)] , pyOpenSSL 19 . 1 . 0 ( OpenSSL 1 . 1 . 1d 10 Sep 2019 ) , cryptography 2 . 8 , Platform macOS - 10 . 15 . 2 - x86_64 - i386 - 64bit 2020 - 02 - 07 10

第13关. 各司其职的爬虫公司

对着背影说爱祢 提交于 2020-02-08 02:52:41
前两关,我们学习了能提升爬虫速度的进阶知识——协程,并且通过项目实操,将协程运用于抓取薄荷网的食物数据。 icon 可能你在体验开发一个爬虫项目的完整流程时,会有这样的感觉:原来要完成一个完整的爬虫程序需要做这么多琐碎的工作。 icon 比如,要导入不同功能的模块,还要编写各种爬取流程的代码。而且根据不同的项目,每次要编写的代码也不同。 icon 不知道你会不会有这样的想法:能不能有一个现成的爬虫模板,让我们拿来就能套用,就像PPT模板一样。我们不需要管爬虫的全部流程,只要负责填充好爬虫的核心逻辑代码就好。要是有的话,我们编写代码一定会很方便省事。 icon 其实,在Python中还真的存在这样的爬虫模板,只不过它的名字是叫框架。 icon 一个爬虫框架里包含了能实现爬虫整个流程的各种模块,就像PPT模板一开始就帮你设置好了主题颜色和排版方式一样。 icon 这一关,我们要学习的就是一个功能强大的爬虫框架——Scrapy。 Scrapy是什么 以前我们写爬虫,要导入和操作不同的模块,比如requests模块、gevent库、csv模块等。而在Scrapy里,你不需要这么做,因为很多爬虫需要涉及的功能,比如麻烦的异步,在Scrapy框架都自动实现了。 我们之前编写爬虫的方式,相当于在一个个地在拼零件,拼成一辆能跑的车。而Scrapy框架则是已经造好的、现成的车,我们只要踩下它的油门

【mq读书笔记】消息确认

怎甘沉沦 提交于 2020-02-08 02:35:51
接上文的集群模式,监听器返回RECONSUME_LATER,需要将将这些消息发送给Broker延迟消息。如果发送ack消息失败,将延迟5s后提交线程池进行消费。 入口:ConsumeMessageConcurrentlyService#sendMessageBack 命令编码:RequestCode.CONSUMER_SEND_MSG_BACK; MQClientAPIImpl#consumerSendMessageBack: public void consumerSendMessageBack( final String addr, final MessageExt msg, final String consumerGroup, final int delayLevel, final long timeoutMillis, final int maxConsumeRetryTimes ) throws RemotingException, MQBrokerException, InterruptedException { ConsumerSendMsgBackRequestHeader requestHeader = new ConsumerSendMsgBackRequestHeader(); RemotingCommand request =

轮询和长轮询

独自空忆成欢 提交于 2020-02-08 01:49:21
轮询:轮询就是第隔N秒访问一次服务器 长轮询:访问一次服务器时间比较长,如20秒,并且如果有数据返回则立马结束 # urls urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.index), path('get_json/', views.get_json), path('put_data/', views.put_data), ] # views from django.shortcuts import render from django.http import HttpResponse import json from queue import Queue, Empty que = Queue() # Create your views here. def index(request): return render(request, 'index.html') def get_json(request): # 轮询 # data = {'name': 'Alex', 'age': 33} # return HttpResponse(json.dumps(data)) # 轮询结束 # 长轮询开始 # 队列模拟长轮询,队列等待10秒 response = {'status': True,

GifFun源码学习:网络模块的分析

非 Y 不嫁゛ 提交于 2020-02-08 01:24:34
前言:GifFun是第一行代码作者郭霖大神的开源作品 GifFun地址 ,对于像作者这样的应届生来说,寻找工作的痛点是技术门槛和项目经验,由于新手的技术限制与见识广度,显然GifFun提供了一个学习的机会。在刚开始看的时候,笔者是一头雾水看不懂,学习 Kotlin后还是不懂,直到我对着代码试着重头敲一下,回头一看,便豁然开朗。 因此,学习项目最好的方法是自己敲一遍。 废话不多说,首先我们导入GifFun进Studio中,可以看到GifFun分为了4个模块,其中network显然是网络模块,网络模块下分4个包,exception显然是网络异常包,util包显然是工具包,model包为Json转换模型包,request包为网络请求包。 第一次看到这个结构的时候就跟我第一次看Android的目录结构一样。网络的第一步就是连接,所以首先要从Request入手,可以看到request包下的文件都是继承自Request文件,因此要进入Request文件查看,在进入该文件前,首先需要回顾下okhttp的完整用法: val formbody = FormBody . Builder ( ) . add ( "account" , "admin" ) . add ( "password" , "123456" ) . build ( ) ; //1 val request = Request .

python爬虫scrapy的LinkExtractor

你离开我真会死。 提交于 2020-02-08 00:17:07
使用背景:   我们通常在爬去某个网站的时候都是爬去每个标签下的某些内容,往往一个网站的主页后面会包含很多物品或者信息的详细的内容,我们只提取某个大标签下的某些内容的话,会显的效率较低,大部分网站的都是按照固定套路(也就是固定模板,把各种信息展示给用户),LinkExtrator就非常适合整站抓取,为什么呢?因为你通过xpath、css等一些列参数设置,拿到整个网站的你想要的链接,而不是固定的某个标签下的一些链接内容,非常适合整站爬取。 1 import scrapy 2 from scrapy.linkextractor import LinkExtractor 3 4 class WeidsSpider(scrapy.Spider): 5 name = "weids" 6 allowed_domains = ["wds.modian.com"] 7 start_urls = ['http://www.gaosiedu.com/gsschool/'] 8 9 def parse(self, response): 10 link = LinkExtractor(restrict_xpaths='//ul[@class="cont_xiaoqu"]/li') 11 links = link.extract_links(response) 12 print(links)

学习进度07

好久不见. 提交于 2020-02-08 00:14:23
https://www.bilibili.com/video/av19956343?p=143 #POST请求 import urllib.request import urllib.parse url="http://www.sunck.wang:8085/form" #将要发送的数据合成一个字典 #字典的键取网址里找,一般为input标签的name属性的值 data={ "username":"sunck", "passwd":"666" } #对要发送的数据进行打包 postData= urllib.parse.urlencode(data).encode("utf-8") #请求体 req=urllib.request.Request(url,postData) #请求 req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" ) response=urllib.request.urlopen(req) print(response.read().decode("utf-8")) https://www.bilibili.com/video