事件驱动的移动数据中心 广州舜飞信息科技有限公司 谭荣棉.

Slides:



Advertisements
Similar presentations
一、软件简介 二、功能介绍 三、产品优势 四、应用范围 五、成功客户 目录目录 软件简介 ●员工工作时间,都认真工作了? ●还是在玩游戏? ●浏览与工作无关的网站? ●收发私人邮件? ●甚至将公司的机密资料拷贝带 走?或是通过邮件或聊天工具泄 密? …… 解决之道.
Advertisements

如何做友好往来的使者如何做友好往来的使者 ( 1 )要有开放 的胸怀 ( 表现在) ( 2 )搭起文 化的桥梁 ①采取客观、平等的态度,尊重因 文化不同而导致的行为方式的差异。 ②要善于虚心学习其他文化的优 点、长处。 ③要保护本民族的文化,同时也 应尊重、珍惜和保护各个国家、 民族的文化。 ①学习外来文化,不能照搬照抄,而.
一、解读《刑法修正案九》 《中华人民共和国刑法修正案 ( 九 ) 》由中华人民共和国第十二届全国人民代表大会常 务委员会第十六次会议于 2015 年 8 月 29 日通过, 现予公布, 自 2015 年 11 月 1 日起施行。
●公司簡介. ●公司組織 行銷 企劃部 行銷 企劃部 研發 設計部 研發 設計部 視覺 設計部 視覺 設計部 媒體 製作部 媒體 製作部 行動 裝置部 行動 裝置部 執行長 總經理 管理部 本公司組織人力配置除董事長、執行長、總經理外,共 有六大部門,分別為研發部 6 人、管理部 4 人、視覺設計部.
環境游離輻射 ( 六 ) 輻射與核能發電. 媽!這是我上班的 地方-核電廠。 地方好寬闊喔! 聽說日本原子彈爆炸死好幾 萬人,阿榮啊!你在這裡上 班,安全嗎?
《小狗包弟 》之 从阅读到写作 学校:和风中学 年级:高一 参赛者:彭龙英. 预习检测一 思考:同学们读完作者与包弟 的故事后,说一说作者所表达的情 感是什么?
Web app和html5给前端带来的变化 —— 我们的html5游戏平台之旅.
资源平台应用培训 武汉市交通学校信息化建设指导委员会.
虹膜识别健康养老服务智能系统项目.
探究活动课:互联网+历史素材阅读与研讨 古代中国的选官制度 黄天庆  探究活动课:互联网+历史素材阅读与研讨 古代中国的选官制度 黄天庆 
職校、五專群科簡介.
104年度國立宜蘭大學新進主管研討 主計業務宣導說明
大学计算机基础 主讲:张建国 电话: 实验及交作业网址:
中公教育湖南分校 地址:长沙市建湘南路154号惟楚国际6楼 电话:
102年實施之高中職及五專多元入學(含免試入學)之招生機制
讲好后勤故事 提升后勤形象 淮阴师范学院宣传部副部长 张同刚.
读者与图书馆 2009年春季版 总第 15 期 山 东 交 通 学 院 图 书 馆 2009年3月.
关于“人肉搜索”的滥用及其所引发的 “网络暴力”的道德与法律思考
江苏省工程造价管理协会 工作报告 2015年4月21日 扬州.
法 在 身 边 杜绝不良行为,远离违法犯罪 —— 走好青春第一步.
责任 感恩 安全 开学第一课 广西柳州市柳东新区雒容镇盘古小学王秀娅 QQ:
校园信息管理系统 河北科技大学网络中心 2000/4/10.
101年8月份 嘉義市道路交通安全聯席會報 酒駕行為與肇事現況分析 主講人:內政部警政署交通組科長張夢麟 1.
经济新闻集锦.
冶金等工贸行业小微企业 安全生产标准化建设
高校邦在线学习平台 学生学习手册 北京高校邦科技有限公司.
在线学习系统操作指南.
2012级暑期放假安全教育 及宿舍搬迁工作布置会 北京化工大学理学院 辅导员:曹鼎 2013年6月6日.
云智慧助力在线医疗服务性能优化 —让IT运营更简单 2015年4月 云智慧科技(北京)有限公司.
姓名: 钱琬婷 学号: 0501W238 专业: 计算机科学与技术 指导教师: 陈家琪 教授
汇报大纲 一、报送系统总体介绍 二、自查及检查评分报送流程 三、自查及检查方法及关键点 四、建议及注意事项.
每一次 都在徘徊孤单中坚强 每一次 就算很受伤也不闪泪光 我知道 我一直有双隐形的翅膀 带我飞 飞过绝望 不去想 他们拥有美丽的太阳 我看见 每天的夕阳也会有变化 我知道 我一直有双隐形的翅膀 带我飞 给我希望 我终于 看到 所有梦想都开花 追逐的年轻 歌声多嘹亮 我终于 翱翔 用心凝望不害怕 哪里会有风.
V 微小店 教程 第十一章-论坛推广.
徵收苗栗市福全段147、1588及文心段10、11地號等4筆土地之
讲 义 大家好!根据局领导的指示,在局会计科和各业务科室的安排下,我给各位简要介绍支付中心的工作职能和集中支付的业务流程。这样使我们之间沟通更融洽,便于我们为预算单位提供更优质的服务。 下面我主要从三方面介绍集中支付业务,一是网上支付系统,二是集中支付业务流程及规定等,
中部科學園區管理局 緊急應變通訊構想及實施方案介紹
中国人民公安大学经费管理办法(试行) 第一章总则 第四条:“一支笔” “一支笔”--仅指单位主要负责人。负责对本 单位的经费进行审核审批。
第三章 使用XMLHttpRequest对象
Lync Web App 快速參考 撥入會議 使用電腦音訊加入 Lync 會議 管理視訊顯示
2015年云南财经大学图书馆 新生入馆教育考核试题 答题指南
103學年度第1階段 志願選填試探後輔導作為 成效檢討與精進建議
活动主题:佛山智造 中国骄傲 随着互联网、云计算、大数据以及移动互联网的快速发展,技术不仅仅是一种工具,正加速重构着品牌的新格局。
第一部分 系统概述 第二部分 技术背景 目录 第三部分 维修流程描述 成功案例 第四部分. 第一部分 系统概述 第二部分 技术背景 目录 第三部分 维修流程描述 成功案例 第四部分.
四川省卫生监督移动 执法终端介绍 发言人:陈成身 四川省卫生执法监督总队.
獎補助經預計支用報告 105年.
游子心 中华情 美国大华府地区华人华侨 庆祝中国六十周年华诞.
逆转地理课堂 提高复习效率 鲁迅中学 耿夫相.
网络协会2017培训 Node.js专题 (1) 2017/3/12 – Payne.
广西特级教师工作坊 网络平台建设.
NAMO網頁製作教學簡報 講師:李惠茹.
張智星 台大資工系 多媒體檢索實驗室 第九章 小餅乾(Cookies) 張智星 台大資工系 多媒體檢索實驗室.
华东理工大学 关于新校园卡功能启用的相关说明 2018年09月07日.
Ajax编程技术 第六章 调试与错误处理.
網站HOLMES DATA監測代碼.
微信商城系统操作说明 色卡会智能门店.
電機電子 成員:吳昇洋 張哲瑜 高振捷 楊博文 李世麒.
102學年度下學期 班親會 五年仁班 楊曉逸老師.
第二階段「校園徒步區建置」 執行成果報告.
指導老師:詹進科、陳育毅 開發團隊 : 呂峻豪、謝佳峻、黃傳強 中興大學資訊科學與工程學系 2015/12/11
學校/系所名稱:樹德科技大學/資訊工程系 參賽隊名:宇宙小超人 參賽同學:沈盈哲、候坤誠、康庭飴、蔡佩諭 指導老師:程毓明教授
此方案适用于如下车辆与车辆,车辆与人之间实现防撞,安装简单、方便快捷,可以有效的降低各种车辆碰撞事故,车辆碾压人员事故的发生。
W3C标准网页制作 主讲教师:张 涛.
主题班会 网络安全教育.
建筑信息化引领者 联系方式 营销类 V8.5 功能方案书 建筑施工项目管理系统&OA系统.
為民服務白皮書 台灣電力公司彰化區營業處  彰化區營業處 為民服務白皮書 誠信 關懷 服務 成長 1.
银川社保网上申报 宁夏人力资源和社会保障 网上服务大厅操作
JavaScript 教师:魏小迪
实验课程学习手册.
云控APP说明书 适用于云控平台配置.
云控APP说明书 适用于云控平台配置.
Presentation transcript:

