中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

互聯(lián)網(wǎng)后端全套基礎(chǔ)設(shè)施是怎樣的-創(chuàng)新互聯(lián)

互聯(lián)網(wǎng)后端全套基礎(chǔ)設(shè)施是怎樣的,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

10年積累的網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有酉陽土家族苗族免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

1.1 后端基礎(chǔ)設(shè)施

使用Java后端技術(shù)的目的就是構(gòu)建業(yè)務(wù)應(yīng)用,為用戶提供在線或者離線服務(wù)。因此,一個(gè)業(yè)務(wù)應(yīng)用需要哪些技術(shù)、依賴哪些基礎(chǔ)設(shè)施就決定了需要掌握的后端技術(shù)有哪些。縱觀整個(gè)互聯(lián)網(wǎng)技術(shù)體系再結(jié)合公司的目前狀況,筆者認(rèn)為必不可少或者非常關(guān)鍵的后端基礎(chǔ)技術(shù)/設(shè)施如下圖所示:

互聯(lián)網(wǎng)后端全套基礎(chǔ)設(shè)施是怎樣的

這里的后端基礎(chǔ)設(shè)施主要指的是應(yīng)用在線上穩(wěn)定運(yùn)行需要依賴的關(guān)鍵組件或者服務(wù)。開發(fā)或者搭建好以上的后端基礎(chǔ)設(shè)施,一般情況下是能夠支撐很長一段時(shí)間內(nèi)的業(yè)務(wù)的。此外,對于一個(gè)完整的架構(gòu)來說,還有很多應(yīng)用感知不到的系統(tǒng)基礎(chǔ)服務(wù),如負(fù)載均衡、自動化部署、系統(tǒng)安全等,并沒有包含在本章的描述范圍內(nèi)。

1.1.1 統(tǒng)一請求入口-API網(wǎng)關(guān)

在移動APP的開發(fā)過程中,通常后端提供的接口需要以下功能的支持:

  • 負(fù)載均衡

  • API訪問權(quán)限控制

  • 用戶鑒權(quán)

一般的做法,使用Nginx做負(fù)載均衡,然后在每個(gè)業(yè)務(wù)應(yīng)用里做API接口的訪問權(quán)限控制和用戶鑒權(quán),更優(yōu)化一點(diǎn)的方式則是把后兩者做成公共類庫供所有業(yè)務(wù)調(diào)用。但從總體上來看,這三種特性都屬于業(yè)務(wù)的公共需求,更可取的方式則是集成到一起作為一個(gè)服務(wù),既可以動態(tài)地修改權(quán)限控制和鑒權(quán)機(jī)制,也可以減少每個(gè)業(yè)務(wù)集成這些機(jī)制的成本。這種服務(wù)就是API網(wǎng)關(guān),可以選擇自己實(shí)現(xiàn)。也可以使用開源軟件實(shí)現(xiàn),如Kong和Netflix Zuul。API網(wǎng)關(guān)一般架構(gòu)如下圖所示:互聯(lián)網(wǎng)后端全套基礎(chǔ)設(shè)施是怎樣的

但是以上方案的一個(gè)問題是由于所有API請求都要經(jīng)過網(wǎng)關(guān),它很容易成為系統(tǒng)的性能瓶頸。因此,可以采取的方案是:去掉API網(wǎng)關(guān),讓業(yè)務(wù)應(yīng)用直接對接統(tǒng)一認(rèn)證中心,在基礎(chǔ)框架層面保證每個(gè)API調(diào)用都需要先通過統(tǒng)一認(rèn)證中心的認(rèn)證,這里可以采取緩存認(rèn)證結(jié)果的方式避免對統(tǒng)一認(rèn)證中心產(chǎn)生過大的請求壓力。

1.1.2 業(yè)務(wù)應(yīng)用和后端基礎(chǔ)框架

業(yè)務(wù)應(yīng)用分為:在線業(yè)務(wù)應(yīng)用和內(nèi)部業(yè)務(wù)應(yīng)用。

  • 在線業(yè)務(wù)應(yīng)用:直接面向互聯(lián)網(wǎng)用戶的應(yīng)用、接口等,典型的特點(diǎn)就是:請求量大、高并發(fā)、對故障的容忍度低。

  • 內(nèi)部業(yè)務(wù)應(yīng)用:主要面向公司內(nèi)部用戶的應(yīng)用。比如,內(nèi)部數(shù)據(jù)管理平臺、廣告投放平臺等。相比起在線業(yè)務(wù)應(yīng)用,其特點(diǎn): 數(shù)據(jù)保密性高、壓力小、并發(fā)量小、允許故障的發(fā)生。

