<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                #隊列及協議 **隊列用途** 1、生活中的隊列 共享打印機 銀行取號 2、程序中的隊列 發短信、郵件、上傳照片、朋友圈推送 **通信模型** 1、點對點 2、廣播 3、組播 4、請求、響應 5、發布、訂閱 ##程序中的兩種隊列 1、消息隊列 只處理消息傳遞:MessageQueue 一頭存儲,另一頭取數據 2、任務隊列 任務隊列工具:Gearman(JobTask) 一邊寫入任務內容,一邊完成任務 **隊列中的角色** 1、生產者 2、消費者 3、服務器 4、客戶端 消費了是否還存在? ##隊列用途和特點 1、異步處理數據傳遞和存儲 2、大并發時起緩沖作用 3、解耦合 4、可擴展 ##隊列協議 協議是通信約定,數據交換標準 1、socket協議 2、http協議 協議和語言綁定嗎? # 開源隊列使用 ##mx-queued C語言高性能開源消息隊列服務器 1、延時隊列 2、優先隊列 3、持久化 mx-queued安裝 https://github.com/liexusong/mx-queued 需要安裝lua: yum install ? lua lua-devel 如果還make失敗,修改Makefile, 下面這一行加上 -lpthread CFLAGS?= -std=c99 -pedantic -O2 -Wall -W - DSDS_ABORT_ON_OOM -llua -lm -ldl –lpthread make成功, 生成mx-queued文件 啟動: ? ./mx-queued ? & ##mx-queued使用 include_once('mx_queued.php'); $queue = new mx_queued('182.254.145.235'); $job ? = ? 'sendmsgto'; $re ? = ? $queue->enqueue('class_msg', ? 1, ? 0, ? $job); ##Socket隊列 ###Socket = client ip + client port + server ip + server port Socket本身不是協議 Socket提供針對TCP或UDP編程接口 ##HTTPSQS隊列 1、基于HTTP GET/POST 2、非常快速,入出隊列速度10000次/秒 3、支持上萬并發 4、支持多隊列 5、單個隊列支持最大10億條,低內存 ##HTTPSQS安裝和使用 1、安裝 libevent、tokyocabinet、httpsqs 2、默認啟動1218端口 httpsqs -x /var/software/data 3、入隊列 curl http://host:port/?name=queue_name&opt=put&data=xxx 4、出隊列 curl http://host:port/?charset=utf- 8&name=queue_name&opt=get ##ActiveMQ 1、Apache出品 2、完全支持JMS1.1和J2EE 1.4規范的JMS Provider實現 3、啟動端口5672連接61613,web端口8161 sh bin/activemq-admin start 4、使用 AMQP Stomp ##Qpidd 1、AMQP Advanced Message Queuing Protocol,即高級消息隊列協議。AMQP 是一個標準化的消息中間件協議。讓不同語言, 不同系統的應用互相通信, 并提供一個簡單統一的模型和編程接口 2、Qpid是AMQP的實現,Apache開發的一款面向對象的消息中間件 3、Qpid提供了C++/Python/Java/C# 等主流編程語言的客戶端庫,安裝 使用非常方便 4、Qpid提供了很多額外的HA特性,非常適于集群環境下的消息通信 5、Qpidd是服務器端(Broker),有CPP和Java版 ##Qpidd使用 qpid-cpp-0.30/build/src ./qpidd openstack引用 ##網絡消息隊列服務 1、AWS http://aws.amazon.com/cn/sqs/ AWS免費套餐包含100 萬個Amazon Simple Queue Service(SQS)請求 2、阿里云消息隊列服務MQS http://www.aliyun.com/product/mqs 需申請公測資格才能開通 3、LeanCloud(原AvosCloud) http://www.leancloud.cn 基本使用免費 # 開發自己的隊列 自定義隊列 使用別人隊列可能的問題: 1、不能一次取多個消息 2、不好維護、備份 3、不能自定義日志 通過自己開發隊列了解本質 ##自定義協議 隊列不一定只能在本地調用 自定義協議網絡調用 # 分布式緩存與Hash ##NoSQL定義 1. Not Only SQL 2. Non-relational ##NoSQL定義 為什么會出現NoSQL? 文件緩存 MySQL 外部查詢緩存 有效期控制、過期文件清理、分布式環境 Session 存儲 ##CAP原則:分布式系統的三個核心需求 1. Consistency 數據一致性 原子性或者事務性 2. Availability 可用性 用戶體驗良好,不會出錯或延遲 3. Partition Tolerance分區容錯性 擴展性和容錯性,容易擴展機器,一臺機器出錯不影響業務正常運行 ![](https://box.kancloud.cn/2016-05-06_572c68b5e1c7a.png) 不能同時滿足三個需求 同一套系統很難同時滿足三個需求,需要組合各種技術 放棄某個需求有時是合理的,一致性需求討論 用戶評論 商品價格 ##傳統關系型DB:一致性、可用性 ###容錯和擴展成本高 程序是面向對象,DB是面向關系,ORM效率低下 表結構變化頻繁 **表字段是復雜類型 高并發數據庫請求** **海量數據分布式存儲** ##NoSQL特點 ###易擴展 去掉關系型數據中的關系,非常容易擴展 ###大數據量、高性能 結構簡單,細粒度cache ###靈活的數據模型 隨時添加存儲自定義結構數據 ##NoSQL類型:適合什么場景 1.Key-value 鍵值 Memcached、Redis 2.Document-Oriented 面向文檔 Mongodb 3.其他:列存儲、圖、xml存儲 HBase、Neo4J 1.Key-value 鍵值 適合:和id關聯,例如session、cache、配置信息、訂單 不適合:按值查詢、key關聯、事務 2.Document-Oriented 面向文檔 適合:日志、結構化數據、變化頻繁 不適合:事務、細化權限、低配置機器 3.其他:列存儲、圖、xml存儲 特殊用途:用圖來做推薦引擎,用列存儲app日志數據內容 ##Memcached特點 1、采用不互相通信的分布式(客戶端分布式) 2、基于libevent事件機制,主線程負責分發 3、slab算法分配內存:memcached -vv查看內存分配 每次申請1M內存,分成不同的區塊,區塊大小1.25倍遞增 4、訪問時才刪除過期數據 5、內存不足LRU淘汰數據 a)FIFO(First In First Out) MySQL b)LFU(Less Frequently Used) c)LRU(Least Recently Used) Memcached、Redis ![](https://box.kancloud.cn/2016-05-06_572c68b624daa.png) ![](https://box.kancloud.cn/2016-05-06_572c68b6652b1.png) ##Hash算法 1、普通hash求余 2、times33算法:Apache、php、perl unsigned long time33(char const *str, int len) { unsigned long hash = 5381; //php版本初始值 for (int i = 0; i < len; i++) { hash = ((hash << 5) + hash) + (unsigned long) str[i]; } return hash; } 3、沖突:拉鏈法保存鏈表 # Redis等NoSQL使用 ##Memcached與Redis ###Memcached 穩定 內存緩存,不需要考慮備份 ###Redis 可以持久化 支持復雜結構,list、sortedset等 支持主從,查詢:slaveof 192.168.1.1 6379 支持虛擬內存,key不存虛擬內存 ##Redis安裝 下載 http://redis.io 安裝與工具 安裝:make && make install 啟動:redis_server & 測試:telnet 或者 redis_cli 命令行,set、get、incr、quit 性能:redis_benchmark 安裝phpredis擴展 phpize 源碼安裝 ##數據類型 ###String、List、Set、Sorted Set、Hash list:我關注的列表 set:用戶名已注冊 sorted set:排序隊列 hash:用戶對象 示例 ###Instagram 3億張照片 存儲 照片ID -> 主人UID 要求全部加載到內存中 EC2 17GB SET media:1155315 939 GET media:1155315 > 939 Result: 21GB hash-zipmap-max-entries = 1000 HSET "mediabucket:1155" "1155315" "939" HGET "mediabucket:1155" "1155315" > "939" Result: 5GB ###Redis實戰 1、分布式session session.have_handler session_set_save_handler(open,close,read,write,destroy,gc) 2、實現隊列 結合SQL,微博發表評論 和mysql性能對比 3、pipeline ##MongoDB安裝 ###下載 http://mongodb.org ###安裝與工具 安裝:解壓即可 啟動:bin/mongod --dbpath=/home/ucai/local/mongodb_data/ -- syslog & 測試:bin/mongo ###安裝php擴展 phpize 源碼安裝 ###Mongodb示例 1.基本使用 類SQL操作 show dbs; use ucai; db.ucai.insert(); db.ucai.find(); db.ucai.find(); db.ucai.update(); 2.性能對比測試 和MySQL性能對比 ##說明 SQL與NoSQL并沒有明顯界限 相同的功能可能都能實現,但是側重點不同 通過不同方式甚至都能達到相同的性能 ##選擇SQL還是NoSQL SQL的重點是關系型數據,事務和數據可靠性 穩定 NoSQL的重點是性能(分布式場合),結構化數據,易擴展和維護 為了少量的性能而遷移到NoSQL也許是不值得的 組合使用
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看