• 关于 HTTP小爬虫 的搜索结果

回答

访问太频繁!######中间歇一下######每次get后sleep一个小随机数###### 推荐大家使用我们开发的神箭手云爬虫( http://www.shenjianshou.cn ),完全在云上编写和执行爬虫,不需要配置任何开发环境,快速开发快速实现。  简单几行 javascript 就可以实现复杂的爬虫,同时提供很多功能函数:反反爬虫、 js 渲染、数据发布、图表分析、反防盗链等,这些在开发爬虫过程中经常会遇到的问题都由神箭手帮你解决。  demo 源码地址: https://github.com/ShenJianShou/crawler_samples 官方开发者QQ群:342953471

kun坤 2020-06-09 11:42:13 0 浏览量 回答数 0

问题

Python爬虫知识点梳理

珍宝珠 2020-03-18 10:13:52 404 浏览量 回答数 1

问题

请问Android爬虫遇到了权限问题怎么办?

爵霸 2019-12-01 20:22:04 1033 浏览量 回答数 1

新用户福利专场,云服务器ECS低至96.9元/年

新用户福利专场,云服务器ECS低至96.9元/年

问题

【Python】求大神帮忙写个小爬虫爬数据,感激不尽 热:报错

kun坤 2020-06-09 12:17:50 2 浏览量 回答数 1

回答

1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来。想抓取什么?这个由你来控制它咯。 比如它在抓取一个网页,在这个网中他发现了一条道路,其实就是指向网页的超链接,那么它就可以爬到另一张网上来获取数据。这样,整个连在一起的大网对这之蜘蛛来说触手可及,分分钟爬下来不是事儿。 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以及百度搜索框,这个过程其实就是用户输入网址之后,经过DNS服务器,找到服务器主机,向服务器发出一个请求,服务器经过解析之后,发送给用户的浏览器 HTML、JS、CSS 等文件,浏览器解析出来,用户便可以看到形形色色的图片了。 因此,用户看到的网页实质是由 HTML 代码构成的,爬虫爬来的便是这些内容,通过分析和过滤这些 HTML 代码,实现对图片、文字等资源的获取。 3.URL的含义 URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。 URL的格式由三部分组成:①第一部分是协议(或称为服务方式)。②第二部分是存有该资源的主机IP地址(有时也包括端口号)。③第三部分是主机资源的具体地址,如目录和文件名等。爬虫爬取数据时必须要有一个目标的URL才可以获取数据,因此,它是爬虫获取数据的基本依据,准确理解它的含义对爬虫学习有很大帮助。 环境的配置 学习Python,当然少不了环境的配置,最初我用的是Notepad++,不过发现它的提示功能实在是太弱了,于是,在Windows下我用了 PyCharm,在Linux下我用了Eclipse for Python,另外还有几款比较优秀的IDE,大家可以参考这篇文章 学习Python推荐的IDE 。好的开发工具是前进的推进器,希望大家可以找到适合自己的IDE 作者:谢科链接:https://www.zhihu.com/question/20899988/answer/24923424来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 “入门”是良好的动机,但是可能作用缓慢。如果你手里或者脑子里有一个项目,那么实践起来你会被目标驱动,而不会像学习模块一样慢慢学习。另外如果说知识体系里的每一个知识点是图里的点,依赖关系是边的话,那么这个图一定不是一个有向无环图。因为学习A的经验可以帮助你学习B。因此,你不需要学习怎么样“入门”,因为这样的“入门”点根本不存在!你需要学习的是怎么样做一个比较大的东西,在这个过程中,你会很快地学会需要学会的东西的。当然,你可以争论说需要先懂python,不然怎么学会python做爬虫呢?但是事实上,你完全可以在做这个爬虫的过程中学习python :D看到前面很多答案都讲的“术”——用什么软件怎么爬,那我就讲讲“道”和“术”吧——爬虫怎么工作以及怎么在python实现。先长话短说summarize一下:你需要学习基本的爬虫工作原理基本的http抓取工具,scrapyBloom Filter: Bloom Filters by Example如果需要大规模网页抓取,你需要学习分布式爬虫的概念。其实没那么玄乎,你只要学会怎样维护一个所有集群机器能够有效分享的分布式队列就好。最简单的实现是python-rq: https://github.com/nvie/rqrq和Scrapy的结合:darkrho/scrapy-redis · GitHub后续处理,网页析取(grangier/python-goose · GitHub),存储(Mongodb)以下是短话长说:说说当初写的一个集群爬下整个豆瓣的经验吧。1)首先你要明白爬虫怎样工作。想象你是一只蜘蛛,现在你被放到了互联“网”上。那么,你需要把所有的网页都看一遍。怎么办呢?没问题呀,你就随便从某个地方开始,比如说人民日报的首页,这个叫initial pages,用$表示吧。在人民日报的首页,你看到那个页面引向的各种链接。于是你很开心地从爬到了“国内新闻”那个页面。太好了,这样你就已经爬完了俩页面(首页和国内新闻)!暂且不用管爬下来的页面怎么处理的,你就想象你把这个页面完完整整抄成了个html放到了你身上。突然你发现, 在国内新闻这个页面上,有一个链接链回“首页”。作为一只聪明的蜘蛛,你肯定知道你不用爬回去的吧,因为你已经看过了啊。所以,你需要用你的脑子,存下你已经看过的页面地址。这样,每次看到一个可能需要爬的新链接,你就先查查你脑子里是不是已经去过这个页面地址。如果去过,那就别去了。好的,理论上如果所有的页面可以从initial page达到的话,那么可以证明你一定可以爬完所有的网页。那么在python里怎么实现呢?很简单import Queue initial_page = "http://www.renminribao.com" url_queue = Queue.Queue()seen = set() seen.insert(initial_page)url_queue.put(initial_page) while(True): #一直进行直到海枯石烂 if url_queue.size()>0: current_url = url_queue.get() #拿出队例中第一个的url store(current_url) #把这个url代表的网页存储好 for next_url in extract_urls(current_url): #提取把这个url里链向的url if next_url not in seen: seen.put(next_url) url_queue.put(next_url) else: break 写得已经很伪代码了。所有的爬虫的backbone都在这里,下面分析一下为什么爬虫事实上是个非常复杂的东西——搜索引擎公司通常有一整个团队来维护和开发。2)效率如果你直接加工一下上面的代码直接运行的话,你需要一整年才能爬下整个豆瓣的内容。更别说Google这样的搜索引擎需要爬下全网的内容了。问题出在哪呢?需要爬的网页实在太多太多了,而上面的代码太慢太慢了。设想全网有N个网站,那么分析一下判重的复杂度就是N*log(N),因为所有网页要遍历一次,而每次判重用set的话需要log(N)的复杂度。OK,OK,我知道python的set实现是hash——不过这样还是太慢了,至少内存使用效率不高。通常的判重做法是怎样呢?Bloom Filter. 简单讲它仍然是一种hash的方法,但是它的特点是,它可以使用固定的内存(不随url的数量而增长)以O(1)的效率判定url是否已经在set中。可惜天下没有白吃的午餐,它的唯一问题在于,如果这个url不在set中,BF可以100%确定这个url没有看过。但是如果这个url在set中,它会告诉你:这个url应该已经出现过,不过我有2%的不确定性。注意这里的不确定性在你分配的内存足够大的时候,可以变得很小很少。一个简单的教程:Bloom Filters by Example注意到这个特点,url如果被看过,那么可能以小概率重复看一看(没关系,多看看不会累死)。但是如果没被看过,一定会被看一下(这个很重要,不然我们就要漏掉一些网页了!)。 [IMPORTANT: 此段有问题,请暂时略过]好,现在已经接近处理判重最快的方法了。另外一个瓶颈——你只有一台机器。不管你的带宽有多大,只要你的机器下载网页的速度是瓶颈的话,那么你只有加快这个速度。用一台机子不够的话——用很多台吧!当然,我们假设每台机子都已经进了最大的效率——使用多线程(python的话,多进程吧)。3)集群化抓取爬取豆瓣的时候,我总共用了100多台机器昼夜不停地运行了一个月。想象如果只用一台机子你就得运行100个月了...那么,假设你现在有100台机器可以用,怎么用python实现一个分布式的爬取算法呢?我们把这100台中的99台运算能力较小的机器叫作slave,另外一台较大的机器叫作master,那么回顾上面代码中的url_queue,如果我们能把这个queue放到这台master机器上,所有的slave都可以通过网络跟master联通,每当一个slave完成下载一个网页,就向master请求一个新的网页来抓取。而每次slave新抓到一个网页,就把这个网页上所有的链接送到master的queue里去。同样,bloom filter也放到master上,但是现在master只发送确定没有被访问过的url给slave。Bloom Filter放到master的内存里,而被访问过的url放到运行在master上的Redis里,这样保证所有操作都是O(1)。(至少平摊是O(1),Redis的访问效率见:LINSERT – Redis)考虑如何用python实现:在各台slave上装好scrapy,那么各台机子就变成了一台有抓取能力的slave,在master上装好Redis和rq用作分布式队列。代码于是写成#slave.py current_url = request_from_master()to_send = []for next_url in extract_urls(current_url): to_send.append(next_url) store(current_url);send_to_master(to_send) master.py distributed_queue = DistributedQueue()bf = BloomFilter() initial_pages = "www.renmingribao.com" while(True): if request == 'GET': if distributed_queue.size()>0: send(distributed_queue.get()) else: break elif request == 'POST': bf.put(request.url) 好的,其实你能想到,有人已经给你写好了你需要的:darkrho/scrapy-redis · GitHub4)展望及后处理虽然上面用很多“简单”,但是真正要实现一个商业规模可用的爬虫并不是一件容易的事。上面的代码用来爬一个整体的网站几乎没有太大的问题。但是如果附加上你需要这些后续处理,比如有效地存储(数据库应该怎样安排)有效地判重(这里指网页判重,咱可不想把人民日报和抄袭它的大民日报都爬一遍)有效地信息抽取(比如怎么样抽取出网页上所有的地址抽取出来,“朝阳区奋进路中华道”),搜索引擎通常不需要存储所有的信息,比如图片我存来干嘛...及时更新(预测这个网页多久会更新一次)

