统一监管平台服务化解决方案之Redis应用
1
引言
在金融严监管政策背景之下,中央及各地保险监管部门逐步加强了对在所属地区展业保险公司的监管要求。对于公司来说,由于历史原因,以往的系统建设都趋于分散,特别是对接监管的系统,基本上都是以一个发文一套系统的方式进行建设。
随着监管对接系统的增多,难免会出现数据报送口径不统一,功能重复建设,运维成本增加,响应压力集中,政策理解延迟等一系列问题。
为了应对以上问题,统一监管报送平台成为了行业共识的方案,多个监管报送应用,可以设计成独立的、服务化的模块,这时候需要解决统一取数口径和统一登录的问题。为此一方面我们提出了统一监管数据平台的概念,将各种业务、财务等数据搜集到同一个数据平台,然后通过监管模型整合报送数据。
另一方面针对统一登录的问题,本文将结合Redis缓存,在公共模块登录成功后,将用户相关的信息存放到缓存中,其他各个应用子模块都可以共享该会话,以达到多应用共享Session的目的。
作者简介:蔡正君,2018年加入中科软,现任金融监管事业群首席架构师。带领团队参与过太平洋保险、民生人寿等多个保险公司的监管系统建设。
2
什么是Redis
Redis(Remote DictionaryServer),即远程字典服务,是一个开源的使用ANSI-C语言编写、支持网络、可基于内存、可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,由VMware主导维护此产品。
Redis是一个key-value存储系统,和Memcached类似,但它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
3
Redis架构分类
①单机Redis:由单一节点提供缓存服务
②主从Redis:主从复制模式,主节点宕机后需人工干预其他从节点的数据复制
③Redis哨兵:1主2从3哨兵模式,在复制的基础上,哨兵实现了自动化的故障恢复
④Redis集群:具有高可用、可扩展、分布式、容错等特性,通过数据分片的方式来进行数据共享
4
对接JavaWeb应用方案
1.搭建和配置Redis集群(以主流的哨兵模式为例)
(1)下载单机版redis开源包,安装至【/data/redis-cluster/6001/】目录。因步骤简单略过详细步骤,配置文件内容如下:
(2)安装redis集群:
由三台centos6.9服务器:10.0.0.60(master)、10.0.0.50(slave1)、10.0.0.40(slave2)组成Redis集群,相互ssh网络互通。每台服务器配置两组redis实例:
==============================
10.0.0.60:7001(主)
10.0.0.60:7002(哨1)
10.0.0.50:7003(从1)
10.0.0.50:7004(哨2)
10.0.0.40:7005(从2)
10.0.0.40:7006(哨3)
==============================
预定安装目录为【/data/redis-cluster/7001~7006】;
1)安装主机1-主哨节点:
2)安装主机2-从哨节点:
3)安装主机3-从哨节点:
(3)连接集群:
2.Redis集群安装好后,接下来要应用到多个模块共享Session的场景,示意图如下:
3.Java应用模块配置Redis连接信息,将spring的session缓存到redis服务器。
应用端【application.properties】配置:
========================
#redis连接信息
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=10.0.0.60:7002,10.0.0.50:7004,10.0.0.40:7006
========================
4.使用Jedis中间件初始化Redis管理器
5.使用Redis服务
5
结语
通过引入Redis共享缓存技术,我们实现了以下效果:
①.让微服务自身保持无状态,应用实例数量的多少不会影响到用户登录后访问。
②.不同的服务实现了单点登录的踢出功能,即让上次异地登录的用户下线。
③.Session在多个服务或服务器间共享,实现了多站点单点登录。