Arganzheng's Blog

stay hungry, stay foolish

关于微服务架构

我 和 微服务架构 我算是完整的经历了服务端架构发展的整个历程。 09年进入阿里巴巴的时候,那时候整个阿里巴巴就是一个典型的单体应用,整个国际站业务,部署上就三个巨大的单体应用: MyAlibaba:供应商发布编辑管理商品的地方 BOPS: 运营人员审核商品(机器审核+人工审核的一条工作流)、管理类目和属性的运营管理后台。 Aisn: 海外买家浏览搜索商品的地方 数据层面也是杂糅在一起,一主一从的Oracle数据库 + EMC小型机支撑着几亿级别的数据量。 现在看起来当时的业务架构还是数据架构都是庞大而古老的。确实也是低效的,记得当时的发布真是设计部门最多并且容易出错的日常工作了。你仅仅是修改了一点点代码,也要跟所有当天一起发布的人合并验证...

Java各种锁介绍

Lock 接口 VS Synchronized 关键字 在Lock接口出现以前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增了 Lock 接口(以及相关实现类)来实现锁的功能,它提供了与 Synchronized 关键字类似的同步功能。只是在使用的时候,需要显示地获取和释放锁。虽然它缺少了通过 Synchronized 块或者方法所提供的隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性(灵活性)、可中断的获取锁、非阻塞的获取锁 以及 带超时获取锁 等多种 Synchronized 关键字所不具备的同步特性。 使用 Synchronized 关键字将会隐式的获取锁,但是它将锁的获取和释放固化了,也即是...

Redis集群学习

Redis3.0版本加入了cluster功能,解决了Redis单点无法横向扩展的问题。 分布式系统要解决的不外乎以下两个问题: sharding/partition 以提高系统的吞吐率 replication 以提高系统的高可用性 然后因为sharding了,所以就有一个 哈希或者路由 的事情要处理。引入的问题包括: 数据分布方式:取模, 范围映射,一致性哈希, etc. 客户端哈希还是服务端转发路由,如果需要客户端或者任意一个节点都能接受请求进行转发,那么就需要引入集群的概念,让集群中的节点能够互相知道数据的分布情况(相关技术参见下面讨论) 对于没有sharding key的请求(如果系统设计支持),需要有个scatter和gat...

ElasticSearch的节点类型

集群中的每一个ElasticSearch实例都可作为一个节点存在,相同集群名字的节点构成同一个ElasticSearch集群。 默认情况下,集群中的每个节点都可以处理 HTTP 或者 Transport 请求。 其中 transport 层专门用于节点和Java TransportClient之间的通讯;而HTTP层则只供REST客户端使用。 集群中所有的节点都知道集群中其他所有的节点,可以将客户端请求转发到适当的节点。 逻辑上,从职责上划分,ElasticSearch节点有以下类型: Master node: 主节点。当一个节点配置node.master: true(默认)的时候,它有资格被选作为主节点,控制整个集群。 Data node: 数据...

ElasticSearch如何支持深度分页

分布式环境下的分页 ES本身是支持分页查询的,使用方式跟MySQL非常类似: from: Indicates the number of initial results that should be skipped, defaults to 0 size: Indicates the number of results that should be returned, defaults to 10 如: GET /_search?size=5&from=10 但是跟MySQL不同,ES是分布式存储的,查询结果一般都是跨多个分片的(spans multiple shards),每个shard产生自己的排序结果,最后协调节点(coordi...

使用puppeteer和chrome-headless做暗网抓取

最近 国家企业信用信息公示系统 的验证码又升级了。之前是 点按后滑动拼图方式: 解决方案虽然麻烦,但是偏向于工程架构方面,没有什么算法的东东: 但是最近升级之后新增了一种验证码模式——点按后顺序选字方式: 这个就没办法用纯工程的方式来解决了。必须使用到机器学习的方式了。机器学习的最基本的就是要模型训练,而模型训练就需要样本和标注(有监督学习)。所以首先我们要想办法拿到大量的验证码图片,进行标注和训练。 但是这个验证码要 进入到首页在搜索框输入文字点击搜索按钮 才会出现: 所以我们要能够模拟用户请求进入到首页在搜索框输入文字然后点击搜索按钮,将弹出的验证码图片保存下来。 欣哥一开始负责这个事情,他用CasperJS写了一个脚本模拟这个事情,...

ElasticSearch如何支持嵌套属性检索

地球是圆的,对象往往也不是扁平的。所以嵌套属性就很常见了,比如name.first, address.city, etc. 我们知道ElasticSearch是Document Oriented的NoSQL,文档本身就是JSON表示,JSON本身就是一个自由嵌套的数据结构(JSON documents are hierarchical in nature: the document may contain inner objects which, in turn, may contain inner objects themselves.)。那么ElasticSearch支持嵌套属性的索引和检索吗?让我们深入了解一下。 Array dataType 事实上ES...

ElasticSearch的Query Context和Filter Context

Sorting and Relevance 像MySQL这样的数据库,查询结果如果没有order by,那么默认就是按照主键排序的。对于大部分业务场景来说,排序往往取决于某个/些字段的值,但是对于搜索引擎来说,排序却往往跟相关性有关系。那么ES中相关性是什么,又是怎么计算的呢? Scoring by Relevance ES默认对结果按照相关性降序排序(By default, results are returned in descending order of relevance.)。 相关性在ES中以_score变量表示,是一个浮点数,默认值是1。那么_score是怎么计算的呢?不同的查询语句有不同的计算规则。不过基本上相关性指的是query和文档之间的...

如何查看和设置文件句柄数

1. 系统级别限制(System-Wide Limit) Set this higher than user-limit set above. 配置文件:/etc/sysctl.conf: fs.file-max = 2097152 然后运行: sysctl -p让其生效。 这个命令会增加系统级别(所有用户)可以打开的文件句柄数。 可以通过/proc/sys/fs/file-max或者sysctl fs.file-max 验证: $ cat /proc/sys/fs/file-max 2097152 还可以通过/proc/sys/fs/file-nr文件查看整个系统目前使用的文件句柄数量: # cat /proc/sys/fs/file-nr ...

neo4j如何支持多个label索引查询

4kw+的Company数据,8kw+的Person数据,和20kw左右的关系数据。 $ head company.csv id:ID,name,:LABEL 00002cefc5e2d05b9311a791fd009160,"岳阳市岳阳楼区亿诺厨房电器总经销",Company 00002ebe645c0f777887ff17d525ba6b,"禄丰县碧城镇零点俱乐部",Company 000037a77f24a10153dcb4c2e7ae082d,"淄川将军路星显日用品经营部",Company 0000a82f6261107197cb386c5e5e01bc,"上海高易电子有限公司",Company 0000b340976a6425d4a4be58c119b4...

×