对于开发工程师们来说,相信对于这种招聘要求的描述并不陌生:“熟悉分布式系统的设计和应用;熟悉分布式、缓存、消息、搜索等机制;能对分布式常用技术进行合理应用,解决问题”。
现在基本上大多数大、中型企业都会要求工程师们,除了要能在分布式环境中进行开发,还要了解其中的原理、机制,对于架构师来说还需要能够独立设计分布式系统。
分布式(计算机)系统的概念起源很早,目前已经基本涵盖了大多数系统架构设计。无论是SOA架构,或者微服务、Serverless架构,都是基于分布式环境的。掌握分布式系统的知识体系是理解很多架构的基础。比如日益盛行的微服务架构,也是基于分布式计算环境。设计分布式系统中需要解决的问题,对于微服务架构也是一样。如果基于容器技术,比如Docker容器来部署微服务实例,那么还需要了解跨容器平台的服务治理。
本文主要谈谈,分布式架构体系的几个核心内容。开发工程师们可以根据这些内容,逐渐积累和构建自己的知识体系,并往技术架构方向迈进。
分布式知识的核心模块
分布式系统最开始是起源于分布式计算机的概念,随着信息技术的发展,需要处理的数据以及计算已经超过了单台计算机能够扩展的系统资源。将数据、程序分散到多台计算机,通过一定的通信机制进行数据传输、共享,便产生了分布式的计算机系统。分布式计算发展至今,衍生了SOA、微服务等架构模型。
在资源的利用方面,最早期的分布式计算是无共享系统资源的,机器与机器之间通过网络通信进行分布式数据共享。后期随着虚拟机技术的发展,一台机器可以运行多台虚拟机,它们可以共享机器的硬件资源,节约维护成本。而今,更加流行的容器技术可以只基于一个操作系统内核,而不需要整个操作系统的资源,一台机器可以部署更多的容器实例(比如Docker,一台机器可以部署上千个Docker容器实例),并且实例之间像独立的操作系统一样独立运行、计算。
可以看出,随着数据和计算规模的增长,分布式系统是朝着越来越轻量级的资源利用,以及越来越细粒度和松耦合的服务化方向发展的。
分布式系统发展至今,从技术架构的角度来说,核心模块主要是: 存储、服务通信和服务治理 以及 分布式事务。这三个模块的每一部分都涉及到很多知识点以及实践中需要解决的分布式问题。设计一个分布式系统,在技术架构上只要能处理好这三个模块,其余部分便是具体的 架构模型选择(如: SOA、微服务、Serverless等)、架构思想选择(如: 分层的思想、事件驱动的思想、DDD思想等)以及应用层面的中间件和框架的选择(如:会有哪几种开发语言,基于哪种服务间通信协议、用什么框架集成)。如下图简单列举:
核心知识模块
-
分布式存储
在分布式系统中