業(yè)務(wù)應(yīng)用基于后端的基礎(chǔ)框架開發(fā),針對Java后端來說,應(yīng)該有以下幾個(gè)框架:

  • MVC框架:統(tǒng)一開發(fā)流程、提高開發(fā)效率、屏蔽一些關(guān)鍵細(xì)節(jié)的Web/后端框架。典型的如SpringMVC、Jersey以及國人開發(fā)的JFinal以及阿里的WebX。

  • IOC框架:實(shí)現(xiàn)依賴注入/控制反轉(zhuǎn)的框架。Java中最為流行的Spring框架的核心就是IOC功能。

  • ORM框架:能夠屏蔽底層數(shù)據(jù)庫細(xì)節(jié),提供統(tǒng)一的數(shù)據(jù)訪問接口的數(shù)據(jù)庫操作框架,額外地能夠支持客戶端主從、分庫、分表等分布式特性。MyBatis是目前最為流行的ORM框架。此外,Spring ORM中提供的JdbcTemplate也很不錯(cuò)。當(dāng)然,對于分庫分表、主從分離這些需求,一般就需要自己實(shí)現(xiàn),開源的則有阿里的TDDL、當(dāng)當(dāng)?shù)膕harding-jdbc(從datasource層面解決了分庫分表、讀寫分離的問題,對應(yīng)用透明、零侵入)。此外,為了在服務(wù)層面統(tǒng)一解決分庫分表、讀寫分離、主備切換、緩存、故障恢復(fù)等問題,很多公司都是有自己的數(shù)據(jù)庫中間件的,比如阿里的Cobar、360的Atlas(基于MySQL-Proxy)、網(wǎng)易的DDB等;開源的則有MyCat(基于Cobar)和Kingshard,其中Kingshard已經(jīng)有一定的線上使用規(guī)模。MySQL官方也提供了MySQL Proxy, 可以使用lua腳本自定義主從、讀寫分離、分區(qū)這些邏輯,但其性能較差,目前使用較少。

  • 緩存框架:對Redis、Memcached這些緩存軟件操作的統(tǒng)一封裝,能夠支持客戶端分布式方案、主從等。一般使用Spring的RedisTemplate即可,也可以使用Jedis做自己的封裝,支持客戶端分布式方案、主從等。

  • JavaEE應(yīng)用性能檢測框架:對于線上的JavaEE應(yīng)用,需要有一個(gè)統(tǒng)一的框架集成到每一個(gè)業(yè)務(wù)中檢測每一個(gè)請求、方法調(diào)用、JDBC連接、Redis連接等的耗時(shí)、狀態(tài)等。Jwebap是一個(gè)可以使用的性能檢測工具,但由于其已經(jīng)很多年沒有更新,有可能的話建議基于此項(xiàng)目做二次開發(fā)。

一般來說,以上幾個(gè)框架即可以完成一個(gè)后端應(yīng)用的雛形。

1.1.3 緩存、數(shù)據(jù)庫、搜索引擎、消息隊(duì)列

緩存、數(shù)據(jù)庫、搜索引擎、消息隊(duì)列這四者都是應(yīng)用依賴的后端基礎(chǔ)服務(wù),他們的性能直接影響到了應(yīng)用的整體性能,有時(shí)候你代碼寫的再好也許就是因?yàn)檫@些服務(wù)導(dǎo)致應(yīng)用性能無法提升上去。

  • 緩存: 緩存通常被用來解決熱點(diǎn)數(shù)據(jù)的訪問問題,是提高數(shù)據(jù)查詢性能的強(qiáng)大武器。在高并發(fā)的后端應(yīng)用中,將數(shù)據(jù)持久層的數(shù)據(jù)加載到緩存中,能夠隔離高并發(fā)請求與后端數(shù)據(jù)庫,避免數(shù)據(jù)庫被大量請求擊垮。目前常用的除了在內(nèi)存中的本地緩存,比較普遍的集中緩存軟件有Memcached和Redis。其中Redis已經(jīng)成為最主流的緩存軟件。

  • 數(shù)據(jù)庫:數(shù)據(jù)庫可以說是后端應(yīng)用最基本的基礎(chǔ)設(shè)施。基本上絕大多數(shù)業(yè)務(wù)數(shù)據(jù)都是持久化存儲在數(shù)據(jù)庫中的。主流的數(shù)據(jù)庫包括傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(MySQL、PostgreSQL)以及最近幾年開始流行的NoSQL(MongoDB、HBase)。其中HBase是用于大數(shù)據(jù)領(lǐng)域的列數(shù)據(jù)庫,受限于其查詢性能,一般并不用來做業(yè)務(wù)數(shù)據(jù)庫。

  • 搜索引擎:搜索引擎是針對全文檢索以及數(shù)據(jù)各種維度查詢設(shè)計(jì)的軟件。目前用的比較多的開源軟件是Solr和Elasticsearch,都是基于Lucence來實(shí)現(xiàn)的,不同之處主要在于termIndex的存儲、分布式架構(gòu)的支持等。Elasticsearch由于對集群的良好支持以及高性能的實(shí)現(xiàn),已經(jīng)逐漸成為搜索引擎的主流開源方案。

  • 消息隊(duì)列:數(shù)據(jù)傳輸?shù)囊环N方式就是通過消息隊(duì)列。目前用的比較普遍的消息隊(duì)列包括為日志設(shè)計(jì)的Kafka以及重事務(wù)的RabbitMQ等。在對消息丟失不是特別敏感且并不要求消息事務(wù)的場景下,選擇Kafka能夠獲得更高的性能;否則,RabbitMQ則是更好的選擇。此外,ZeroMQ則是一種實(shí)現(xiàn)消息隊(duì)列的網(wǎng)絡(luò)編程Pattern庫,位于Socket之上,MQ之下。

