标签 程序员 下的文章

遇到系统的高可用性问题

我也是直到最近才接触到'高可用性'这个词儿的,从我所在的项目需求角度出发,我理解'高可用性'就是在系统的外部依赖实体(如主数据库、主网络)等瘫痪了之后,系统仍然能正常的支撑业务的运行,当然系统自己宕掉了,那就没辙了^_^。高可用性设计实际上就是在系统自身完好的情况下如何考虑其外部实体的设计以保证系统能持续的运行支撑下去,起码从我现在正在做的项目的角度来说是可以这样理解的。

目前我们的系统的高可用性主要体现在对数据库的访问机制上。对于24×7小时运行的系统来说,数据库不可避免的需要采用一些容灾机制来保证数据的正确和不丢失或者是将损失减少到最低点。我们的系统采用双机热备的方式,一旦ACTIVE数据库宕掉,我们的系统就应该'自动'切换到STANDBY数据库上。这里就存在一个问题,到底如何切换,又如何在ACTIVE数据库恢复后,重新将数据库切换回到ACTIVE数据库呢?我个人从一开始就想这个切换过程应该对我们的系统保持透明,我们的系统能看到的只有一套用户名、密码和服务名并利用这套配置访问数据库,置于访问到哪一个数据库可由数据库那方来定,这样对于我们的系统来说实现起来会简单很多,但是我们的技术支持组给的答案却是做不到,需要我们的系统自己提供一套行之有效的数据库切换方案。经过研究我们提供这样一套办法:利用一个外部监视程序定时检测主数据库是否可用,这个状态检测程序一旦发现主数据库不可用,就通过一个简单内部通信协议发送一个消息包到我们的系统,我们的系统解析该消息包,做出相应的切换处理,并发送告警通知相关人员;当检测程序一旦发现主数据库可用了,发送另外一个消息包通知我们的系统数据库恢复了。我们的系统中有多个兄弟进程依赖数据库,每个进程都是单独与数据库建立session的,这样一旦需要切换数据库,我们这些可怜的进程就需要做同样的判断流程,可想而知代码中会存在多少的重复或相似的代码段,而且一旦流程修改我势必要修改多处,这样代码中的坏味道儿可就太浓了,势必应该进行重构,记得以前写过这么一篇'C语言也重构',关于C语言重构的一些事项可以到那篇文章中查询。

灵光一闪!突然想到在Java组有数据库连接池的概念,我们可否效仿一下呢,我们也做一个这样的'数据库Session池'或者是一组抽象了的数据库session管理接口,这样对session的管理就集中起来了!session的管理接口负责判断是否需要切换和重新连接数据库,而这些切换操作对那些依赖数据库的进程来说是透明的。这样每个进程在每处理一条消息的时候都去调用一次open_session这样的接口,然后利用打开的session进行数据库操作即可。而open_session这个接口的实现也许要分两种情况:
1、在未切换数据库的情况下,使用原来已经存在的session即可,这里浪费的仅仅是一次条件判断而已;
2、在切换数据库的情况下,重新建立一个连到新数据库的session即可。

感觉这个方案可行,晚些儿时候再认真考虑一下,拿出一套可行方案。其实这里还要考虑这样一种情况也是可能性极其微小的情况,那就是两个数据库都宕了,这时候要考虑高可用性的话,那就该提供一些在没有数据库情况下的默认处理机制或者策略了。

今年五一要加班

今天是五一黄金周之前的最后一周了,如果我没有猜错的话,绝大部分的企事业单位都会’串休’,当然我也不例外,这周要’鏖战’七天,哦,不,不是七天,我’追求’连作11天。

不用担心,我没有疯,呵呵。最近项目进度抓得紧,今天下午开了3个小时的会来确认五一期间那些子系统负责人要加班,挑来减去就我老哥一个。可不是我效率不高啊,的确是我这块儿改动量较大,按正常每天8小时工作很难完成,我很少、特少、少之又少晚上下班后加班,因为那是我个人的时间,我可不想无偿捐献给公司,不是我忠诚度不高,而是习惯+性格所致,当然破例的时候也不少,最近没办法也’奉献’了自己的一些时间,因为第二天很多人的工作都依赖你的工作成果呢,我可不好意思让别人都等着我。这是我入司以来第一次正式加班(有加班费的加班),听说五一前3天加班,补双薪。按照此规定,我向PL申请前4天加班,也就是说我要连续奋战11天,还好这周有一次项目组活动,可以出去放松一下。

最近有一个对加班极为不利的因素,那就是我处在了感冒的边缘;从昨晚开始就有感冒’前兆’了,身体感到发冷、鼻子有些阻塞,不过今天一天下来,病情并未’恶化’,看来我的免疫系统还是发挥了很大作用的,最近沈城的天气太差了,我就从未见过这么糟糕的而且连续糟糕的天气,但愿再过段时间老天爷能发发慈悲,把春天还给我们^_^。俗话说:’祸不单行’,上周和另一个项目组吃饭,饭店也很不错,在沈城也很有名,但是就是吃完坏了肚子,也不知道是哪道名菜所致,今天听同事说很多参加那次活动的XDJM都有和我一样的经历。赶紧吃药!另外在这个早春季节流行性疾病盛行,大家在外面吃饭的时候真的要格外注意饮食卫生!别忘了,’病从口入’这个简单的道理,我可是前车之鉴啊^_^

眼看要下班了,上了一下Blogbus,发现主页上自己的Blog赫然列在’优秀博客推荐栏‘中,敢情自己也上’光荣榜‘了,心里顿时喜悦起来,我想愉快的心情对我的感冒早日痊愈会有很大帮助的。唯一的遗憾就是自己的Blog模板过于简洁,在’光荣榜’上感觉不是那么上镜。今天CSDN就没那么幸运了,早上11点左右,按老习惯到CSDN看看有没有技术新闻,发现CSDN显示异常,自己在怀疑’CSDN是不是被黑了‘,不过目前CSDN一切运行良好了,虚惊一场!^_^

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats