好久没写博客了,主要是因为最近 2 个月在忙着做 2 个比赛,一个是第八届中国软件杯大赛,另一个是阿里的第五届中间件性能挑战赛,另外还有就是忙着准备秋招,所以差不多 3 个月没写博客了,最近刚结束了中国软件杯的比赛,阿里的第五届中间件性能挑战赛也结束了初赛,所以趁着空闲的时间总结一下这两个比赛。
首先汇报一下成绩,中国软件杯获得了三等奖(国家级),第五届中间件性能挑战赛初赛取得了第六名(4094个队伍),目前已经进入复赛。
先说一下中国软件杯这个比赛成绩,首先这个成绩对于我来说挺出乎意料的,首先对这个比赛感到挺失望的,一开始参赛的时候以为这个比赛是属于技术类比赛,结果到头来还是偏向于 PPT 型的比赛,至于为什么这么说,这里不得不吐槽一下,我参加的赛题是关于云平台的监控报警系统,大概使用出题企业提供的 HTTP API
获取到云服务器的性能指标,然后通过对这些指标进行监控,当指标符合用户规定的规则时候则触发报警,赛题需求看起来没啥问题,清晰明了,我和我队友也就中规中矩的实现赛题的需求,最后也就止步于三等奖了,决赛都没进(我参加的赛题只有 3 个队伍进入了决赛)。后面通过观看现场的决赛视频,了解到进入决赛的队伍的实现情况,他们竟然使用上了人工智能、区块链、人脸识别、AR等等这热门的技术,使用区块链技术保障从 API 中获取到的数据不丢失、不被篡改,使用 AR 来查看云服务器的监控信息,使用人脸识别来身份证验证,使用人工智能来…,听起来牛逼的技术都往上堆,先不说这些跟监控报警系统有啥关系吧,也不说他们到底有没有实现,单靠这些名词就把"专家"治的服服帖帖,也难怪进了决赛,这些高大上的技术我和我队友一个都没用上,所以最后比赛也就获得了三等奖而已。
再说一下第五届中间件性能挑战赛初赛,这个成绩对于我来说挺满意的了,初赛第一天拿了个第 5 名,然后中间陆陆续续也当过几天第一名,最后成绩为第 6 名,总体来说这个成绩也并不意外,因为从初赛第一天开始到结束我的排名都是靠前的。
这两个比赛就说到这里吧,然后下面是分享下我和我队友参加中国软件杯的大概思路,最后也附上源码、成品视频。
喜欢的朋友可以点个赞~要是点赞数多的话我下一篇写一下第五届中间件性能挑战赛初赛的思路。
赛题地址: 基于华云公有云平台,设计公有云监控系统
在全民云时代的当下,单体应用已无法满足急速增加的业务需求,本文设计思路是将单体应用按照业务功能拆分成多个小型服务,每个小型服务提供专门业务功能,不同的服务之间可以通过 RPC
或者 HTTP
进行通讯,这样一来系统就可以解耦成多个服务,各个服务可以独立的进行开发、部署、维护和管理,同时也可以基于服务进行横向的扩展,可以进行更细粒度的扩展。
按照赛题需求,本文将系统按照业务拆分成五个主要服务:
RPC
调用数据存储与检索的检索服务,对数据进行分析和统计,当数据满足报警规则时实现自动报警。API
进行通讯。数据收集实时的对华云系统数据进行收集,保证了数据的有效性,数据收集和数据存储与检索通过 RabbitMQ
达到解耦、异步的目的,让海量的数据收集提供了可能,同时依靠 RabbitMQ
提供的消息可靠性,保证了数据的可靠性。数据存储与检索通过订阅 RabbitMQ
实时的将数据存储到 MySQL
和 Elasticsearch
中,通过 Elasticsearch
提高了检索效率,让海量的数据检索成为了可能。
监控报警将实时的对数据进行监控、分析和统计,当数据符合报警规则的时候,将会通过 Email
、手机短信将报警信息及时发送给用户,让用户对云主机的安全了如指掌。同时用户可以自定义报警规则,可以对报警规则进行多维度的设置,比如监控的参数、监控周期、周期数、符合一次报警规则还是总是符合时候才报警等信息,让用户可以对云主机的性能进行多维度的掌控。
统一服务层将数据存储与检索、监控报警、云主机管理等统一集成,对外提供统一的 API
进行操作。
前端将为用户提供云主机管理、数据可视化、监控报警的界面。
1. 开发语言
本文采用 Java
作为开发语言,主要原因是 Java
稳定性高、安全性高,拥有庞大的生态系统,同时具有跨平台的特性,所以本文采用 Java
作为开发语言。
2. 开发框架
本文采用 Spring Boot
作为系统开发的框架,原因是 Spring
系列的框架生态非常好,能进行快速的开发和敏捷的部署,还有提高后期的可维护性。Spring Boot
作为 Spring
系列框架下的一个子项目,可以快速的整合第三方框架,同时支持将系统打包成应用程序进行执行,为微服务提供了可能。
3. 消息队列
本文采用 RabbitMQ
作为消息队列中间件,原因是 RabbitMQ
低延迟、可用性高、消息可靠性高。
4. RPC 框架
本文采用 Dubbo
作为 RPC
框架,Dubbo
是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC
实现服务的输出和输入功能,可以和 Spring
框架无缝集成。
5. 分布式服务框架
本文采用 ZooKeeper
作为分布式服务框架,ZooKeeper
是一个分布式的,开源的分布式应用程序协调服务。
6. 全文检索框架
本文采用 Elasticsearch
,ElasticSearch
是一个基于 Lucene
的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web
接口。Elasticsearch
是用 Java
开发的,并作为 Apache
许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
7. 缓存框架
文本采用 Redis
作为缓存框架,Redis
是一个开源的使用 ANSI C
语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value
数据库。
8. 数据库
本文采用 MySQL
作为数据库系统。
将日志数据收集和业务抽离出来,动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用,实现不同服务器生成的日志的统一化管理,日志数据统一化管理具有非常重要的作用:
通过定时任务去获取华云提供的云主机性能数据,让数据和华云官方的保持数据一致,保证了数据的实时性、有效性。同时将获取到的数据进行清洗,只保留有用的数据,将数据发布到消息队列中间件 RabbitMQ
中。通过扇形交换器 huayun.fanout
将消息发布到 huayun.es
和 huayun.persistence
这两个队列中,前者用于将消息存储到 Elasticsearch
中,后者用于将消息存储到 MySQL
中。
通过消息延迟投递进行数据可靠性的保障,上游服务数据收集将数据将一个消息发送到 RabbitMQ 之后继续发送一个延迟消息到 RabbitMQ 中,下游服务消费消息之后,将取消消息投递给 RabbitMQ,回调服务 Callback Service
通过订阅下游服务投递的取消消息,知道了有哪些消息成功被消费了,如果当上游服务投递的延迟消息到达 RabbitMQ之后,回调服务获取到这个延迟消息之后,发现该消息并没有收到下游服务发来的取消消息,那么回调服务将重新调用上游服务,让上游服务重新投递,保证消息投递的可靠性。
利用 Elasticsearch
对数据进行全文检索,其具有高扩展性,可以扩展到上百台服务器,处理PB级别的数据,同时还具有高效的检索能力,对于大量的数据也能快速的检索。采用 Dubbo
+ ZooKeeper
对外提供分布式的 RPC 服务,利用 Zookeeper
作为分布式服务管理,服务提供方将服务发布到注册中心,而服务消费方可以通过注册中心订阅服务,接收服务提供方服务变更通知,使用Zookeeper
,能够对服务的调用情况进行监控分析。
订阅消息队列中间件 RabbitMQ
,Elasticsearch
服务层通过监听队列 huayun.es
,当这个队列有消息达到时,RabbitMQ
将会主动将消息推送过来,Elasticsearch
服务层将接收到的消息存储到 Elasticsearch
中。同样,MySQL
服务层也将推送过来的消息存储到 MySQL
中。
数据存储与检索除了提供数据持久化服务外,还对外提供数据检索的服务,通过 ZooKeeper
进行检索服务的注册,通过 Dubbo
提供RPC
。
基于数据存储与检索提供的服务,可以多维度的自定义规则,对服务器的运行状态实时监控,同时对于服务器出现的异常,监控报警能够及时的进行通知用户,报警消息发送后,可以让开发者一目了然地发现问题出现在什么地方,从而快速解决。
监控报警通过订阅 Zookeeper
获取到服务信息,通过 Dubbo 获取到数据存储与检索提供的检索服务,基于检索服务对数据进行检索和分析,根据报警规则定时的去对数据进行分析,当数据满足报警条件时自动进行报警,将报警信息实时的发送发给用户,同时将报警信息存储到
MySQL
中,以便日后查询。
用户可以对报警规则进行多维度的设置,比如监控的属性、监控周期、周期数、触发报警的条件和阈值等。
统一服务层对外提供统一的 API
,前端可以通过统一服务层提供的 API
对数据的检索、报警规则的设置、云主机的管理、镜像管理和快照管理等。
通过 RPC
使用数据的检索和监控报警的服务,同时通过增加 Redis
缓存层,将查询结果缓存到 Redis
中,提高效率。
开源了我们队伍的作品,欢迎大家批评指正
源代码:https://github.com/xue8/huayun-cloud
演示视频:https://www.bilibili.com/video/av61070949/
原文地址:https://ddnd.cn/2019/07/28/cnsoftbei8-huayun/