1 Dubbo框架
Apache Dubbo |ˈdʌbəʊ| 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。
1.1 调用原理图:
1)消费者 Container 负责启动加载运行服务生产者 Provider。根据生产者 Provider配置的文件根据协议发布服务 , 完成服务的初始化.
2)生产者 Provider在启动时,根据配置中的注册中心 Registry地址连接注册中心 Registry,将生产者 Provider的服务信息发布到注册中心 Registry,在注册中心 Registry注册自己提供的服务。
3)消费者 Consumer在启动时,根据消费者XML配置文件中的服务引用信息,连接到注册中心 Registry,向注册中心 Registry订阅自己所需的服务。
4)注册中心 Registry根据服务订阅关系,返回生产者 Provider地址列表给消费者 Consumer,如果有变更,注册中心 Registry会推送最新的服务地址信息给消费者 Consumer。
5)消费者 Consumer调用远程服务时,会根据路由策略,先从缓存的生产者 Provider地址列表中选择一台进行,跨进程调用服务,假如调用失败,再重新选另一台调用。
6)服务生产者 Provider和消费者 Consumer,会在内存中记录调用次数和调用时间,每分钟发送一次统计数据到监视器 Monitor。
1.2 Dubbo高可用测试
1).测试当服务器宕机,用户访问是否受影响. 用户访问不受影响. zk心跳检测机制
2).测试当zk集群宕机,用户访问是否受影响. 不受影响 消费者在本地有服务列表数据,自己维护.
3).测试是否有负载均衡的效果 用户访问有负载均衡的效果
1.3 Dubbo负载均衡
1.服务端负载均衡(集中式负载均衡)
说明: 用户访问服务器时不清楚真实的服务器到底是谁,由负载均衡服务器动态管理.
典型代表: NGINX
一般nginx服务器做反向代理使用,负载均衡只是提供的功能.
2.客户端负载均衡
说明:采用微服务架构时,当消费者访问服务提供者时,由于框架内部已经实现了负载均衡的策略,所以消费者访问提供者时已经完成了负载均衡的机制.所以将所有的压力平衡到了各个消费者中.
3.(默认)随机算法、轮询算法、一致性hash、最少访问
2 跨域
由于业务需要,通常A服务器中的数据可能来源于B服务器. 当浏览器通过网址解析页面时,如果页面内部发起ajax请求.如果浏览器的访问地址与Ajax访问地址不满足同源策略时,则称之为跨域请求.
跨域要素:
1.浏览器
2.解析ajax
3.违反了同源策略
同源策略
规定: 如果浏览器的地址与Ajax的请求地址 协议名称://域名地址:端口号 如果都相同则满足同源策略.浏览器可以正常的解析返回值. 如果三者之间有一个不同,则违反了同源策略.浏览器不会解析返回值.
2.1 JSONP跨域访问
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的src属性可以跨域的访问.
1)利用javaScript中的src属性可以跨域的访问.
2)提前准备一个回调函数 callback()
3)将返回值结果进行特殊的格式封装. callback(JSON数据)
2.2 CORS跨域实现
因为出于安全的考虑, 浏览器不允许Ajax调用当前源之外的资源. 即浏览器的同源策略.
CORS需要浏览器和服务器同时支持。目前,所有主流浏览器都支持该功能,IE浏览器不能低于IE10。在浏览器端, 整个CORS通信过程都是浏览器自动完成,在请求之中添加响应头信息,如果服务器允许执行跨域访问.,则浏览器的同源策略放行.
/**
* 参数介绍:
* 1.addMapping() 哪些请求可以进行跨域操作
* addMapping("/**") 表示所有访问后端的服务器的请求都允许跨域
* addMapping("/addUser/**") 表示部分请求可以跨域
* /* 只能拦截一级目录
* /** 可以拦截多级目录
*
* 2.allowedOrigins("*") 允许哪些网站跨域
* 3.allowCredentials(true) 请求跨域时是否允许携带Cookie/Session相关
* @param registry
*/
@Override
public v