1.1.4 文件存儲

不管是業(yè)務(wù)應(yīng)用、依賴的后端服務(wù)還是其他的各種服務(wù),最終還是要依賴于底層文件存儲的。通常來說,文件存儲需要滿足的特性有:可靠性、容災(zāi)性、穩(wěn)定性,即要保證存儲的數(shù)據(jù)不會輕易丟失,即使發(fā)生故障也能夠有回滾方案,也要保證高可用。在底層可以采用傳統(tǒng)的RAID作為解決方案,再上一層,目前Hadoop的HDFS則是最為普遍的分布式文件存儲方案,當(dāng)然還有NFS、Samba這種共享文件系統(tǒng)也提供了簡單的分布式存儲的特性。

此外,如果文件存儲確實(shí)成為了應(yīng)用的瓶頸或者必須提高文件存儲的性能從而提升整個(gè)系統(tǒng)的性能時(shí),那么最為直接和簡單的做法就是拋棄傳統(tǒng)機(jī)械硬盤,用SSD硬盤替代。像現(xiàn)在很多公司在解決業(yè)務(wù)性能問題的時(shí)候,最終的關(guān)鍵點(diǎn)往往就是SSD。這也是用錢換取時(shí)間和人力成本最直接和最有效的方式。在數(shù)據(jù)庫部分描述的SSDB就是對LevelDB封裝之后,利用SSD硬盤的特性的一種高性能KV數(shù)據(jù)庫。

至于HDFS,如果要使用上面的數(shù)據(jù),是需要通過Hadoop的。類似xx on Yarn的一些技術(shù)就是將非Hadoop技術(shù)跑在HDFS上的解決方案。

1.1.5 統(tǒng)一認(rèn)證中心

統(tǒng)一認(rèn)證中心,主要是對APP用戶、內(nèi)部用戶、APP等的認(rèn)證服務(wù),包括

  • 用戶的注冊、登錄驗(yàn)證、Token鑒權(quán)

  • 內(nèi)部信息系統(tǒng)用戶的管理和登錄鑒權(quán)

  • APP的管理,包括APP的secret生成,APP信息的驗(yàn)證(如驗(yàn)證接口簽名)等。

之所以需要統(tǒng)一認(rèn)證中心,就是為了能夠集中對這些所有APP都會用到的信息進(jìn)行管理,也給所有應(yīng)用提供統(tǒng)一的認(rèn)證服務(wù)。尤其是在有很多業(yè)務(wù)需要共享用戶數(shù)據(jù)的時(shí)候,構(gòu)建一個(gè)統(tǒng)一認(rèn)證中心是非常必要的。此外,通過統(tǒng)一認(rèn)證中心構(gòu)建移動APP的單點(diǎn)登錄也是水到渠成的事情:模仿Web的機(jī)制,將認(rèn)證后的信息加密存儲到本地存儲中供多個(gè)APP使用。

1.1.6 單點(diǎn)登錄系統(tǒng)

目前很多大的在線Web網(wǎng)站都是有單點(diǎn)登錄系統(tǒng)的,通俗的來說就是只需要一次用戶登錄,就能夠進(jìn)入多個(gè)業(yè)務(wù)應(yīng)用(權(quán)限可以不相同),非常方便用戶的操作。而在移動互聯(lián)網(wǎng)公司中,內(nèi)部的各種管理、信息系統(tǒng)甚至外部應(yīng)用同樣也需要單點(diǎn)登錄系統(tǒng)。

