1. 程式人生 > >kafka 對外提供服務方案簡述

kafka 對外提供服務方案簡述

背景

首先,使用者資料會經過 kafka 佇列傳遞到我們的業務層。我們希望使用者能夠通過一個通用層接入我們的kafka服務,但是有的使用者希望能夠直接連到我們的 kafka 上面,這就需要我們的 kafka 對外暴露broke服務以便被接入。那麼如何保證使用者資料接入的可靠性和安全性,就成為了這篇文章的主要內容。

目標

我們希望其他公司資料接入的方式儘量鬆耦合,儘量不依賴內部架構,而對於一些使用者要直接接入 kafka 的要求也可以支援。同時,還要保證資料在傳遞過程中的安全性,防止惡意的連線攻擊等。具體如下幾點:
1. 接入方式儘量鬆耦合;
2. 連線的可靠性,即只有特定的使用者或IP 可以建立連線;
3. 資料的安全性,傳遞過程中的資料是經過加密的;
4. 支援使用者直連 kafka 的broke,但客戶端的所有行為都是被許可的。

方案設計

首先,我們希望使用者的接入方式是簡單的、通用的、安全的,是不影響內部業務邏輯的。其次,對於那些指定要直連 kafka 的接入方式,也應該是支援的。那麼下面就有了兩種情況:普通接入方式和 kafka 接入方式。

普通接入方式

近年來,當提到業務對接或者資料傳遞的時候,大家首先想到的就是“調介面”,那麼這個“介面”其實也就是HTTP 介面,大家普遍認為是最普通的、也是最簡單的一種資料傳遞方式,那麼,既然普通簡單,那就是我們所需要的。
所以,接入流程應該是這樣的:接入方先呼叫我們的HTTP 介面,然後我們在web服務中把資料傳遞到kafka中,然後再到我們的業務層。如圖:


這樣,就達到了我們的目標1,即,連線的鬆耦合。這樣,那麼我們就可以隨意改變kafka的部署方式或者內部連線方式,隨意增刪broke,而不用去擔心會影響使用者的使用,就像加入了一個介面卡一樣。當然,此時,broke之間是以內網地址進行互連的,甚至我們可以直接使用現有的kafka叢集而不需要對其做任何改動。
但是另一方面,我們還要保證連線的可靠和資料的安全,上面的方式顯然是不能夠達到的,因為誰都可以接入且資料也是明文的。那就需要繼續在這個設計基礎上進行改進,對HTTP協議的安全升級策略也很常見,只需將HTTP換成HTTPS即可。但,常見的HTTPS只能保證對其一方的認證和資料的加密,就像我們上百度網站一樣,百度是不會對我們每個人進行認證識別的,因為百度不在意我們是誰。可是,我們在意到底是誰接入了我們的服務,所以,這裡應該是雙向認證。
下面來談談HTTPS的好處。首先,比較常見,就是加入了SSL/TLS的HTTP;其次,可以保證資料在傳遞過程中的安全性,因為資料在傳輸過程中是密文的形式,就算是被劫取也沒關係;再者,我們可以對客戶端可以進行身份互相認證識別,只要我們彼此的私鑰和CA證書不被洩露,那麼連線雙方的身份就是確定的。
同時,為了進一步加強連線的可靠性,我們還可以讓特定的IP接入,即使用IP白名單策略保證連線的可靠性。
改進之後的資料流向圖:

這種方式我也稱之為HTTP接入方式,當一個使用者需要使用我們的 IOT,那麼接入的方式就應該優先使用這種方式。

KAFKA 接入方式

所謂的kafka 接入,就是指使用者使用kafka的客戶端程式直連broke服務群的方式。這種接入方式就需要暴露broke來提供使用者連線,需要給出連線broke的IP和埠。
為了實現我們的既定目標,也需要把client和broke之間加入類似SSL的安全層協議,幸好,kafka對client支援tls和sasl兩種認證方式,在這之間,我選擇tls雙向認證。

What is SASL?

SASL是一個依賴於其他協議的框架,本質上是一個間接層,允許在現有的應用程式協議中插入可插入的身份驗證系統和資料安全性(e.g LDAP, SMTP, Subversion, …)。它是否以及如何提供安全的身份驗證和資料加密,很大程度上取決於該框架內使用的底層機制。如果使用SASL中,可以選擇使用GSSAPI、Kerberos、NTLM等。

