日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DCOS实践分享(4):如何基于DC/OS整合SMACK(Spark, Mesos, Akka, Cassandra, Kafka)

發(fā)布時間:2023/12/10 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DCOS实践分享(4):如何基于DC/OS整合SMACK(Spark, Mesos, Akka, Cassandra, Kafka) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這篇文章入選CSDN極客頭條

http://geek.csdn.net/news/detail/71572

當前,要保證業(yè)務(wù)的市場競爭力,僅靠設(shè)計一個可用并且好看的產(chǎn)品,已經(jīng)完全不能滿足要求。全球消費者都希望產(chǎn)品能夠足夠的智能化,通過大數(shù)據(jù)分析來改善他們的用戶體驗。簡言之,物聯(lián)網(wǎng)和大數(shù)據(jù)終將成為改變生活的技術(shù)驅(qū)動力。

近幾年涌現(xiàn)了大量的技術(shù)架構(gòu)與設(shè)計模式,開發(fā)者和科學家可以利用它們?yōu)榇髷?shù)據(jù)和物聯(lián)網(wǎng)開發(fā)實時的數(shù)據(jù)分析工作流應(yīng)用。其中批處理架構(gòu),流式處理架構(gòu),lambda架構(gòu),Kappa架構(gòu),都是其中的代表。所有這些架構(gòu),都需要一個易擴展的大數(shù)據(jù)處理平臺作為基礎(chǔ)。于是2014年底,一組可相互兼容,互相協(xié)作的開源組件被整合起來作為這個基礎(chǔ)平臺。SMACK應(yīng)運而生。

SMACK包括Spark, Mesos, Akka, Cassandra, 以及Kafka,功能如下:

  • 包含廣泛應(yīng)用于大數(shù)據(jù)數(shù)據(jù)處理場景的輕量級工具包
  • 包含被健壯測試并廣泛應(yīng)用的開源軟件,有強大的社區(qū)支持
  • 可保證低延時下的可伸縮性和數(shù)據(jù)備份。
  • 統(tǒng)一的集群管理平臺來管理多樣的,不同負載的應(yīng)用。

在部署具體的應(yīng)用的時候,大數(shù)據(jù)平臺往往要和普通應(yīng)用一起配合使用,近年來,普通應(yīng)用微服務(wù)化,容器技術(shù)如火如荼,我們需要一個平臺技能管理容器,也能管理大數(shù)據(jù)平臺。

能夠管理容器的框架很多,有Docker陣營的,Kubernetes陣營的,各有優(yōu)劣。能夠管理大數(shù)據(jù)的平臺也很多,從Hadoop到Spark。但是部署的時候,往往需要各個集群分開運維,容器應(yīng)用一個集群,Hadoop一個集群,Spark一個集群,增加了運維的難度和硬件的開銷。DC/OS解決了這個問題,它可以將容器,普通應(yīng)用,大數(shù)據(jù)應(yīng)用在同一個框架管理起來,共享資源,簡化運維。

本文將帶大家來領(lǐng)略如何基于DC/OS的SMACK運行一個應(yīng)用,以及SMACK中的各個組件如何整合。

總體架構(gòu)

下圖是一個基于SMACK的經(jīng)典應(yīng)用的總體架構(gòu)。此應(yīng)用會接入大量的數(shù)據(jù),并對數(shù)據(jù)做分析。具體說來,此應(yīng)用從用戶家里的智能儀表收集能源使用數(shù)據(jù),這些數(shù)據(jù)會被大數(shù)據(jù)分析,從而生成一個地區(qū)的能源消耗分布圖。可以被相關(guān)部門用于預(yù)估另一個地區(qū)的能源消耗。

如圖所示,智能儀表的數(shù)據(jù)會通過互聯(lián)網(wǎng)調(diào)用計量服務(wù)的HTTP接口,發(fā)送到數(shù)據(jù)中心。計量服務(wù)將消息通過Kafka發(fā)送到模擬器服務(wù)。模擬器服務(wù)獎數(shù)據(jù)存儲在Cassandra里面。

Spark從Cassandra里面讀取數(shù)據(jù)進行分析,將分析的結(jié)果存入Cassandra。

模擬器服務(wù)可以將Cassandra中的分析結(jié)果讀出。

