所谓分布式系统,是指硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。我们从这个定义中可以看出分布式系统包含两个区别于单块系统的本质性特征,一个是网络,分布式系统的所有组件都位于网络之中,对于互联网应用而言,则位于更为复杂的互联网环境中;另一个是通信和协调,与单块系统不同,位于分布式系统中的各个组件只有通过约定、高效且可靠的通信机制进行相关协作才能完成某一项业务功能。这是我们在设计和实现分布式系统时首先需要考虑的两个方面。下图展示的就是从软件开发视图出发得到的一个典型的分布式系统,包含了分布式服务、消息中间件和分布式缓存等常见的用于构建分布式系统的技术实现方式。显然,这些工具位于一个封闭或开放的网络环境中,相互之间通过服务的注册和发现、消息传递、数据的缓存共享等机制完成协作。
在分布式系统中,我们为了打破单块系统中集中式的系统架构,引入系统拆分的思想和实践。拆分的需求来自组织结构变化、交付速度、业务需求以及技术需求所引起的变化,一般认为系统拆分的基本思路有两种,即纵向(Vertical)拆分和横向(Horizontal)拆分。
所谓纵向拆分,就是将一个大应用拆分为多个小应用,如果新业务较为独立,那么就直接将其设计部署为一个独立的应用系统即可。如下图中,我们可以将移动医疗系统中的预约挂号业务