如上個接入方式所說,tls雙向認證協議保證了雙方的可靠性,同時也能保證資料的安全性。在這種情況下,我們能夠保證連線到我們kafka的客戶端都是我們允許的,只是並不能約束客戶端的行為,比如說,客戶端可以隨意讀取所有的topic資料,這顯然是不能允許的。
還好,kafka支援使用ACL許可權控制機制。kafka附帶一個可插拔的認證,並使用zookeeper來儲存所有的acl。kafka的acl在一般格式定義”Principal P is [Allowed/Denied] Operation O From Host H On Resource R”,意思就是說可以使某個資源針對特定IP特定使用者進行特定的操作。
例子:假設你要新增一個acl “以允許198.51.100.0和198.51.100.1,Principal為User:Bob和User:Alice對主題是Test-Topic有Read和Write的執行許可權” 。可通過以下命令實現:

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:Bob --allow-principal User:Alice --allow-host 198.51.100.0 --allow-host 198.51.100.1 --operation Read --operation Write --topic Test-topic

這樣,其實就能很好的達到我們的要求:進行細粒度的許可權控制。
所以,這種情況下,接入的資料流程圖應該是這樣的:

那麼現在問題又來了,當我們的內網需要使用這群kafka的時候,也需要進行配置tls雙向認證嗎?顯然是不需要的,一來太麻煩,二來沒必要,因為不會有不信任的連線,也不會洩露資料,三的話就是使用tls雙向認證會大幅度影響效率,延長建立連線的時間。
這樣的話,就應該採用混合式的連線方式比較好,若干broke提供對外網的連線,若干broke提供對內網的連線,而所有的broke之間採用文字的方式傳輸資料。改進後的設計圖如下:

方案定論
綜合以上兩種接入方式,我們既要支援HTTP接入,又要支援kafka接入方式,那麼最後的部署方式應該是這樣的:

相關推薦

kafka 對外提供服務方案簡述

背景 首先,使用者資料會經過 kafka 佇列傳遞到我們的業務層。我們希望使用者能夠通過一個通用層接入我們的kafka服務,但是有的使用者希望能夠直接連到我們的 kafka 上面,這就需要我們的 kafka 對外暴露broke服務以便被接入。那麼如何保證使用者

如何讓虛擬機器對外提供服務

本機系統環境:WinXP  Win7 虛擬機器環境:Enterprise Linux 6 該方法主要通過橋接方式,是區域網內或網外電腦能夠訪問虛擬機器提供的服務,服務埠要在防火牆內新增設定,否則外部電腦將無發訪問。 主要設定步驟: 1、虛擬機器網路選擇橋接方式; 2、Vmw

TensorFlow 模型如何對外提供服務

TensorFlow 是目前最為流行的機器學習框架之一,通過它我們可以便捷地構建機器學習模型。使用 TensorFlow 模型對外提供服務有若干種方式,本文將介紹如何使用 SavedModel 機制來編寫模型預測介面。 鳶尾花深層神經網路分類器 首先讓我們使用 Tenso

windows服務對外提供API接口

ati system msg odin err protect nco res fix public class SendMqService { private static bool isExcute = true; privat

幾種常見的微服務架構方案簡述——ZeroC IceGrid、Spring Cloud、基於訊息佇列

2017-07-26 http://www.broadview.com.cn/article/348 微服務架構是當前很熱門的一個概念,它不是憑空產生的,是技術發展的必然結果。雖然微服務架構沒有公認的技術標準和規範草案,但業界已經有一些很有影響力的開源微服務架構平臺,架構師可以根據公司的技術實力並結合專案

Java微信公眾平臺開發(九)--關鍵字回覆以及客服介面實現(該公眾號暫時無法提供服務解決方案

轉自:http://www.cuiyongzhi.com/post/47.html 我們在微信公眾號的後臺可以發現微信給我們制定了兩種模式,一種是開發者模式(也就是我們一直在做的開發),還有一種模式是編輯模式,然而很蛋疼的是有些功能一旦我們切換到開發者模式下就無法使用了,比較典型的就是關鍵字回覆以及伺服器無

openstack+ceph:使用雲主機對外提供nas服務

0 背景介紹 openstack+ceph,openstack中的雲主機使用ceph rbd作為雲硬碟 1 需求 1)支援對外提供檔案儲存服務 2)支援內部雲主機訪問儲存服務 3)支援萬兆訪問,單客戶端讀速度不小於400MB/s,聚合讀寫速度不小於800MB/s

JEESZ-kafka消息服務平臺實現

Kafka Kafka分布式消息 Kafka分布式消息系統 Kafka集群 JEESZ的消息服務平臺已經拋棄了之前的ActiveMQ,改用高吞吐量比較大的Kafka分布式消息中間件方案: JEESZ-kafka消息平臺使用spring+kafka的集成方案,詳情如下: 1. 使用最高版本2

明年起無CDN牌照的CDN服務商將禁止提供服務

