介绍 Apache HBase 的基本概念、环境部署、常用命令、实战技巧、架构设计和性能优化,并记录了一些踩过的坑,及其解决方案。
大数据生态圈里的一致性算法
大数据生态圈中,保证一致性的方式举不胜举
- Hadoop 用 ZooKeeper(Zab,即支持事务顺序的 Paxos)
- ElasticSearch 用 Hash 路由算法(而非一致性 Hash)
- Cassandra 用 Gossip 闲话算法
- Redis 用 Raft 选举算法
他们各有什么区别,为什么会如此选型?
Paxos 选举算法
Paxos 是最先解决拜占庭将军问题的算法,利用过半选举的机制,保证了集群数据副本的一致性(微服务中服务注册与发现的场景,其实已经不再适用了)
Raft 选举算法
Redis 使用 Raft 实现了自己的分布式一致性。Raft 本身和 Paxos 并没有场景上的区别。更多的是,协议上的简化、Term 概念的强化、Log 只会从 Leader 到 Follower 单向同步,使得实现起来会很方便
Zab 原子广播协议
Hadoop 偏向于离线的海量数据处理,利用 ZooKeeper 来保证数据副本的一致性,是最为合适的
Hash 路由算法
ElasticSearch 集群接收到为文档创建索引的请求时,需要选择在哪一个 shard(完整且独立的 Lucene 索引实例)上对文档进行索引。ElasticSearch 采用的是 djb2 哈希算法(俗称 times33),对要索引文档默认或指定的 key 进行哈希 hash(key)
,然后再对 ElasticSearch 集群中 shard 的数量 n 进行取模,即 $hash(key) \, mod \, n$
一致性 Hash
用于对数据存储进行负载均衡的算法。最新的进展,是在去年 Google 发表的一篇 有界负载的一致性 Hash 算法的论文。该算法保证了负载均衡一致性和稳定性的同时,在均匀性方面做出了实质性地改进。同时,Consistent Hashing with Bounded Loads 算法 也在 HaProxy 开源项目中得以应用,有效减少了其 8 倍的缓存带宽
Gossip 闲话算法
Gossip 主要被 Cassandra 用于实现其分布式一致性。因为 Cassandra 框架,更看重 去中心化 和 容错 的特性,在不违背 CAP 定理的情况下,能够接受 最终一致性
人工智能
什么是人工智能
人工智能(Artificial Intelligence, AI)亦称机器智能,是指由人工制造出来的系统所表现出来的智能。 — wikipedia.org
从 深蓝到 AlphaZero,人工智能的智力水平、普适性、学习能力 正在以爆炸式地速度快速发展;
从 棋类到 医学,人工智能开始在各类应用领域,都在大展身手;
从 CPU / GPU 到 TPU,人工智能的计算能力正向着无法穷举的极限不断逼近 …
但是,我们并不浮躁,踏踏实实地点亮 AI 知识树的每个枝叶,才是我们每位富有科学精神的人所应该做的
关于本文
我们将分为三块对 AI 进行诠释
首先,将介绍人工智能的主流思想和实用技巧,通过一些耳熟能详的有趣定理,我们可以对人工智能有些直观、初步的认识;随后,言归正传,我们将开始接触 AI 领域的几大理论支柱,由浅入深地学习 统计学、微积分、线性代数、概率论 等知识体系;最后,落地到实践,我们需要紧跟人工智能的技术发展前沿,对重大的突破性项目进行了解、学习,以及运用。如此,对人工智能领域进行横向分层,可以很方便地找到我们学习的突破点
不过,出于文章编排的考虑,可能部分编码就要放在其他博文中了,如有不便,还望见谅(Python、Prolog、R、Java)。本文持续更新中,若有不妥之处,还请不吝赐教哈 (^o^)/
主流思想
演绎法 & 溯因法 & 归纳法
实用技巧
Occam 剃刀原理
奥卡姆剃刀(Occam´s Razor),意为简约之法,是由 14 世纪逻辑学家、圣方济各会修士奥卡姆的威廉提出的一个解决问题的法则,即"切勿浪费较多资源,去做'用较少的资源,同样可以做好'的事情"
,相同思想见于郑板桥的删繁就简三秋树
架构方法论大合集
Algorithm
LeetCode 组队刷题活动
介绍
代码仓库
代码仓库的坐标:asdf2014 / algorithm
报名途径
只需要在《Algorithm》文末的评论区,或者在 issues#40 中留言,即可随时参与
参与方式
每位参与的小伙伴,都会获得代码仓库的 Collaborator 权限,可以自由地提交代码(不限制语种)。在 /Codes/${你的 Github 账号名}
目录下,每人都将拥有一个自己的代码库。留下 Github 名称后,将很快会收到邀请函,大家可以在 asdf2014 - algorithm - invitations 链接中认领(当然,也欢迎直接通过提交 Pull Request 参与进来)。随后,可以在任意目录下(不需要是空目录),使用如下命令,一键完成您的第一次代码提交:
1 | bash -c "$(curl -L https://raw.githubusercontent.com/asdf2014/algorithm/master/first_commit.sh)" |
刷题频率
考虑到可能大家的闲暇时间并不多,我们暂定刷题频率为“一周一题”
选题策略
选题机器人会在每周五晚八点,自动地随机选定一个题目,当前题目点击这里查看。
其他
操作 Git 时遇到问题的话,可以参考我的一篇博客《Git 高级玩法》
同时,为了大家更加方便地交流,也欢迎加入算法 QQ 群 或者 Gitter 聊天室
另外,因为大部分算法都会有很多实现思路,我们会尽可能地展现所有可能的解题方法。但为了文章的排版更加地紧凑,我们会将同一算法的不同实现,通过选项卡的形式展现。且默认展示的选项卡将会是最优解。这样的话,如果您想要快速阅读本文,则可以不用翻看其他的选项卡。实际效果如下:
迭代解
1 | def solution(n): |
递归解
1 | def solution(n): |
动态规划解
1 | def solution(n): |