當用戶從手機和電腦上打開網(wǎng)頁的時候,網(wǎng)頁訪問計量服務(wù)的HTTP接口,計量服務(wù)從模擬器服務(wù)讀取分析結(jié)果,展示給用戶。

詳細設(shè)計

前提條件

  • 安裝一個DC/OS集群
  • 部署一個DC/OS命令行工具

DC/OS服務(wù)

接下來,我們要保證所有必需的DC/OS的服務(wù)都處于正常狀態(tài)。下面列表中的某些服務(wù)是DC/OS的核心組件,我們把他們列在這里,是因為我們的應(yīng)用十分依賴于這些組件。

Marathon

Marathon是DC/OS的核心組件,DC/OS安裝好后就自帶Marathon。在使用他之前,我們最好查看一下他的狀態(tài)。

dcos marathon about | jq ".elected == true"

Marathon LB - external (用于外部訪問的Marathon負載均衡器)

默認的Marathon負載均衡器框架會創(chuàng)建一個用于外部訪問的負載均衡器實例。

如需詳細了解DC/OS如何使用Marathon負載均衡器框架,可訪問此鏈接。

快速安裝:

dcos package install marathon-lb

Marathon負載均衡器是基于haproxy的,可用過下面的URL訪問http://p1.dcos:9090/haproxy?stats。Mesos DNS作為DC/OS內(nèi)部的DNS會記錄Marathon負載均衡器的域名為marathon-lb.marathon.mesos。Mesos DNS也是DC/OS的核心組件。Marathon負載均衡器會被安裝在任一DC/OS的公網(wǎng)節(jié)點上,例如p1是一個公網(wǎng)節(jié)點的域名,可以通過http://p1.dcos訪問Marathon負載均衡器。

Marathon LB - internal (用于內(nèi)部訪問的Marathon負載均衡器)

需要創(chuàng)建另一個Marathon的負載均衡器,用于內(nèi)部組件的相互訪問,而不需要內(nèi)部組件之間的網(wǎng)絡(luò)流量也經(jīng)過公網(wǎng)。

快速安裝:

cat < marathon-internal-lb-options.json { "marathon-lb":{ "name":"marathon-lb-internal", "haproxy-group":"internal", "bind-http-https":false, "role":"" } } EOF dcos package install --options=marathon-internal-lb-options.json marathon-lb

內(nèi)部的Marathon負載均衡器在Mesos DNS中的域名為marathon-lb-internal.marathon.mesos。

Kafka

Kafka已經(jīng)在DC/OS的服務(wù)庫中,所以我們可以直接拿過來用,而不需要自己管理和維護一個Kafka集群

快速安裝:

dcos package install --yes kafka

只需要運行下面的命令就可以驗證服務(wù)的狀態(tài)。

dcos package list kafka; dcos kafka help

Kafka服務(wù)作為Marathon的一個Job運行,從而可以實現(xiàn)長期運行,高可用,彈性伸縮。安裝Kafka需要幾分鐘的時間,可以通過Marathon查看進度。

Kafka默認有三個Broker實例。你可以定制化Kafka服務(wù),根據(jù)所需要處理的負載情況,創(chuàng)建更多的Broker。Kafka中的Topic的創(chuàng)建以及消息的消費都是由應(yīng)用層進行處理。

Cassandra

作為大數(shù)據(jù)基礎(chǔ)架構(gòu),把Cassandra運行在DC/OS上也是必須的。Cassandra已經(jīng)放在了DC/OS的服務(wù)庫中了。

快速安裝:

$ dcos package install cassandra Installing Marathon app for package [cassandra] version [1.0.0-2.2.5] Installing CLI subcommand for package [cassandra] version [1.0.0-2.2.5] New command available: dcos cassandra DC/OS Cassandra Service is being installed.

安裝Cassandra需要幾分鐘的時間。默認情況下,Cassandra會安裝3個節(jié)點,其中2個是種子節(jié)點。

ssh到Cassandra集群

Cassandra集群已經(jīng)運行起來了,下面需要連接到這個集群。讓我們通過下面的命令先得到連接信息。

$ dcos cassandra connection {"nodes": ["192.168.65.111:9042","192.168.65.121:9042", "192.168.65.131:9042" ] }

