很久沒寫博客了,主要是由於最近 2 個月在忙着作 2 個比賽,一個是第八屆中國軟件杯大賽,另外一個是阿里的第五屆中間件性能挑戰賽,另外還有就是忙着準備秋招,因此差很少 3 個月沒寫博客了,最近剛結束了中國軟件杯的比賽,阿里的第五屆中間件性能挑戰賽也結束了初賽,因此趁着空閒的時間總結一下這兩個比賽。
首先彙報一下成績,中國軟件杯得到了三等獎(國家級),第五屆中間件性能挑戰賽初賽取得了第六名(4094個隊伍),目前已經進入複賽。
先說一下中國軟件杯這個比賽成績,首先這個成績對於我來講挺出乎意料的,首先對這個比賽感到挺失望的,一開始參賽的時候覺得這個比賽是屬於技術類比賽,結果到頭來仍是偏向於 PPT 型的比賽,至於爲何這麼說,這裏不得不吐槽一下,我參加的賽題是關於雲平臺的監控報警系統,大概使用出題企業提供的 HTTP API
獲取到雲服務器的性能指標,而後經過對這些指標進行監控,當指標符合用戶規定的規則時候則觸發報警,賽題需求看起來沒啥問題,清晰明瞭,我和我隊友也就中規中矩的實現賽題的需求,最後也就止步於三等獎了,決賽都沒進(我參加的賽題只有 3 個隊伍進入了決賽)。後面經過觀看現場的決賽視頻,瞭解到進入決賽的隊伍的實現狀況,他們居然使用上了人工智能、區塊鏈、人臉識別、AR等等這熱門的技術,使用區塊鏈技術保障從 API 中獲取到的數據不丟失、不被篡改,使用 AR 來查看雲服務器的監控信息,使用人臉識別來身份證驗證,使用人工智能來....,聽起來牛逼的技術都往上堆,先不說這些跟監控報警系統有啥關係吧,也不說他們到底有沒有實現,單靠這些名詞就把"專家"治的服服帖帖,也難怪進了決賽,這些高大上的技術我和我隊友一個都沒用上,因此最後比賽也就得到了三等獎而已。
再說一下第五屆中間件性能挑戰賽初賽,這個成績對於我來講挺滿意的了,初賽第一天拿了個第 5 名,而後中間陸陸續續也當過幾天第一名,最後成績爲第 6 名,整體來講這個成績也並不意外,由於從初賽第一天開始到結束個人排名都是靠前的。php
這兩個比賽就說到這裏吧,而後下面是分享下我和我隊友參加中國軟件杯的大概思路,最後也附上源碼、成品視頻。前端
喜歡的朋友能夠點個贊~要是點贊數多的話我下一篇寫一下第五屆中間件性能挑戰賽初賽的思路。git
賽題地址: 基於華雲公有云平臺,設計公有云監控系統github
在全民雲時代的當下,單體應用已沒法知足急速增長的業務需求,本文設計思路是將單體應用按照業務功能拆分紅多個小型服務,每一個小型服務提供專門業務功能,不一樣的服務之間能夠經過 RPC
或者 HTTP
進行通信,這樣一來系統就能夠解耦成多個服務,各個服務能夠獨立的進行開發、部署、維護和管理,同時也能夠基於服務進行橫向的擴展,能夠進行更細粒度的擴展。web
按照賽題需求,本文將系統按照業務拆分紅五個主要服務:數據庫
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
中,提升效率。
開源了咱們隊伍的做品,歡迎你們批評指正
演示視頻:www.bilibili.com/video/av610…
原文地址:ddnd.cn/2019/07/28/…