xuning715 2019-12-02 01:10:40 0 浏览量 回答数 0

回答

哥们,这个问题你解决了吗? 最近在做个小的爬虫工具, 用的apache的http-client,也遇到了一模一样的问题。。。 当时没找到原因,后来业务取消了,就没再研究,抱歉啊~

爱吃鱼的程序员 2020-06-22 20:34:09 0 浏览量 回答数 0

问题

【精品问答】python必备面试干货

问问小秘 2019-12-01 21:53:38 1125 浏览量 回答数 2

问题

用python写一个抓取js数据的程序:报错

kun坤 2020-06-09 11:18:30 0 浏览量 回答数 1

回答

作者:谢科链接:https://www.zhihu.com/question/20899988/answer/24923424来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。“入门”是良好的动机,但是可能作用缓慢。如果你手里或者脑子里有一个项目,那么实践起来你会被目标驱动,而不会像学习模块一样慢慢学习。另外如果说知识体系里的每一个知识点是图里的点,依赖关系是边的话,那么这个图一定不是一个有向无环图。因为学习A的经验可以帮助你学习B。因此,你不需要学习怎么样“入门”,因为这样的“入门”点根本不存在!你需要学习的是怎么样做一个比较大的东西,在这个过程中,你会很快地学会需要学会的东西的。当然,你可以争论说需要先懂python,不然怎么学会python做爬虫呢?但是事实上,你完全可以在做这个爬虫的过程中学习python :D看到前面很多答案都讲的“术”——用什么软件怎么爬,那我就讲讲“道”和“术”吧——爬虫怎么工作以及怎么在python实现。先长话短说summarize一下:你需要学习基本的爬虫工作原理基本的http抓取工具,scrapyBloom Filter: Bloom Filters by Example如果需要大规模网页抓取,你需要学习分布式爬虫的概念。其实没那么玄乎,你只要学会怎样维护一个所有集群机器能够有效分享的分布式队列就好。最简单的实现是python-rq: https://github.com/nvie/rqrq和Scrapy的结合:darkrho/scrapy-redis · GitHub后续处理,网页析取(grangier/python-goose · GitHub),存储(Mongodb)以下是短话长说:说说当初写的一个集群爬下整个豆瓣的经验吧。1)首先你要明白爬虫怎样工作。想象你是一只蜘蛛,现在你被放到了互联“网”上。那么,你需要把所有的网页都看一遍。怎么办呢?没问题呀,你就随便从某个地方开始,比如说人民日报的首页,这个叫initial pages,用$表示吧。在人民日报的首页,你看到那个页面引向的各种链接。于是你很开心地从爬到了“国内新闻”那个页面。太好了,这样你就已经爬完了俩页面(首页和国内新闻)!暂且不用管爬下来的页面怎么处理的,你就想象你把这个页面完完整整抄成了个html放到了你身上。突然你发现, 在国内新闻这个页面上,有一个链接链回“首页”。作为一只聪明的蜘蛛,你肯定知道你不用爬回去的吧,因为你已经看过了啊。所以,你需要用你的脑子,存下你已经看过的页面地址。这样,每次看到一个可能需要爬的新链接,你就先查查你脑子里是不是已经去过这个页面地址。如果去过,那就别去了。好的,理论上如果所有的页面可以从initial page达到的话,那么可以证明你一定可以爬完所有的网页。那么在python里怎么实现呢?很简单import Queueinitial_page = "http://www.renminribao.com"url_queue = Queue.Queue()seen = set()seen.insert(initial_page)url_queue.put(initial_page)while(True): #一直进行直到海枯石烂if url_queue.size()>0: current_url = url_queue.get() #拿出队例中第一个的url store(current_url) #把这个url代表的网页存储好 for next_url in extract_urls(current_url): #提取把这个url里链向的url if next_url not in seen: seen.put(next_url) url_queue.put(next_url) else: break写得已经很伪代码了。所有的爬虫的backbone都在这里,下面分析一下为什么爬虫事实上是个非常复杂的东西——搜索引擎公司通常有一整个团队来维护和开发。2)效率如果你直接加工一下上面的代码直接运行的话,你需要一整年才能爬下整个豆瓣的内容。更别说Google这样的搜索引擎需要爬下全网的内容了。问题出在哪呢?需要爬的网页实在太多太多了,而上面的代码太慢太慢了。设想全网有N个网站,那么分析一下判重的复杂度就是N*log(N),因为所有网页要遍历一次,而每次判重用set的话需要log(N)的复杂度。OK,OK,我知道python的set实现是hash——不过这样还是太慢了,至少内存使用效率不高。通常的判重做法是怎样呢?Bloom Filter. 简单讲它仍然是一种hash的方法,但是它的特点是,它可以使用固定的内存(不随url的数量而增长)以O(1)的效率判定url是否已经在set中。可惜天下没有白吃的午餐,它的唯一问题在于,如果这个url不在set中,BF可以100%确定这个url没有看过。但是如果这个url在set中,它会告诉你:这个url应该已经出现过,不过我有2%的不确定性。注意这里的不确定性在你分配的内存足够大的时候,可以变得很小很少。一个简单的教程:Bloom Filters by Example注意到这个特点,url如果被看过,那么可能以小概率重复看一看(没关系,多看看不会累死)。但是如果没被看过,一定会被看一下(这个很重要,不然我们就要漏掉一些网页了!)。 [IMPORTANT: 此段有问题,请暂时略过]好,现在已经接近处理判重最快的方法了。另外一个瓶颈——你只有一台机器。不管你的带宽有多大,只要你的机器下载网页的速度是瓶颈的话,那么你只有加快这个速度。用一台机子不够的话——用很多台吧!当然,我们假设每台机子都已经进了最大的效率——使用多线程(python的话,多进程吧)。3)集群化抓取爬取豆瓣的时候,我总共用了100多台机器昼夜不停地运行了一个月。想象如果只用一台机子你就得运行100个月了...那么,假设你现在有100台机器可以用,怎么用python实现一个分布式的爬取算法呢?我们把这100台中的99台运算能力较小的机器叫作slave,另外一台较大的机器叫作master,那么回顾上面代码中的url_queue,如果我们能把这个queue放到这台master机器上,所有的slave都可以通过网络跟master联通,每当一个slave完成下载一个网页,就向master请求一个新的网页来抓取。而每次slave新抓到一个网页,就把这个网页上所有的链接送到master的queue里去。同样,bloom filter也放到master上,但是现在master只发送确定没有被访问过的url给slave。Bloom Filter放到master的内存里,而被访问过的url放到运行在master上的Redis里,这样保证所有操作都是O(1)。(至少平摊是O(1),Redis的访问效率见:LINSERT – Redis)考虑如何用python实现:在各台slave上装好scrapy,那么各台机子就变成了一台有抓取能力的slave,在master上装好Redis和rq用作分布式队列。代码于是写成#slave.pycurrent_url = request_from_master()to_send = []for next_url in extract_urls(current_url):to_send.append(next_url) store(current_url);send_to_master(to_send)master.pydistributed_queue = DistributedQueue()bf = BloomFilter()initial_pages = "www.renmingribao.com"while(True):if request == 'GET': if distributed_queue.size()>0: send(distributed_queue.get()) else: break elif request == 'POST': bf.put(request.url) 好的,其实你能想到,有人已经给你写好了你需要的:darkrho/scrapy-redis · GitHub4)展望及后处理虽然上面用很多“简单”,但是真正要实现一个商业规模可用的爬虫并不是一件容易的事。上面的代码用来爬一个整体的网站几乎没有太大的问题。但是如果附加上你需要这些后续处理,比如有效地存储(数据库应该怎样安排)有效地判重(这里指网页判重,咱可不想把人民日报和抄袭它的大民日报都爬一遍)有效地信息抽取(比如怎么样抽取出网页上所有的地址抽取出来,“朝阳区奋进路中华道”),搜索引擎通常不需要存储所有的信息,比如图片我存来干嘛...及时更新(预测这个网页多久会更新一次)