目前,比較成熟的、用的最多的單點(diǎn)登錄系統(tǒng)應(yīng)該是耶魯大學(xué)開源的CAS, 可以基于 https://github.com/apereo/cas/tree/master/cas-server-webapp 來定制開發(fā)的。

基本上,單點(diǎn)登錄的原理都類似下圖所示:

互聯(lián)網(wǎng)后端全套基礎(chǔ)設(shè)施是怎樣的

1.1.7 統(tǒng)一配置中心

在Java后端應(yīng)用中,一種讀寫配置比較通用的方式就是將配置文件寫在Propeties、YAML、HCON等文件中,修改的時(shí)候只需要更新文件重新部署即可,可以做到不牽扯代碼層面改動的目的。統(tǒng)一配置中心,則是基于這種方式之上的統(tǒng)一對所有業(yè)務(wù)或者基礎(chǔ)后端服務(wù)的相關(guān)配置文件進(jìn)行管理的統(tǒng)一服務(wù), 具有以下特性:

  • 能夠在線動態(tài)修改配置文件并生效

  • 配置文件可以區(qū)分環(huán)境(開發(fā)、測試、生產(chǎn)等)

  • 在Java中可以通過注解、XML配置的方式引入相關(guān)配置

百度開源的Disconf和攜程的Apollo是可以在生產(chǎn)環(huán)境使用的方案,也可以根據(jù)自己的需求開發(fā)自己的配置中心,一般選擇Zookeeper作為配置存儲。

1.1.8 服務(wù)治理框架

對于外部API調(diào)用或者客戶端對后端API的訪問,可以使用HTTP協(xié)議或者RESTful(當(dāng)然也可以直接通過最原始的socket來調(diào)用)。但對于內(nèi)部服務(wù)間的調(diào)用,一般都是通過RPC機(jī)制來調(diào)用的。目前主流的RPC協(xié)議有:

  • RMI

  • Hessian

  • Thrift

  • Dubbo

這些RPC協(xié)議各有優(yōu)劣點(diǎn),需要針對業(yè)務(wù)需求做出最好的選擇。

這樣,當(dāng)你的系統(tǒng)服務(wù)在逐漸增多,RPC調(diào)用鏈越來越復(fù)雜,很多情況下,需要不停的更新文檔來維護(hù)這些調(diào)用關(guān)系。一個(gè)對這些服務(wù)進(jìn)行管理的框架可以大大減少因此帶來的繁瑣的人力工作。

傳統(tǒng)的ESB(企業(yè)服務(wù)總線)本質(zhì)就是一個(gè)服務(wù)治理方案,但ESB作為一種proxy的角色存在于Client和Server之間,所有請求都需要經(jīng)過ESB,使得ESB很容易成為性能瓶頸。因此,基于傳統(tǒng)的ESB,更好的一種設(shè)計(jì)如下圖所示:

互聯(lián)網(wǎng)后端全套基礎(chǔ)設(shè)施是怎樣的

如圖,以配置中心為樞紐,調(diào)用關(guān)系只存在于Client和提供服務(wù)的Server之間,就避免了傳統(tǒng)ESB的性能瓶頸問題。對于這種設(shè)計(jì),ESB應(yīng)該支持的特性如下:

  • 服務(wù)提供方的注冊、管理

  • 服務(wù)消費(fèi)者的注冊、管理

  • 服務(wù)的版本管理、負(fù)載均衡、流量控制、服務(wù)降級、資源隔離

  • 服務(wù)的容錯(cuò)、熔斷

阿里開源的Dubbo則對以上做了很好的實(shí)現(xiàn),也是目前很多公司都在使用的方案;當(dāng)當(dāng)網(wǎng)的擴(kuò)展項(xiàng)目Dubbox則在Dubbo之上加入了一些新特性。目前,Dubbo已經(jīng)被阿里貢獻(xiàn)給Apache,處于incubating狀態(tài)。在運(yùn)維監(jiān)控方面,Dubbo本身提供了簡單的管理控制臺dubbo-admin和監(jiān)控中心dubbo-monitor-simple。Github上的dubboclub/dubbokeeper則是在其之上開發(fā)的更為強(qiáng)大的集管理與監(jiān)控于一身的服務(wù)管理以及監(jiān)控系統(tǒng)。

此外,Netflix的Eureka也提供了服務(wù)注冊發(fā)現(xiàn)的功能,其配合Ribbon可以實(shí)現(xiàn)服務(wù)的客戶端軟負(fù)載均衡,支持多種靈活的動態(tài)路由和負(fù)載均衡策略。

1.1.9 統(tǒng)一調(diào)度中心