因為IP都是私有IP,因此我們首先要ssh到DC/OS集群中,然后才能練到Cassandra集群。

$ dcos node ssh --master-proxy --leader

現(xiàn)在我們進入到了DC/OS集群內(nèi)部,可以直接連接Cassandra集群了。我們使用cqlsh客戶端,選取一個Cassandra的節(jié)點進行連接。運行下面的命令。

$ docker run -ti cassandra:2.2.5 cqlsh 10.0.2.136 cqlsh>

創(chuàng)建keyspace

我們已經(jīng)連接到了Cassandra集群,創(chuàng)建一個名為iot_demo的keyspace.

cqlsh> CREATE KEYSPACE iot_demo WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };

創(chuàng)建好了keyspace,我們可以添加一些表及模擬數(shù)據(jù)到keyspace里面,從而我們的應(yīng)用可以使用Cassandra.

服務(wù)發(fā)現(xiàn)

基于DC/OS命令行的服務(wù)發(fā)現(xiàn)

我們可以使用DC/OS的工具進行服務(wù)發(fā)現(xiàn)。在Docker的Entrypoint里面,可以嵌入腳本,通過DC/OS的命令行發(fā)現(xiàn)服務(wù),并export在環(huán)境變量里面。

Akka的服務(wù)發(fā)現(xiàn)

為了發(fā)現(xiàn)Akka節(jié)點,在Docker的entrypoint腳本docker-entrypoint.sh中,嵌入下面的命令:

export AKKA_SEED_NODES=`dcos marathon app show | jq -r ".tasks[].host" | tr '\n' ',' | sed 's/,$//g'`

應(yīng)用的配置可以使用這個環(huán)境變量。如果自己是Akka集群的第一個節(jié)點,則創(chuàng)建一個Akka集群,如果已經(jīng)存在一個Akka集群,則可以發(fā)現(xiàn)并加入這個集群。

我們考慮了下面這個特殊的場景:

當前容器中的Akka節(jié)點是第一個節(jié)點,在這種特殊情況下,服務(wù)發(fā)現(xiàn)這一步的結(jié)果是發(fā)現(xiàn)了自己,此結(jié)果是正確的,做默認處理即可。

Kafka的服務(wù)發(fā)現(xiàn)

類似,我們同樣可以在Docker的entrypoint里面嵌入下面的腳本發(fā)現(xiàn)Kafka的所有的broker。

export KAFKA_BROKERS_LIST=`dcos kafka connection --dns | jq -r ".names[]" | tr '\n' ',' | sed 's/,$//g'`

基于Marathon負載均衡器的服務(wù)發(fā)現(xiàn)

可以使用內(nèi)部的和外部的Marathon負載均衡器作為服務(wù)發(fā)現(xiàn)的另一種方式。

應(yīng)用層的部署

我們已經(jīng)部署完了DC/OS的服務(wù),并且配置了服務(wù)發(fā)現(xiàn)。接下來,我們來部署應(yīng)用,使用這些DC/OS服務(wù)。

我們將使用Marathon部署應(yīng)用層,從而達到應(yīng)用的長時間運行。應(yīng)用的組件會作為Marathon的任務(wù)運行在Docker里面。組件之間的相互配置和依賴關(guān)系,都可以通過Marathon來實現(xiàn)。

應(yīng)用層保護兩個微服務(wù),計量服務(wù)和模擬器服務(wù),另外還有一個簡單的網(wǎng)頁做展示。

計量服務(wù)

計量服務(wù)構(gòu)成一個Akka集群,暴露REST接口被模擬器服務(wù)和網(wǎng)頁訪問。

計量服務(wù)定義為下面的json,發(fā)送給Marathon進行部署

{"id": "meter","container": { "type": "DOCKER", "docker": { "image": "cakesolutions/iot-demo-meter" } }, "labels":{ "HAPROXY_GROUP":"external,internal" } … }

Marathon的任務(wù)定義包含一個特殊的標簽HAPROXY_GROUP,通過這個標簽,Marathon負載均衡器知道是否暴露這個應(yīng)用。”external”是默認的用于外部訪問的Marathon負載均衡器,說明外部可以訪問這個服務(wù)。

