标签:连接 src 组成 sum 逻辑 发送 开发 spring配置 提升
区别:
【注】分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。
举个例子说明:
一个小饭店里,原来只有一个厨师,买菜洗菜切菜炒菜全都是这厨师一人干,这叫 单机结构 。后来饭店客人多了,一个厨师确实忙活不过来,于是饭店又请来了个厨师,现在饭店有了两个厨师,这两个厨师都能从头到尾做一样的菜,这两个厨师就是 集群 。这样两个厨师集群确实能做更多的活,客人点10个菜可以分配每个人抄5个,单个厨师压力减少了。但是这样还不行,为了让厨师专心做菜,把菜做得更好,于是饭店又请来了采购和配菜师,采购负责买菜,配菜师负责把菜挑拣洗好切好给厨师做好准备,那么采购、配菜师、厨师之间就行程了 分布式系统 。后来一个采购和一个配菜师也忙不过来了,于是又再请多了个采购和配菜师,那么两个采购又形成了集群,两个配菜师也形成了集群,同样两个厨师也还是集群,这样多个集群一起就行程了 分布式集群系统 。
分布式和集群的关系:
分布式主要的功能是将我们的系统模块化,将系统进行解耦,方便我们的维护和开发。但是其并不能解决并发问题,也无法保证我们的系统在服务器宕机后的正常运转。
集群恰好弥补了分布式的缺陷,集群,就是多个服务器处理相同的业务,一方面可以解决或者说改善我们系统的并发问题,另一方面可以解决我们服务器如果出现一定数量的宕机后,系统仍然可以正常运转。
为什么用分布式?
传统的项目中我们将各个模块放在一个系统中,系统过于庞大,开发维护困难,各个功能模块之间的耦合度高,无法针对单个模块进行优化。而使用分布式架构将系统模块化,便于我们的维护和开发。
为什么用集群?
项目如果部署在一台Tomcat上,所有的请求都由这一台服务器处理,会存在很大风险:
集群是是指将多台服务器集中在一起,每台服务器都实现相同的业务,做相同的事情。但是每台服务器并不是缺一不可,存在的作用主要是缓解并发压力和单点故障转移问题。
SOA:面向服务的架构。也就是把工程都拆分成服务层工程、表现层工程。服务层中包含业务逻辑,只需要对外提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。工程都可以独立部署。
项目基于SOA的架构,表现层和服务层是不同的工程。所以要实现商品列表查询需要两个系统之间进行通信。如何实现远程通信?
使用dubbo。使用rpc协议进行远程调用,直接使用socket通信,传输效率高,并且可以统计出系统之间的调用关系、调用次数,管理服务。
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案。
(注意不要与负载均衡搞混:负载均衡是对外提供一个公共地址,请求过来时通过轮询、随机等,路由到不同的服务器。)
Dubbo有5种节点角色:
流程:
0. 服务容器用来启动、加载、运行服务提供者;
1. 服务提供者在启动时,向注册中心注册自己提供的服务;
2. 服务消费者在启动时,想注册中心订阅自己所需的服务;
3. 注册中心返回服务提供者地址列表给消费者。如果有变更,注册中心将基于长连接推送变更数据给消费者;
4. 服务消费者从提供者地址列表中,(基于软负载均衡)选一台服务提供者进行调用,如果调用失败,再选另一台调用;
5. 服务提供者和消费者,在内存中累计调用次数与调用时间,定时每分钟发送统计数据到监控中心。
注册中心存储着Provider注册的远程服务,并将其所管理的服务列表通知给服务消费方(Consumer),且注册中心和提供方和消费方之间均保持长连接,可以获取Provider发布的服务的变化情况,并将最新的服务列表推送给Consumer。
Dubbo的注册中心有Zookeeper、Redis、Multicast、Simple等。我们使用的是Zookeeper。
默认也推荐使用netty框架,还有mina。
标签:连接 src 组成 sum 逻辑 发送 开发 spring配置 提升
原文地址:https://www.cnblogs.com/toria/p/11366573.html