字體:小 中 大 | |
|
|
2017/12/08 23:52:46瀏覽655|回應0|推薦5 | |
物聯網很潮。 萬物互連,更多的可能性,更高的資源運用效率與資訊完整度。 總之就是很好對吧?
傻蛋幾天前下班時想到一個問題。 真的可以任意的互連嗎? 因為那個時候在想如何用網頁開發實作出討論頻道那樣的功能。 我剛打完一段訊息,會希望同頻道的人能盡可能即時看到新訊息吧? 同樣也想盡可能即時看到最新的討論訊息吧? 怎實作? 想了想,也就是頻繁點去服務器端詢問是否有最新訊息吧。 如果三秒詢問一次,剛剛出現的新討論訊息,平均延遲大約就是一點五秒。 如果每十秒才詢問一次,那平均延遲大約就是五秒。 如果詢問頻率在一秒以下,那訊息的延遲就幾乎沒有感覺了。 而網頁程式一般的作法,是使用者想檢查有無新訊息才詢問,那當下才更新。 如果是十個人以下的聊天頻道,不是什麼問題。 但,如果對同一個服務的頻道使用者,有上千人呢? 每秒一次,一千人就是每秒服務器有ㄧ千次請求。 要怎樣等級的主機才能撐得住這樣的網路請求? 這種連線頻率接近網路攻擊了。 若再極端一點,有上萬人,甚至更多使用者同時使用該服務呢? 好吧,就算使用雲端服務,有負載平衡可以動態追加服務資源,超高頻繁互動一樣很慘。 傳統的網站內容資源都是一樣的,所以可以利用快取與緩存機制讓大量使用者連線可以服務。 個人化的服務,就像加入聊天頻道要主動又自動刷新是否有新訊息,沒得快取。
所以這類型的服務,使用者人數越多,效能就越差,而且很耗資源。 傻蛋就想到,同類型服務的龍頭,是否有用技術克服這個限制。 Slack的群組人數號稱無限制,結果上網查了下,一開始是有限制 五千人,後來被抱怨,慢慢加到八千五,再到一萬多人。 但同時大量人數連線時還是會慢到當掉的程度,幾乎不可用。 量變引發質變,當對服務器的連線請求頻率高到一個程度,就成變形的網路流量攻擊了。 傻蛋想到的克服方式也頂多就是,盡可能減少不必要的詢問,例如處於閒置或不在頻道內的使用者,新訊息檢查的頻率可以動態的降低,以及避免太多人數的群組的分散策略而已。 本質仍是難解。 除非,這種作業,有做分流。 第一次連線請求時,查看資源狀態,分配到一個資源,之後就和那個資源連線,做分流。 如果資源全部忙碌,則要增加服務資源或拒絕新請求,避免塞車全部一起死。 這些策略,都會帶來成本,不低的成本,以及更複雜的系統服務架構。
值得嗎?非得如此不可嗎? 如果想搞個千人或萬人聊天室,非要準備一堆雲端服務資源做分流來滿足不可? 如果放棄網頁應用程式的架構,改成一般應用程式,有機會。 可以改成用點對點,P2P的方式來實現。 這樣就可以善用各個客戶端的資源,而不把瓶頸集中在後端服務器上。 這五個人在一個頻道內聊天,可以由一個客戶端當成臨時的主控服務器,其他人和這個服務連線互動就好。 這個服務器再和後端做數據非即時同步就好。 每個客戶端同時是服務器又是客戶端,更靈活,更善用資源,能避免效能瓶頸。 這技術傻蛋不熟,但想像一下應該可行吧。 但有那麼容易嗎? 回到同一個問題,如果有ㄧ個頻道裡面就是有ㄧ萬個人在裡面,或許發言頻率不會七嘴八舌,但就是所有人盯著議題一起討論。 這樣,還是死。 不管是一個臨時主控服務器對剩下的人互動,還是一萬個人互相連線,都是死。 後一種應該會死得更慘。 是真的不行嗎? 傻蛋還是有想到一種方法,可以類似軍隊的指揮體系一樣來解決。 假設一個臨時服務器和廿個客戶端連線就大約是瓶頸。 那,只要隨時讓連線數都保持在,假設就先訂廿好了,這個數量以下,用層層分派的方式,就有機會克服。 會有第二層臨時服務器廿個,這些次級服務器直接和主控臨時服務器同步。 每個第二層臨時服務器又提供第三層臨時服務器的連線,也是各廿個。 第三層能提供的最大連線數就有四萬個了,萬人連線就OK了。 某個使用者,假設是最末一層的位置,有了新訊息留言。 往上送三次,直到主控臨時服務器。 再往下發配到其他的第一層臨時服務器。 每層都要往上與往下,接收上層的新訊息後要往下發派,收到下層新訊息要往上推送,與發送到其他下層。 所以每個臨時服務器的頻繁監聽與同步連線數就會控制在廿一個。 這樣就跳過了,同時被上萬個連線請求灌爆的問題。 如果這個點對點的互連的控制網路結構,可以自動建立與保持那個控制結構的運作,我們或許可以說,大量的連線控制是可能的了。 如果每個結點的連線能力更高一點,要同時對上百萬的單位保持互相連線資訊同步的指揮體系,也是可能的。 成本是還可接受的,那個指揮層級帶來的傳遞成本。
好了,有點複雜度,但總之不算難,只是有沒有使用情境而已吧? 回過頭來想一下,物聯網要萬物互連,需要一連一萬一個控制一萬個,又怎樣? 如果沒有這種自動因應數量形成指揮體系的連線結構,看起來也是會死吧? 傻蛋又查了下,物聯網好像有兩種通訊協定,一種是基於UDP,一種是TCP,都還是在IP的體系下連線。 那麼,真的要實現萬物互連,每個資源都可以容易的找到取得與連線互動運作,這是不是先天就有侷限性呢? 讓許多資訊資源更開放共享,增進使用效率,就必須要容易被搜尋與連線。 看起來會需要一些基礎建設。 會不會需要在現行的電信網路基礎建設之外,再擴充相當程度的輕量靈活的中繼服務器資源呢? 物聯網的資源可以被這些中繼資源管理與指揮。 中繼資源可以自發組織成指揮體系,讓大量連線控制可以被滿足。 個人電腦,智慧手機或高級點的資訊設備可以當中繼服務資源,讓閒置資源最大化利用。 簡易的家電與小感應器等等,就被連線與管控使用就好。 這樣,或許需要,定義出物聯網服務器結點的介面,與連線末端資源結點的介面。 介面標準化後,或許可以帶來不同的可能性,把更多資訊資源掛上物聯網。
最後想到的是,為什麼要提供自己的硬體與網路給物聯網基礎體系使用? 我的機器目前剛好閒置,可以服務附近需要連線服務的人,但我為什麼要幫? 其實這種服務費,可以設計成虛擬貨幣。 這種虛擬貨幣是有意義的,而不是無謂的浪費電,而是提供必要的基礎服務。 喔,這種虛擬貨幣也可以擴大經濟規模,讓更多人有錢可賺耶! 或許這才是物聯網該走的方向,而不是吹泡沫而已唷? |
|
( 不分類|不分類 ) |