大鱼架构演进

42
云云云 2016.01.20 1 云云云云云云 云云云 2016.01.20

Upload: jween-lau

Post on 11-Apr-2017

802 views

Category:

Mobile


0 download

TRANSCRIPT

Page 1: 大鱼架构演进

云应用 | 2016.01.20 1

大鱼架构演进

云应用2016.01.20

Page 2: 大鱼架构演进

云应用 | 2016.01.20 2

1. Demo 阶段2. PGC: 热点、话题3. PGC: 热点、群聊4. PGC: 热点、万人群聊5. UGC: 热点、万人群聊、弱社交6. UGC: 热点、社交分享 -> LBS7. 总结

目录

Page 3: 大鱼架构演进

云应用 | 2016.01.20 3

• RxJava: 多线程 , 线程池 , 任务管理 , 异常管理 . 禁止使用 AsyncTask, Thread 等 Android/Java 原生线程相关以及 Android Annotation 这种注解型框架

• Retrofit: 网络请求• Picasso: 图片加载与缓存• Okhttp: 网络通信• 数据持久化 : Android 原生• UI: RecyclerView, support-v21, Toolbar,

SnackBar 等 Android Lollipop 预览版相关控件

Demo 阶段Android 客户端架构 [0.1, 0.3)

Page 4: 大鱼架构演进

云应用 | 2016.01.20 4

• 白色 : 不需要或者需要很少的开发与维护

• 绿色 : 需要日常开发与维护• 蓝色 : 需要超越日常工作量的投入 , 存

在可控的风险• 橙色 : 需要预研与验证的技术 , 存在不

可预知的风险

Demo 阶段Android 客户端架构 [0.1.0, 0.3)

Page 5: 大鱼架构演进

云应用 | 2016.01.20 5

• 运营管理平台• 服务器业务接口• MySql 数据持久化• 一台开发主机

Demo 阶段服务器架构

Page 6: 大鱼架构演进

云应用 | 2016.01.20 6

• Demo 版本 , 修了两天 BUG, 改了几次 UI, 就这么上了

• 额外 : 预研直播 , 群聊相关技术

PGC: 热点、话题

Page 7: 大鱼架构演进

云应用 | 2016.01.20 7云应用 | 2016.01.20 7

PGC: 热点、群聊差异化 : 给用户游戏一样的用户体验

Page 8: 大鱼架构演进

云应用 | 2016.01.20 8

• 实时网络游戏• 高可用 , 高并发 , 优秀

的可扩展性

参考的架构网易 Pomelo 架构

https://github.com/NetEase/pomelo

Page 9: 大鱼架构演进

云应用 | 2016.01.20 9

• 引入 Socket.io 框架• 因为服务器开发是 Java 工程师 , 所

以我们选择了 Socket.io + Netty 的方案

• Socket.io 对移动端的支持 , 比当时的 Pomelo 架构鲁棒性高太多 , 现在的 Pomelo 内部也改用 Socket.io 了

• Socket.io 长连接单机可以达到百万级别 , 函数式 API

PGC: 热点、群聊服务器架构 – 陈明

Page 10: 大鱼架构演进

云应用 | 2016.01.20 10

• Socket.io.RxJava: 将 Socket.io 的函数式接口 , 以及大鱼的相关业务接口改成 RxJava Observable 式

• 将 Retrofit 的网络异常 , 与 Socket.io 的网络异常全部封装到同一个模块 , 代理给 RxJava

• SharePrefer: 对 SharedPreference的链式封装 , 简化 SharedPreference使用 , 源代码 GIST点我

PGC: 热点、群聊Android 客户端架构 [0.3.0, 0.6)

Page 11: 大鱼架构演进

云应用 | 2016.01.20 11

PGC: 热点、群聊Android 客户端架构 [0.3.0, 0.6) 设备唯一 ID 方案 , Google 与 Apple 的推荐方案

Page 12: 大鱼架构演进

云应用 | 2016.01.20 12

PGC: 热点、群聊Android 客户端架构 [0.3.0, 0.6) 设备唯一 ID 方案 , 我们的 MUID 方案

Page 13: 大鱼架构演进

云应用 | 2016.01.20 13

• 视差动画 - Parallax effects

• View Property Animation• Layout Transition, Activity Transition,

Fragment Transition• Shared Element Animation• View Animation

