转眼已经是2018年了,博客停更了一年多。无论如何,是时候回归了。最近关注及研究的重点是Web架构与性能,会结合自己的学习进行记录及分享。涉及的关键词:网络协议、异步编程、微服务、分布式等。

一、分布式与集群

举例:小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群。

补充:
由单台WEB服务器或MySQL服务器,平行扩展为N台WEB服务器或MySQL服务器,那么这N台服务器就构成一个集群,这其中的每一台服务器的职责都是相同的。
由单台WEB服务器上的一个项目,按模块或业务拆分为N个子项目(可能分布在不同的WEB服务器上),那么这些所有项目的关系就是分布式。同时,每个子项目又可以通过平行扩展的方式形成集群。

二、分布式的必要性

稳定业务和多变业务分离:比如转账业务不会变,但转账完成后续动作多变,可能发短信,可能发邮件,还有别的奖励,也可能有个短期活动需要处理,如果每次变化都直接加到转账业务里,那就要频繁改动主业务,甚至需要重启,更甚至直接给主业物代码引入了新的Bug;

新业务老业务分离:一块成熟的业务,拓展出来一块新业务,新的业务只需要从老业务里面获取小部分数据或功能,剩下大部分都是很独立的逻辑,老业务模块根本不需要了解新业务模块,如果都堆积到老业务模块里面,笨重又混乱;

团队隔离:核心业务系统由核心团队管理和维护,非核心业务系统由另外一个独立团队维护,互相暴露少量接口互通,互有边界控制;

不同硬件需求:有的业务需要大内存,有的需要大硬盘,有的需要更强cpu,有的需要更多集群,根据不同需求分布到更适合的物理设备上;

来源:分布式与集群的区别 - 知乎