蘋果伺服器是如何承載全球移動設備Push請求的?
今天和同事討論iOS Push問題,想到微信和手Q這麼大的用戶量,對於蘋果的Push伺服器群要承載全球移動設備的Push需求,是怎麼做到及時響應的和伺服器負載平衡的,有沒有大牛分析下。
無聊,來答一發,奉上學習筆記
多圖預警!!!先說明一點,所有資料全部來自網上,信則有不信則無先回答問題:
想到微信和手Q這麼大的用戶量,對於蘋果的Push伺服器群要承載全球移動設備的Push需求,是怎麼做到及時響應的和伺服器負載平衡
1.大用戶量的需要provider(APP服務提供商)做一定的優化,比如微信做的推送隊列,異地負載均衡,不然出口會被阻塞
2.前端DNS做了一部分負載均衡3.架構設計,對於每個device一個後台進程,處理所有APP的推送消息,轉化為一個大型消息推送系統,接收provider的消息,送入推送隊列,分發到device設備4.限制發送速度,放棄一部分可靠性,並不保證消息一定到達5.其他,私有二進位協議,減少數據冗餘,提升長連接並發數,MQ等等相關概念及數據:
APNs使用場景:絕大部分是APP後台沒有運行,必須藉助於APNs通知用戶,對於APP後台運行的,一般使用的是本地PUSH,是由APP自己獲取消息本地推送給通知程序,對於如微信APP內部的聊天消息,那個就跟APNs沒關係了,為什麼不用,因為不可靠
iPhone 不允許後台跑服務聯網,APNs是唯一的PUSH選擇
蘋果iPhone 用戶數:2018年底iPhone用戶數增至6.5億
分析師稱2018年底iPhone用戶數增至6.5億 iPhone,用戶,統計,分析 _WeiPhone威鋒網
蘋果官網APNs推送數據:最近的數據沒有找到,WWDC 2012上宣布每天發送70億條,Technical Note TN2265: Troubleshooting Push Notifications,2012年,蘋果應用商店擁有超過4億信用卡賬戶(估計活躍用戶沒那麼多),2013年5億用戶,加上這幾年移動互聯網發展,APNs推送數據至少達到700億量級,甚至可能上千億
WWDC2012 數據單條消息大小不超過2kbyteApple Push Notification Serviceprovider server單鏈接發送到APN發送速度官方推薦最好低於9,000 notifications per second,可以使用多線程技術,建多個鏈接,單台伺服器的處理能力沒有查到,provider發送到的APNs的消息並不會馬上被發送,直到用戶設備連接到APNs,具體等待時間沒有提,每個設備每個APP會有一個發送隊列,默認保存一個消息,如果原來的消息未發送,新來的消息會覆蓋原來的,不保證用戶一定會收到
Technical Note TN2265: Troubleshooting Push NotificationsQQ目前日活躍用戶數:高峰2.2億左右,同時並發幾億個鏈接
微信目前未知,應該和QQ差不多apns server(gateway.push.apple.com)的網關DNS是做了負載均衡的,可以用dig或nslookup查,目測不止8台,每次出來的IP不一樣,網段是17.0.0.0/8 具體用了多少個地址不知道,可以自己爬,一個3000萬日活躍用戶App的真實數據,另外就算查出IP地址,也不知道內網機器有多少,內網還可以再做負載均衡
APN伺服器採用是push方案,維持長連接,按目前業界大公司鏈接數:優化後單台可以達到2000k心跳鏈接:一般為15分鐘,具體心跳策略不知道,這個可以根據使用情況優化
APNs使用的埠號:Unable to use Apple Push Notification service (APNs)apple各服務使用的埠號:TCP and UDP ports used by Apple software products- TCP port 5223 (used by devices to communicate to the APNs servers)
- TCP port 2195 (used to send notifications to the APNs)
- TCP port 2196 (used by the APNs feedback service)
- TCP Port 443 (used as a fallback on Wi-fi only, when devices are unable to communicate to APNs on port 5223)
發送消息gateway.push.apple.com, port 2195
接收反饋信息feedback.push.apple.com on port 2196 用戶接收消息 on port 5223 或者 443另外注意一點APNs包括遠端PUSH和本地PUSH,本地不需要經過APNs伺服器,由APP建立長連接獲取消息推送給手機
協議:目前來看傳送消息採用的是自定義的二進位協議,好像已經不用原來的XMPP協議了,初始採用TLS/SSL鏈接,Push: The history, experience, cost and future ? kellabyte
APNs系統邏輯:
Apple Push Notification Services in iOS 6 Tutorial: Part 1/2- An app enables push notifications. The user has to confirm that he wishes to receive these notifications.
- The app receives a 「device token」. You can think of the device token as the address that push notifications will be sent to.
- The app sends the device token to your server.
- When something of interest to your app happens, the server sends a push notification to the Apple Push Notification Service, or APNS for short.
- APNS sends the push notification to the user』s device.
詳細的去官網看
1. 基本流程 再說微信:APNs與微信推送作者是騰訊的
微信本身針對APN做了一個前端推送系統,但是發消息還是基於APN,為了做一個海量用戶的推送系統,只建立一個到APNs的連接是不夠的。單鏈接速度是有限制的,可以根據需要多建立一些連接。微信 做了推送隊列,異地負載均衡,另外微信後台做了本地PUSH,也就意味著當你打開微信應用的時候,數據基本不走APN server了,減少了APNs壓力微信APNs推送系統的基本架構
再說後台系統框架:
蘋果沒有公布他的框架,但是依照目前的數據推測,可能是一個同時並發5億個長鏈接的消息系統,但是我們可以參考另外一個億級平台的消息系統whatsapp支撐4.5億活躍用戶的WhatsApp架構概覽-CSDN.NET2013年數據- 4.5億的活躍用戶,並且是史上最快達到這個數字的公司
- 32個工程師,平均每人支撐1400萬活躍用戶
- 每天收發跨7個平台的500億消息
- 平均每天註冊用戶過百萬
- 0廣告開銷
- 800萬投資
- 數百個節點
- 8000+核心
- 數百TB內存
- 每秒Erlang消息超過7000萬
- 在2011年,WhatsApp單伺服器取得 100萬個tcp會話,同時還有內存和CPU剩餘。在2012年, tcp會話發展到了200萬。2013年WhatsApp 發表tweet聲明,70億消息入站,110億消息出戰,即每天處理180億消息,偉大的2013!
從這個數據上看,APNs,至少也得數百個節點啊
國內其他推送平台數據:
? 長連保持(單機實現數百萬長連)
? 用戶在線狀態的准確性(網路優化的心跳機制)? 協議(SPDY)
? 安全(獨有的安全加密方式,已実請專利)? 數據層非對稱加密等? 長連接技術選型(Grizzly,心跳、數據包處理優化等)? 用戶信息存儲優化(盡量少佔內存,如:使用Java堆外內存等)? JVM參數優化(內存優化,CMS及線程優化回收等)? OS層系統參數優化(TCP內存優化及連接回收等)《移動互聯網實時消息推送系統的設計和實現》吳仲深 @阿里雲無線2013新浪無線消息推送系統《消息推送系統.pdf》-周雲小Tips:網路編程的各種雷
1、工作模式:單進程/線程或多進程/線程2、埠回收:短連接模式下,客戶端埠復用、回收問題3、網路隊列:系統處理未接受連接的數量4、內部通訊及鎖 :多進程/線程工作模式下的相互通訊與鎖5、文件描述符:limit的限制,更深層次的限制6、內存問題:各種Buffer的使用控制,須有一個最大值7、環境問題:系統版本及參數設置、網線情況、交換機情況8、超時問題:網路、業務超時的處理9、通道問題:在連接改變成單向模式時,需要做特殊處理極光推送《大容量雲推送技術解析
》http://www.slideshare.net/kaerseng/ss-15885064
《百度雲推送介紹和架構分享》-郭振百度雲推送介紹和架構分享 總結:IOS全部走APNs,Android平台自己搞一個用到的技術:單機長連接數,分散式消息隊列,精簡協議,心跳策略優化,redis,epoll,主從熱備,異地負載均衡,其他各種優化等等還有個騰訊中間件
《TDBank系列之二:分散式海量消息中間件系統-Tube的設計原理與實踐》TDBank系列之二:分散式海量消息中間件系統-Tube的設計原理與實踐感興趣的可以自己去看,每天處理的消息量達8000億PPT可以下來看一眼,其他的您們補充吧
最後最重要的,如果侵權請告訴我,馬上刪!!!就說一點,APNs的IP段是 17.0.0.0/8
推薦閱讀:
※iOS 上有哪些程序員必備 App?
※金山詞霸 iOS 版是如何實現長時間後台查詞以及發音的?
※為什麼iPhone充電從99%到100%特別慢?
※App Store 上新出的 Deus Ex The Fall 和該系列的其他作品有什麼不同?這款作品在 iPhone 上表現如何?
※如何評價部落衝突這款遊戲?