• Canvas, Bitmap!

PGC: 热点、群聊Android 客户端架构 [0.3.0, 0.6) 动画相关

• 游戏引擎 – Game engines

• Libgdx• Cocos2d-x• Unity• …

VS

做了十几个动画效果 , 改了几个版本 UI

Page 14: 大鱼架构演进

云应用 | 2016.01.20 14云应用 | 2016.01.20 14

广播风暴 : 同一个话题人数达到 1250 的时候 , 同时发一条消息 , 机房网卡就爆了(50MB)

Page 15: 大鱼架构演进

云应用 | 2016.01.20 15

• n² 流量• 解决方案 : 参考网络游戏 , 服务器分区

– 连接服务器物理分区 , 聊天房间业务逻辑分区– 精简 json 结构 , 或者更换为 protobuf– 控制广播范围 , 从全广播改成声波广播– 控制用户发送消息频率– 控制用户接收消息频率– 图片 url 使用短 code, 由客户端拼接

PGC: 热点、群聊广播风暴

Connector

Connector

Connectormaste

r

Connector

消息队列

消息队列

消息队列

消息队列

Page 16: 大鱼架构演进

云应用 | 2016.01.20 16云应用 | 2016.01.20 16

最终方案 : 魅族 Push 通道 protobuf重构版本

Page 17: 大鱼架构演进

云应用 | 2016.01.20 17

• Fresco: 比 Picasso 更优秀的性能 , 更好的扩展性 , 对动画的渲染效率远高于 Android 原生控件

• Nebula.dayu: 基于 nebula, 对大鱼业务的封装

• Nebula.dayu.RxJava: 将Nebula 与大鱼业务改造成RxJava 式管理 , 附加事务推送等 nebula暂时缺失的模块

• UI又改了

PGC: 热点、万人群聊Android 客户端架构 [0.6.0, 0.8)

Page 18: 大鱼架构演进

云应用 | 2016.01.20 18

• Push 通道 : 独立的 , 只针对大鱼业务• 因为原版还在测试阶段 , 并没有 target第三方应用

PGC: 热点、万人群聊服务器架构

Page 19: 大鱼架构演进

云应用 | 2016.01.20 19

• 声波控制消息广播范围和数量

PGC: 热点、万人群聊服务器架构 声波控制

Page 20: 大鱼架构演进

云应用 | 2016.01.20 20

• 分组实现

PGC: 热点、万人群聊服务器架构 声波架构 – By 陈金平

Socket服务群,消息收集分发,订阅 Http服务群,非消息业务,图片

Http服务,运营和管理平台,以及监控平台

消息生成服务 消息下发服务 赞/踩,投票站队服务

Redi s

Mysql规定数据库

归档服务

FastDFS

用户

消息路由中心(整理消息)

发言

Location服务集群(用户订阅路由中心)

发言

通知逻辑组下发

逐个发送消息

订阅,投票,站队

主题,消息管理等

鉴权和用户管理服务

大组消息队列 A

小房间A1

小房间A2 …

Slave

Page 21: 大鱼架构演进

云应用 | 2016.01.20 21

• 分组实现

PGC: 热点、万人群聊服务器架构 声波架构 – By 陈金平

大组消息队列 A

小房间A1

小房间A2 …

Slave

消息接收服务集群 消息分发服务集群

消息路由中心

Redis集群

组临时消息队列

精选时消息队列归档用消息队列

用户群

发消息

存入数据库

转发路由中心

定时分组通知集群

收消息

Page 22: 大鱼架构演进

云应用 | 2016.01.20 22

• 还是解决不了这种问题 : – 用户 B 与 A, C能聊天互动 – 用户 A 与 C却互相看不到

• 但是却将一个房间爆满 , 另一个房间只有几个人的寂寞感 , 平均分配到了所有人

PGC: 热点、万人群聊服务器架构 声波架构

用户 A 用户 C用户 B

Page 23: 大鱼架构演进

云应用 | 2016.01.20 23云应用 | 2016.01.20 23

并行开发流程

Page 24: 大鱼架构演进

云应用 | 2016.01.20 24

Page 25: 大鱼架构演进

云应用 | 2016.01.20 25云应用 | 2016.01.20 25

Apk安全相关 : 对于一个应用 , 外发到应用市场 , 首要保证安全 , 其次是渠道分发推广