xuning715 2019-12-02 01:10:18 0 浏览量 回答数 0

问题

【精品问答】Python数据爬取面试题库100问

珍宝珠 2019-12-01 21:55:53 6502 浏览量 回答数 3

问题

Nutch从搜索引擎到网络爬虫

开源 2019-12-01 21:28:43 8952 浏览量 回答数 0

问题

Nutch从搜索引擎到网络爬虫

开源 2019-12-01 21:28:43 9757 浏览量 回答数 1

回答

给大家整理的这套python学习路线图,按照此教程来一步步的学习,肯定会对python有更深刻的认识。或许可以喜欢上python这个易学,精简,开源的语言。此套教程,不但有视频教程,还有源码分享,让大家能真正打开python的大门,进入这个领域。现在互联网巨头,都已经转投到人工智能领域,而人工智能最好的编程语言就是python,未来前景显而易见。黑马程序员的PYthon是国内最早开设的真正人工智能课程一、首先先推荐一个教程8天深入理解python教程:http://pan.baidu.com/s/1kVNmOar主要讲解,python开发环境的构建,基础的数据类型,字符串如何处理等简单的入门级教程。二、第二个教程,是系统的基础知识,学习周期大概一个月左右的时间,根据自己的学习能力吸收能力来定。 初学者只要跟着此套教程学习,入门完全没有问题。 学完后可掌握的核心能力1、掌握基本的Linux系统操作;2、掌握Python基础编程语法;3、建立起编程思维和面向对象思想;可解决的现实问题:字符串排序,切割,逆置;猜数字、飞机大战游戏;市场价值:具备编程思维,掌握Python基本语法,能开发出一些小游戏所涉及知识点: Linux基本命令Python语法基础Python字符串解析Python时间和日历Python文件操作Python面向对象设计模式异常模块项目实战:飞机大战教程地址:http://pan.baidu.com/s/1i5mfB4D三、拓展教程1、网络爬虫-利用python实现爬取网页神技第一天:https://pan.baidu.com/s/1b3CXYI第二天:https://pan.baidu.com/s/1gfDSvHx2、Python之web开发利刃第一天:https://pan.baidu.com/s/1nvPmp6p第二天:https://pan.baidu.com/s/1hrVlRMk3、python之大数据开发奇兵https://pan.baidu.com/s/1eRBDjCQ

1702401060091468 2019-12-02 00:11:45 0 浏览量 回答数 0

回答

有客服接口。######wp的微信不支持oauth2.0######其实你可以在支付成功的通知中,再调用相关接口给指定的微信发送消息###### 1、这个接口必须是异步的,微信本身有支付成功通知,另外,应用可以在收到notify后通过微信的模板消息或者应用内部的push消息通知用户。 2、3没涉及过。 ######看了一圈文档似乎也就只能用模板消息了,坑爹的是用模板还要申请.... =============================== https://developer.aliyun.com/ask/302567 我有一个自己写的简单爬虫,联系我,发给你######回复 @bqby123 : 我手上也没有了,你就看那个spider模块吧,跟代码下去,可以把最后的插入动作改一下嘛######没有库######我的邮箱 bqby123@126.com###### http://www.oschina.net/code/snippet_82993_13607 看看这个,很简单 ######回复 @mahone : o######回复 @bqby123 : 人家没让你抓图。。。人家也没让你抄。。。人家是让你学习,思考。。。######我不抓图。。######抓不抓图没关系哦,这代码只是用来参考嘛。其实就是httpclient和jsoup,httpclient爬网页,jsoup选择信息,存储起来就行了###### 楼上正解 先学习一下httpclient 然后再学一下jsoup!!!如果你要深入学习 我这有书 可以给你看看!!! ######@stevenliu @stevenliu http://hospital.qqyy.com/list-p410000c0a0k0v1r0d0n0.html这个网也上的 医院名字和科室。注意 前面几个广告里的不要######回复 @bqby123 : 你要抓什么数据 我帮你看看!!!######回复 @苏大泉 : 肯定没这么快啊 呵呵 关键是有的网站 没有http头什么的不好办 所以用httpclient比较方便######没必要吧 我第一次搞个抓数据的小爬虫 现学现用 半个小时就搞定了 按你的方法java搞 没这么快的######我最近比较着急用,想先完成在自己深入研究######生命苦短 请用Python urllib和beautifulsoup 加上一点regex 就够了######能详细说下吗######正则出手,天下我有######python写吧 查查改改 最多半天就够了######回复 @bqby123 : 能看懂就行 网上找个改改就能用######不会python啊###### 可以参考下这个,默认插件使用XPath + 正则来解析。它有个抓取网易新闻的例子。 Spiderman https://github.com/laiweiwei/spiderman ######httpclient+jsoup很快就能搞定######       你自己看下吧