cdn最新消息:剛才問了工信部幾個問題,工信部這邊的回答,兩點重點:1.域名允許存在多個接入商;2.在確保網站沒問題的前提下,可以使用CDN。去年7月份阿裏和網宿拿到牌照,工信部要求他們保密半年。自此,我國CDN產業正式進入了牌照時代。爆料稱規定是下發到各ISP的,從2月份就開始鬧騰了。網宿,阿裏雲,騰訊雲,

SAE提供服務分析

ron 暫時 影響 config 開放 開放接口 定時 分布式 http服務 這個分析列表主要關註兩個問題,服務能做什麽,移植實現難度。 AppConfig: 這個東西主要面向SAE本身的一些配置選項,移植時放棄這個東西,所以就不談難度了Counter :這個東西提供某個

電子醫療設備創新研發應該用i.MX6Q開發板嗎?為醫療設備提供解決方案

政府 pan sat 9.png get 數據 tope ddr3 技術 伴隨醫療信息化、移動化、智能化的不斷發展,居民對自身健康的關註度持續加強,全球醫療電子產業近年來持續保持快速增長態勢。同時,源於龐大的人口基數以及迅速增長的老齡化人口帶來持續增長的醫療服務需求,加之全

JEECG新版UI規劃,主要提供H5方案(采用主流技術)

upload 圖片標題 round lock oschina HR 圖片 htm 圖片說明 JEECG 結合當前主流的UI技術,在新版3.7.4 即將推出新的UI方案,主要采用Bootstrap,Vue技術。同時提供代碼生成器模板(單表、一對多),快速生成你喜好的模

SSM框架下的分散式服務方案(基於Dubbo+Zookeeper)

原始碼https://github.com/wosyingjun/beauty_ssm_dubbo.git ###Dubbo服務的簡單應用及部署可以參見:DubboxDemo Maven(模組化構建) Spring(IOC DI AOP 宣告式事務處理) SpringMVC

啟動Zookeeper + Hadoop + Hbase + Kafka大資料服務

        Hadoop是非常流行的大資料框架,Zookeeper提供了高效的協調服務,Hbase高度依賴zk,是基於HDFS系統,具有可伸縮性,非常適合儲存複雜的資料結構,這三者作為一個系統整體,Kafka是作為快取佇列彌補Hbase寫入效能較差的不足,

【ArcGIS|空間分析|網路分析】8 查詢能夠為需求點對提供服務的最佳路徑

文章目錄 要求 步驟 1 建立車輛配送 (VRP) 分析圖層 2 新增特殊要求 3 新增停靠點 4 新增需求點對 5 新增站點 6 新增路徑 7 新增路徑區 8 設定分析屬性 9 執行

使用Thrift讓Python為Java提供服務

Thrift是基於TCP的,谷歌的GRPC是基於HTTP的。Thrift和GRPC都是比直接寫個web介面進行呼叫更完美的方式,最明顯的一點就是:我們可以定義結構體,避免了手動解析的過程。 但是,在將Python作為Thrift服務端,Java作為客戶端時,有一個天坑:始終都是connection refu

雙主資料庫伺服器同時提供服務如何設計

iphone中模糊圖片的指定區域的實現一個滿嘴大鬍子的狂戰士揮舞戰斧我們帥哥集中營來了所有邪惡勢力全部給我聽著你們的末日到了趕快留下美女和金幣我們就饒你們一命iphone中模糊圖片的指定區域的實現一個滿嘴大鬍子的狂戰士揮

parse.com已經不提供服務

mysql開啟了慢查詢有很多慢sqlmysql開啟了慢查詢有很多慢sql 請問這裡的while迴圈如何理解這樣一直建立物件一直迴圈應該不大合理吧會在accept停頓那彈出的視窗是在我新建立了一個終端(客戶端)執行telnet....之後才執行accept()後面的程式碼嗎如果

親愛的使用者,您使用了廣告遮蔽軟體,廣告是CSDN向您免費提供服務與產品的重要支援...

因為CSDN廣告太多, 大家一般都會使用ABP等廣告遮蔽外掛; 最近登入CSDN時,頁面頂部會出現下面的提示資訊, 令人相當難受!!! 親愛的使用者,您使用了廣告遮蔽軟體,CSDN對此非常理解您使用AdBlock或AdblockPlus廣告遮蔽外掛的需要,但廣

Kafka原始碼之服務端分析之SocketServer

前面我們介紹了消費者和生產者,從這篇文章開始我們來看一下它的服務端的設計。 Kafka的網路層是採用多執行緒,多個Selector的設計實現的。核心類是SocketServer,其中包含一個Acceptor 用於接收並處理所有的新連線,每個Acceptor對應多