- 博客(99)
- 资源 (3)
- 收藏
- 关注
原创 关注国外开源技术文档的中文版的朋友进来看一下
是否还在为技术文档全是英文而烦恼? 是否还在为国外网站访问慢甚至需要翻墙才能查看上面的文档而烦恼? 是否还在为翻译文档晦涩难懂、无法和作者交流而烦恼? 我创建了一个分享技术文档的网站,还在逐步完善,小伙伴们可以关注一波~
2024-02-26 20:59:37 400
原创 开发一款开源爬虫框架系列(六):爬虫分布式化RPC
最近终于有部分时间继续开发爬虫,主要的任务是客户端和服务器端分离,这就涉及到远程调用的问题,所以研究了RPC,主要对象是Hessian、JMI、Dubbo、Thrift。进而想用几篇博文分享一下几种远程调用协议的一些东西,以后再接着聊爬虫。有兴趣可以访问我的爬虫项目:https://gitee.com/coliza/MongooCrawler ...
2018-05-22 13:38:56 1783
转载 Lombok 安装、入门 - 消除冗长的 java 代码
转载自:http://www.blogjava.net/fancydeepin/archive/2012/07/12/lombok.html前言: 逛开源社区的时候无意发现的,用了一段时间,觉得还可以,特此推荐一下。 lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码。特别是相对于 POJO,光说不做不是我的风格,先来看看吧。
2017-09-12 14:05:55 592
原创 微服务架构二三事:总论
以前工作中基于dubbo的SOA架构用得比较多,现在微服务概念的兴起,尤其是Spring Boot+Spring Cloud的兴起使我产生了研究一下微服务架构的兴趣(与SOA)对比,总体上感觉微服务其实就是SOA的一个特别版,它更强调REST风格(HTTP+JSON),更强调业务的细分和接口单一职责,并不是一个全新的东西。Spring cloud中的Config,监控,熔断器,这些dubbo默认并
2017-08-10 01:09:52 887
原创 读书笔记:分布式系统系统与概念(图灵丛书)
书的第一章作者介绍了分布式系统的概念,分布在网络的不同组件并相互传递消息协调的系统,其特征是组件的并发性(这是说可以很多进程或线程可以同时运行,充分利用硬件资源)、缺乏全局时钟(网络上没有一个共有的时钟来同步不同节点上的操作)、故障的独立(故障具有隔离性)。然后讲了分布式系统的例子,以及趋势包括分布式计算和移动化(现在有很多不同的联网设备:pad、手机等等)、分布式多媒体(这几年兴起的视频、直播等
2017-07-30 17:06:50 849 1
原创 《微服务架构与实践》读书笔记
这本书主要回答了关于微服务的三个问题:微服务怎么来的,微服务是什么样的,微服务怎么做的。 第一部分介绍了单体架构和微服务架构的区别,单体架构易于开发、测试、部署、水平扩展,微服务架构优势在于易于扩展、持续交付部署能力、进程隔离有效提升鲁棒性、对新人的培养成本更低,同时它也带来了降低系统的性能、可靠性、业务异步化后的复杂性、调试和问题定位难度增加、以及数据一致性问题。 第二部分
2017-07-17 00:45:50 791
原创 ZooKeeper源码解析(六):ZooKeeper的三种选举算法
zookeeper中有三种选举算法,分别是LeaderElection,FastLeaderElection,AuthLeaderElection,FastLeaderElection和AuthLeaderElection是类似的选举算法,唯一区别是后者加入了认证信息,FastLeaderElection比LeaderElection更高效。我们只分析前两种算法。LeaderElect
2017-05-03 00:52:13 5486
原创 ZooKeeper源码解析(五):server端如何运行
server的启动机制:classZooKeeperServerMain.runFromConfig创建了连接工厂后开始启动server。class NIOServerCnxnFactory.startup其中start()函数会启动一个acceptThread使用reactor线程模型不断的使用Selector在serverchannel中select,一
2017-05-03 00:45:53 936
原创 ZooKeeper源码解析(四):client如何和server连接
客户端使用ClientCnxn和服务器端的ServerCnxn连接客户端sendThread负责向集群服务器发送请求,我们来看看它做了什么?sendThread的run方法的关键代码:我们再来看看eventThread的run方法通过以上的分析我们不难发现客户端是从Outgoing queue取数据发出请求后,再将返回的请求塞
2017-05-03 00:40:32 1616
原创 ZooKeeper源码解析(三):Watcher如何监控ZNode
Watcher是一个接口类,有一个接口方法:由用户来实现,后续我们会讲它如何配合ZooKeeper和ClientCnxn来监控节点。上图ZooKeeper中的watchManager实际上是ZKWatchManager,它实现了ClientWatchManager,内部有三个主要成员变量,dataWatches监控数据,比如ZooKeeper类的getData方法会触发该监
2017-04-27 23:57:12 1639
原创 ZooKeeper源码解析(二):用户如何和ZooKeeper交互
zookeeper涵盖的方法很多此处捡重要的说。首先是构造函数,这是我们使用zookeeper时第一个要使用到的方法ZooKeeper类重载了多个构造函数,上面的仅仅是最简单的一个。参数主要由连接字符串,session超时时间设置,监听器watcher,只读属性。其中的watcher能够根据路径监听各个znode的变化,一旦znode代表的服务器挂掉就能进行及时的处理,zk
2017-04-27 23:47:48 2574
原创 ZooKeeper源码解析(一):ZooKeeper概述
zk主要的架构图zk主要的包结构如上图所示,zk大概涵盖了以下的包以及功能:Admin包: 它里面只有一个继承了ZooKeeper类的ZooKeeperAdmin类,用以承担管理zk集群的任务,例如重新注册集群Cli包:接收并执行用户输入的各种命令Client包: 主要是客户端连接的一些辅助类Common包:公共工具类jmx包:提供jmx
2017-04-27 01:00:55 3351
转载 python3.5+django1.10:selenium.common.exceptions.WebDriverException->moveto did not match a known com
在运行webdriver调用ActionChains(driver).click_and_hold(on_element=element).perform()时抛出selenium.common.exceptions.WebDriverException异常,firefox版本51.0.1,在stackoverflow上找到别人遇到的同样的问题点击打开链接,其中第一个回答如下:Sadly th
2017-02-17 11:32:24 1557
原创 用golang写的一个链表
近期专门研究了一下golang语言,这个语言还比较新,语法上结合了很多优点,比如动态绑定,多返回值,支持函数对象,如果有C/C++,java,js或python语言基础的朋友应该能很快能迁移到这个新语言上来,goroutine机制帮助我们能更好的写并发程序,总之,golang确实是很有前途的语言,但要具有像java这么丰富的生态链还有很长的路要走。废话不多说,直接上码package dat
2017-02-14 14:26:25 2893
原创 开发一款开源爬虫框架系列(五):爬虫架构的一些新思路
爬虫开源项目地址:http://git.oschina.net/coliza/MongooCrawler 以前的思路是由客户端完成所有的下载网页,解析等功能,服务器端负责从内存队列中拿到数据并将获取的对象输出到存储层。现在发现一个很麻烦的问题,不同的网站需要定制不同的抓取策略,如果部署爬虫集群,那么假如我要修改解析策略或存储策略,客户端或者服务器只能重写、编译、部署,而且服务端负
2016-11-25 01:34:49 3062
原创 开发一款开源爬虫框架系列(四):设计fetcher
这一期我们来聊聊怎么设计fetcher,既然说到设计,我们首先要明确设计的目的。fetcher的主要功能是根据传入的url获取网页内容,同时我们还面临如下一些问题:1、使用什么工具发出http请求下载网页?【答】使用最新的httpclient2、怎么提高下载的性能?【答】因为性能消耗主要在网络IO,那么我们要提高下载的性能可以使用线程池多线程并发下载网页,同时为了降低编程难度提高效
2016-11-11 02:01:30 1112
原创 开发一款开源爬虫框架系列(三):聊聊并发包中的队列(Queue)
说到队列尤其是阻塞队列,不得不说jdk的并发包(java.util.concurrent)中的相关数据结构,今天我们就来对java中的队列做一个总结。1、Queue队列接口,定义了队列基本的接口方法 前两个方法是往队列塞数据,在队列空间不足的情况下add会抛出异常,而offer会返回false。poll和peek的区别是后者不会从队列中移除元素。2、BlockingQu
2016-11-04 01:32:58 1479
原创 开发一款开源爬虫框架系列(二):设计爬虫架构
既然是构建分布式爬虫架构,分布式说明爬虫能在多台机器同时运行,所以一定是多客户端的,多客户端就有可能运行在不同的操作系统不同的语言环境,所以我们让它暂时支持java和scala两种依赖jvm的语言,不用区分平台。提到客户端也一定意味着有服务端的存在,服务端和客户端使用netty进行通讯。那么问题来了,我们怎么保活呢?很显然是用心跳管理能完成这个功能。那么我们怎么保证可靠性呢?很显然是用tcp通讯协
2016-09-09 14:18:40 3000
原创 开发一款开源爬虫框架系列(一):分析nutch,scrapy的爬虫设计
nutch的架构分析 injector首次会从url.txt中取出url然后将url分配给hadoop中的不同job进行url标准化和校验,并构造对象。generator会利用hadoop中不同的job进行url过滤、打分和计算hash值,然后将信息存入ParseSegment,fetcher会利用多线程下载网页将内容存入content,将url返回给crawl_fetch,crawl
2016-09-07 01:48:24 5040
原创 数据库中间件Mycat源码解析(四):Mycat的心跳管理
MyCat的服务端在启动时会执行node.startHeartbeat()去设置每个node的heartbeat的状态为DBHeartbeat.OK_STATUS,然后针对每个node节点启动一个线程去对对应的node发送heartbeat sql(比如select user())进行心跳检测。private Runnable dataNodeHeartbeat() { return ne
2016-08-31 00:53:07 4020 2
原创 数据库中间件Mycat源码解析(三):Mycat的SQL解析和路由
mycat对sql的解析分为两部分,一个是普通sql,另一个是PreparedStatment。首先解析普通sql,sql从客户端发过来后server接收后会调用FrontendCommandHandler的handle方法,这个方法会调用FrontendConnection的query方法,接着query方法会调用ServerQueryHandler的query方法,接着调用ServerCo
2016-08-29 00:35:55 10482
转载 介绍一个成功的 Git 分支模型 Release 分支
装载自:http://www.cnblogs.com/yaks/p/5666400.html英文原文:http://nvie.com/posts/a-successful-git-branching-model/中文版:在这篇文章中,我提出一个开发模型。我已经将这个开发模型引入到我所有的项目里(无论在工作还是私人)已经一年有余,并且它被证明是非常成功的。我打算写这些
2016-08-22 11:48:22 8852
原创 数据库中间件Mycat源码解析(二):Mycat的网络通讯层
网络层主要的就是ServerSocketChannel和SocketChannel(请参照NIO2看此篇blog),讲Mycat的网络通讯层首先得说几个概念:FrontEnd/BackEnd:mycat将网络通讯分成了两部分,第一部分叫FrontEnd即负责接收业务方用户请求的部分;第二部分叫BackEnd即负责和后端数据库通讯的部分。AIO/NIO/BIO:BIO是jdk1.4以前就提供
2016-08-21 02:21:50 1474
原创 数据库中间件Mycat源码解析(一):初识Mycat
Mycat是国内一款基于阿里Cobar的面向企业级应用开发的数据中间件,社区较为活跃,它有很多非常实用的特性,比如融合了内存缓存技术,NoSQL技术和传统关系型数据库技术,它拥有心跳管理功能能完成中间件与数据库之间保活的任务,它实现了负载均衡使资源能够得到充分使用,它既能适应传统应用开发中对数据库的需求又能适应当前比较火的大数据开发对数据库的需求等等。部分公司实用它替代了昂贵的oracle数据库集
2016-08-15 00:44:14 942
转载 ElasticSearch源码解析(五):排序(评分公式)
转载自:http://blog.csdn.net/molong1208/article/details/50623948一、目的一个搜索引擎使用的时候必定需要排序这个模块,一般情况下在不选择按照某一字段排序的情况下,都是按照打分的高低进行一个默认排序的,所以如果正式使用的话,必须对默认排序的打分策略有一个详细的了解才可以,否则被问起来为什么这个在前面,那个在后面不好
2016-08-11 22:59:44 5504
原创 做一个写读后感的人
以前读书从来都是走马观花地看,总是捡重要的看,或精彩的情节看,也从来不写读后感,现在想改掉这一习惯,读一本书写一篇读后感进行内容梳理,增加点回忆的内容,扔掉懒人习惯从今天做起!简书主页:http://www.jianshu.com/users/afb03e84c645/timeline
2016-08-05 16:28:46 733
原创 ElasticSearch源码解析(四):检索(Search)
聊ElasticSearch的检索过程,首先展示一个简单的java检索例子: Client client = new TransportClient.Builder() .settings(Settings.settingsBuilder().put("discovery.type", "zen") //发现集群方式
2016-08-05 13:58:23 3265 1
原创 ElasticSearch源码解析(三):索引创建
我们先来看看索引创建的事例代码: Directory directory = FSDirectory.getDirectory("/tmp/testindex"); // Use standard analyzer Analyzer analyzer = new StandardAnalyzer(); // Create IndexWriter object IndexWriter
2016-07-27 02:21:49 2890
原创 ElasticSearch源码解析(二):ES的CharFilter、Tokenizer、TokenizerFilter
CharFilterelasticsearch的CharFilter一共有2种分别是:HTMLStripCharFilter、MappingCharFilter。 HTMLStripCharFilter这是用来去除html标签的filter,主要的逻辑在read方法中:public int read() throws IOException { //输入字符的字节是否已读完
2016-07-04 00:18:15 5581 1
转载 ElasticSearch源码解析(一):转一篇介绍中文分词的文章
主要讲ElasticSearch的以下几个方面:1、索引创建 2、分词(IK为例主要讲第三方分词库与es怎么对接) 3、query分析4、文件搜索 5、排序
2016-07-02 00:56:35 2574
原创 ActiveMQ源码解析(五):聊聊activemq的broker集群
总的来说broker的集群就两种,主从集群(master-slave)和多主集群(network of brokers),看到有网文将apache activemq的官网的文档中clustering一节中的Queue comsumer cluster当成一种集群部署方式,其实仔细理解文档意思,这种集群是cusumer的集群,并不是我们通常在实际生产环境中用到的broker集群,所以这里声明一下本文
2016-06-29 02:16:55 2340
原创 ActiveMQ源码解析(四):聊聊消息的可靠传输机制和事务控制
在消息传递的过程中,某些情况下比如网络闪断、丢包等会导致消息永久性丢失,这时消费者是接收不到消息的,这样就会造成数据不一致的问题。那么我们怎么才能保证消息一定能发送给消费者呢?怎么才能避免数据不一致呢?
2016-06-27 03:27:55 9282 1
原创 ActiveMQ源码分析(三):聊聊broker到broker的通讯
Broker到Broker的通讯涉及到activemq集群,主要由network包下的类来实现,我们主要来分析一下NetworkConnector和NetworkBridge类,读者就能大概了解broker的通讯机制了。NetworkBridge是一个借口,所以我们使用 NetworkBridge的子类DemandForwardingBridgeSupport来做讲解。DemandForwar
2016-06-20 02:02:35 3424
原创 ActiveMQ源码解析(二):聊聊客户端和broker的通讯
ActiveMQ支持以下几种通讯协议:协议 备注HTTP/HTTPS基于http协议TCP默认协议UDP 性能更好,但不可靠SSL 安全链接NIO基于tcp,使用异步非阻塞方式使性能得到提升,具有更好的扩展性VM如果客户端和代理运行在同一个vm中就直接通讯不占用网络带宽
2016-06-20 00:01:52 4571 2
原创 ActiveMQ源码解析(一):聊聊broker
一、Broker 消息队列核心,相当于一个控制中心,负责路由消息、保存订阅和连接、消息确认和控制事务1.Broker接口 定义了一些获取broker本身相关信息,添加connection、destination、session、消息生产者、控制事务的接口1.1 CompositeDestinationBroker 多目的地Broker,Pr
2016-05-30 22:49:52 12478 2
原创 关于电商仓储系统wms的一些思考
最近很忙,想写点关于wms系统的东西,先立一个题目,等把自己建的一个系统写完再来分享,wms系统已经开源分享在开源中国,地址:http://git.oschina.net/coliza/SSIMS
2016-05-17 01:31:36 4125
转载 电商峰值系统设计
1.1 系统架构设计目录摘要:双11来临之际,《程序员》以“电商峰值系统架构设计”为主题,力邀京东、当当、小米、1号店、海尔商城、唯品会、蘑菇街、麦包包等电商企业,及商派、基调网络等服务公司,分享电商峰值系统架构设计的最佳技术实践。自2009年11月11日,淘宝商城(现名天猫)拉开网购狂欢节的序幕,各大电商的促销浪潮此起彼伏。此时的电商大战不仅是价格之争,更是技术的较量。如何设
2016-05-17 01:24:08 40202 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人