kun坤 2020-06-10 09:36:26 0 浏览量 回答数 0

问题

用NodeJs做一个小爬虫,附源码!

小太阳1号 2019-12-01 21:10:53 3303 浏览量 回答数 2

问题

【精品问答】python技术1000问(1)

问问小秘 2019-12-01 21:57:48 448858 浏览量 回答数 12

问题

云服务器网站没有被百度和google收录或者收录少怎么办?

qilu 2019-12-01 22:01:54 11014 浏览量 回答数 13

问题

云服务器网站没有被百度和google收录或者收录少怎么办?

qilu 2019-12-01 21:55:27 26055 浏览量 回答数 25

回答

1、 观察百度爬虫爬行网站的时间点的访问日志,观察web服务日志是否有问题。 2、议用户使用阿里云监控,监控系统负载,网络带宽使用率。观察系统负载以及网络带宽是否正常,如果偏高建议用户升级ECS服务器配置。 3、建议用户使用阿里云监控,监测网站的可用性的。http://www.aliyun.com/product/jiankong/ 4、使用百度站长工具了解网站的连通率:      A. 利用抓取异常、抓取频次工具观察抓取情况          注:每个工具页面的右侧下方都有使用说明可以了解,如下:                                  B. 利用抓取诊断工具观察抓取情况               为了保证网站对百度蜘蛛的稳定访问性能,日常需要养成定期抓取诊断的习惯,另外抓取诊断不是说光看看状态是否“抓取成功”就行了。有下面几步进行: A. 下拉选择分”pc”、 ”移动”进行抓取,”pc”意味着一般意义上的电脑端访问诊断,”移动”则是如手机、平板等移动设备端访问诊断。 B. 网站主要的引流页,如首页、详情页、内容页、专题页等都要进行抓取,另外可以重点几个时间段(比如网站高峰时间段)每天定期进行测试。 C. 抓取失败了,点击”抓取失败”查看提示信息,如果自己没有技术能力解决问题,可以跟空间商进行沟通,然后向工具提交报错。      D. 抓取成功后,也不能说就万事大吉了,还要点击”抓取成功”进去注意:提交网址、抓取网址、抓取UA、网站ip、下载时长、头部信息(服务器返回状态码、gzip等相关信息)、网页源码是否都正常。      特别说明:有很多站长就光注意抓取成功,却不知网站ip可能并非自己的实际ip,还可能每隔一段时间都变。当发现ip有问题,及时跟网络商沟通,并在网站ip旁点击“报错”按钮,百度会更新网站ip,但是切记不要ip变化频繁。此外当然还可能出现实际抓取网址、头部信息、网页源码等都不是自己本来设置的。 5. 测试抓取成功并能打开,这里主要注意DNS和空间的稳定性。     A. DNS的问题                 --------下方为百度官方资料-------------                当心dns服务器不稳导致站点被屏                近期百度站长平台收到多个反馈,称网站从百度网页搜索消失,site查询发现连通率为0。                 经追查发现这些网站都使用godaddy的DNS服务器 *.DOMAINCONTROL.COM,此系列DNS服务器存在稳定性问题,Baiduspider经常解析不到ip,在Baiduspider看来,网站是死站点。                此前我们也发现过多起小dns服务商屏蔽Baiduspider解析请求或者国外dns服务器不稳定的案例。                建议站长尽可能使用国内大型服务商提供的DNS服务,如dnspod等,以保证站点的稳定解析。                --------上方为百度官方资料-------------     B. 空间的稳定性                 空间的资源不足,内存、并发连接等等,当访问量很少的时候,用户察觉不出,当用户量高流量大时候出现网站打开异常会导致时,建议用户使用云监控监控网站打开延迟以及ECS服务器性能监控,了解服务器的性能异常及时调整服务器状态。             云监控配置方法,请查看链接:http://docs.aliyun.com/?spm=5176.775973980.2.3.ZU5cWe#/cms/User_Manual/Quick_Start&Site_Monitor 6. 建议用户与百度收录取得联系,询问下这边连通率的问题的。

KB小秘书 2019-12-02 01:28:38 0 浏览量 回答数 0

回答

大家好,我是 Rocky0429,一个最近正在学习 SQL 的蒟蒻… 在看完了某 《xxx 必知必会》以后,我觉得我膨胀了,立马某度 “xxx SQL 面试 100 题”、”SQL 岗位 xxx 个面试题“,准备大展手脚… 几天过去了,我有点懵逼,我发现身为蒟蒻的我不知道我写的 SQL 是不是丝滑,这种练习让我产生了一种没有丝毫提升的迷茫,问题是还得自己建个表,想想数据集,真的是太麻烦了。我,有点郁闷… 如果,有能在线练习的地方就好了… 如果,题目有层次就更好了… 苦心人天不负,卧薪尝胆,三千越甲可吞吴,经过我不懈的努力和本着不要脸的搜索精神,终于找到了…古人诚不我欺! 那一刻我泪流满面,经过激烈的脑腔共鸣,我决定把这些丝滑的网站公之于众,来吧,继续赞美我吧! 0x00 SQLZOO 网址:https://sqlzoo.net/ 是SQLZOO包括了 SQL 学习的教程和参考资料,支持 SQL Sever、Oracle、MySQL、DB2、PostgreSQL等多个 SQL 搜索引擎,现在支持英德日中四国语言,不过中文是繁体的,看起来别别扭扭,建议还是用英文来看,就算英语不好,翻译大法好… 遇到不会的题,祭出 Google 大法,看看别人的一些高质量的回答,然后赶紧自己再试一下,就算自己做对了,也看看和别人的想法差距在哪,这样自己的提升才快。 0x01 SQLBolt 网址:https://sqlbolt.com/ SQLBolt 是一个适合小白学习 SQL 的网站,这里由浅及深的介绍了 SQL 的知识,每一个章节是一组相关的 SQL 知识点,且配备着相应的练习。 这个特别适合学完某个知识点之后,立马想检验自己学习情况的同学。对一些同学来说,唯一难受的可能网站是英文的,这个不慌,接着往下看,有惊喜。 0x02 XUESQL 网址:http://xuesql.cn/ 在 0x01 中因为英文而感觉不适的可以看这个,相当于 SQLBolt 的中文版,包含手册、在线练习,还有一点好的是,XUESQL 还有自己讲解 SQL 的视频可以食用。 0x03 SQL Fiddle 网址:http://sqlfiddle.com/ SQL Fiddle 支持 MySQL、SQL Server、SQLite 等主流的 SQL 引擎,在这里可以选择练习的数据库以及版本号。 0x04 leetcode 英文网址:https://leetcode.com/ 中文网址:https://leetcode-cn.com/ 一般大家看到 leetcode 第一印象是刷算法题的,其实 leetcode 上也有关于 SQL 的题目,而且可以在线测评,和评测算法题一样,也会让你很直观的看到自己所写的 SQL 的运行速度等,同样可以去借鉴别人优化好的 SQL,与自己的对比,将好的用法学会,这样的提升是很快的。 0x05 写在之后 当然类似的这种 SQL 在线练习的网站有很多,我只介绍了其中的一些有代表性的,关于更多类似的网站,欢迎大家和我交流。 作者Info: 【作者】:Rocky0429 【原创公众号】:Python空间。 【简介】:CSDN 博客专家, 985 计算机在读研究生,ACM 退役狗 & 亚洲区域赛银奖划水选手。这是一个坚持原创的技术公众号,专注Python 编程,每天坚持推送各种 Python 基础/进阶文章,数据分析,爬虫实战,数据结构与算法,不定期分享各类资源。

