淘先锋技术网

首页 1 2 3 4 5 6 7

如何建设高可用系统?

如何建设高可用系统?这个问题可大可小,大到几十本书都在说这个话题,小到一篇博客也可以指点一二。

“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。说白了就是7*24小时不间断、高质量响应来自用户、其他业务系统的请求。

首先我们讲高可用,多高算是高可用?99.9%?99.99%?99.999%?...比较典型的就是淘宝的双十一、蚂蚁金服的支付宝那一定是高可用的,达到99.9999也是可以的。

针对一般企业,个人觉得能到99.9%就已经很不错了,或多或少都有一些小的bug,或是一些错误的数据导致了少数个别人的系统不可用。那么回到问题本身上来,要设计一个高可用的系统需要从以下几方面来讲:

设计&代码一个优秀的系统一定要有优秀的设计,做好服务划分,模块解耦,接口职责单一,接口幂等性等等。代码层面要严格执行业内通用的代码开发规范,公司技术部门可参考一些书籍制定适合自己的代码开发规范,参考书籍:《阿里巴巴Java开发手册》、《重构-改善及有代码的设计》,也可以通过安装一些代码扫描插件:阿里规约扫描插件、Sonarlint等来约束每一个开发人员的代码,并逐步建立起code review机制,尽最大努力保障代码的健康。接口必须经过压测,压测可以达到两个目的:1.当前系统可支撑的QPS最大是多少?2.通过一段时间的压测能够验证开发的接口是否经得住线上用户长时间正常使用?只有通过压测了才能做到心中有数,在有推广或者流量高峰时间段时候能够做到胸有成竹。数据

系统的bug要么是代码产生的要么是数据产生的,那么做好数据模型设计、数据最终一致性就很重要,同时代码层面也要充分考虑、兼容一些边界数据、异常数据的场景,如何对这些非健康数据做到可监控、规避、修复也是需要考虑的一个点,很多时候我们的系统经过充分测试终于可以上线了,运行了一段时间总是出现各种各种的错误,常见的下标越界、空指针都出来了,查了半天发现是数据的问题。本身并不难,难得是把握好每一个数据细节,做好代码控制即可。

监控

基础监控:基础监控包含服务器监控、数据库监控、服务监控,其中服务器监控指标有:TCP连接数、内存使用率、CPU使用率、磁盘IO读写、网络状态等等,数据库监控指标有:连接数、内存使用率、磁盘使用率、慢sql查询等,服务监控指标有:进程是否存活、进程下线程数及状态、占用内存走势(是否持续上升)、平均请求响应时间等等,以上只是列举了部分常见监控。

业务监控:业务监控基本上就是:日志监控(日志分级,不同范围的日志写不同的文件,按时间、按业务分割日志)、核心API监控、核心数据监控等等,日志监控可以通过linux脚本或者第三方开源项目(例如sentry)做监控告警机制,API监控可以通过APM性能监测工具(例如pinpoint)来进行链路跟踪。

告警送达:一旦系统产生了告警信息,要根据告警的严重等级触发对应的告警机制,严重的直接电话相关人员、期次短信、钉钉告警,可每日发一次系统整体运行监控情况邮件到相关系统维护人员。

安全

数据安全:数据备份、防止SQL注入、主从同步,数据上传&修改接口保证内网访问

系统安全:开放指定端口、内网访问、VPC网络,基于devops做运维,VPN代理等等,该上的就上,该用的就用,不能抱有侥幸心理

网络安全:网关、限流、IP白名单等等

综上,如何建设高可用的系统,不仅仅要从系统本身发力,更要让系统运行在一个安全有保障的环境中,只有做到以上所述,在一个团队的共同努力下,才能一步一步的建设好你心目中的高可用系统。

水平有限,以上是一些个人的见解,欢迎采纳~

java数据库监控,如何建设高可用系统