Solon2 接口开发: 了解 LoadBalance
上一文的代码 HttpUtils.http(sevName, ctx.path())
(来自 "solon.cloud.httputils" 插件的工具类),内部是通过 sevName 获取对应服务负载均衡,并最终获取服务实例地址。内部接口调用:
//根据服务名获取“负载均衡”
LoadBalance loadBalance = LoadBalance.get(sevName);
//根据分组和服务名获取“负载均衡”
LoadBalance loadBalance = LoadBalance.get(groupName, sevName);
负载均衡是 Rpc 开发和服务集群调用时,必不可少的元素。
1、了解负载均衡
内核层面提供了两个接口。插件中 “solon.cloud.httputils”,“nami” 都是使用它们对服务进行调用:
接口 | 说明 |
---|---|
LoadBalance | 负载均衡接口 |
LoadBalance.Factory | 负载均衡工厂接口 |
要获取一个服务的实例地址,只需要使用(在定制开发时,可能用得着):
//开发时要注意不存在服务的可能
LoadBalance loadBalance = LoadBalance.get(sevName);
//输出的结果,例:"http://12.0.1.2.3:8871" 、"ws://120.1.1.2:9871"(协议头://地址:端口)
String server = loadBalance.getServer();
2、负载均衡的能力实现
已有的实现方案是:"solon.cloud" 插件的 CloudLoadBalanceFactory。实现是无感知的,且是动态更新了(一般是实时或延时几秒)。引入 Solon Cloud Discovery 相关的组件,即可使用。
还可以根据需要,进行微略调整(一般没啥必要):
@Configuration
public class Config{
@Bean
public CloudLoadStrategy loadStrategy(){
return new CloudLoadStrategyDefault(); //默认为轮询
//return new CloudLoadStrategyIpHash(); //ip希哈
}
}
更多的策略,可以自己定义。比如在 k8s 里直接使用 k8s sev 地址:
//关于策略自定义,v2.2.6 后支持
@Component
public class CloudLoadStrategyImpl impl CloudLoadStrategy{
@Override
public String getServer(Discovery discovery){
//即通过服务名,获取k8s的服务地址
return K8sUtil.getServer(discovery.service());
}
}
3、自定义负载均衡实现
- 基于内核接口 "LoadBalance.Factory" 实现(一般是没必要自己搞)
//只是示意一下 //具体可以参考 CloudLoadBalanceFactory 实现
@Component
public class LoadBalanceFactoryImpl implements LoadBalance.Factory{
@Override
public LoadBalance create(String group, String service){
if("local".equals(service)){
return LoadBalanceImpl();
}
}
}
//只是示意一下 //具体可以参考 CloudLoadBalance 实现
public class LoadBalanceImpl implements LoadBalance{
@Override
public String getServer(){
return "http://127.0.0.1"
}
}
- 基于 “Solon Cloud Discovery” 接口实现
//找一个 Solon Cloud Discovery 适配插件参考下
public class CloudDiscoveryServiceImpl implements CloudDiscoveryService{
...
}
Solon2 接口开发: 了解 LoadBalance的更多相关文章
- Solon2 接口开发: 强化 Gateway 模式
一般可以从这几方面对 Gateway 模式进行强化: 定制异常状态码 定制基类 将一些处理独立封装成类 接口只返回数据部份,异常状态用抛 强化之后,具体的网关即简单,又功能强大.同时会对团队开发形成一 ...
- Solon2 接口开发: 分布式 Api Gateway 开发预览
建议使用专业的分布式网关产品,比如: nginx apisix [推荐] k8s ingress controller 等... 对 Solon 来讲,只有 Gateway:它调用本地接口时,则为本地 ...
- 《连载 | 物联网框架ServerSuperIO教程》- 13.自定义视图显示接口开发,满足不同的显示需求
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 《Python Web 接口开发与测试》---即将出版
为什么要出这样一本书? 首先,今年我有不少工作是跟接口自动化相关的,工作中的接口自动化颇有成效. 我一直是一个没有测试大格局的人,在各种移动测试技术爆发的这一年,我却默默耕耘着自己的一亩三分地儿(We ...
- 浅谈 PHP 与手机 APP 开发(API 接口开发) -- 转载
转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因 ...
- 支付宝WAP支付接口开发(Node/Coffee语言)
此博客不更新很久了, 更新的文档在这, 有兴趣到这里围观: http://neutra.github.io/2013/%E6%94%AF%E4%BB%98%E5%AE%9DWAP%E6%94%AF%E ...
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...
- C#.NET微信公众账号接口开发系列文章整理--微信接口开发目录,方便需要的博友查询
前言: 涉及微信接口开发比较早也做的挺多的,有时间的时候整理了开发过程中一些思路案例,供刚学习微信开发的朋友参考.其实微信接口开发还是比较简单的,但是由于调试比较麻烦,加上微信偶尔也会给开发者挖坑,并 ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单(附源码)
C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...
- APP数据接口开发的一些经验
刚接到这样的任务时,没有感觉到任何压力,不就是给移动端应用提供数据吗?那边发来参数,这边处理数据,返回JSON.做网站开发时经常使用ajax请求后台数据,不就是这么回事吗.于是,在确认完需求后就开始干 ...
随机推荐
- python环境配置常用命令
#安装前请更新 sudo apt-get update python -m pip install --upgrade pip #升级PIP版本 sudo apt-get install python ...
- JVM-Java虚拟机是怎么实现synchronized的?
1. JVM的锁优化 今天我介绍了 Java 虚拟机中 synchronized 关键字的实现,按照代价由高至低可分为重量级锁.轻量级锁和偏向锁三种. 重量级锁会阻塞.唤醒请求加锁的线程.它针对的是多 ...
- 八个SVN提交的好习惯(转)
一.提交之前先更新 1. SVN更新的原则是要随时更新,随时提交.当完成了一个小功能,能够通过编译并且自己测试之后,谨慎地提交. 2. 如果在修改的期间别人也更改了sv ...
- 用原型实现Class的各项语法
本人之前对Class一直不够重视.平时对原型的使用,也仅限于在构造函数的prototype上挂属性.原型尚且用不着,更何况你Class只是原型的一颗语法糖? 直到公司开始了一个webgis项目,使用o ...
- 从零开始学习Python
从零开始学习Python是一个令人兴奋和有趣的过程.无论你是完全没有编程经验,还是已经熟悉其他编程语言,Python都可以成为你迈向程序员之路的理想起点. 首先,在开始学习之前,请确保在计算机上安装了 ...
- L3-002 特殊堆栈
#include <bits/stdc++.h> using namespace std; const int N = 1E5 + 10; int tr[N]; stack<int& ...
- 七天.NET 8操作SQLite入门到实战 - 第三天SQLite快速入门
前言 今天我们花费一个小时快速了解SQLite数据类型.SQLite常用命令和语法. 七天.NET 8操作SQLite入门到实战详细教程 第一天 SQLite 简介 第二天 在 Windows 上配置 ...
- 基于FFmpeg和Qt实现简易视频播放器
VideoPlay001 记得一键三连哦 使用qt+ffmpeg开发简单的视频播放器,无声音 视频解码使用的是软解码即只用CPU进行QPainter绘制每一帧图像,CPU占用过高 简单易学,适合小白入 ...
- 【译】使用 GitHub Copilot 编写 Git 提交
在花费数小时修复 bug 或更新特性之后,我们开发人员最不愿意做的事情往往是仔细说明 Git 提交的内容.最新的 Visual Studio 预览版可以帮到您.使用新的生成 Git 提交消息特性来帮助 ...
- [复习随笔]python_dcgan网络复习小知识:模型定义
定义参数 dataroot - the path to the root of the dataset folder. We will talk more about the dataset in t ...