在很多業(yè)務(wù)中,定時(shí)調(diào)度是一個(gè)非常普遍的場景,比如定時(shí)去抓取數(shù)據(jù)、定時(shí)刷新訂單的狀態(tài)等。通常的做法就是針對各自的業(yè)務(wù)依賴Linux的Cron機(jī)制或者Java中的Quartz。統(tǒng)一調(diào)度中心則是對所有的調(diào)度任務(wù)進(jìn)行管理,這樣能夠統(tǒng)一對調(diào)度集群進(jìn)行調(diào)優(yōu)、擴(kuò)展、任務(wù)管理等。Azkaban和Yahoo的Oozie是Hadoop的流式工作管理引擎,也可以作為統(tǒng)一調(diào)度中心來使用。當(dāng)然,你也可以使用Cron或者Quartz來實(shí)現(xiàn)自己的統(tǒng)一調(diào)度中心。

  • 根據(jù)Cron表達(dá)式調(diào)度任務(wù)

  • 動態(tài)修改、停止、刪除任務(wù)

  • 支持任務(wù)分片執(zhí)行

  • 支持任務(wù)工作流:比如一個(gè)任務(wù)完成之后再執(zhí)行下一個(gè)任務(wù)

  • 任務(wù)支持腳本、代碼、url等多種形式

  • 任務(wù)執(zhí)行的日志記錄、故障報(bào)警

對于Java的Quartz這里需要說明一下:這個(gè)Quartz需要和Spring Quartz區(qū)分,后者是Spring對Quartz框架的簡單實(shí)現(xiàn)也是目前使用的最多的一種調(diào)度方式。但其并沒有做高可用集群的支持。而Quartz雖然有集群的支持,但是配置起來非常復(fù)雜。現(xiàn)在很多方案都是使用Zookeeper來實(shí)現(xiàn)Spring Quartz的分布式集群。

此外,當(dāng)當(dāng)網(wǎng)開源的elastic-job則在基礎(chǔ)的分布式調(diào)度之上又加入了彈性資源利用等更為強(qiáng)大的功能。

1.1.10 統(tǒng)一日志服務(wù)

日志是開發(fā)過程必不可少的東西。打印日志的時(shí)機(jī)、技巧是很能體現(xiàn)出工程師編碼水平的。畢竟,日志是線上服務(wù)能夠定位、排查異常最為直接的信息。

通常的,將日志分散在各個(gè)業(yè)務(wù)中非常不方便對問題的管理和排查。統(tǒng)一日志服務(wù)則使用單獨(dú)的日志服務(wù)器記錄日志,各個(gè)業(yè)務(wù)通過統(tǒng)一的日志框架將日志輸出到日志服務(wù)器上。

可以通過實(shí)現(xiàn)Log4j或者Logback的Appender來實(shí)現(xiàn)統(tǒng)一日志框架,然后通過RPC調(diào)用將日志打印到日志服務(wù)器上。

1.1.11 數(shù)據(jù)基礎(chǔ)設(shè)施

數(shù)據(jù)是最近幾年非常火的一個(gè)領(lǐng)域。從《精益數(shù)據(jù)分析》到《增長黑客》,都是在強(qiáng)調(diào)數(shù)據(jù)的非凡作用。很多公司也都在通過數(shù)據(jù)推動產(chǎn)品設(shè)計(jì)、市場運(yùn)營、研發(fā)等。這里需要說明的一點(diǎn)是,只有當(dāng)你的數(shù)據(jù)規(guī)模真的到了單機(jī)無法處理的規(guī)模才應(yīng)該上大數(shù)據(jù)相關(guān)技術(shù),千萬不要為了大數(shù)據(jù)而大數(shù)據(jù)。很多情況下使用單機(jī)程序+MySQL就能解決的問題非得上Hadoop即浪費(fèi)時(shí)間又浪費(fèi)人力。

這里需要補(bǔ)充一點(diǎn)的是,對于很多公司,尤其是離線業(yè)務(wù)并沒有那么密集的公司,在很多情況下大數(shù)據(jù)集群的資源是被浪費(fèi)的。因此誕了 xx on Yarn 一系列技術(shù)讓非Hadoop系的技術(shù)可以利用大數(shù)據(jù)集群的資源,能夠大大提高資源的利用率,如Dockeron Yarn。

數(shù)據(jù)高速公路

