软件架构的演化和Dubbo的学习理解

343 阅读3分钟

随着时代的迅速发展,很多互联网项目要求高并发,高可用,高拓展.

集群 & 分布式

集群:很多人一起干,干一样的事。一个业务模块,部署在多个服务器上。是一个横向概念。

分布式:很多人一起干,干不一样的事。这些不一样的事,合起来是一件大事。

Dubbo & SpringCloud

Dubbo主要是为了解决SOA架构下,服务治理的中间件。

SpringCloud主要的应用场景就是在微服务的架构之下。

 web、service拆分出来分别部署到不同的服务器上,dubbo为了解决远程调用时候的各种问题的,底层是基于长连接的方式实现RPC。

Dubbo是一个基于Spring开发的小项目,可以和Spring无缝整合. 

思考:如果项目启动后,注册中心宕机了,当前服务会受影响吗?

不会,应为当前服务已经通过了注册中心找到相应的服务,当前的功能不会受到影响,但是不能调用还未注册的服务. 

Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,可用于生产环境,同时它也是dubbo官方推荐使用的注册中心.

需要注意的是在学习了dubbo后所有的对象都需要实现Serializable接口,只有这样才能存储到硬盘持久化保存,或者通过网络在多个项目间传输. 例如:

public class User implements Serializable {
    private int id;
    private String username;
    private String password;
}

思考:SpringMVC响应对象到浏览器的时候,User对象为什么不需要序列化?

在分布式中对象需要在不同的项目之间进行传输,而SpringMVC在底层是通过Jackson把user对象转换成json格式的字符串,然后把字符串用流的形式写进了响应体,最后相应到了浏览器.

负载均衡

当服务提供者provider以集群的方式提供服务时;某个请求到达后,到底要哪个provider提供服务,就要根据负载均衡策略分配。

配置方式: 在消费者远程注入的注解上,通过loadbalance属性配置(策略名称在AbstractLoadBance的实现类中有定义)

public class UserController {
	@Refrence(loadbalance="random|roundRobin")
    private UserService userService;
}

负载均衡策略共有4个:

    1. random:默认值,按照权重随机分配。权重默认值为100。但有随机性。
    1. RoundRobin:按权限轮训,1/2/3/2。按照顺序调用,受权重影响。
    1. LeastActive:最少活跃调用数,相同活跃数随机。当前负载最低的提供者优先调用。某个请求被当前provider调用开始前,计数器+1,调用结束后计数器-1。会优先调用当前计数器的值中最小的provider为本次请求提供服务。
    1. ConsistentHash:一直性hash,相同参数的请求总是发到同一提供者 user/1 user/1000