事件驱动的移动数据中心 广州舜飞信息科技有限公司 谭荣棉

大型WebApp的数据交互问题 在开发大型的web应用时,都会接触到大量的前端与后端的数据交互的情况。

离线访问 几万行代码,几百个请求,改了一遍…… BOSS 我改…… 前端 我们的App怎么断网了就完全用不了。 要支持离线,能看到访问过的数据! BOSS 前端 我改…… 离线访问在App开发中必须考虑的一个重要问题,在web开发中一般无需考虑这个问题 大家是否有遇到过下面的情况, 几万行代码,几百个请求,改了一遍……

实时数据 几万行代码,几百个请求,又改了一遍…… 产品 前端 帅哥,银家的数据要有实时性。 要每秒都更新一次数据哦! 美女的要求,肯定木有问题! 马上就好!OK是不是秒更了! (・ω< )★ 为了提高产品的竞争力和用户体验,产品经理会肯定会对数据的实时性提出要求 前端工程师把所有请求的间隔时间缩短,几万。。。。。。 几万行代码,几百个请求,又改了一遍……

几万行代码,几百个请求,又改了一周末…… 变更通讯协议 那个前端…你秒更我怎么优化都不够啊! 后端 前端 (,,Ծ‸Ծ,,)大哥,你说怎么办…… 缩短请求间隔时间,提高刷新频率,实时数据的要求是实现了 新的问题出现 后端找你吐槽 怎么办 只有改变通讯协议,使用服务器推送技术,WebSocket等方式 几万行代码,几百个请求,又改了一周末……