接著上面講的統(tǒng)一日志服務(wù),其輸出的日志最終是變成數(shù)據(jù)到數(shù)據(jù)高速公路上供后續(xù)的數(shù)據(jù)處理程序消費(fèi)的。這中間的過程包括日志的收集和傳輸。

  • 收集:統(tǒng)一日志服務(wù)將日志打印在日志服務(wù)上之后,需要日志收集機(jī)制將其集中起來。目前,常見的日志收集方案有:Scribe、Chukwa、Kakfa和Flume。對比如下圖所示:

    互聯(lián)網(wǎng)后端全套基礎(chǔ)設(shè)施是怎樣的

    此外,Logstash也是一個(gè)可以選擇的日志收集方案,不同于以上的是,它更傾向于數(shù)據(jù)的預(yù)處理,且配置簡單、清晰,經(jīng)常以ELK(Elasticsearch + Logstash + Kibana)的架構(gòu)用于運(yùn)維場景中。

  • 傳輸:通過消息隊(duì)列將數(shù)據(jù)傳輸?shù)綌?shù)據(jù)處理服務(wù)中。對于日志來說,通常選擇Kafka這個(gè)消息隊(duì)列即可。

此外,這里還有一個(gè)關(guān)鍵的技術(shù)就是數(shù)據(jù)庫和數(shù)據(jù)倉庫間的數(shù)據(jù)同步問題,即將需要分析的數(shù)據(jù)從數(shù)據(jù)庫中同步到諸如Hive這種數(shù)據(jù)倉庫時(shí)使用的方案。可以使用Apache Sqoop進(jìn)行基于時(shí)間戳的數(shù)據(jù)同步,此外,阿里開源的Canal實(shí)現(xiàn)了基于binlog增量同步,更加適合通用的同步場景,但是基于Canal還是需要做不少的業(yè)務(wù)開發(fā)工作。

離線數(shù)據(jù)分析

離線數(shù)據(jù)分析是可以有延遲的,一般針對的是非實(shí)時(shí)需求的數(shù)據(jù)分析工作,產(chǎn)生的也是延遲一天的報(bào)表。目前最常用的離線數(shù)據(jù)分析技術(shù)除了Hadoop還有Spark。相比Hadoop,Spark性能上有很大優(yōu)勢,當(dāng)然對硬件資源要求也高。其中,Hadoop中的Yarn作為資源管理調(diào)度組件除了服務(wù)于MR還可以用于Spark(Spark on Yarn),Mesos則是另一種資源管理調(diào)度系統(tǒng)。

對于Hadoop,傳統(tǒng)的MR編寫很復(fù)雜,也不利于維護(hù),可以選擇使用Hive來用SQL替代編寫MR。而對于Spark,也有類似Hive的Spark SQL。

此外,對于離線數(shù)據(jù)分析,還有一個(gè)很關(guān)鍵的就是數(shù)據(jù)傾斜問題。所謂數(shù)據(jù)傾斜指的是region數(shù)據(jù)分布不均,造成有的結(jié)點(diǎn)負(fù)載很低,而有些卻負(fù)載很高,從而影響整體的性能。處理好數(shù)據(jù)傾斜問題對于數(shù)據(jù)處理是很關(guān)鍵的。

實(shí)時(shí)數(shù)據(jù)分析

相對于離線數(shù)據(jù)分析,實(shí)時(shí)數(shù)據(jù)分析也叫在線數(shù)據(jù)分析,針對的是對數(shù)據(jù)有實(shí)時(shí)要求的業(yè)務(wù)場景,如廣告結(jié)算、訂單結(jié)算等。目前,比較成熟的實(shí)時(shí)技術(shù)有Storm和Spark Streaming。相比起Storm,Spark Streaming其實(shí)本質(zhì)上還是基于批量計(jì)算的。如果是對延遲很敏感的場景,還是應(yīng)該使用Storm。除了這兩者,F(xiàn)link則是最近很火的一個(gè)分布式實(shí)時(shí)計(jì)算框架,其支持Exactly Once的語義,在大數(shù)據(jù)量下具有高吞吐低延遲的優(yōu)勢,并且能夠很好的支持狀態(tài)管理和窗口統(tǒng)計(jì),但其文檔、API管理平臺等都還需要完善。

實(shí)時(shí)數(shù)據(jù)處理一般情況下都是基于增量處理的,相對于離線來說并非可靠的,一旦出現(xiàn)故障(如集群崩潰)或者數(shù)據(jù)處理失敗,是很難對數(shù)據(jù)恢復(fù)或者修復(fù)異常數(shù)據(jù)的。因此結(jié)合離線+實(shí)時(shí)是目前最普遍采用的數(shù)據(jù)處理方案。Lambda架構(gòu)就是一個(gè)結(jié)合離線和實(shí)時(shí)數(shù)據(jù)處理的架構(gòu)方案。

