kele1997
2021-01-23 11:30:31 +08:00
可以看看陈浩(左耳朵耗子) 的博客说过类似的内容
我参考后总结了一下
1. 首先要搞清楚为什么会有这个技术,要不然平白无故多个技术,有毛用?
2. 其次要明白这个技术,解决了那些问题?怎样解决的?
3. 然后了解下这个技术在解决了一部分问题的同时,又带来了哪些问题呢?
4. 最后这项技术底层是用了什么样的设计思想,或者 linux 相关的系统功能呢?
5. 看文档,了解设计和架构之后,才去看源码。
PS: 我说的可能有问题,希望各位补充改正
就 docker 举例
1. 首先 docker 不是虚拟化,而是容器化,主要解决的问题应该是资源隔离
2. docker 可以减少运维问题,将运行环境封装到 docker 容器内部,同样地我们也可以对某个容器做精细的资源控制
3. docker 的本机网络是通过网桥,性能不错。但跨节点的化基本就要通过转发来实现。转发肯定会带来损耗。而且 docker 容器内部最好不要写,要挂卷写。
4. docker 底层隔离使用了 linux namespace , cgroupfs, 网桥,unionfs 等技术。k8s 跨节点网络使用的 netfilter, vxlan 等技术
5. 看文档,看看别人的使用实践
我觉得学习某个技术的底层实现最好落到 os 层面比较好,然后再看这种技术本身的时候,我们可以从底层来思考。比如 docker 本机上的网络通信是通过网桥的,因此本机容器的网络包会发送到网络栈的内核二层交换机上,然后在发送到用户空间。而跨机器的访问,是通过 netfilter 等规则实现的,这个损耗就要大一些。
很多技术都是基于 os 的,很多技术都是组合使用了多种 os 的功能