茶什i 2020-01-15 11:55:47 0 浏览量 回答数 0

回答

教程资源类 freeCodeCamp/freeCodeCamp 免费代码训练营 EbookFoundation/free-programming-book 免费编程图书 sindresorhus/awesome awesome 列表的列表。这个项目起源于某个人做了一个 awesome-php 的 php 优质资源 列表,然后大家就做了 awesome-python,awesome-vue 等各种列表,这个项目又把 各种 awesome 列表收集了起来。 CyC2018/CS-Notes 国人编写的计算机基础教程,中文 jwasham/coding-interview-university 面试考点总结 h5bp/Front-end-Developer-Interview-Questions 前端工程师面试问题 vinta/awesome-python Python 的一些优质资源. 前面提到的 awesome 系列列表,不再赘述 airbnb/javascript Airbnb 的 js 编码规范,值得参考。 github/gitignore GitHub 提供的各种项目的 gitignore 文件模板,省了自己写了 getify/You-Dont-Know-JS 前端(JS)的一些坑的总结 vuejs/awesome-vue Vue 的一些优质资源. awesome 系列,不再赘述 前端 UI 框架/库 twbs/bootstrap Twitter 推出的前端 UI 框架,有网格系统和各种组件,曾经常年在 GitHub 上排名第一,可以说是后端工程师画界面的利器。 竞品:Semantic UI, pure-css FontAwesome/Font-Awesome 字体和图标库,可以使用 SVG 和字体等等多种格式。 ant-design/ant-design 蚂蚁金服出的 react/vue 组件库,前一阵大名鼎鼎的“圣诞彩蛋”就是这个库搞得。主要 提供 React 的组件库,用于企业中后端的后台的建设。关于 React/Vue 和前端的组 件化是一个很有意思的话题,可以查阅相关资料。 和 Bootstrap 等的区别在于,Bootstrap 更偏向于 UI 方面,是 CSS 框架,而 antd 则是完整的包括 UI 和功能在内的 React 组件。可以理解为 Bootstrap 只做了“皮”, 而 antd 是 “皮” + “骨”。 Semantic-Org/Sematic-UI 和 Bootstrap 类似的一个组件库。Semantic UI 更强调使用语义化的 class 来定义样式 google / material-design-icons Google 推出的 Material 风格图标库。 daneden/animate.css CSS 动画效果库 大前端框架和库 vuejs/vue Vue 是国人推出的一个前端框架,可以通过写不同的 Vue 组件来组成一个完整的应用, 支持服务端渲染(SSR)。和 React 一样,Vue 也使用了 Virtual-DOM 技术来提高性能。 facebook/react facebook 推出的一个前端框架,特点是每个组件的 HTML/JS/CSS 组合在一起,使用 Virtual-DOM 渲染。在 React 出现之前,前端框架普遍采用了后端广泛使用的 MVC 模式,强调 HTML/JS/CSS 三者要分离,而 React 则反其道而行之,强调从组件构建, 可以说 React 的出现是前端界的一场革命。 facebook/react-native 使用 React 的语法来构建 native app,注意这里并不是使用一个 iOS 或者 Android 的 WebView 中嵌套了一个 webapp,而是直接使用 JS 来操作原生组件。 angular/angular.js Google 推出的前端框架,没用过 reactjs/redux react.js 的一个组件,用来管理数据。 meteor/meteor 前几年火过一阵,号称要统一前后端,然而我从来没搞明白到底是干啥的,如今热度已经 大减了。HN 上甚至直接有人问 Is meteor.js dead? webpack/webpack 用于打包前端资源 chartjs/Chart.js 前端数据可视化组件 electron 可以使用前端的工具链来编写桌面应用,同时能够跨平台。 jQuery 老牌的跨浏览器兼容库。随着浏览器的发展,现在使用 jQuery 的越来越少了。 create-react-app 用来构造 react app 的辅助工具。 d3.js 前端数据可视化组件 后端工具 elasticsearch 使用 Java 编写的一个搜索工具,要实现全文搜索的话,选择 ES 就对了。 moby Docker 的内核. Docker 可以让你打包应用的所有环境, 像虚拟机一样隔离, 但是又不像虚拟机 一样过多消耗资源. 库 ReactiveX/RxJava TODO 一种编程模式,现在还不是很了解。 机器学习 TensorFlow Google 推出的深度学习库, 目前占主流地位. 语言 Microsoft/TypeScript 微软推出的一个 JavaScript 的超集。我们知道 JavaScript 是一个动态弱类型的语言, 这种特性在小项目上很方便,然而随着前端项目越来越大,强类型对于程序正确性的保证 就显得越来越重要了。TypeScript 重点就在于增强了类型,甚至名字都叫 TypeScript。 强类型的语言是近年来语言的发展趋势,新语言诸如 Rust、Go、Swift 都是强类型的 语言。而一些老语言,比如 Python 也加入了 Type Hint 的功能来增强类型支持。 Apple/swift Apple 推出的新语言,用来代替 Obj-C。 golang Google 推出的编程语言。特点是通过 Goroutine 支持高并发。 nodejs 可以在服务器上运行的 js。 通用工具类 hakimel / reveal.js 使用 js 来做 PPT 的一个框架或者说工具 GoogleChrome/puppeteer Google 推出的操作 Chrome 浏览器的 node.js API。可以用在自动化测试和爬虫等领域。 官方 API 的推出基本上意味着第三方工具已经失去意义了。比如说 Phantom.js 直接宣 布停止维护了。 atom GitHub 推出的一个代码编辑器。 oh-my-zsh zsh 的增强组件集,可以让你的 shell 异常强大, 建议刚学命令行的可以体验一下. vscode 微软推出的代码编辑工具,目前占据了市场优势地位。 Web 框架 rails Ruby 的一个 MVC 模式的 web 框架,当年可谓大红大紫,现在似乎热度有所衰减了, 可能是因为大家都不写 Web 应用了。 expressjs Node.js 的一个 Web 框架。 http://socket.io 实现 WebSocket 的一个库,使用 node.js 编写。WebSocket 是在浏览器和服务器之间 实现全双工通信的一个协议。 laravel 一个比较现代的 PHP MVC web 框架,不过 PHP 这几年的热度衰减也很厉害,好多搞 PHP 的都直接转 Go 了。 内核 torvalds/linux 这个不用说了吧。评论里提到 Linux 的贡献者在 GitHub 上显示为正无穷, 厉害了.

有只黑白猫 2020-01-15 16:53:45 0 浏览量 回答数 0

回答