几万行代码,几百个请求,又改了一通宵…… 全局数据缓存 连接数太多了? 才1K在线人数就有上万的连接~ 还有好多重复的相同连接呢~ 运维 前端 呵呵,偷懒了没有做缓存, 小的马上给大哥补上缓存功能…… 功能的增加,模块的增加,公共数据的重复查询,网络压力增大 举例一些游戏应用,用户角色数据都是经常使用的,很多模块都需要,没有一个全局的缓存处理,就需要做很多重复的查询,消耗带宽,消耗服务器。 几万行代码,几百个请求,又改了一通宵……

我们的App帅爆了!用户数激增有木有! 一个服务器撑不住了!按功能做成分布式! 前端跟进一下! 数据接口更改困难 广大群众 我们的App帅爆了!用户数激增有木有! 一个服务器撑不住了!按功能做成分布式! 前端跟进一下! 随着用户数越来越多,服务器也越来越多,部署环境也越来越复杂,各种各样的数据交互需求 不断出现,前端开发者需要花越来越多的时间在处理数据交互上,而真正的前端工作花费的 时间比例就越来越少,越来越远离前端工作的真正任务。 《问题文字》 前端 需求总在不断的变化,你是否 已经改得欲仙欲死

我们怎样解决这些问题 我们需要怎样从数据交互中脱离出来 我们需要怎样解决前面例子中各种各样数据交互问题

建立数据中心统一管理所有数据请求 简单的API接口 数据中心统一路由 数据中心统一缓存 数据中心自动进行离线缓存 数据中心服务器端实时数据推送 数据中心支持传输协议灵活切换 我们的答案就是,构建一个数据中心统一管理所有数据请求 接口 - 简单方便的API 路由 – 统一管理调度请求,适应环境 缓存 – 统一缓存公共数据,无需在考虑全局变量的命名,作用域以及业务逻辑的耦合 离线 – 联网时自动缓存离线数据,离线时自动返回缓存数据,无需在业务逻辑中做任何处理 推送 – 开发人员不在需要关心如何实现推送的实现细节,简单的实现实时数据推送的功能 协议 – 数据中心把传输层都包含起来,更换传输协议不再麻烦,也无需变更任何的业务代码

