Unix哲学,Microservices和DDD (2)

Microservice是微型-服务的合成词,一个近年来很新的buzzword。Buzzword意为每个人都喜欢讲的流行术语(大数据是另一个有趣的buzzword)。

像其他工程名词一样,微服务并没有严格的定义。写这篇笔记的时候搜到一个定义如下:

微服务架构

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

单纯看这样的描述并不会有什么感觉,因此还是先介绍下微服务相关的一些技术背景。从上面的定义对进程、协作的强调可以看出,微服务是强调并行化、可扩展的模式,因此首先从可扩展性角度分析微服务的价值。

可扩展性(scalability)也是被广泛讨论的话题。为了优化软件的运行速度,可以纵向扩展(升级运行软件的硬件),也可以横向扩展(增加更多的硬件)。在横向扩展的基础上,又有三种可用的策略:


The Scale Cube

  • X. 在网络中部署同一软件的多个拷贝,并使用负载均衡手段在软件的各个副本之间分配任务

  • Y. 将软件按照功能模块拆分,并将不同模块部署到不同的机器上

  • Z. 数据分区,把每一区的数据放在不同的机器上存储和处理

而应用总的可扩展性(图中表示为长方体的体积)与应用在这三个方面的可扩展性相关。传统网站应用(CRUD/MVC/RDBMS/3-tier/..)较为容易实现第一种扩展方式。如果要在其他坐标上扩展,则需要首先解答更多的问题:

  1. 如何保证拆分软件模块的正确性(Y)?

  2. 如何保证数据库的拆分不会降低性能(Z)?

  3. 如何对待分布式系统中的一致性等问题?

你可能感兴趣的:(ddd,soa,microservice)