微服务 (MicroServices) 架构是当前互联网业界的一个技术热点,圈里有不少同行朋友当前有计划在各自公司开展微服务化体系建设,他们都有相同的疑问:一个微服务架构有哪些技术关注点 (technical concerns)?需要哪些基础框架或组件来支持微服务架构?这些框架或组件该如何选型?笔者之前在两家大型互联网公司参与和主导过大型服务化体系和框架建设,同时在这块也投入了很多时间去学习和研究,有一些经验和学习心得,可以和大家一起分享。 服务注册、发现、负载均衡和健康检查和单块 (Monolithic) 架构不同,微服务架构是由一系列职责单一的细粒度服务构成的分布式网状结构,服务之间通过轻量机制进行通信,这时候必然引入一个服务注册发现问题,也就是说服务提供方要注册通告服务地址,服务的调用方要能发现目标服务,同时服务提供方一般以集群方式提供服务,也就引入了负载均衡和健康检查问题。根据负载均衡 LB 所在位置的不同,目前主要的服务注册、发现和负载均衡方案有三种: 第一种是集中式 LB 方案,如下图 Fig 1,在服务消费者和服务提供者之间有一个独立的 LB,LB 通常是专门的硬件设备如 F5,或者基于软件如 LVS,HAproxy 等实现。LB 上有所有服务的地址映射表,通常由运维配置注册,当服务消费方调用某个目标服务时,它向 LB 发起请求,由 LB 以某种策略(比如 Round-Robin)做负载均衡后将请求转发到目标服务。LB 一般具备健康检查能力,能自动摘除不健康的服务实例。服务消费方如何发现 LB 呢?通常的做法是通过 DNS,运维人员为服务配置一个 DNS 域名,这个域名指向 LB。 Fig 1, 集中式 LB 方案 集中式 LB 方案实现简单,在 LB 上也容易做集中式的访问控制,这一方案目前还是业界主流。集中式 LB 的主要问题是单点问题,所有服务调用流量都经过 LB,当服务数量和调用量大的时候,LB 容易成为瓶颈,且一旦 LB 发生故障对整个系统的影响是灾难性的。另外,LB 在服务消费方和服务提供方之间增加了一跳 (hop),有一定性能开销。 第二种是进程内 LB 方案,针对集中式 LB 的不足,进程内 LB 方案将 LB 的功能以库的形式集成到服务消费方进程里头,该方案也被称为软负载 (Soft Load Balancing) 或者客户端负载方案,下图 Fig 2 展示了这种方案的工作原理。这一方案需要一个服务注册表 (Service Registry) 配合支持服务自注册和自发现,服务提供方启动时,首先将服务地址注册到服务注册表(同时定期报心跳到服务注册表以表明服务的存活状态,相当于健康检查),服务消费方要访问某个服务时,它通过内置的 LB 组件向服务注册表查询(同时缓存并定期刷新)目标服务地址列表,然后以某种负载均衡策略选择一个目标服务地址,最后向目标服务发起请求。这一方案对服务注册表的可用性 (Availability) 要求很高,一般采用能满足高可用分布式一致的组件(例如 Zookeeper, Consul, Etcd 等)来实现。 Fig 2, 进程内 LB 方案 进程内 LB 方案是一种分布式方案,LB 和服务发现能力被分散到每一个服务消费者的进程内部,同时服务消费方和服务提供方之间是直接调用,没有额外开销,性能比较好。但是,该方案以客户库 (Client Library) 的方式集成到服务调用方进程里头,如果企业内有多种不同的语言栈,就要配合开发多种不同的客户端,有一定的研发和维护成本。另外,一旦客户端跟随服务调用方发布到生产环境中,后续如果要对客户库进行升级,势必要求服务调用方修改代码并重新发布,所以该方案的升级推广有不小的阻力。 进程内 LB 的案例是 Netflix 的开源服务框架,对应的组件分别是:Eureka 服务注册表,Karyon 服务端框架支持服务自注册和健康检查,Ribbon 客户端框架支持服务自发现和软路由。另外,阿里开源的服务框架 Dubbo 也是采用类似机制。 第三种是主机独立 LB 进程方案,该方案是针对第二种方案的不足而提出的一种折中方案,原理和第二种方案基本类似,不同之处是,他将 LB 和服务发现功能从进程内移出来,变成主机上的一个独立进程,主机上的一个或者多个服务要访问目标服务时,他们都通过同一主机上的独立 LB 进程做服务发现和负载均衡,见下图 Fig 3。 Fig 3 主机独立 LB 进程方案 该方案也是一种分布式方案,没有单点问题,一个 LB 进程挂了只影响该主机上的服务调用方,服务调用方和 LB 之间是进程内调用,性能好,同时,该方案还简化了服务调用方,不需要为不同语言开发客户库,LB 的升级不需要服务调用方改代码。该方案的不足是部署较复杂,环节多,出错调试排查问题不方便。 该方案的典型案例是 Airbnb 的 SmartStack 服务发现框架,对应组件分别是:Zookeeper 作为服务注册表,Nerve 独立进程负责服务注册和健康检查,Synapse/HAproxy 独立进程负责服务发现和负载均衡。Google 最新推出的基于容器的 PaaS 平台 Kubernetes,其内部服务发现采用类似的机制。 服务前端路由微服务除了内部相互之间调用和通信之外,最终要以某种方式暴露出去,才能让外界系统(例如客户的浏览器、移动设备等等)访问到,这就涉及服务的前端路由,对应的组件是服务网关 (Service Gateway),见图 Fig 4,网关是连接企业内部和外部系统的一道门,有如下关键作用: 服务反向路由,网关要负责将外部请求反向路由到内部具体的微服务,这样虽然企业内部是复杂的分布式微服务结构,但是外部系统从网关上看到的就像是一个统一的完整服务,网关屏蔽了后台服务的复杂性,同时也屏蔽了后台服务的升级和变化。安全认证和防爬虫,所有外部请求必须经过网关,网关可以集中对访问进行安全控制,比如用户认证和授权,同时还可以分析访问模式实现防爬虫功能,网关是连接企业内外系统的安全之门。限流和容错,在流量高峰期,网关可以限制流量,保护后台系统不被大流量冲垮,在内部系统出现故障时,网关可以集中做容错,保持外部良好的用户体验。监控,网关可以集中监控访问量,调用延迟,错误计数和访问模式,为后端的性能优化或者扩容提供数据支持。日志,网关可以收集所有的访问日志,进入后台系统做进一步分析。 Fig 4, 服务网关 除以上基本能力外,网关还可以实现线上引流,线上压测,线上调试 (Surgical debugging),金丝雀测试 (Canary Testing),数据中心双活 (Active-Active HA) 等高级功能。 网关通常工作在 7 层,有一定的计算逻辑,一般以集群方式部署,前置 LB 进行负载均衡。 开源的网关组件有 Netflix 的 Zuul,特点是动态可热部署的过滤器 (filter) 机制,其它如 HAproxy,Nginx 等都可以扩展作为网关使用。 在介绍过服务注册表和网关等组件之后,我们可以通过一个简化的微服务架构图 (Fig 5) 来更加直观地展示整个微服务体系内的服务注册发现和路由机制,该图假定采用进程内 LB 服务发现和负载均衡机制。在下图 Fig 5 的微服务架构中,服务简化为两层,后端通用服务(也称中间层服务 Middle Tier Service)和前端服务(也称边缘服务 Edge Service,前端服务的作用是对后端服务做必要的聚合和裁剪后暴露给外部不同的设备,如 PC,Pad 或者 Phone)。后端服务启动时会将地址信息注册到服务注册表,前端服务通过查询服务注册表就可以发现然后调用后端服务;前端服务启动时也会将地址信息注册到服务注册表,这样网关通过查询服务注册表就可以将请求路由到目标前端服务,这样整个微服务体系的服务自注册自发现和软路由就通过服务注册表和网关串联起来了。如果以面向对象设计模式的视角来看,网关类似 Proxy 代理或者 Façade 门面模式,而服务注册表和服务自注册自发现类似 IoC 依赖注入模式,微服务可以理解为基于网关代理和注册表 IoC 构建的分布式系统。 Fig 5, 简化的微服务架构图 服务容错当企业微服务化以后,服务之间会有错综复杂的依赖关系,例如,一个前端请求一般会依赖于多个后端服务,技术上称为 1 -> N 扇出 (见图 Fig 6)。在实际生产环境中,服务往往不是百分百可靠,服务可能会出错或者产生延迟,如果一个应用不能对其依赖的故障进行容错和隔离,那么该应用本身就处在被拖垮的风险中。在一个高流量的网站中,某个单一后端一旦发生延迟,可能在数秒内导致所有应用资源 (线程,队列等) 被耗尽,造成所谓的雪崩效应 (Cascading Failure,见图 Fig 7),严重时可致整个网站瘫痪。 Fig 6, 服务依赖 Fig 7, 高峰期单个服务延迟致雪崩效应 经过多年的探索和实践,业界在分布式服务容错一块探索出了一套有效的容错模式和最佳实践,主要包括: Fig 8, 弹性电路保护状态图 电路熔断器模式 (Circuit Breaker Patten), 该模式的原理类似于家里的电路熔断器,如果家里的电路发生短路,熔断器能够主动熔断电路,以避免灾难性损失。在分布式系统中应用电路熔断器模式后,当目标服务慢或者大量超时,调用方能够主动熔断,以防止服务被进一步拖垮;如果情况又好转了,电路又能自动恢复,这就是所谓的弹性容错,系统有自恢复能力。下图 Fig 8 是一个典型的具备弹性恢复能力的电路保护器状态图,正常状态下,电路处于关闭状态 (Closed),如果调用持续出错或者超时,电路被打开进入熔断状态 (Open),后续一段时间内的所有调用都会被拒绝 (Fail Fast),一段时间以后,保护器会尝试进入半熔断状态 (Half-Open),允许少量请求进来尝试,如果调用仍然失败,则回到熔断状态,如果调用成功,则回到电路闭合状态。舱壁隔离模式 (Bulkhead Isolation Pattern),顾名思义,该模式像舱壁一样对资源或失败单元进行隔离,如果一个船舱破了进水,只损失一个船舱,其它船舱可以不受影响 。线程隔离 (Thread Isolation) 就是舱壁隔离模式的一个例子,假定一个应用程序 A 调用了 Svc1/Svc2/Svc3 三个服务,且部署 A 的容器一共有 120 个工作线程,采用线程隔离机制,可以给对 Svc1/Svc2/Svc3 的调用各分配 40 个线程,当 Svc2 慢了,给 Svc2 分配的 40 个线程因慢而阻塞并最终耗尽,线程隔离可以保证给 Svc1/Svc3 分配的 80 个线程可以不受影响,如果没有这种隔离机制,当 Svc2 慢的时候,120 个工作线程会很快全部被对 Svc2 的调用吃光,整个应用程序会全部慢下来。限流 (Rate Limiting/Load Shedder),服务总有容量限制,没有限流机制的服务很容易在突发流量 (秒杀,双十一) 时被冲垮。限流通常指对服务限定并发访问量,比如单位时间只允许 100 个并发调用,对超过这个限制的请求要拒绝并回退。回退 (fallback),在熔断或者限流发生的时候,应用程序的后续处理逻辑是什么?回退是系统的弹性恢复能力,常见的处理策略有,直接抛出异常,也称快速失败 (Fail Fast),也可以返回空值或缺省值,还可以返回备份数据,如果主服务熔断了,可以从备份服务获取数据。Netflix 将上述容错模式和最佳实践集成到一个称为 Hystrix 的开源组件中,凡是需要容错的依赖点 (服务,缓存,数据库访问等),开发人员只需要将调用封装在 Hystrix Command 里头,则相关调用就自动置于 Hystrix 的弹性容错保护之下。Hystrix 组件已经在 Netflix 经过多年运维验证,是 Netflix 微服务平台稳定性和弹性的基石,正逐渐被社区接受为标准容错组件。 服务框架微服务化以后,为了让业务开发人员专注于业务逻辑实现,避免冗余和重复劳动,规范研发提升效率,必然要将一些公共关注点推到框架层面。服务框架 (Fig 9) 主要封装公共关注点逻辑,包括: Fig 9, 服务框架 服务注册、发现、负载均衡和健康检查,假定采用进程内 LB 方案,那么服务自注册一般统一做在服务器端框架中,健康检查逻辑由具体业务服务定制,框架层提供调用健康检查逻辑的机制,服务发现和负载均衡则集成在服务客户端框架中。监控日志,框架一方面要记录重要的框架层日志、metrics 和调用链数据,还要将日志、metrics 等接口暴露出来,让业务层能根据需要记录业务日志数据。在运行环境中,所有日志数据一般集中落地到企业后台日志系统,做进一步分析和处理。REST/RPC 和序列化,框架层要支持将业务逻辑以 HTTP/REST 或者 RPC 方式暴露出来,HTTP/REST 是当前主流 API 暴露方式,在性能要求高的场合则可采用 Binary/RPC 方式。针对当前多样化的设备类型 (浏览器、普通 PC、无线设备等),框架层要支持可定制的序列化机制,例如,对浏览器,框架支持输出 Ajax 友好的 JSON 消息格式,而对无线设备上的 Native App,框架支持输出性能高的 Binary 消息格式。配置,除了支持普通配置文件方式的配置,框架层还可集成动态运行时配置,能够在运行时针对不同环境动态调整服务的参数和配置。限流和容错,框架集成限流容错组件,能够在运行时自动限流和容错,保护服务,如果进一步和动态配置相结合,还可以实现动态限流和熔断。管理接口,框架集成管理接口,一方面可以在线查看框架和服务内部状态,同时还可以动态调整内部状态,对调试、监控和管理能提供快速反馈。Spring Boot 微框架的 Actuator 模块就是一个强大的管理接口。统一错误处理,对于框架层和服务的内部异常,如果框架层能够统一处理并记录日志,对服务监控和快速问题定位有很大帮助。安全,安全和访问控制逻辑可以在框架层统一进行封装,可做成插件形式,具体业务服务根据需要加载相关安全插件。文档自动生成,文档的书写和同步一直是一个痛点,框架层如果能支持文档的自动生成和同步,会给使用 API 的开发和测试人员带来极大便利。Swagger 是一种流行 Restful API 的文档方案。当前业界比较成熟的微服务框架有 Netflix 的 Karyon/Ribbon,Spring 的 Spring Boot/Cloud,阿里的 Dubbo 等。 运行期配置管理服务一般有很多依赖配置,例如访问数据库有连接字符串配置,连接池大小和连接超时配置,这些配置在不同环境 (开发 / 测试 / 生产) 一般不同,比如生产环境需要配连接池,而开发测试环境可能不配,另外有些参数配置在运行期可能还要动态调整,例如,运行时根据流量状况动态调整限流和熔断阀值。目前比较常见的做法是搭建一个运行时配置中心支持微服务的动态配置,简化架构如下图 (Fig 10): Fig 10, 服务配置中心 动态配置存放在集中的配置服务器上,用户通过管理界面配置和调整服务配置,具体服务通过定期拉 (Scheduled Pull) 的方式或者服务器推 (Server-side Push) 的方式更新动态配置,拉方式比较可靠,但会有延迟同时有无效网络开销 (假设配置不常更新),服务器推方式能及时更新配置,但是实现较复杂,一般在服务和配置服务器之间要建立长连接。配置中心还要解决配置的版本控制和审计问题,对于大规模服务化环境,配置中心还要考虑分布式和高可用问题。 配置中心比较成熟的开源方案有百度的 Disconf,360 的 QConf,Spring 的 Cloud Config 和阿里的 Diamond 等。 Netflix 的微服务框架Netflix 是一家成功实践微服务架构的互联网公司,几年前,Netflix 就把它的几乎整个微服务框架栈开源贡献给了社区,这些框架和组件包括: Eureka: 服务注册发现框架Zuul: 服务网关Karyon: 服务端框架Ribbon: 客户端框架Hystrix: 服务容错组件Archaius: 服务配置组件Servo: Metrics 组件Blitz4j: 日志组件下图 Fig 11 展示了基于这些组件构建的一个微服务框架体系,来自 recipes-rss。 Fig 11, 基于 Netflix 开源组件的微服务框架 Netflix 的开源框架组件已经在 Netflix 的大规模分布式微服务环境中经过多年的生产实战验证,正逐步被社区接受为构造微服务框架的标准组件。Pivotal 去年推出的 Spring Cloud 开源产品,主要是基于对 Netflix 开源组件的进一步封装,方便 Spring 开发人员构建微服务基础框架。对于一些打算构建微服务框架体系的公司来说,充分利用或参考借鉴 Netflix 的开源微服务组件 (或 Spring Cloud),在此基础上进行必要的企业定制,无疑是通向微服务架构的捷径。 原文地址:https://www.infoq.cn/article/basis-frameworkto-implement-micro-service#anch130564%20%EF%BC%8C

