容器网络 2018年05月15日 linux

    原本网桥用于连接不同的LAN,组成更大的LAN,网桥负责转发和学习二层广播包。

    容器网桥用到两个技术,虚拟网络接口和NAT(网络地址转换)。虚拟网络接口对用于将容器中的VETH和网桥中的VETH绑定并实现数据互通。 NAT技术又包括DNAT和SNAT,DNAT是替换目标地址,SNAT是替换源地址。容器和外部通信时要用NAT技术绑定容器和宿主端口,由宿主IP:PORT+NAT和外部通信。外部服务响应时容器时不需要走DNAT,而是通过iptables转发。

    容器简介 2018年05月12日 linux

    Docker项目最初由dotCloud公司发起,2013年开源,该项目的成功导致在2013年底dotCloud公司更名为Docker。 Docker使用Go语言开发,基于Linux的namespace+cgroup实现进程隔离控制,并通过容器镜像进行分发。 OCI(开放容器接口)协议包括运行时和镜像两部分内容,目前容器技术在实现上已不止docker一种,但基本都是遵守OCI规范的。

    运行时在实现上最初基于LXC,之后为libcontainer,再演变为runC和containerd。其中runC就是OCI协议运行时部分的参考实现,containerd只是守护进程,向上提供统一gRPC接口。 containerd和runC已加入到CNCF(云原生)项目。

    容器镜像可以看作是一层一层的数据,镜像本身都是只读的,在容器运行时,最上层(运行时层)是可写的,下面的(镜像层)仍然都是只读层。命令docker create执行完成就会生成一个可写层,供容器运行时使用。

    Linux网络指南 2018年05月11日 linux

    SSH是1995年由芬兰学者Tatu Ylonen设计,用于计算机之间加密登录。

    SSH功能:

    • 加密 SSH Client 端至 SSH Server 端之间的通讯数据。
    • 突破防火墙的限制完成一些之前无法建立的 TCP 连接。

    公钥登录的原理:

    1. 远程主机发送随机字符串
    2. 本地主机用私钥加密发给远程
    3. 远程用公钥解密成功则允许登录

    一致性算法 2018年04月12日 algorithm

    分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。

    分布式系统分为分布式计算(computation)与分布式存储(storage)。在能力扩展上,都是基于分片的思想实现,如计算用mapreduce,存储则每个节点存储一部分数据。在容错能力上,都是基于冗余的思想实现,以允许部分节点故障。但是很明显,引入冗余就需要解决一致性问题,强一致会破坏可用性,所以很多场景使用最终一致性。

    拜占庭将军问题,不仅允许节点故障,还允许节点异常行为,是最复杂的分布式一致性问题。拜占庭将军问题由Paxos算法解决,后来的分布式一致性算法,都是Paxos的变种。

    Docker命令详解 2016年10月10日 cloud

    docker help可以查看到docker支持的所有命令,基础功能包括三个方面:容器生命周期管理、容器管理、镜像管理。

    容器本身可以和一个进程进行类比,管理方式上也相似,只不过docker提供了一组简明的接口来专门管理。

    镜像可以类比为可执行文件,相比于普通应用程序,它涵盖了几乎所有的配置,在不同平台上启动不需要配置环境。镜像管理方式上也和普通程序有所不同,由于它可以保留提交历史记录,所以用起来会更加方便。

    Mesos Introduction 2016年09月01日 cloud

    Mesos用于管理分布式集群,简单来讲就是隐藏底层硬件设施细节,让开发人员能够将一个集群当成一台高性能计算机。 Mesos将所有资源汇集到一个资源池来避免静态划分以提高资源利用率。

    Mesos架构分为如下几个部分:master、slave、框架、通信、附属服务。

    MySQL Introduction 2016年08月22日 tools

    MySQL基本数据类型如下所示:

    • 整数: tinyint、smallint、mediumint、int、bigint
    • 浮点数: float、double、real、decimal
    • 日期和时间: date、time、datetime、timestamp、year
    • 字符串: char、varchar
    • 文本: tinytext、text、mediumtext、longtext
    • 二进制: tinyblob、blob、mediumblob、longblob

    Python Matplotlib 2015年10月10日 language

    matplotlib是一个Python用来绘制二维图片的模块,最初模仿Matlab,但是现在是以面向对象的方式提供。该库用纯Python代码编写,为了提高效率重度依赖numpy模块。

    该模块的设计哲学是可以用最少的命令来绘图,你可以通过一个命令来绘图,而不需要创建对象、设置属性、调用函数等等做一系列动作才能工作。

    matplotlib API包括三层,最底层是画布,用来实际绘制图像, matplotlib.backend_bases.FigureCanvas。中间层是渲染层,用来设定如何绘制,matplotlib.backend_bases.Renderer。最上层是绘图层,是一个知道如何绘图的对象,一般用户只需要和该层打交道,matplotlib.artist.Artist。而绘图层包括两类对象,元素和容器,元素就是我们想要画到画布去的东西,如Line2D、矩形、文字等,容器则是装载元素的东西,如Axis、Axes和Figure。标准的做法是先创建Figure,用Figure创建一个或多个Axes/Subplot,然后用Axes实例来添加元素。正是因为所有元素是基于Axes添加,所以Axes可以认为是 matplotlib API中最重要的类。