天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

軟件系統開發中的數據交換協議

  在很多地方都有“數據交換”這個概念,本文所說的“數據交換” 是指在計算機網絡中,一個系統把數據傳遞給另外一個系統。這非常類似于一個人要告訴另外一個人一件事情。

  當一個人要把一件事情告訴另外一個人的時候,我們可以通過電話、郵件、短信、IM工具或者當面說的方式來交流。這種方式類似于系統數據交換要通過 tcp、udp、管道等等的方式實現。當兩個人交流的時候,我們需要一種共同的語言才能明白對方的意思,同樣的,兩個系統要交換數據,也需要定義一種雙方都明白的協議,我們稱為“數據交換協議”。

  數據交換協議

  數據交換協議的目的是讓兩個系統進行正確的數據交互。所以幾乎各種開發語言都提供了方便使用的數據交換功能。比如說使用Java語言的開發的系統使用MySQL數據庫存儲數據,就是通過MySQL數據交換協議跟MySQL做數據交換;通過Java的RMI可以方便的做跨機器的分布式數據交換,RMI也就是一種數據交換協議。

  一般我們在不同的系統、不同的語言之間交換數據的時候,我們會選擇一種通用的交換協議或者自己定義一種容易使用的交換協議。 WebService曾經非常流行, 在Web 2.0時代,輕量級的REST協議又開始受到追捧。那么究竟在我們的系統中應該選擇什么樣的協議呢?

  如何選擇數據交換協議

  選擇什么樣的協議跟我們的應用場景有很大的關系。我們需要考慮我們開發是否方便、接口是否容易發布、是否需要考慮帶寬占用成本、序列化和反序列化的性能、接口協議的擴展性等等。下面我們看下幾個比較常用的交換協議實現。

協議實現跨語言性能傳輸量RPC
xml廣泛幾乎所有很大N(可實現)
json廣泛大量一般一般N(可實現)
php serializephpRPC大量一般一般Y
hessianhessian大量一般Y
thriftthrift大量Y
protobufprotobuf大量N(可實現)
iceice大量Y
avroApache Avro 少量Y
messagepackmessagepack 大量Y

  上面表格列出了一些常用數據交換協議的一些特性的比較。這里并沒有比較好壞,只是想說明不同數據交換協議是有區別的,所以我們需要在我們的應用場景中進行選擇。

  開放式

  像微博,SNS這種開放平臺、對靜態html頁面提供Javascript接口調用的系統都屬于這種類型 。這種類型的特點是:

  • 調用方不完全可控,而且是針對公網的,你可能不知道是誰、是什么語言、是什么方式在調用你提供的數據接口;
  • 接口訪問量一般都非常大,要求具有很高的性能和吞吐量;
  • 需要考慮安全問題,外部提交的數據可能不是合法的。

  所以在這種情況下,需要考慮數據傳輸的帶寬消耗和數據交換協議的易用性,以及多語言支持程度。以前對于html頁面使用的Javascript接口調用一般都使用XML格式,最近幾年幾乎都轉成了json格式了,因為json傳輸量更小,比XML更加容易使用。 而對于開放平臺,由于使用的場景很多,所以需要提供多種交換協議格式。基本上都會提供XML和json。為了提高平臺本身的性能和客戶端的性能,也可以提供protobuf這種二進制交換協議并且增加壓縮支持,以節省帶寬傳輸和解析的性能消耗。

  內部服務

  對于一個大型系統來說,內部服務的數據交換無處不在。從最基本和常見的數據庫數據交換、memcached緩存數據交換、消息隊列的數據交換到系統之間使用的RPC服務框架等等,都可以算作內部服務的數據交換。內部服務的特點是不用考慮防火墻,不對外開放,速度快(基本無帶寬成本)。

  內部服務的數據交換協議的選擇空間非常大,一般需要考慮:

  • 數據交換協議的性能
  • 是否需要跨語言支持
  • 數據交換協議的消息體大小

  持久化存儲

  對于持久化存儲來說,每一種數據交換協議其實都可以實現。一般需要根據應用場景考慮:

  • 是否人工可閱讀
  • 存儲的空間消耗
  • 序列化和反序列化的性能
  • 是否經過壓縮

  跨語言

  假設我們的網站前端頁面展示層使用php語言開發,中間業務邏輯使用Java語言開發,那么就涉及到跨語言數據交換的問題。只要系統不是單純的使用一種語言,那么就必須考慮這個問題。事實上,考慮未來的擴展和需求變化問題,也最好考慮跨語言的數據交互協議。

  數據交換協議可升級

  在選擇數據交換協議的時候,我們同樣需要考慮類似于數據庫表的?schema設計時的擴展問題。比如一個提供用戶信息的數據交換協議接口,現在包含用戶名、性別、住址的信息,在升級過程中,增加了一個最后登錄的IP信息。如果不考慮數據交換協議升級帶來的影響,很可能會導致以前的客戶端出現異常或者舊的數據無法正確解析的問題。

  兼容協議的巧用

  兼容協議的巧用非常有用,新產品兼容提供現有成熟的數據交換協議,可以降低使用門檻和產品的開發速度。比如新浪開源memcacheQ就使用了memcached協議。

  總結

  數據交換協議的各種通用開源實現非常多,數據交換協議只是一個非常寬泛的說法,其實只要實現了數據的序列化和反序列化 ,那么就可以說是一個可以交換數據的協議。數據交換協議的性能其實就是序列化和反序列化的性能,如果加上RPC,那么跟RPC實現本身的性能也有非常大的關系。

  我的新浪微博@sunli1223 ,歡迎與我討論。

  參考鏈接:

it知識庫軟件系統開發中的數據交換協議,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 日韩人妻无码精品-专区 | 黄图gif揉胸吸奶 | 国产精品免费视频播放 | 欧美高跟镣铐bdsm视频 | 99久久无码一区人妻A片蜜 | 国产精品日本不卡一区二区 | 国产电影无码午夜在线播放 | 中文字幕99香蕉在线 | 欧美亚洲综合另类无码 | 色婷婷亚洲精品天天综合影院 | 国产高清视频免费最新在线 | 亚洲精品无码AAAAAA片 | 最近免费中文字幕MV在线视频3 | 最近2019中文字幕MV免费看 | PORN白嫩内射合集 | 一区二区三区福利视频 | 强上轮流内射高NP男男 | 公开超碰在线视频 | 快播h网站 | 24小时日本在线观看片免费 | 久久国产乱子伦免费精品 | 久久久97人妻无码精品蜜桃 | 爱爱好爽好大好紧视频 | 色综合久久五月 | 久久日本片精品AAAAA国产 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲免费网站观看视频 | 九九在线精品亚洲国产 | 兔费看少妇性L交大片免费 偷偷要色偷偷 | 国产成人自产拍免费视频 | 久久久无码精品亚洲欧美 | GAY2022空少被体育生暴菊 | 日本理伦片午夜理伦片 | 美女内射少妇一区二区四区 | 色播成人影院 | 国精产品一区二区三区四区糖心 | 入禽太深免费视频10 | 日本中文字幕伊人成中文字幕 | 99热久久爱五月天婷婷 | 国产女人91精品嗷嗷嗷嗷 | 日本妈妈在线观看中文字幕 |