单机的局限性:
1.受限于硬件资源,单机所能承受的用户并发量太少;
2.一个系统有多个模块,任意模块的修改都会导致整个项目代码重新编译、部署;
3.系统中,有些模块是CPU密集型,有些模块是I/O密集型,造成各个模块对于硬件资源的需求是不一样的。
集群:
负载均衡
集群的优点?
性能提升了,用户的并发量提升了,因为水平扩充了硬件资源;
部署简单。
集群的缺点?
1、项目代码还是需要整体重新编译,而且需要进行多次部署。
2、系统中有些模块是属于CPU密集型(计算量大的),有些模块是属于I/O密集型的(接触输入输出,网络IO),造成各模块对硬件资源的需求是不一样。
并不是说机器多,并发量就上来,性能就高。像一些使用不多的模块,不需要高并发,所以也就不需要分别部署在三台机器上,不常用的模块只需要部署在一台机器上就好
分布式:
集群:每一台服务器独立运行一个工程的所有模块。
分布式:一个工程拆分了很多模块,每一个模块独立部署运行在一个服务器主机上,所有服务器协同工作共同提供服务,每一台服务器称作分布式的一个节点,根据节点的并发要求,对一个节点可以再做节点模块集群部署。
分布式优点:
1.对于并发量大的模块我们单独处理,单独加集群;
2.假如其中一个模块出问题了,我们只需要修改一个模块就可以了;
3.把CPU密集型的模块部署在CPU资源好的机器上。把内存小的模块部署在硬盘资源少的机器上。把IIO密集型的模块部署在CPU不是很好的机器上。
4、有的模块要求并发能力高,可以进行多机器集群部署。有的模块并发能力小,部署在一台机器就可以。
5、配置着高可用,容灾,主备服务器,不用担心就—套系统挂掉了怎么办。
分布式问题:
1、大系统的软件模块该怎么划分?
- 各模块可能实现大量重复的代码!
- 模块和模块之间的界线不清晰(有的模块里面的函数调动另一个模块的函数代码)。
- 处理不好,造成大量重复代码。而且你改你的,我改我的,重复的公共代码就出问题了,变成不可控制了。
2. 各个模块之间如何通信?
两个模块之间rpc通信协议,交互。