Java日知录

一个坚持原创,有态度的博客!

0%

在上一篇文章中,我以网桥类型的 Flannel 插件为例,为你讲解了 Kubernetes 里容器网络和 CNI 插件的主要工作原理。不过,除了这种模式之外,还有一种纯三层(Pure Layer 3)网络方案非常值得你注意。其中的典型例子,莫过于 Flannel 的 host-gw 模式和 Calico 项目了。

我们先来看一下 Flannel 的 host-gw 模式。

它的工作原理非常简单,我用一张图就可以和你说清楚。为了方便叙述,接下来我会称这张图为“host-gw 示意图”。

阅读全文 »

第一次听到“消息队列”这个词时,不知你是不是和我反应一样,感觉很高阶很厉害的样子,其实当我们了解了消息队列之后,发现它与普通的技术类似,当我们熟悉之后,也能很快地上手并使用。

我们本课时的面试题是,消息队列的使用场景有哪些?如何手动实现一个消息队列和延迟消息队列?

阅读全文 »

幂等性问题是面试中常见的面试问题,也是分布式系统最常遇到的问题之一。在说幂等性之前,我们先来看一种情况,假如老王在某电商平台进行购物,付款的时候不小心手抖了一下,连续点击了两次支付,但此时服务器没做任何验证,于是老王账户里面的钱被扣了两次,这显然对当事人造成了一定的经济损失,并且还会让用户丧失对平台的信任。而幂等性问题说的就是如何防止接口的重复无效请求。

看完本文你会了解到:什么是幂等性?如何保证接口的幂等性?

阅读全文 »

在关系型数据库和 NoSQL 数据库之外,还有一类非常重要的存储中间件,那就是文件索引。当你在电商网站搜索商品,或者在搜索引擎搜索资料时,都离不开基于文件索引的各种检索框架的支持。

本章我们就一起来看下以 ElasticSearch 为代表的文件索引相关的知识。

在讨论 ElasticSearch 之前,不得不提 Apache Lucene,因为 ElasticSearch 的广泛应用离不开 Lucene 的支持。

Lucene 是一个开源的全文检索引擎类库,支持各种分词以及搜索相关的实现,可以极大地简化搜索开发的成本,但 Lucene 只是一个工具包,在实际项目中进行二次开发,你需要非常熟悉 Lucene 的实现机制以及 API 应用,这样才能应用 Lucene 的各种特性。

阅读全文 »

在介绍 Dockerfile 最佳实践前,这里再强调一下,生产实践中一定优先使用 Dockerfile 的方式构建镜像。 因为使用 Dockerfile 构建镜像可以带来很多好处:

  • 易于版本化管理,Dockerfile 本身是一个文本文件,方便存放在代码仓库做版本管理,可以很方便地找到各个版本之间的变更历史;
  • 过程可追溯,Dockerfile 的每一行指令代表一个镜像层,根据 Dockerfile 的内容即可很明确地查看镜像的完整构建过程;
  • 屏蔽构建环境异构,使用 Dockerfile 构建镜像无须考虑构建环境,基于相同 Dockerfile 无论在哪里运行,构建结果都一致。

虽然有这么多好处,但是如果你 Dockerfile 使用不当也会引发很多问题。比如镜像构建时间过长,甚至镜像构建失败;镜像层数过多,导致镜像文件过大。所以,这一课时我就教你如何在生产环境中编写最优的 Dockerfile。

阅读全文 »

之前我们讲架构描述的时候提到过,一个有效的架构描述需要做到以人为本,不同的利益相关方展示不同的视点及视图。

那究竟需要从哪些视点入手,应该展示哪些视图? 这是个问题。

于是,1995年,Philippe Kruchten 在《IEEE Software》上发表了题为 The 4+1 View Model of Architecture 的论文,引起了业界的极大关注,在这个论文中,首次提出了使用 4+1视图 来解决这个问题。

阅读全文 »

由于近期在公司内部做了一次 Elasticsearch 的分享,所以本篇主要是做一个总结,希望通过这篇文章能让读者大致了解 Elasticsearch 是做什么的以及它的使用和基本原理。

生活中的数据

搜索引擎是对数据的检索,所以我们先从生活中的数据说起。我们生活中的数据总体分为两种:

  • 结构化数据
  • 非结构化数据
阅读全文 »

先说一件值得思考的事情:高考的时候大家都是一样的教科书,同一个教室,同样的老师辅导,时间精力基本差不多,可是最后别人考的是清华北大或者一本,而你的实力只能考个三本,为什么?当然这里主要是智商的影响,那么其他因素呢?智商解决的问题能不能后天用其他方式来补位一下?

大家平时都看过很多方法论的文章,看的时候很爽觉得非常有用,但是一两周后基本还是老样子了。其中有很大一部分原因那些方法对脑力有要求、或者方法论比较空缺少落地的步骤。下文中描述的方式方法是不需要智商也能学会的,非常具体的。

阅读全文 »

上一篇文章中详细讲解了在单机环境下,Linux 容器网络的实现原理(网桥模式)。并且提到了,在 Docker 的默认配置下,不同宿主机上的容器通过 IP 地址进行互相访问是根本做不到的。

而正是为了解决这个容器“跨主通信”的问题,社区里才出现了那么多的容器网络方案。而且,相信你一直以来都有这样的疑问:这些网络方案的工作原理到底是什么?

要理解容器“跨主通信”的原理,就一定要先从 Flannel 这个项目说起。

阅读全文 »