连线数据库优化大师:海量并发的社保系统为何没瘫痪?

2021-11-08 00:00:00 数据库 架构 运行 系统 社保

一首歌可以撩起一段记忆,一杯茶可以味染一份心情,一段采访可以传递一份正能量,当我们读懂了时光,才知道自己需要的是什么。小时候,我们就是孙悟空:调皮捣蛋、大吵大闹。青年时,我们就是猪八戒:敢爱敢恨。壮年时,我们就是沙和尚:工作勤恳、老实忠厚。老年时,我们就是唐僧:啰啰嗦嗦。曾经有一份珍贵的参保表摆在我面前,可年富力强的我没有珍惜,等到岁月的沧桑爬上额头,我捶胸顿足时才后悔莫及,人世间痛苦的事莫过于此。生老病死,保障为安,可有多少人知道社保系统的技术架构支撑?欢迎大家做客第91期名人堂访谈,我是主持人皮皮,本期名人堂我们邀请到了社保系统的数据库工程师敬勇(社区ID:eric0435),为我们一起解读社保系统背后的故事。如果您乐于分享,请报名参加我们的名人堂采访:http://www.itpub.net/star/




pipihappy8888(Q1):选择决定命运,环境造就人生。走过的路长了,遇见的人多了,经历的事也就复杂了。昨天只是今天的回忆,明天只是今天的梦。能否结合您的自身经历谈谈您的人生感悟?您对未来的生活抱有哪些期待?


eric0435(A1):大家好,我叫敬勇,微博@敬_勇,很高兴参加名人堂栏目,希望有机会认识更多的朋友。2007年我大学毕业,加入了一家专注于民生行业的公司,负责开发湖南省企业养老保险系统,说出来不怕大家笑话,由于当时只是从开发者的角度看问题,显得很局限。在需求调研阶段没并有参与,只是按部就班的按照详细设计流程进行开发,到后来开发了两个月都不晓得每个模块背后对应的实际业务有哪些。三年以后,我跳槽去了东软和创智,从事医疗保险系统的设计、开发、运维、还有Oracle管理与优化的工作,通过实际的摸爬滚打,我在社保系统的开发与性能优化方面积累了长期的工作经验。正所谓厚积薄发,经过好几年的沉淀与坚持,我变得更加自信与成熟,在职场上也游刃有余现在就职常德人力资源和社会保障局信息中心,负责应用系统和数据库运维管理优化方面的工作,




人生的拥有是一颗不老的童心,一个生生不息的信念,一个健康的身体,一个永远牵手的爱人,一个自由的心态,一份喜欢的工作,一份安稳的睡眠,一份享受生活的美丽心情。我希望在未来的日子里,找到一个对的人,是给自己以后的生命里好的礼物。





pipihappy8888(Q2):您从事过医疗系统、社保系统的开发设计工作,能否从架构的角度介绍下这些系统的数据库软件和中间件?您眼中美的架构是怎样的?


eric0435(A2):今天大多数社会保险系统使用的都是三层架构,它有两个版本,二版中的系统采用的是一个基于J2EE的C/S/S 架构,增加了应用服务器层,从而分担了Oracle数据库服务器的负担,便于系统服务于更多的用户。三版是基于J2EE技术的C/S/S&B/S/S双兼容的三层结构业务应用平台三版的IT架构分为:应用架构、数据架构、技术架构三个部分。这三个部分各司其职,应用架构主要解决业务系统的功能结构问题。数据架构主要解决统一、可扩展的行业数据模型问题。技术架构主要解决在技术上如何对业务进行支撑的问题。




前些年大部分社保系统都采用两层架构的,我接触这个行业时三层架构在社保系统的应用才较为广泛,可见社保行业技术发展明显落后于其它行业的,社保行业以业务驱动为主,不是以技术驱动为主,通常一个系统的使用周期长达八到十年左右,相对于互联网行业,IT技术的更新较为缓慢。社保系统的三层架构中,数据库是Oracle,这得益于Oracle的几大优点:可用性强,可扩展性强,数据安全性强,稳定性强。中间件使用的是Weblogic,现在也是Oracle公司的产品,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。它有几个优点:领先的标准,无限的可扩展性,快速开发,部署更趋灵活,关键任务可靠性,体系结构。个人认为能完成系统各方面需求的构架就算得上是一个好的架构,当然这只是我的一家之言。






pipihappy8888(Q3): 由于社保系统是一个准金融系统,医院,药店联网,与银行等金融联网办业务还要与其它政府部分共享数据,需要考虑安全,并发等问题,能否结合案例谈谈您在开发维护社保系统时,如何确保数据库安全,解决高并发等问题?


eric0435(A3):个人觉得通过以下几个方面可以解决安全性问题



1.    通过使用通用的XML数据交换格式和http协议,提供框架级和组件级资源共享的能力,其它系统不与数据库连接直接访问web服务来获取数据来解决数据共享的问题。


2.    通过统一的安全防卫层,统一的授权,统一入口,客户端只与WEB服务器打交道,完全不知数据库的任何信息,将数据库服务与用户隔离开来确保数据库的安全。


3.   通过登录安全控制、操作权限管理、维护操作审计来防止系统管理人员对数据库的破坏。


相对而言,技术问题引发的安全隐患容易解决,更为棘手的恐怕是人为管理方面的引发的悲剧。曾经某某人力资源和社会保障局就曾出现过这种案例,管理人员权限过大,可以直接在数据库中修改医保余额,与药店联合套取医保基金。因此我们呼吁管理人员需要具备高度的社会责任感,给大家营造一个纯净的社保系统。