此外,實(shí)時(shí)數(shù)據(jù)分析中還有一個(gè)很常見的場景:多維數(shù)據(jù)實(shí)時(shí)分析,即能夠組合任意維度進(jìn)行數(shù)據(jù)展示和分析。目前有兩種解決此問題的方案:ROLAP和MOLAP。

  • ROLAP:使用關(guān)系型數(shù)據(jù)庫或者擴(kuò)展的關(guān)系型數(shù)據(jù)庫來管理數(shù)據(jù)倉庫數(shù)據(jù),以Hive、Spark SQL、Presto為代表。

  • MOLAP:基于數(shù)據(jù)立方體的多位存儲引擎,用空間換時(shí)間,把所有的分析情況都物化為物理表或者視圖。以Druid、Pinot和Kylin為代表,不同于ROLAP(Hive、Spark SQL), 其原生的支持多維的數(shù)據(jù)查詢。

如上一小節(jié)所述,ROLAP的方案大多數(shù)情況下用戶離線數(shù)據(jù)分析,滿足不了實(shí)時(shí)的需求,因此MOLAP是多維數(shù)據(jù)實(shí)時(shí)分析的常用方案。對于其中常用的三個(gè)框架,對比如下:

.使用場景語言協(xié)議特點(diǎn)
Druid實(shí)時(shí)處理分析JavaJSON實(shí)時(shí)聚合
Pinot實(shí)時(shí)處理分析JavaJSON實(shí)時(shí)聚合
KylinOLAP分析引擎JavaJDBC/OLAP預(yù)處理、cache

其中,Druid相對比較輕量級,用的人較多,比較成熟。

數(shù)據(jù)即席分析

離線和實(shí)時(shí)數(shù)據(jù)分析產(chǎn)生的一些報(bào)表是給數(shù)據(jù)分析師、產(chǎn)品經(jīng)理參考使用的,但是很多情況下,線上的程序并不能滿足這些需求方的需求。這時(shí)候就需要需求方自己對數(shù)據(jù)倉庫進(jìn)行查詢統(tǒng)計(jì)。針對這些需求方,SQL上手容易、易描述等特點(diǎn)決定了其可能是一個(gè)最為合適的方式。因此提供一個(gè)SQL的即席查詢工具能夠大大提高數(shù)據(jù)分析師、產(chǎn)品經(jīng)理的工作效率。Presto、Impala、Hive都是這種工具。如果想進(jìn)一步提供給需求方更加直觀的ui操作界面,可以搭建內(nèi)部的Hue。

互聯(lián)網(wǎng)后端全套基礎(chǔ)設(shè)施是怎樣的

1.1.12 故障監(jiān)控

對于面向用戶的線上服務(wù),發(fā)生故障是一件很嚴(yán)重的事情。因此,做好線上服務(wù)的故障檢測告警是一件非常重要的事情。可以將故障監(jiān)控分為以下兩個(gè)層面的監(jiān)控:

  • 系統(tǒng)監(jiān)控:主要指對主機(jī)的帶寬、CPU、內(nèi)存、硬盤、IO等硬件資源的監(jiān)控。可以使用Nagios、Cacti等開源軟件進(jìn)行監(jiān)控。目前,市面上也有很多第三方服務(wù)能夠提供對于主機(jī)資源的監(jiān)控,如監(jiān)控寶等。對于分布式服務(wù)集群(如Hadoop、Storm、Kafka、Flume等集群)的監(jiān)控則可以使用Ganglia。此外,小米開源的OpenFalcon也很不錯(cuò),涵蓋了系統(tǒng)監(jiān)控、JVM監(jiān)控、應(yīng)用監(jiān)控等,也支持自定義的監(jiān)控機(jī)制。

  • 業(yè)務(wù)監(jiān)控:是在主機(jī)資源層面以上的監(jiān)控,比如APP的PV、UV數(shù)據(jù)異常、交易失敗等。需要業(yè)務(wù)中加入相關(guān)的監(jiān)控代碼,比如在異常拋出的地方,加一段日志記錄。

監(jiān)控還有一個(gè)關(guān)鍵的步驟就是告警。告警的方式有很多種:郵件、IM、短信等。考慮到故障的重要性不同、告警的合理性、便于定位問題等因素,有以下建議:

  • 告警日志要記錄發(fā)生故障的機(jī)器ID,尤其是在集群服務(wù)中,如果沒有記錄機(jī)器ID,那么對于后續(xù)的問題定位會很困難。

  • 要對告警做聚合,不要每一個(gè)故障都單獨(dú)進(jìn)行告警,這樣會對工程師造成極大的困擾。

  • 要對告警做等級劃分,不能對所有告警都做同樣的優(yōu)先級處理。

  • 使用微信做為告警軟件,能夠在節(jié)省短信成本的情況下,保證告警的到達(dá)率。