auto_answer 2019-12-02 01:55:22 0 浏览量 回答数 0

回答

ReMySQL server error reportArray0ArraymessageMySQL Query Error 确实如此 谢谢版主 果然又一次的log满了。。 /var/log/httpd/里的 error_log_2015_06_09.log.1、access_log_2015_06_10.log.1这样的就这两天的log突然暴增到几十G。。。以下转载的: =============================================== 清除error.log、access.log并限制Apache日志文件大小的方法 Apache下的access.log和error.log文件从安装服务器到现在没有动过,今天突然discuz 的MYSQL数据库连接错误,提示2003 错误,检查发现原来是error.log、access.log爆满,文件达到30个G,奶奶的,立马搜索,得把这两个小子干掉。 下面是在网上搜索到的方法,立马见效,顶一个! 在 Windows 下的设置例子如下: 第一步:删除 Apache2/logs/目录下的 error.log、access.log文件 第二步:打开 Apache 的 httpd.conf配置文件并找到下面两条配置 ErrorLog logs/error.log CustomLog logs/access.log common 直接注释掉,换成下面的配置文件。 # 限制错误日志文件为 1M ErrorLog “|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 1M” # 每天生成一个错误日志文件 #ErrorLog “|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 86400″ # 限制访问日志文件为 1M CustomLog “|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 1M” common # 每天生成一个访问日志文件 #CustomLog “|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 86400″ common ================================ Apache下的access.log和error.log文件处理方法 这几天有会员和我说到网站访问速度越来越慢。我查了一下,看到Apache2下面有两个日志文件非常大了,加起来有800多M了。 分别是access.log和error.log。 于是在网上找找了给access.log和error.log减肥的方法,这个方法可让这两个文件按每天日期生成。这样你可以选择 把前面的旧文件删除了。 在Apache下的httpd.conf配置文件下找到下面两句: ErrorLog logs/error.log CustomLog logs/access.log common 然后把这两句分别改为如下: CustomLog “|D:/apache2/bin/rotatelogs.exe D:/apache2/logs/access_%Y_%m_%d.log 86400 480″ common ErrorLog “|D:/apache2/bin/rotatelogs.exe D:/apache2/logs/error_%Y_%m_%d.log 86400 480″ 一切就这么简单,这样这两个日志文件每天都会起一个新文件,就不至于单个文件太大,打不开,而无法看到日志信息了. 你还可以把前面的日志文件删除。 access.log,件在 WEB 服务器运行一段时间之后会达到几十兆甚至上百兆,如果Apache运行有错误,error.log也会增大到几十兆,我们知道系统读写一个大的文本文件是非常耗内存的,因此限定日志文件大小十分必要。 日志文件大小的配置指令,通过参考http://httpd.apache.org/docs/2.0/programs /rotatelogs.html,可以用apache 自己的程序 rotatelogs.exe(位于 {$apache}/bin/目录下),来限制日志文件的大小。 Usage: rotatelogs [-l] [offset minutes from UTC] or Add this: TransferLog “|rotatelogs /some/where 86400″ or TransferLog “|rotatelogs /some/where 5M” to httpd.conf. The generated name will be /some/where.nnnn where nnnn is the system time at which the log nominally starts (N.B. if using a rotation time, the time will always be a multiple of the rotation time, so you can synchronizecron scripts with it). At the end of each rotation time or when the file size is reached a new log is started. 在 Windows 下的设置例子如下: # 限制错误日志文件为 1M ErrorLog “|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 1M” # 每天生成一个错误日志文件 #ErrorLog “|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 86400″ # 限制访问日志文件为 1M CustomLog “|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 1M” common # 每天生成一个访问日志文件 #CustomLog “|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 86400″ common linux/Unix下 应该类似。 清除apache的access.log方法 有个客户服务器是用apache搭建的,最近总是感觉站很慢,服务器很慢很卡,有时候甚至网站都打不开,后来经过排查分析原来是里面的access.log和error.log这两个文件要经常上去看,和清理,如果时间忙,忘记看和清理了,过不了多久,这两个文件就膨胀的非常的大,打都打不开了。 下面就跟你说下 清理access.log和error.log这两个日志文件的方法希望对大家有些帮助。也怀疑怀疑是有其他的爬虫,明天都在爬我的几个网站。 优化access.log和error.log的方法如下 : CustomLog “|D:/thridparty-system/java/apache2/bin/rotatelogs.exe D:/thridparty-system/java/apache2/logs/access_%Y_%m_%d.log 86400 480″ common ErrorLog “|D:/thridparty-system/java/apache2/bin/rotatelogs.exe D:/thridparty-system/java/apache2/logs/error_%Y_%m_%d.log 86400 480″ 一切就这么简单,这样这两个日志文件每天都会起一个新文件,就不至于单个文件太大,打不开,而无法看到日志信息了. 解决Apache日志文件ACCESS.LOG日益膨胀的一个办法 将httpd.conf中customlog logs/access.log common 改成 customlog “|c:/apache/bin/rotatelogs c:/apache/logs/%y_%m_%d.access.log 86400 480″ common 重启apache 其中c:/apache/是你安装apache的路径 这样每一天生成一个日志文件 解决Apache日志文件ACCESS.LOG日益膨胀的一个办法

2019-12-02 01:43:34 0 浏览量 回答数 0

问题

厉华:写一个开源容器引擎会是什么样的体验? 热:报错

kun坤 2020-06-10 10:01:12 3 浏览量 回答数 1

问题

【精品问答】python技术1000问(2)

问问小秘 2019-12-01 22:03:02 68 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播