数据中心的好处 简化数据查询的复杂性 把网络传输从业务逻辑中抽离 让我们集中精力在业务模块的开发上

数据中心实现原理

数据中心基本架构 数据中心 数据 中心 客户 端部 分 数据 中心 服务 端部 分 客户端应用 服务器端 Internet 网络 网络传输

········ 客户端部分框架模型 与服务端 部分交互 扩展接口层 核心接口层 事件绑定表 消息事件 回调模块 本地消息转发模块 数据缓存管理层 数据离线管理层 发送URI映射模块 接收URI映射模块 服务器调度模块 服务器实例管理 实例1 实例2 实例N 实例3 ········ 与服务端 部分交互 会话标识 传输协议层

unbind() - 取消绑定消息事件触发函数 send() - 发送消息事件 setSessionId() – 设置会话ID 核心接口层 bind() - 绑定消息事件触发函数 unbind() - 取消绑定消息事件触发函数 send() - 发送消息事件 setSessionId() – 设置会话ID 这里说明一下为何要选择事件驱动的方式来做这个数据中心 HTML5中出现的WebSocket已经给出了一个很明显的信号,那就是服务器端需要有主动推送消息的能力 如果还是按照http的请求-响应的方式来做的话,我们就没有办法统一接口,没有办法去支持服务器推送的功能, 因为这里没有请求者,服务器的推送无法判断应该交给哪个模块去处理。 在ajax的请求中就给了我们一个很强烈的事件机制的感觉,请求的返回都是类似事件响应的方式回调处理函数的 同时javascript的运行机制,也非常适合做成事件驱动的形式。

参数格式:bind(uri, callback[, count]) uri参数指明callback回调函数是由什么URI消息地址触发的 callback(message, uri) message是消息的主体,具体由发送方确定 uri消息message的URI count回调次数,默认不限制回调次数,指定时,回调函数被触发达到指定次数是,绑定事件会自动取消

unbind – 取消绑定监听事件 参数格式:unbind(uri[, callback]) uri参数指明要取消的监听事件的URI消息地址 callback是可选参数,带上该参数时,只取消对应uri上的对应callback。否则会取消所有对应uri上监听事件记录

send – 发送消息事件 参数格式:send(uri, message) uri参数是消息的URI名称 message是消息的内容,可以是任意结构和类型的变量,直接传入绑定事件的callback函数的第一个参数 send()会把uri、message以及一个唯一的消息ID组合成一个消息结构,交给下一层处理。

setSessionId – 设置会话ID 数据中心需要根据会话ID来判断连接是否否正常有效的连接 会话ID的获取是通过普通的HTTP请求等与服务端的用户验证结果获得 服务端对应的会话ID又验证服务端设置到数据中心的服务端部分