故障告警之后,那么最最關(guān)鍵的就是應(yīng)對了。對于創(chuàng)業(yè)公司來說,24小時(shí)待命是必備的素質(zhì),當(dāng)遇到告警的時(shí)候,需要盡快對故障做出反應(yīng),找到問題所在,并能在可控時(shí)間內(nèi)解決問題。對于故障問題的排查,基本上都是依賴于日志的。只要日志打的合理,一般情況下是能夠很快定位到問題所在的,但是如果是分布式服務(wù),并且日志數(shù)據(jù)量特別大的情況下,如何定位日志就成為了難題。這里有幾個(gè)方案:

  • 建立ELK(Elasticsearch + Logstash + Kibana)日志集中分析平臺,便于快速搜索、定位日志。搭配Yelp開源的Elastalert可以實(shí)現(xiàn)告警功能。

  • 建立分布式請求追蹤系統(tǒng)(也可以叫全鏈路監(jiān)測系統(tǒng)),對于分布式系統(tǒng)尤是微服務(wù)架構(gòu),能夠極大的方便在海量調(diào)用中快速定位并收集單個(gè)異常請求信息,也能快速定位一條請求鏈路的性能瓶頸。唯品會的Mercury、阿里的鷹眼、新浪的WatchMan、Twitter開源的Zipkin基本都是基于Google的Dapper論文而來,大眾點(diǎn)評的實(shí)時(shí)應(yīng)用監(jiān)控平臺CAT則在支持分布式請求追蹤(代碼侵入式)的基礎(chǔ)上加入了細(xì)粒度的調(diào)用性能數(shù)據(jù)統(tǒng)計(jì)。此外,Apache正在孵化中的HTrace則是針對大的分布式系統(tǒng)諸如HDFS文件系統(tǒng)、HBase存儲引擎而設(shè)計(jì)的分布式追蹤方案。而如果你的微服務(wù)實(shí)現(xiàn)使用了Spring Cloud,那么Spring Cloud Sleuth則是最佳的分布式跟蹤方案。還需要提到的是,Apache孵化中的SkyWalking是基于分布式追蹤的一個(gè)完備的APM(應(yīng)用性能監(jiān)測)系統(tǒng),其大的一個(gè)特點(diǎn)就是基于Java agent + instrument api,對業(yè)務(wù)代碼無任何侵入,Pinpoint則是類似的另一個(gè)已經(jīng)用于生產(chǎn)環(huán)境的APM系統(tǒng)。

關(guān)于互聯(lián)網(wǎng)后端全套基礎(chǔ)設(shè)施是怎樣的問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道了解更多相關(guān)知識。

網(wǎng)站標(biāo)題:互聯(lián)網(wǎng)后端全套基礎(chǔ)設(shè)施是怎樣的-創(chuàng)新互聯(lián)
本文地址:http://www.2m8n56k.cn/article12/dgsedc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)服務(wù)器托管微信小程序面包屑導(dǎo)航云服務(wù)器商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
主站蜘蛛池模板: 日本成人免费在线视频 | 全部aⅴ极品视觉盛宴精品 全部免费a级毛片 | 日韩视频大全 | 日韩性片 | 狠狠色丁香婷婷久久综合不卡 | 国产亚洲一级精品久久 | 亚洲天堂一区二区 | 精品视频在线一区 | 久久精品亚洲乱码伦伦中文 | 日韩精品一区二区三区中文字幕 | 亚洲自偷自偷图片在线高清 | 免费高清毛片在线播放视频 | 国产精品免费aⅴ片在线观看 | 高清国产精品久久 | 亚洲精品99久久一区二区三区 | 国产欧美一区二区三区观看 | 欧美在线一级毛片观看 | 岛国在线永久免费视频 | 五月久久亚洲七七综合中文网 | 亚洲成人自拍 | 久久久国产精品免费视频 | 亚洲精品资源在线 | 欧美另类专区 | 国产午夜精品不卡视频 | 久久精品店 | 911精品国产91久久久久 | 一本久| 欧美黄色精品 | 中文字幕精品视频 | 91精品国产色综合久久不 | 精品国语_高清国语自产 | 日韩精品免费视频 | 一级毛片私人影院老司机 | 欧美极品在线 | 国产欧美精品区一区二区三区 | 亚洲视频 欧美视频 | 日本高清色本在线www | 成年人在线观看视频免费 | 国产超薄肉色丝袜足j | 久久中文字幕久久久久91 | 国产欧美在线不卡 |