Microservice是微型-服务的合成词,一个近年来很新的buzzword。Buzzword意为每一个人都喜欢讲的流行术语(大数据是另外一个有趣的buzzword)。html
像其余工程名词同样,微服务并无严格的定义。写这篇笔记的时候搜到一个定义以下:数据库
微服务架构网络
微服务架构是一种架构模式,它提倡将单一应用程序划分红一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每一个服务运行在其独立的进程中,服务与服务间采用轻量级的通讯机制互相沟通(一般是基于HTTP协议的RESTful API)。每一个服务都围绕着具体业务进行构建,而且可以被独立的部署到生产环境、类生产环境等。另外,应当尽可能避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。架构
单纯看这样的描述并不会有什么感受,所以仍是先介绍下微服务相关的一些技术背景。从上面的定义对进程、协做的强调能够看出,微服务是强调并行化、可扩展的模式,所以首先从可扩展性角度分析微服务的价值。负载均衡
可扩展性(scalability)也是被普遍讨论的话题。为了优化软件的运行速度,能够纵向扩展(升级运行软件的硬件),也能够横向扩展(增长更多的硬件)。在横向扩展的基础上,又有三种可用的策略:分布式
The Scale Cube微服务
X. 在网络中部署同一软件的多个拷贝,并使用负载均衡手段在软件的各个副本之间分配任务工具
Y. 将软件按照功能模块拆分,并将不一样模块部署到不一样的机器上oop
Z. 数据分区,把每一区的数据放在不一样的机器上存储和处理性能
而应用总的可扩展性(图中表示为长方体的体积)与应用在这三个方面的可扩展性相关。传统网站应用(CRUD/MVC/RDBMS/3-tier/..)较为容易实现第一种扩展方式。若是要在其余坐标上扩展,则须要首先解答更多的问题:
如何保证拆分软件模块的正确性(Y)?
如何保证数据库的拆分不会下降性能(Z)?
如何对待分布式系统中的一致性等问题?