搞微服務(wù)真的很麻煩的,為了解決單點的性能問題引入微服務(wù)印机,同時也引入了無數(shù)新的問題出現(xiàn)。對于這些問題鞭衩,亦有一些新的概念和工具被發(fā)明出來学搜,這篇記錄一下,我見過的各種微服務(wù)中的開源工具论衍,以及它們所存在的意義瑞佩,提供了哪些便利或者解決了什么問題。
基礎(chǔ)設(shè)施
ZooKeeper
ZooKeeper是一個具有高可靠性的分布式的協(xié)作工具坯台,基于PAXOS協(xié)議炬丸,其實現(xiàn)了一個可保證分布式一致性的類文件系統(tǒng)。
利用它的這個機制以及它提供操作與讀取該類文件系統(tǒng)的API,分布式系統(tǒng)可用它實現(xiàn)各種功能稠炬,包括數(shù)據(jù)發(fā)布/訂閱焕阿,負載均衡,命名服務(wù)首启,分布式協(xié)調(diào)/通知暮屡,集群管理,Master選舉毅桃,分布式鎖褒纲,分布式隊列與服務(wù)發(fā)現(xiàn)等多個分布式中常見的需求應(yīng)用場景。
rabbitmq
基于AMQP協(xié)議钥飞,使用非常小眾的erlang語言編寫的分布式消息隊列莺掠,有非常詳實的文檔與tutorials,同時提供了web頁面读宙,用于管理和查看隊列的使用情況彻秆。
jumpserver
使用Django編寫的跳板機系統(tǒng),可通過終端登錄各測試機论悴,同時提供web應(yīng)用掖棉,可用于某服務(wù)器上文件的上傳與下載,跑腳本什么的再方便不過了膀估。
它有著全套的權(quán)限管理幔亥,遵循 Web 2.0 規(guī)范,配備了業(yè)界領(lǐng)先的 Web Terminal 解決方案察纯,交互界面美觀帕棉、用戶體驗好,采納分布式架構(gòu)饼记,支持多機房跨區(qū)域部署香伴,中心節(jié)點提供 API,各機房部署登錄節(jié)點具则,可橫向擴展即纲、無并發(fā)限制。
azkaban
由linkedin研發(fā)的分布式調(diào)度工具博肋,使用Java編寫低斋,可使用Cron的配置方式來管理分布式調(diào)度任務(wù),數(shù)據(jù)落于MySQL匪凡,整體還是蠻重的膊畴。
具有便于使用的web UI,并且在任務(wù)執(zhí)行成功或失敗時可以發(fā)送郵件通知病游,并且提供重試機制唇跨。
Apollo
攜程框架部門研發(fā)的分布式配置中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置买猖,配置修改后能夠?qū)崟r推送到應(yīng)用端改橘,并且具備規(guī)范的權(quán)限、流程治理等特性政勃,適用于微服務(wù)配置管理場景唧龄。
服務(wù)端基于Spring Boot和Spring Cloud開發(fā),提供了Java奸远,Python等語言的接入sdk既棺。
RPC框架
微服務(wù)中RPC框架當然是少不了的,最常用的是Facebook研發(fā)的thrift懒叛,以及阿里的dubbo丸冕,現(xiàn)都歸于Apache基金會下,此外薛窥,餓了么研發(fā)的thriftpy在Python領(lǐng)域也比較優(yōu)秀胖烛。
當然,在Thrift框架的上層诅迷,公司往往會再包一層佩番,做為自己的框架,在其中引入sentry罢杉、zookeeper趟畏,gitlab地址pull idl等基于公司具體情況的處理。
發(fā)布
jenkins
jenkins是由Java編寫的開發(fā)自動化平臺滩租,其本身提供了1000+的plugins可供各種自動化場景使用赋秀,使用者可以通過編寫jenkinsfile來自定義自己的自動化任務(wù)。
使用jenkins的常見場景為項目構(gòu)建律想,運行自動化測試猎莲,靜態(tài)代碼分析與項目部署。
spinnaker
spinnaker是一個由Netflix開發(fā)的使用Python編寫的用于持續(xù)集成的平臺技即,主要用于結(jié)合容器發(fā)布各環(huán)境的代碼著洼,發(fā)布地點可以是各種云平臺,包括 AWS EC2, Kubernetes, Google Compute Engine, Google Kubernetes Engine, Google App Engine, Microsoft Azure和Openstack等而叼,而這郭脂,已經(jīng)包含了市場上所有主流的云服務(wù)商。
它的一個很大的特點是自動化澈歉,可以通過git events, Jenkins, Travis CI, Docker, CRON等事件來觸發(fā)構(gòu)建而不用人工手動去操作,在工作中的一個非常便利的常見使用場景是在自己的開發(fā)分支使用git push命令后屿衅,spinnaker將會自動構(gòu)建這個branch的容器埃难,并生成相應(yīng)的訪問url,真的是非常方便。
kubernetes
使用Go語言編寫的容器管理平臺涡尘,它的官網(wǎng)對自己的簡介為Production-Grade Container Orchestration忍弛,Automated container deployment, scaling, and management。
用于編排考抄、發(fā)布容器细疚,提供水平伸縮性,便與擴展川梅,并且可以登錄某個容器疯兼,運行命令、查看log等贫途。
監(jiān)控
sentry
你不可能沒聽說過的跨平臺Bug追蹤網(wǎng)站吧彪,Github上17000+star,其受歡迎程度可見一般丢早。它使用Python編寫姨裸,并且提供了大部分主流語言的API供其使用,它能很好地融入log系統(tǒng)中怨酝,完備地記下問題出現(xiàn)當時的調(diào)用鏈與場景傀缩。
常見的使用方式為將它納入到各種公司框架中,使得開發(fā)人員直接拿到logger农猬,當使用warning或error時赡艰,sentry就會記錄這個事件并發(fā)郵件給到關(guān)心它的人。
open-falcon
小米開源的微服務(wù)監(jiān)控系統(tǒng)盛险,使用它可以查看各服務(wù)器的狀態(tài)瞄摊,包括網(wǎng)絡(luò)IO,與CPU運行情況苦掘,以及數(shù)據(jù)庫的負載换帜。
生成user friendly的圖表,提供強大的統(tǒng)計與自定義功能鹤啡,用戶可以按照自己想要的方式獲取信息惯驼。
kibana
elastic團隊的作品,用于數(shù)據(jù)收集與分析递瑰,可以用于根據(jù)各種條件(時間祟牲、關(guān)鍵字)等來查詢各環(huán)境的日志,正是根據(jù)這些日志抖部,它可以生成各種統(tǒng)計圖表等说贝,被稱為elastic技術(shù)棧的視窗。
不過說實話它這個查詢的界面有些難懂慎颗,不夠user friendly乡恕。
cat
cat是大眾點評開源的一套基于java的實時應(yīng)用監(jiān)控平臺言询,主要應(yīng)用于服務(wù)中間件框架(MVC 框架、RPC 框架傲宜、持久層框架运杭、分布式緩存框架)的監(jiān)控,為開發(fā)和運維提供各項性能指標函卒、健康檢查辆憔、自動報警等可視化服務(wù)。
除了上面提到的工具提供的錯誤日志統(tǒng)計报嵌、CPU負載虱咧、各種連接池狀態(tài)之外,cat還可以記錄跨越系統(tǒng)邊界的程序訪問行為沪蓬,比如遠程調(diào)用彤钟,數(shù)據(jù)庫調(diào)用,也適合執(zhí)行時間較長的業(yè)務(wù)邏輯監(jiān)控跷叉,可以用來記錄一段代碼的執(zhí)行時間和次數(shù)逸雹,特別地,對Java應(yīng)用程序云挟,它可以上報一些如JVM內(nèi)存梆砸、GC等核心指標。
不只如此园欣,對于業(yè)務(wù)方面的指標帖世,也可以利用它來進行監(jiān)控和統(tǒng)計,比如訂單數(shù)沸枯、交易額日矫、支付成功率等。
功能真的是很全面了绑榴,有很多業(yè)界公司都在使用這個工具哪轿,但忍不住要吐槽的一點是,界面可能真的有點丑翔怎,不如上面的sentry好看窃诉。
其他
Gitlab
開源的用于公司自建代碼倉庫的項目,其功能絲毫不遜于Github赤套。
phabricator
使用PHP編寫的code review平臺飘痛。
redmine
使用ROR編寫的項目管理工具,主要用于線上bug的提出容握、跟蹤與管理宣脉。
以上內(nèi)容只是基于我在工作中接觸過的,但這并不是全部剔氏,還有一堆其他的自研應(yīng)用用于優(yōu)化整個流程與開發(fā)效率脖旱,比如Nginx配置平臺堪遂,以及一些基于業(yè)務(wù)的數(shù)據(jù)分析平臺,數(shù)據(jù)打點平臺萌庆,API管理應(yīng)用(與spinnaker集成直接將前后端連接起來),灰度發(fā)布平臺币旧,AB Test實驗管理平臺践险,等等,基于一個思想就是有開源的就嘗試使用開源的產(chǎn)品吹菱,找不到合適的巍虫,也不妨花些時間自己研發(fā),只要它可以帶來整體效率的提升鳍刷,便是很有意義的占遥。
當然,我上面所提到的例子输瓜,可能并不是某個領(lǐng)域的最佳的解決方案瓦胎,或者在整個微服務(wù)架構(gòu)內(nèi)還不夠全面,希望大家可以分享一下自己覺得好的工具尤揣,我也會隨著自己見識的不斷提升搔啊,來逐漸更新這個列表。
總之北戏,devops负芋、微服務(wù)真的是有太多的學(xué)問,還有很多我沒有接觸過的東西嗜愈,里面的水真的是無限深旧蛾。有太多的工具,太多的可以優(yōu)化的點蠕嫁,面對這些我們倒也用不著驚慌與煩躁锨天,工具是為了給人帶來便利的,一個工具的出現(xiàn)必然是為了解決或者優(yōu)化一個問題拌阴,了解得越多绍绘,自己對這種大型網(wǎng)站的整體理解與感知就會更深一些。