網路城邦
上一篇 回創作列表 下一篇   字體:
物聯網真能萬物互連嗎?
2017/12/08 23:52:46瀏覽655|回應0|推薦5

物聯網很潮。

萬物互連,更多的可能性,更高的資源運用效率與資訊完整度。

總之就是很好對吧?

 

傻蛋幾天前下班時想到一個問題。

真的可以任意的互連嗎?

因為那個時候在想如何用網頁開發實作出討論頻道那樣的功能。

我剛打完一段訊息,會希望同頻道的人能盡可能即時看到新訊息吧?

同樣也想盡可能即時看到最新的討論訊息吧?

怎實作?

想了想,也就是頻繁點去服務器端詢問是否有最新訊息吧。

如果三秒詢問一次,剛剛出現的新討論訊息,平均延遲大約就是一點五秒。

如果每十秒才詢問一次,那平均延遲大約就是五秒。

如果詢問頻率在一秒以下,那訊息的延遲就幾乎沒有感覺了。

而網頁程式一般的作法,是使用者想檢查有無新訊息才詢問,那當下才更新。

如果是十個人以下的聊天頻道,不是什麼問題。

但,如果對同一個服務的頻道使用者,有上千人呢?

每秒一次,一千人就是每秒服務器有ㄧ千次請求。

要怎樣等級的主機才能撐得住這樣的網路請求?

這種連線頻率接近網路攻擊了。

若再極端一點,有上萬人,甚至更多使用者同時使用該服務呢?

好吧,就算使用雲端服務,有負載平衡可以動態追加服務資源,超高頻繁互動一樣很慘。

傳統的網站內容資源都是一樣的,所以可以利用快取與緩存機制讓大量使用者連線可以服務。

個人化的服務,就像加入聊天頻道要主動又自動刷新是否有新訊息,沒得快取。

 

所以這類型的服務,使用者人數越多,效能就越差,而且很耗資源。

傻蛋就想到,同類型服務的龍頭,是否有用技術克服這個限制。

Slack的群組人數號稱無限制,結果上網查了下,一開始是有限制

五千人,後來被抱怨,慢慢加到八千五,再到一萬多人。

但同時大量人數連線時還是會慢到當掉的程度,幾乎不可用。

量變引發質變,當對服務器的連線請求頻率高到一個程度,就成變形的網路流量攻擊了。

傻蛋想到的克服方式也頂多就是,盡可能減少不必要的詢問,例如處於閒置或不在頻道內的使用者,新訊息檢查的頻率可以動態的降低,以及避免太多人數的群組的分散策略而已。

本質仍是難解。

除非,這種作業,有做分流。

第一次連線請求時,查看資源狀態,分配到一個資源,之後就和那個資源連線,做分流。

如果資源全部忙碌,則要增加服務資源或拒絕新請求,避免塞車全部一起死。

這些策略,都會帶來成本,不低的成本,以及更複雜的系統服務架構。

 

值得嗎?非得如此不可嗎?

如果想搞個千人或萬人聊天室,非要準備一堆雲端服務資源做分流來滿足不可?

如果放棄網頁應用程式的架構,改成一般應用程式,有機會。

可以改成用點對點,P2P的方式來實現。

這樣就可以善用各個客戶端的資源,而不把瓶頸集中在後端服務器上。

這五個人在一個頻道內聊天,可以由一個客戶端當成臨時的主控服務器,其他人和這個服務連線互動就好。

這個服務器再和後端做數據非即時同步就好。

每個客戶端同時是服務器又是客戶端,更靈活,更善用資源,能避免效能瓶頸。

這技術傻蛋不熟,但想像一下應該可行吧。

但有那麼容易嗎?

回到同一個問題,如果有ㄧ個頻道裡面就是有ㄧ萬個人在裡面,或許發言頻率不會七嘴八舌,但就是所有人盯著議題一起討論。

這樣,還是死。

不管是一個臨時主控服務器對剩下的人互動,還是一萬個人互相連線,都是死。

後一種應該會死得更慘。

是真的不行嗎?

傻蛋還是有想到一種方法,可以類似軍隊的指揮體系一樣來解決。

假設一個臨時服務器和廿個客戶端連線就大約是瓶頸。

那,只要隨時讓連線數都保持在,假設就先訂廿好了,這個數量以下,用層層分派的方式,就有機會克服。

會有第二層臨時服務器廿個,這些次級服務器直接和主控臨時服務器同步。

每個第二層臨時服務器又提供第三層臨時服務器的連線,也是各廿個。

第三層能提供的最大連線數就有四萬個了,萬人連線就OK了。

某個使用者,假設是最末一層的位置,有了新訊息留言。

往上送三次,直到主控臨時服務器。

再往下發配到其他的第一層臨時服務器。

每層都要往上與往下,接收上層的新訊息後要往下發派,收到下層新訊息要往上推送,與發送到其他下層。

所以每個臨時服務器的頻繁監聽與同步連線數就會控制在廿一個。

這樣就跳過了,同時被上萬個連線請求灌爆的問題。

如果這個點對點的互連的控制網路結構,可以自動建立與保持那個控制結構的運作,我們或許可以說,大量的連線控制是可能的了。

如果每個結點的連線能力更高一點,要同時對上百萬的單位保持互相連線資訊同步的指揮體系,也是可能的。

成本是還可接受的,那個指揮層級帶來的傳遞成本。

 

好了,有點複雜度,但總之不算難,只是有沒有使用情境而已吧?

回過頭來想一下,物聯網要萬物互連,需要一連一萬一個控制一萬個,又怎樣?

如果沒有這種自動因應數量形成指揮體系的連線結構,看起來也是會死吧?

傻蛋又查了下,物聯網好像有兩種通訊協定,一種是基於UDP,一種是TCP,都還是在IP的體系下連線。

那麼,真的要實現萬物互連,每個資源都可以容易的找到取得與連線互動運作,這是不是先天就有侷限性呢?

讓許多資訊資源更開放共享,增進使用效率,就必須要容易被搜尋與連線。

看起來會需要一些基礎建設。

會不會需要在現行的電信網路基礎建設之外,再擴充相當程度的輕量靈活的中繼服務器資源呢?

物聯網的資源可以被這些中繼資源管理與指揮。

中繼資源可以自發組織成指揮體系,讓大量連線控制可以被滿足。

個人電腦,智慧手機或高級點的資訊設備可以當中繼服務資源,讓閒置資源最大化利用。

簡易的家電與小感應器等等,就被連線與管控使用就好。

這樣,或許需要,定義出物聯網服務器結點的介面,與連線末端資源結點的介面。

介面標準化後,或許可以帶來不同的可能性,把更多資訊資源掛上物聯網。

 

最後想到的是,為什麼要提供自己的硬體與網路給物聯網基礎體系使用?

我的機器目前剛好閒置,可以服務附近需要連線服務的人,但我為什麼要幫?

其實這種服務費,可以設計成虛擬貨幣。

這種虛擬貨幣是有意義的,而不是無謂的浪費電,而是提供必要的基礎服務。

喔,這種虛擬貨幣也可以擴大經濟規模,讓更多人有錢可賺耶!

或許這才是物聯網該走的方向,而不是吹泡沫而已唷?

( 不分類不分類 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=pondin&aid=109373084