目前不少項目都是些微服務,分佈式,基本也都是基於spring cloud,dubbo實現的,關於spring cloud和dubbo網絡上也有不少實用教程,但不多有基於項目開發的整套流程來寫的,由於項目緣由,忽然有點小靈感,因此想從項目設計,開發,分佈式部署整個流程來記錄一個簡單的分佈式項目大概是個什麼樣子的。筆者也處於學習提升本身的階段,因此有寫的很差的和不對的地方,歡迎看官指正。git
名稱:iot-ptweb
說明:iot-pt是一個關於物聯網的項目,簡單的說就是物理設備經過某種協議上傳數據到服務器,服務器對數據進行分類、存儲,管理後臺經過某些指令能夠控制遠程的物理設備。redis
先階段,物聯網設備很是多,熟悉的好比家裏的水錶,氣表,電錶,這些都是物聯網設備,各類物聯網設備所用的協議也是很是之多,像coap,tcp私有協議,lwm2m,mqtt,所傳輸的數據格式也是五花八門,像16進制,2進制,json等。因此我在構思iot-pt時,讓協議和數據格式分開,協議更多的是一種傳輸規則、拆包規則,而數據格式則是能把物理設備發送的原始數據解碼成有業務意義的數據。spring
業務概念設計:json
概念說明緩存
產品:產品是一個業務概念,是一類物理設備的集合,定義了一類物理設備是什麼,好比小米6手機,單個小米6手機,咱們能夠叫個人手機或者個人移動設備,可是對於小米公司來講,小米6表明的是賣出的全部小米6手機,因此更願意稱之爲小米6產品。服務器
設備:設備是一個具體的物理設備的抽象,它與具體存在的物理設備一一對應,定義了具體是物理設備是什麼,歸屬於產品中。網絡
產品物模型:物模型是一類設備功能的抽象,它包含協議,屬性,指令,事件,定義了物理設備能幹什麼。mybatis
協議:定義物理設備上傳數據使用的是什麼協議。app
數據格式:定義了設備上傳數據的格式,這裏定義了byte和json兩種數據格式。
屬性:定義了物理設備上傳的那些數據,並有什麼實際的業務含義。
指令:定義了物理設備能接受那些操做指令,並完成相應的操做。
事件:定義了物理設備能觸發那些事件,心跳,設備異常,設備報警。
結構圖:
Client:發數據的客戶端,用來模型物理設備,包含了coap和mqtt,coap和mqtt是目前比較流行的物聯網協議,這裏不就具體的介紹協議了。
Protocol Server:接收客戶端發送的消息,並把消息推送到kafka。
Mapping Server:消費Protocol Server發送到kafka的設備數據,對數據進行解碼,映射到系統的設備和屬性上,賦予數據業務意思。
Monitor Server:消息Protocol Server發送的服務監控數據,消費Mapping Server發送的設備心跳數據,並把數據整理寫入redis。
Insert DB Server:持久化服務統稱,消費Mapping Server發送的設備數據,並進行持久化。
Real-time Data Server:消費Mapping Server發送的設備數據,基於web socket向管理平臺推送設備實時數據。
Web Manage:web管理服務,提供可視化產品,設備,產品物模型操做。
dubbo筆者沒使用過,並非很瞭解,因此這裏仍是spring全家桶。
項目開發:spring boot
緩存:redis
消息中間件:kafka
ROM:mybatis
db:pgslq
分佈式:spring cloud
iot-pt項目結構就介紹到這裏,剩下的咋們開始擼碼