携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情
前言 互联网时代,分布式是一个绕不过去的话题。本文将简单谈谈个人对分布式的理解。
为什么需要分布式 与分布式系统相对应的是单体系统。何为单体系统?即所有组件 / 模块都位于同一台机器之上系统。试想一下,如果有一台理想的机器,算力无限,内存无限,带宽无限,存储空间无限且永不宕机,那我们还会引入分布式吗?显然不会,这台机器已经能满足我们所有的需求。理想很丰满,现实很骨感:不可能存在这样的机器,单机资源无法无限制的扩充。业务不断发展,应用体量不断扩大,单机性能无法支撑超大流量时,无奈,分布式是我们唯一的选择。如果一台机器资源有限,多增加几台机器不就行了吗?单台机器有宕机风险,多找几台机器做备份不就行了吗?
高可用 / 灾备 高可用(High Availability)是应用系统的永恒追求。这里说的高可用不仅仅要求服务“活着”,而是要求对于每个请求,服务都能在给定时间内返回正确的结果。分布式系统通常以集群(Cluster)的形式出现。集群可以分为几类:
易扩容 单台机器的资源–或者说能被操作系统识别的资源,是有限的,如 Windows 10 能支持的硬盘最大容量是 16TB。随着科技的发展,未来或许可以突破某些限制,不过纵向扩容终归有一个极限。相比之下,横向扩容就显得容易得多。特别是当服务容器化等技术的成熟,服务的扩展变得异常容易。分布式系统本质上是对单机系统的资源扩充,如数据库分库分表是对硬盘的扩充,大数据领域的 Hadoop 是对硬盘(HDFS / Hive)和 CPU 的扩充,而 CDN 可以看成是对带宽 / 网卡的扩充。一般来说,当集群性能达到瓶颈时,只需要适当添加机器即可。
微服务化 随着应用体量的增大,如何将其“分布式化”,理论上来说其实有两个方案。举个耳熟能详的商城系统的例子,给你10台机器来部署服务,我们可以选择在每台机器上分别部署一份几百兆的大而全的商城服务;也可以选择将商城服务切分,选择2台机器部署用户服务,2台机器部署订单服务,2台机器部署支付服务…为了“可持续发展”,相信没人会选择第一套方案吧。第二套方案,即微服务化(Micro Service)拆分,也就成了“分布式化”的必经之路。一般来说各个微服务之间应该是相互独立的,彼此之间通过网络通信,这样有很多好处:
总结 广义上来说,任何由不同机器来协作提供共同服务的系统,都可以称作是分布式系统。就像多细胞生物是生命发展的必经途径一样,分布式是应用发展的必然选择,不过它也带来了更高的复杂度,对人们的架构设计和编程能力有了更高的要求。