人人网服务化与架构变迁v3

34
人人人人人人人 -- 人人人人人人 人人

Upload: drewz-lin

Post on 14-May-2015

752 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 人人网服务化与架构变迁V3

人人网网站架构-- 服务化的演进

刘源

Page 2: 人人网服务化与架构变迁V3

内容概要

一、人人网网站业务介绍

二、为什么要服务化

三、服务化:开启潘多拉的魔盒

四、问题与解决方案

Page 3: 人人网服务化与架构变迁V3

人人网网站业务

1. 每月数千万活跃用户

2. 每周数 T 照片上传到相册

3. 每天数千万新鲜事儿发布

4. 排名靠前的实时通讯软件(人人桌面)

Page 4: 人人网服务化与架构变迁V3

人人网网站业务

很异构,很分散,很易变动

Page 5: 人人网服务化与架构变迁V3

内容概要

一、人人网网站业务介绍

二、为什么要服务化

三、服务化:开启潘多拉的魔盒

四、问题与解决方案

Page 6: 人人网服务化与架构变迁V3

一张依赖图(局部)

“ 发状态”服务

1. 依赖多2. 沟通烦3. 上线难

Page 7: 人人网服务化与架构变迁V3

为什么服务化

“ 解耦,分而治之,应对变化”

1. 名词太多,简单来说:1. 将高内聚模块实现为服务,服务接口形式化2. 让服务和数据易于访问

2. 应对复杂性和易变性:1. 复杂度增加 VS 人对复杂性控制的界限2. 可预期的变化 VS 不可预期的变化

Page 8: 人人网服务化与架构变迁V3

那我们就开始服务化吧

1. 自实现 REST 框架1. 使用 Java ,基于 Spring MVC2. 开发便捷,应用在 UGC 等业务逻辑中

2. 使用开源 ICE ,1. 完整 RPC 架构2. 实现缓存等中间层、新鲜事儿等系统

Page 9: 人人网服务化与架构变迁V3

内容概要

一、人人网网站业务介绍

二、为什么要服务化

三、服务化:开启潘多拉的魔盒

四、问题与解决方案

Page 10: 人人网服务化与架构变迁V3

异构服务总线

1. 自实现 REST 框架1. 纯 Java 架构,跨语言服务无法调用

2. 使用开源 ICE1. 大而全,整体解决方案2. 想要修改或者扩展?

3. 重造轮子还是使用开源方案?

Page 11: 人人网服务化与架构变迁V3

一次线上事故

3G

状态服务

SocialWIKI

相册服务

SocialWIKI

相册服务3G

状态服务

3G

状态服务

3G

SocialWIKI

相册服务3G3G3G3G3G3G

状态服务

3G3G

SocialWIKI

Page 12: 人人网服务化与架构变迁V3

失控

1. 是不是太无政府主义了?1. 步子迈的太大,容易扯着蛋2. 服务化的太乱,容易挂全站

2. 服务化过度面临问题1. 单边失效的容错2. 局部过载、级联反应,超时放大3. 服务之间的约定伴随调用链增长而失效

Page 13: 人人网服务化与架构变迁V3

从事故深挖出一些共性问题

1. “ 为什么不使用非阻塞方式?”2. “ 为什么没有配额限制?没有权限隔离?”3. “ 为什么不能自动识别依赖、动态增加资

源?”4. “ 能否让 log 汇总和分析实时一点儿?”

Page 14: 人人网服务化与架构变迁V3

内容概要

一、人人网网站业务介绍

二、为什么要服务化

三、服务化:开启潘多拉的魔盒

四、问题与解决方案

Page 15: 人人网服务化与架构变迁V3

问题回顾

1. 异构总线:自建还是开源

2. “ 为什么不使用非阻塞方式?”3. “ 为什么没有配额限制?没有权限隔离?”4. “ 为什么不能自动识别依赖、动态增加资

源?”5. “ 能否让 log 汇总和分析实时一点儿?”

Page 16: 人人网服务化与架构变迁V3

问题抽象

“ 独立的组件”

1. 基础总线2. 调用语义3. 服务寻址和权限控制4. 服务调度5. 服务在线 / 离线 Log/Profiling 收集分析

Page 17: 人人网服务化与架构变迁V3

XOA ( Xiaonei Oriented Architecture )

