微服务优点:

微服务和单体应用恰恰相反,把各个模块拆分成不同的项目,每个模块都只关注一个特定的业务功能,发布时每一个项目都是一个独立的包,运行在独立的进程上。微服务应该足够小,小到即使全部重写也不需要过多的时间。微服务化是SOA(Service-Oriented Architecture,面向服务的架构)的一种方法。


它解决了单体应用造成的一些问题:

易于开发,可维护性高: 一个服务只会关注一个特定的业务模块,代码比较少,可维护性就高。
发布风险低: 发布单个服务不需要重新发布整个应用。

微服务缺点:

当然,微服务不是完美的,在解决一旧问题的同时带来了新的问题:
1.运维要求高
2.分布式固有的复杂性
3.修改接口成本增加
4.重复劳动

《什么样的服务是好服务》 重点理解

松耦合

高内聚

Docker

核心:

镜像( Image ) 软件安装包,是一套软件集合,需要的其他的软件都在里面,比如Tomcat镜像,就包含Jdk+tomcat

容器( Container )基于镜像安装之后的实例

数据卷(Data Volumes)容器存储数据的地方,类似磁盘(虚拟的)

网络(Network)可以实现容器的网络分配,每个容器都有自己的网络(ip+端口)

仓库( Repository )存储镜像的地方,国内建议使用第三方镜像仓库

1、Docker是什么

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

1.1、Docker优点

1.简化配置
这是Docker初始目的,虚拟机VM最大的好处是基于你的应用配置能够无缝运行在任何平台上。Docker提供同样类似VM的能力,但是没有任何副作用,它能让你将环境和配置放入代码然后部署,同样的Docker配置能够在各种环境中使用,这实际是将应用环境和底层环境实现了解耦。

2.代码管道化管理
能够对代码以流式pipeline管道化进行管理,从开发者的机器到生产环境机器这个流程中都能有效管理。因为在这个流程中会有各种不同的环境,每个都可能有微小的区别,Docker提供了跨越这些异构环境以一致性的微环境,从开发到部署实现流畅发布。

3.开发人员的生产化
在一个开发环境,我们希望我们的开发环境能更加接近于生产环境,我们会让每个服务运行在自己的VM中,这样能模拟生产环境,比如有时我们并不总是需要跨越网络连接,这样我们可以将多个Docker装载一系列服务运行在单机上最大程度模拟生产分布式部署的环境。

4.应用隔离
有很多理由你需要在一台机器上运行多个应用,这就需要将原来铁板一块monolithic的应用切分为很多微服务。实现应用之间的解耦,将多个应用服务部署在多个Docker中能轻松达到这个目的。

5.服务合并
使用Docker也能合并多个服务以降低费用,不多的操作系统内存占用,跨实例共享多个空闲的内存,这些技术Docker能以更加紧密资源提供更有效的服务合并。

6.多租户
Docker能够作为云计算的多租户容器,使用Docker能容易为每个租户创建运行应该多个实例,这得益其灵活的快速环境以及有效diff命令。

7.快速部署
Docker通过创建进程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁资源,不用担心额外消耗。典型的数据中心利用率是30%,通过更积极的资源分配,以低成本方式对一个新的实例实现一个更聚合的资源分配,我们很容易超过这个利用率,大大提高数据中心的利用效率。

8.环境统一 docker将容器打包成镜像,创建符合docker hub规范的镜像,上传进个人的私有docker hub,转换环境时直接pull即可,最大程 度的保证了开发环境,正式环境统一

1.2、Docker缺点

Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:
1、Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
2、LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
3、隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
4、网络管理相对简单,主要是基于namespace隔离
5、cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)
6、Docker对disk的管理比较有限
7、container随着用户进程的停止而销毁,container中的log等用户数据不便收集