在高并发方面,社保系统通过使用"连接池"技术动态维护数据库连接,充分利用系统资源,将业务逻辑与数据存取逻辑分离,减轻数据库负担,提高系统效率,利用“集群"技术提高效率等方法来解决高并发问题。



pipihappy8888(Q4):覆巢之下,安有完卵。很多社保系统缺乏容灾备份系统,一旦发生数据灾难,难以恢复,火灾、洪水、地震、恐怖袭击所带来的可能是致命影响,比如在512地震当中,四川省各重灾区地市社保信息系统遭受了极大的破坏和损失,部分地市的信息系统完全毁坏。异地或多地的容灾系统建设成为了重中之重,请谈谈您们社保系统在容灾备份方面是如何应对的?


eric0435(A4):社保系统是一个准金融系统,关系着参保人员的切身利益。出问题就容易引起社会的不稳定啊,说到这压力还是比较大的。我们社保系统现在使用的是EMC RecoverPoint来解决异地容灾的问题,现在还只做到同城异地容灾。其实不是有了容灾系统就是万事大吉了,平时要多进行容灾切换演练及时发现问题,别等到真的要切换到容灾系统时才发生容灾系统不能用,而容灾系统就成了摆设了。现在我们基本上是每个月进行一次容灾演练来检验容灾系统可用性 。


我在这里给大家举个例子,某某市社保系统通过DG做了备份系统,但不管是生产机房还是容灾机房的网络,都会经常因为一些原因时好时坏,有一天当生产数据库出现故障,准备启用备库时才发现有两天的数据没有同步完成,因而无法及时切换到备库,从而造成业务出现一定时间的中断。







pipihappy8888(Q5):社保系统在运行过程中不可避免的会出现运行缓慢,业务无法办理等问题,遇到故障时您如何排忧解难?能否分享下您在Oracle数据库性能优化方面的经历?


eric0435(A5):在现实中,社保系统在运行过程中确实经常遇到运行缓慢,业务无法办理等问题。大多数案例是由于糟糕的SQL语句造成的,还有部分案例得归咎于表结构设计方面的问题,但总的来讲,很少遇到硬件原因而引发社保系统运行缓慢。




因为一条糟糕的SQL语句而造成整个系统运行缓慢业务没法运行的案例我曾经深有体会,我是通过优化该语句解决了这个问题。也遇到过并发修改数据量大,在创建oracle表结构时默认的INITRANS参数为1,索引的INITRANS参数值为2时,出现大量enq: TX - allocate ITL entry等待事件造成系统运行缓慢的案例,这个问题后通过修改INITRANS参数后,执行表move解决了。



在哪些情况下业务表结构设计不合理导致社保系统运行缓慢呢?这里我想和大家分享一个案例,,我曾经遇到过一个社保系统,每次打印单位应缴数据时都要从几个大表(几亿条记录)中进行分组、求和排序,其实完全可以简化这种流程,根据业务来按单位按险种按月设计一张单位险种应缴数据表,这样在每个月做应收测算时每个险种每个单位每个月就生成一条应缴数据记录,打印单位应缴数据时直接从这张表中查询就可以了。当遇到故障时我的解决方法是:先得搞清是某个功能运行缓慢还是整个系统运行缓慢,如果是某个功能运行缓慢,八九不离十的是这个模块相关的SQL语句出了问题了,那么就要定位到具体的SQL语句,找出问题的原因,找到原因了问题就能迎刃而解。如果整个系统都运行缓慢,那么有必要先登录数据库服务器和应用服务器来检查系统资源使用的情况。一旦发现系统资源消耗完了,需要找到那些消耗资源多的进程ID,通过操作系统进程ID找到相关会话所执行的操作,对其进行分析找到这个会话所执行操作运行缓慢的原因,找到原因也就解决了问题。






pipihappy8888(Q6):我了解到,您工作七年以来从事的都是社会保险系统的相关工作,从之前的开发设计,到现在的运维和管理,是什么让您对社保系统情有独钟?现在北京推出了移动端社保App,用户可以i在手机查询社保信息。您觉得未来的社保系统是否会有更多的创新?


eric0435(A6):工作七年来从事的都是社会保险系统的相关工作,我觉得并没有什么使我对社保系统情有独钟,这可能与我的性格有关。我不是一个太喜欢折腾的人,骨子里就是喜欢稳定。我份工作就是参与开发养老保险系统,后来在我们公司更换其它公司的系统时在数据转换与上线后遇到了一些性能问题,这让我对解决Oracle性能问题产生了兴趣,直到现在我到了体制内上班也一样都是顺其自然。现在是移动互联网时代了,北京推出了移动端社保App就是一个好的例子,我觉得以后的社保系统应该会有更多的创新,通过新的技术和事物来方便参保人员及时了解各方面的信息比如个人缴费情况,账户余额,社保政策,这也能提高信息透明度更好的服务老百姓。




生命有过好多梦想,后能实现的却并不多;所以,生命里幸福的一瞬常常就会成为一生甜蜜的回忆,真心祝福我们的数据库工程师们能够收获自己的幸福,也希望各位网友各抒己见,就自己关心的话题与我们的嘉宾交流。截止9月7日,我们将选出活跃会员5名,赠送技术图书1本。


相关文章