Page 18: 人人网服务化与架构变迁V3

基础总线

1. 自建与开源的折中1. 自建:没有精力2. 开源:被绑架

2. 对待开源系统的态度1. 作为组件而不是框架

3. 选择 Thrift

Page 19: 人人网服务化与架构变迁V3

Thrift/ThriftEX

1.定制传输层 / 协议层1.性能优化2.路由、存储、调试3.定制序列化方式,总线 adaptor ,列压缩

2.服务层1.线程模型、进程模型2.服务统一后门: FB303 ,民兵服务

Page 20: 人人网服务化与架构变迁V3

调用语义:“为什么不使用非阻塞方式?”

1. 常用调用语义(状态服务为例):1.双向阻塞: DB, 数据库2.单向非阻塞:发状态

Page 21: 人人网服务化与架构变迁V3

调用语义

1. 支持其他语义?1. 阻塞 / 非阻塞、同步 / 异步、 Event/回调2. 不为奢饰品付钱

2. 为什么不直接用 MQ ?1. 统一行为、统一总线2. 使用者要的是非阻塞,不是 MQ

Page 22: 人人网服务化与架构变迁V3

中转单向 RPC 调用的消息队列

Thrift / ThriftEX + ZeroMQ

Page 23: 人人网服务化与架构变迁V3

寻址和隔离:“配额限制、权限隔离?”

1. 需要规则1. 服务定位 2. 权限隔离 / 配额限制

2. 借鉴 Linux文件系统标准1. 静态、动态(易变)划分: /proc /etc2. ACL 完成权限划分: rwx

3. 基于 Zookeeper 建立规则(已申请专利)

Page 24: 人人网服务化与架构变迁V3

服务的寻址、权限控制

1. 服务的定位

/<root>/<service>/<version>/<stat>/<node>

root: online, sandbox, testservice: 服务的逻辑名称version: 服务的版本stat: 服务的某个状态,例如 sharding

number 等node: 具体的服务物理节点信息,例如

ip+port+pid

Page 25: 人人网服务化与架构变迁V3

服务的寻址、权限控制

1. 权限控制 ( 基于 zookeeper 的 ACL)/<root>

/<service>/<version>

/<stat>/<node>

super : 超级用户op : 运维用户server : 服务提供者client : 服务访问者

Page 26: 人人网服务化与架构变迁V3

服务的寻址、权限控制

1. 配额约束

/<root>/…/<stat>/Quota

放置 Quota 配置文件,对于 Client角色的不同 User ,指定相关的访问配额信息

Page 27: 人人网服务化与架构变迁V3

调度:“自动识别依赖、动态增加资源?”

1. 服务化调度:将流程自动化1. 服务太多,依赖太多,易犯错2. 除夕晚高峰、高考结束高峰、登陆攻击

Page 28: 人人网服务化与架构变迁V3

离线服务调度

1. 运维调度:使用 OP角色,离线调度( Hadoop )

1. 确认环境、权限2. 检查服务依赖链和配额3. 管理服务生命期4. 环境回收

Page 29: 人人网服务化与架构变迁V3

在线服务调度

1. 异常调度:在线调度1. 扫描服务后门等方式获取异常2. 寻找民兵服务3. 切换民兵服务

Page 30: 人人网服务化与架构变迁V3

服务在线 / 离线 Log/Profiling 收集分析

1. 已有收集系统:1. 延迟数十分钟

2. 待收集数据假设1. 重要的量小(在线),不重要的量大(离线挖掘)2. 又重要量又大,大概率是方向错了

3. 被动收集和主动收集1. 数据分流( Error , Warn , Info )2. 通过服务后门获取已定义状态等信息

Page 31: 人人网服务化与架构变迁V3

服务在线 / 离线 Log/Profiling 收集分析

添加分流、实时通道, MQ 或后门扫描服务

Page 32: 人人网服务化与架构变迁V3

小结

1. 系统的控制力最终还是人对其控制力1. 业务到底在干啥2. 调用链不能太长3. 充分预估、充分灾备

2. 系统的控制力建立在非置信关系上1. 没有不会挂的系统:隔离错误,拒绝大框架2. 没有充分沟通的交流:规则先行

Page 33: 人人网服务化与架构变迁V3

XOA ( Xiaonei Oriented Architecture )

Page 34: 人人网服务化与架构变迁V3