Page 26: 大鱼架构演进

云应用 | 2016.01.20 26

• 添加 Apk自我保护方案• 使用 Gradle Flavor来定制渠道打包

• RxJava 作为整体架构的基础考虑• Https签名从 Java层移动到 C层• 敏感数据使用 Gradle 加密 , C层解密

• 随着项目的变大 , SQLite 简直就是业界毒瘤 ,

• 不 , 一切 Android偏 Framework的 API都是业界毒瘤

• UI又改了 , 2 次

PGC: 热点、万人群聊、弱社交Android 客户端架构 [1.0.0, 2.0.1]

Page 27: 大鱼架构演进

云应用 | 2016.01.20 27

• 外部工具 Gradle 加密数据 , 或者流程• Gradle 将 APK 的 release签名加密到 NDK层• Gradle编译过程中将编译的 Dex 代码信息加密

到 NDK层• Android NDK层反向校验 APK 的 Dex 代码信息• Android NDK层反向校验 APK 的签名• Android NDK层解密次数据 , 或解密流程

PGC: 热点、万人群聊、弱社交Android 客户端架构 [1.0.0, 2.0.1] Apk自我保护方案

Page 28: 大鱼架构演进

云应用 | 2016.01.20 28

• 比如 Http签名加密整体流程

PGC: 热点、万人群聊、弱社交Android 客户端架构 [1.0.0, 2.0.1] Apk自我保护方案

Page 29: 大鱼架构演进

云应用 | 2016.01.20 29

• 加密解密

PGC: 热点、万人群聊、弱社交Android 客户端架构 [1.0.0, 2.0.1] Apk自我保护方案

Android Apk NDK层解密

Gradle 编译过程加密

Page 30: 大鱼架构演进

云应用 | 2016.01.20 30

• 自签名校验

PGC: 热点、万人群聊、弱社交Android 客户端架构 [1.0.0, 2.0.1] Apk自我保护方案

Page 31: 大鱼架构演进

云应用 | 2016.01.20 31

• Dex 代码校验

PGC: 热点、万人群聊、弱社交Android 客户端架构 [1.0.0, 2.0.1] Apk自我保护方案

Page 32: 大鱼架构演进

云应用 | 2016.01.20 32

• 二次打包流程• 早期互联网 Android 应用 ,

Ant编译的时候 , 二次打包Apk来加密 , 原理与此一致

PGC: 热点、万人群聊、弱社交Android 客户端架构 [1.0.0, 2.0.1] Apk自我保护方案

Page 33: 大鱼架构演进

云应用 | 2016.01.20 33

• 第二次优化版本 , 修改Gradle编译链 , 简化成一次打包

PGC: 热点、万人群聊、弱社交Android 客户端架构 [1.0.0, 2.0.1] Apk自我保护方案

×

Page 34: 大鱼架构演进

云应用 | 2016.01.20 34

• 自我保护方案从大鱼 2.0.0之后 , 脱离大鱼 , 单独维护 , 可供其他应用使用 , 音乐 , 视频 , 智能生活等多个 APP已经用到项目地址 : http://gitlab.meizu.com/AppArch/security

• 因为集成比较复杂 , 后来又做了个 gradle插件 , 来帮助应用傻瓜式集成此方案项目地址 : http://gitlab.meizu.com/Cloud/securityplugin

PGC: 热点、万人群聊、弱社交Android 客户端架构 [1.0.0, 2.0.1] Apk自我保护方案

Page 35: 大鱼架构演进

云应用 | 2016.01.20 35

• 使用 Gradle Flavor来定义渠道 Flavor• 借助 Gradle resValue, buildConfigField 等接口 , 将渠道信息注入到 Apk 的代码与资源中 , 以供数据统计

• 修改 Gradle Android编译链 , 在 assemble 的时候 , 通过时间戳+ 机编码将 apk 以及混淆文件mappings绑定到一起 , 归档起来 , 以供 retrace

• 此归档流程已经集成至魅族 Gradle插件 2.x 版本 , 由于服务器不支持 x.y.z.CI_CODE 这种版本名 , 所以全功能版本为 dev.2.3项目地址 : http://cloud.meizu.com/dayu/meizugradleplugin/tree/dev_23