“internal”是用于內(nèi)部訪問的Marathon負載均衡器,說明此服務(wù)可以通過下面的DNS,被內(nèi)部的其他組件訪問:marathon-lb-internal.marathon.mesos:1900。模擬器服務(wù)就可以使用這個DNS訪問計量服務(wù)的REST API。

用于外部訪問的Marathon負載均衡器需要保證內(nèi)部的DNS marathon-lb.marathon.mesos:19002可以在外網(wǎng)上被解析為p1.dcos:19002。

網(wǎng)頁就需要使用這個外網(wǎng)可訪問的域名,因為網(wǎng)頁是運行在瀏覽器里面的,在數(shù)據(jù)中心外,無法使用內(nèi)部DNS.

接下來,我們調(diào)用下面的命令部署計量服務(wù)。

dcos marathon app add meter.json The Marathon jobs can be redeployed by using either Marathon API, either DC/OS CLI. Traditionally now we’ve been using the Marathon API, directly or with the Python driver.

模擬器服務(wù)

模擬器服務(wù)的Marathon的json如下:

{"id": "simulator","container": { "type": "DOCKER", "docker": { "image": "cakesolutions/iot-demo-simulator" } }, "env": { "METER_HOST": "marathon-lb-internal.marathon.mesos", "METER_PORT": "19002" }, "labels":{ "HAPROXY_GROUP":"external" } }

類似,我們通過下面的命令將模擬器服務(wù)作為Marathon的任務(wù)運行,從而實現(xiàn)長時間運行。

dcos marathon app add simulator.json

模擬器服務(wù)需要知道計量服務(wù)的API,所以我們將計量服務(wù)的DNS作為環(huán)境變量傳給了模擬器服務(wù)。

用于外部訪問的Marathon負載均衡器需要保證內(nèi)部的DNS marathon-lb.marathon.mesos:19001可以在外網(wǎng)上被解析為p1.dcos:19001。從而可以被網(wǎng)頁訪問。

網(wǎng)頁客戶端

網(wǎng)頁也使用Marathon的json如下:

{"id": "web","container": { "type": "DOCKER", "docker": { "image": "cakesolutions/iot-demo-web", } }, "env": { "METER_HOST": "p1.dcos", "METER_PORT": "19002", "METER_HOST": "p1.dcos", "METER_PORT": "19001" }, "labels":{ "HAPROXY_GROUP":"external" } }

將網(wǎng)頁運行為Marathon的任務(wù)。

dcos marathon app add web.json

網(wǎng)頁需要能夠在瀏覽器中訪問計量服務(wù)和模擬器服務(wù),因而兩個服務(wù)的DNS都作為環(huán)境變量傳給了網(wǎng)頁的Docker.

P1.dcos是DC/OS公網(wǎng)節(jié)點的DNS域名,Marathon的負載均衡器會運行在這個公網(wǎng)節(jié)點上。

METER_HOST=p1.dcos METER_PORT=19002 SIMULATOR_HOST=p1.dcos SIMULATOR_PORT=19001

總結(jié)

到此,我們看到了SMACK中的框架如何運行在DC/OS上,例如Kafka, Cassandra這些復(fù)雜的組件如何被方便的安裝和配置,如何基于這些框架構(gòu)建自己的服務(wù)。

因而我們可以得出結(jié)論,DC/OS的確是:

  • 在生產(chǎn)環(huán)境部署容器應(yīng)用的最方便的方式
  • 充分高效率利用我們的基礎(chǔ)架構(gòu)的最方便的方式
  • 非常方便的將不同的框架安裝在同一個集群環(huán)境中。
  • 提供了一種非常方便的方式對服務(wù)進行彈性伸縮。

總而言之,DC/OS是能夠解決您數(shù)據(jù)中心問題的完整解決方案。誠如大家所知,DC/OS是基于Mesos的,是高可靠的,是被生產(chǎn)環(huán)境驗證過的。

http://www.cnblogs.com/popsuper1982/p/5585437.html

?

轉(zhuǎn)載于:https://www.cnblogs.com/softidea/p/7003126.html

總結(jié)

以上是生活随笔為你收集整理的DCOS实践分享(4):如何基于DC/OS整合SMACK(Spark, Mesos, Akka, Cassandra, Kafka)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。