Sample Code var DC = new EventDataCenter({ server:{ “/”:”http://foo.bar/api/”, “/api/”:”http://localhost/api/” }, router:{ “/hello/”:”/api” cache:{ “/hello/”:300 } }); DC.setSessionId(“session_id”); DC.bind(“/hello/world”, function(msg,uri){…}); DC.send(“/hello/world”, {action:”say”});

消息事件回调模块 根据返回消息的URI确定要触发要的监听函数 如果没有找到则在上一层的URI上寻找 模块还负责处理监听计数,触发一次监听计数减1,计数回到0则自动移除监听函数 监听函数参数格式 callback(message, uri) message - 接收到的消息对象 uri - 当前消息uri名称

本地消息转发模块 消息URI 以 local: 开头的消息 消息会直接发送到消息回调模块 可以实现本地模块间的通讯 Sample Code: var DC = new EventDataCenter({…}); DC.bind(“/event”, function(msg){ alert(msg); }); DC.send(“local:/event”, “local Message”)

数据缓存管理层 配置信息的cache部分说明哪些部分的消息URI需要缓存,还有缓存的有时间 需要缓存的消息交给下一层处理前都会检查缓存中是否有记录 请求和响应是如何关联的 服务器的响应都要求附带客户端请求的消息记录中的消息ID,也就是send()生成的唯一ID 在收到响应消息的时候,就可以根据响应消息的原消息ID进行关联

网络离线时自动从本地静态存储中寻找对应的请求记录返回 网络正常时,请求交给下层处理,本在消息返回时更新本地本地静态存储的记录 数据离线管理层 网络离线时自动从本地静态存储中寻找对应的请求记录返回 网络正常时,请求交给下层处理,本在消息返回时更新本地本地静态存储的记录 可以使用多种静态存储技术 请求和响应是如何关联的 与数据缓存一样,都是通过消息ID来对应

URI映射功能 通过匹配替换的方式,可以动态的修改发送到服务器端URI名称 有字符串头部匹配的方式 正则匹配的方式

服务器调度模块与服务器连接实例 根据配置信息的server配置,把不同的URI地址转发到不同的服务器地址上,支持分布式应用 数据中心针对所有服务器配置均建立一个连接实例,连接实例自行维护与每个服务器的长效连接以及接受处理服务器的推送信息

传输层协议层 只实现网络传输相关的处理 不处理任何逻辑和应用事务 业务逻辑无关方便的进行替换变更

扩展接口层 可选的,不一定需要 兼容之前的接口使用习惯 把常用的请求封装一个有意思的名称 全局的加载状态控制 响应消息资料拦截转换格式

········ 服务端部分框架模型 与客户端部分交互 用户实例队列 服务应用接口模块 其他服务器的反向代理转发 会话标识与实例管理 核心接口层 事件绑定表 消息事件 回调模块 用户实例队列 会话实例 ········ 发送 队列 接收 队列 传输协议层 与客户端部分交互

unbind() - 取消绑定消息事件触发函数 send() - 发送消息事件 createSession() – 创建会话获得会话ID 核心接口层(Server) bind() - 绑定消息事件触发函数 unbind() - 取消绑定消息事件触发函数 send() - 发送消息事件 createSession() – 创建会话获得会话ID 这里说明一下为何要选择事件驱动的方式来做这个数据中心 HTML5中出现的WebSocket已经给出了一个很明显的信号,那就是服务器端需要有主动推送消息的能力 如果还是按照http的请求-响应的方式来做的话,我们就没有办法统一接口,没有办法去支持服务器推送的功能, 因为这里没有请求者,服务器的推送无法判断应该交给哪个模块去处理。 在ajax的请求中就给了我们一个很强烈的事件机制的感觉,请求的返回都是类似事件响应的方式回调处理函数的 同时javascript的运行机制,也非常适合做成事件驱动的形式。

参数格式:bind(uri, callback) uri参数指明callback回调函数是由什么URI消息地址触发的 bind – 绑定监听事件(Server) 参数格式:bind(uri, callback) uri参数指明callback回调函数是由什么URI消息地址触发的 callback带有两个参数回调函数 callback(event,session) event是事件消息对象 属性message – 客户端消息的主体 属性id – 客户端消息ID 属性uri – 事件URI名称 session是对应的客户端会话ID

session_id接受消息的客户端会话ID uri参数是消息的URI名称 message是消息的内容,可以是任意结构和类型的变量 send – 发送消息事件(Server) 参数格式: send(session_id, uri, message[, event]) session_id接受消息的客户端会话ID uri参数是消息的URI名称 message是消息的内容,可以是任意结构和类型的变量 event是对应的客户端调用事件,用来给客户端部分做消息关联,主动推送的消息可以忽略

createSession – 创建会话 创建用户会话ID 通过会话来识别验证用户

Sample Code var DC = new ServerDataCenter(); DC.bind(“/api/world”,funcion(evt,sid){ // 查询数据 // 响应客户端 DC.send(sid,“/api/world”, “你好,App”, evt); }); // 实时数据推送 function pushdata(){ DC.send(recv_sid, “/push”, “push data”); } setInterval(pushdata, 1000);

谢谢观赏 广州舜飞信息科技有限公司

关于我们

广州舜飞信息科技有限公司 2011年5月成立 追求技术创新 Openjs – 前端开源框架 欢迎技术交流,更欢迎优秀人才加入

联系方式 谭荣棉 Email:tanrongmian@sunteng.com QQ:553828185