因为项目的缘故,在环境部署到正式环境,进行压力测试的时候,发现 sso 单点登录的压力特别的高, 现在项目结构是不能调整了,有没有办法针对 sso 做负载均衡,
1
likuku 2019-12-09 23:13:28 +08:00
sso 入口是怎么个形式的服务? https? udp? 承载的服务 /服务器 可以横向多机 /实例么?
可以的话,那就前面挂个负载均衡。 |
2
lhx2008 2019-12-09 23:17:41 +08:00 via Android 1
seesion 用 key 的形式抽出来放到 redis 上面,sso 本身无状态,横向扩展就可以了,redis 不够就做 redis 集群,至于登录查数据库这里随便个 mysql 主从就能撑住了
|
3
jugelizi 2019-12-09 23:18:39 +08:00
登录压力高?
|
4
opengps 2019-12-09 23:19:40 +08:00 via Android
共享到内存中
|
5
likuku 2019-12-09 23:20:43 +08:00
session 传统就用 memcached 了,临时数据嘛,redis 太奢侈
|
7
xuanbg 2019-12-10 07:50:28 +08:00
楼主这有多少用户同时在线啊,sso 居然会撑不住?看看时间都花在什么地方吧,优化下代码应该就好了吧。
|
8
GoRoad 2019-12-10 08:02:38 +08:00
哪个朋友推荐的 去找哪个朋友
|
9
jwh199588 OP @likuku 使用了 apache 的负载均衡,但是在调用 /oauth/authorize 方法的时候,返回的 code 在另外一台 sso 上并不存在,所有获取 token 的时候,会报错
|
10
lihongjie0209 2019-12-10 09:43:36 +08:00
登录压力高??那这么多用户都查询一个复杂 SQL 你的系统直接就崩了?
|
11
jwh199588 OP @lihongjie0209 我是在做压测的时候,发现所有的用户都需要经过 sso,这样 sso 的压力会特别大,所以想做成集群
|
12
anyforever 2019-12-10 09:47:54 +08:00
难道你的用户都在时时刻刻在做登录操作么。。
|
13
lihongjie0209 2019-12-10 09:48:32 +08:00
|
14
zsc8917zsc 2019-12-10 09:53:39 +08:00
@jwh199588 压测的时候是集中登录吧,现实情况登录压力都是分散的,很难有那么多用户集中登录的情景
|
15
jwh199588 OP @lihongjie0209 主要是因为是国产化平台,所以服务器的性能很低,所以想使用负载来做
|
16
lihongjie0209 2019-12-10 10:00:10 +08:00
那就找一台数据库服务器( mysql 或者 redis )做数据共享, 前面挂两个 sso, 再做一个反向代理就好了。
|
17
JamesMackerel 2019-12-10 10:05:11 +08:00 via iPhone
说的是 oauth 压力大吧,这个可以理解,毕竟每一次请求都会问一下你的 sso 服务器。按照上面老哥说的做个无状态,前面挂个 nginx 就可以了。
|
18
izoabr 2019-12-10 11:22:08 +08:00
@jwh199588 #11 但是业务环境中,用户登陆行为是分散的,而且有 session 加持不是每个请求都要去认证,所以那个压力是一次性的呀。
|
19
index90 2019-12-10 12:09:21 +08:00
不如先说说你的 SSO 是如何实现的吧,毕竟现在一百个人有一百种“SSO”实现方式……
|
20
ecloud 2019-12-10 22:42:41 +08:00
天生就有很好的集群支持的 SSO 是 kerberos
|
21
likuku 2019-12-10 22:53:03 +08:00 via iPhone
@jwh199588 apache 还有负载均衡? LB 我都用 HAProxy,nginx 作负载均衡我都不想用它。SQL 或者任何 DB 查询的多,那么充分用上缓存吧…memcached 传统,但依然管用。
|
22
shawndev 2019-12-11 09:16:10 +08:00
通常登录模块设计合理的话不会成为性能瓶颈,登录能达到性能瓶颈的业务规模会有专人解决这些问题。
|