简单了解Docker、Dubbo
以Docker为例的容器
Docker是什么
主要体现在1.隔离2.开销小。- Docker的组件有哪些。Docker Client用来管理本地或远程的服务器,Docker Daemon是安装完Docker之后就有的一个本地守护线程,接收Docker Client发来的指令,并对服务器做具体的操作。Docker Image就是Docker的镜像,Docker Container就是装在images的容器。Docker Registry是Docker的仓库,类似于github的仓库,可以上传分享自己的image。
Docker的原理
- 传统虚拟机的解决方案。Hypervisor(虚拟机监视器),VM在物理机器的操作系统上建立一个中间软件层Hypervisor,Hypervisor利用物理机器的资源,虚拟出多个新虚拟的硬件环境,这些硬件环境可以共享宿主机的资源。
- Docker怎么做。Docker利用linux的技术,不去虚拟化任何硬件,而是让硬件资源在不同的docker container之间做隔离。隔离使得每个docker container之间拥有了不同的环境(磁盘空间、网络、系统的工具包),并且共享需要的硬件资源(CPU、内存、系统内核)。
- Docker的Linux核心如下
- AUFS 用来建立不同的操作系统和隔离运行的硬盘空间
- Namespace 用来隔离container的执行空间
- Cgroup 分配不同的硬件资源
- SELinux 用来保护linux的网络安全
- Netlink 让不同的container之间的进程保持通信
- Netfilter 建立contianer为基础的网络防火墙分包过滤
- AppArmor 保护container的网络及执行安全
- Linux Bridge 让不同的container或不同主机上的container能够连通
- AUFS:Another Union File System,联合文件系统。AUFS可以让多个文件union成一个新的目录,并且对这个新的目录进行读写操作。uniton a b,那么a具有可读写权限,b具有只读权限,所有对b中文件的写操作,都会在a中新建一个文件夹然后做对应的改变。
在Docker中,image是分层的,而且要实现一个image能在不同container中运行的要求,因此用AUFS技术让image和不同的container目录进行union,此时只有最上层的container是rw的,image是只读的,因此无论在container1中如何修改,都不会改变container2中的数据,因为底层的image都是只读的。
- Namespace. 对资源进行隔离,包括进程ID、主机名、用户ID、网络访问、进程间通讯和文件系统。
- Cgroup. 对资源进行限制。必入限制某个资源组只能用CPU的20%之类的。
以Dubbo为例的RPC调用框架
如何理解REST、RPC
- REST叫表现层状态转移,这个词我原来没办法理解,现在理解了,顿觉茅塞顿开啊。表现层表述资源,状态转移表示从一个节点到另一个节点,所以REST就是以HTTP的API和某些约定,使得资源从A服务到B服务,而RPC是远程进程调用,是在本机上调用远程机器上的进程。这两者本质上都是A远程调用B。
- REST是来自HTTP的,因此是无状态的,请求之间没有持久的会话信息,一致性要通过HTTP的特性保证。RPC一般传递的是JSON数据,可以理解成跨语言跨平台的服务调用。相对于REST,RPC通常使用url作为方法名,用HTTP的query string或body表示方法想调用的参数,比如下面这个:
Dubbo是什么
- Dubbo的官方说要解决什么?
- 简单的电商架构如下图:
当服务越来越多之后,服务之间的依赖关系更加复杂,管理URL配置等变得非常困难(服务发现),还要统计服务的调用量用于后续分析(服务治理)。此时就要用到dubbo,dubbo的RPC是手段,目的就是服务发现和服务治理。 - dubbo的架构包括provider服务提供方,consumer服务消费者,registry注册中心,monitor监控中心。