PGC: 热点、万人群聊、弱社交Android 客户端架构 [1.0.0, 2.0.1] 渠道分发

Page 36: 大鱼架构演进

云应用 | 2016.01.20 36云应用 | 2016.01.20 36

2.0 版本之后 , 群聊被砍

Page 37: 大鱼架构演进

云应用 | 2016.01.20 37

• Https 全 REST full 化 , 签名改为 Oauth头签名 , hmac-sha256 加密算法

• Retrofit升级为 2.0-beta3最新架构

• 全面废弃了渣渣 SQLite, 改用 realm 数据库并加密 , 开发效率提升了无数倍

• JVM层添加 Kotlin语言• UI又改了

PGC: 热点、万人群聊、社交分享Android 客户端架构 3.0.0

Page 38: 大鱼架构演进

云应用 | 2016.01.20 38

• RxJava: 刚开始很难用 , 习惯了超好用 , 可以大幅度提升多线程 , 任务组合 , 任务管理等开发效率• Retrofit: 刚开始很好用 , 习惯了更好用 , 可以大幅度提升网络接口开发效率• Realm: 刚开始很难用 , 习惯了超好用 , 可以大幅度提升数据库开发效率• Picasso -> Fresco: 难用一点点 , 但性能提升• Kotlin: 刚开始很难用 , 习惯了 , 越用越好用 , 可以大幅度提升敲代码的效率

• 但总体而言 : 开发使用了过多不稳定的 beta, 甚至 experimental 技术

总结Android 长期技术选用

Page 39: 大鱼架构演进

云应用 | 2016.01.20 39

• 技术选用 : 尽量选择”绿色” , 甚至”白色”的技术 , “ 蓝色”的技术一个阶段最多选一个• 三方 SDK: 各种 auth2.0登录 SDK, 各种支付 SDK, 各种 github 开源库• 渠道分发 : Gradle必须要懂• 数据统计 : 海外 Flurry, 国内友盟• 推送平台 : 极光 , 或者 parse 这样的 MBaas• 灰度测试 , 云测• Android安全 : 壳固化技术 , 二次打包技术 , 或者像大鱼一样的 apk保护方案• 免服务器开发 (Baas, MBaas): 海外 parse, 国内 LeanCloud, bmob 等一堆抄袭的• 总而言之 , 所有以上都是资源 , 我们要做的是按 startup挑选组合一切可以使用的资源

总结Startup 阶段 , 移动开发你会遇到的东西

Page 40: 大鱼架构演进

云应用 | 2016.01.20 40

• Ideas -> Validate: 产品 idea 的验证 , 此过程在 UI 设计之前 , 第三方 validate公司有 Unbounce• Plan -> Visualize: 只有通过 validate 的 idea, 才能进入原型图设计 , 项目计划阶段• Project Management: 进入项目管理阶段• Website: 开发稳步进行的时候 , 网站才开始建设 , 一般 5美刀就可以买到• SEO: 搜索优化 , 与渠道分发准备推进项目上线• Payment & Legal: 支付接入 , 账号系统 , 以及法律规避• Analytic: 产品正常运转了之后 , 数据分析开始介入 , 用数据来帮助产品提升• 其实 Analytic约等于 Validate, 形成一个子循环 , 数据分析是用来自我 Validate然后改进下一个产品需

求与迭代的

总结Startup项目正确的流程

Page 41: 大鱼架构演进

云应用 | 2016.01.20 41

• 网易网络游戏框架 : https://github.com/NetEase/pomelo• Google惟一 ID 方案 : http://developer.android.com/training/articles/user-data-ids.html• Apk自我保护方案 : http://gitlab.meizu.com/AppArch/security/tree/master• Apk自我保护方案插件 : http://gitlab.meizu.com/Cloud/securityplugin/tree/master• 魅族 Gradle插件 : http://cloud.meizu.com/dayu/meizugradleplugin

– dev_23 分支中包含有 apk 及 mappings归档插件代码• 推特 Oauth 加密 : https://dev.twitter.com/oauth/overview/creating-signatures• Startup 15 个工具 : http://creately.com/blog/diagrams/15-tools-to-launch-your-startup/?utm_content=bufferaddf8&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer

可供参考的资源

Page 42: 大鱼架构演进

云应用 | 2016.01.20 42

谢谢

云应用 – 刘俊