小米资深工程师瞿晋萍:米聊服务器的技术选型和架构设计 - 资讯频道 - CSDN.NET

小米资深工程师瞿晋萍:米聊服务器的技术选型和架构设计

2012-07-07 11:04 |

238次阅读 | 来源:CSDN 【已有0条评论】发表评论 关键词:小米 | 作者:张祺 | 收藏这篇资讯

2012年技术嘉年华于7月7日-8日在杭州海外海皇冠假日酒店拉开序幕。会议现场以“开放&分享”为主题,汇聚D2、iData、TCon、TaoMobile、aDev、iDeOps、Ucan 为代表的专业品牌会议,此外特色展区还将特设workshop 、创业展区两大创新部分。大会还邀请业界知名专家组成最强嘉宾阵容,内容覆盖放在“前端”、“高性能网络服务”、“海量数据存储和处理”、“互联网测试”等热点技术主题领域,精彩不容错过。 小米资深工程师 瞿晋萍 瞿晋萍于2010年加入小米至今,曾参与开发米聊软件,是负责米聊服务端架构师,米聊消息系统技术带头人。他发表《米聊服务器的技术选型和架构设计》主题演讲,首先以幽默的口吻形容了现在的时代:人多,钱傻,速来;其背后寓意是“天下武功为快不败”,想要在竞争如此激烈的时代中脱颖而出,掌握自己命脉,需提高自身速度。 如何提升速度?瞿晋萍认为分为三个流程,首先,快速推出新功能,测试并找错,验证后快速改进;其次,快速扩张研发队伍,加入大资源投入;最后,架构快速水平扩张,扩张运营到位,增长互联网业务规模。 众所周知,小米公司仅创业2年就取得了不菲的成绩,对于技术选型,其遵循3大纪律:大厂都在用;自己搞的定;项目输的起。创业选型的成功是一种选择的艺术,创业最大成本——机会,选型错了,时间也随之浪费,丧失翻身机会。至此,在快的同时也需要慢,抓住机遇,保证质量与服务,就是所谓的“慢既是快”。 在演讲中,瞿晋萍从业务分而治之、服务/数据访问通过接口、接口/数据支持多版本化、数据说话、用哈希partition、服务无状态、架构上要支持灰度升级和安全机制等八个方面具体介绍了米聊服务器构架的设计原则和构架演进。 1.业务分而治之 工程考虑:各个服务封装功能和数据,把借口以ip+port暴露出来 米聊技术实现:作为研发和部署的单位,独立研发演进,降低复杂度。 —Zookeeper,命名树 —各个服务注册成命名节点 —客户端先去找Zookeeper查找,再调用 设计服务怎么把复杂性藏于后台,这是技术需要解决的问题,选择分布式,强移植性服务Zookeeper,客户端通过名字找到相应调用的服务。一个服务失败Zookeeper会自动在命名树中摘掉服务,团队可以节省人力,并专注于此,开始后台服务分布式化。 2.服务/数据访问通过接口 接口要求:紧致(compact)、多版本支持(multi-version)、同步与异步 数据访问:DAL+DAO 工程考虑:评比变化和复杂性,便于共享,使用和升级 米聊实现: 同步使用Thrift(服务使用HsHa) 异步使用Rabbitmq —Rabbitmq是分布式的Actor —非阻塞,并发性好 —事件驱动,容错性好 Traffic shaping,容峰值流量好 数据库访问层DAL(data source) 3.接口/数据支持多版本化,可扩展 外部和内部所有接口要求:http api、rpc、data、xmpp连接协议 工程考量:灵活扩展又保持前后兼容 米聊实现: Http api:url版本化 Rpc/data:thrift Xmpp:增加了版本号 4.让数据说话 Measure测量统计:业务KPI和服务质量(吞吐量Throughput和时延latency) 米聊实现: 数据采集与统计(SCRIBE LOG+HADOOP+HIVE) Counter各个服务之间统计 Metrics(codahale) 5.用哈希partition所有东西 为海量用户提供服务的唯一途径 工程考量:机制越早建立越好,业务爆发很快,另外开发一开始就要有scale的概念 米聊实现: 数据库:一开始就按UID分表分库,做垂直和水平分割,用DAL屏蔽 服务用uid range分割 Memcached用一致性的hash 6.服务无状态 服务要设成无状态,可以被“kill-9” 工程考量:可以在线升级, 可以提供多个实例作为冗余,提高可用性和负载均衡 米聊实现: 服务内部无状态,通过cache或者数据库共享状态 客户端通过Zookeeper 发现服务的多个实例,负载均衡,并实现出错fallback机制 7.架构上要支持灰度升级 米聊实现: 前端快速介入,不含少含业务逻辑 业务通过前端后,根据ip、白名单、参数里uid/cookie得到相应的服务partition Uid白名单定义preview partition给内部员工服务 基于uid range定义一些里的partition做灰度,诸层次的升级 8.一开始要考虑安全机制 用户身份认证、授权、数据邪路、防篡改 工程考量:避免见光死 更多内容:阿里技术嘉年华直播页面

小米资深工程师瞿晋萍:米聊服务器的技术选型和架构设计 - 资讯频道 - CSDN.NET

小米资深工程师瞿晋萍:米聊服务器的技术选型和架构设计

2012-07-07 11:04 | 238次阅读 |
来源:CSDN
【已有0条评论】发表评论

关键词:小米 |
作者:张祺 |
收藏这篇资讯

2012年技术嘉年华于7月7日-8日在杭州海外海皇冠假日酒店拉开序幕。会议现场以“开放&分享”为主题,汇聚D2、iData、TCon、TaoMobile、aDev、iDeOps、Ucan 为代表的专业品牌会议,此外特色展区还将特设workshop 、创业展区两大创新部分。大会还邀请业界知名专家组成最强嘉宾阵容,内容覆盖放在“前端”、“高性能网络服务”、“海量数据存储和处理”、“互联网测试”等热点技术主题领域,精彩不容错过。

小米资深工程师 瞿晋萍

瞿晋萍于2010年加入小米至今,曾参与开发米聊软件,是负责米聊服务端架构师,米聊消息系统技术带头人。他发表《米聊服务器的技术选型和架构设计》主题演讲,首先以幽默的口吻形容了现在的时代:人多,钱傻,速来;其背后寓意是“天下武功为快不败”,想要在竞争如此激烈的时代中脱颖而出,掌握自己命脉,需提高自身速度。

如何提升速度?瞿晋萍认为分为三个流程,首先,快速推出新功能,测试并找错,验证后快速改进;其次,快速扩张研发队伍,加入大资源投入;最后,架构快速水平扩张,扩张运营到位,增长互联网业务规模。

众所周知,小米公司仅创业2年就取得了不菲的成绩,对于技术选型,其遵循3大纪律:大厂都在用;自己搞的定;项目输的起。创业选型的成功是一种选择的艺术,创业最大成本——机会,选型错了,时间也随之浪费,丧失翻身机会。至此,在快的同时也需要慢,抓住机遇,保证质量与服务,就是所谓的“慢既是快”

在演讲中,瞿晋萍从业务分而治之、服务/数据访问通过接口、接口/数据支持多版本化、数据说话、用哈希partition、服务无状态、架构上要支持灰度升级和安全机制等八个方面具体介绍了米聊服务器构架的设计原则和构架演进。

1.业务分而治之

工程考虑:各个服务封装功能和数据,把借口以ip+port暴露出来

米聊技术实现:作为研发和部署的单位,独立研发演进,降低复杂度。

—Zookeeper,命名树

—各个服务注册成命名节点

—客户端先去找Zookeeper查找,再调用

设计服务怎么把复杂性藏于后台,这是技术需要解决的问题,选择分布式,强移植性服务Zookeeper,客户端通过名字找到相应调用的服务。一个服务失败Zookeeper会自动在命名树中摘掉服务,团队可以节省人力,并专注于此,开始后台服务分布式化。

2.服务/数据访问通过接口

接口要求:紧致(compact)、多版本支持(multi-version)、同步与异步

数据访问:DAL+DAO

工程考虑:评比变化和复杂性,便于共享,使用和升级

米聊实现:

同步使用Thrift(服务使用HsHa)

异步使用Rabbitmq

—Rabbitmq是分布式的Actor

—非阻塞,并发性好

—事件驱动,容错性好

Traffic shaping,容峰值流量好

数据库访问层DAL(data source)

3.接口/数据支持多版本化,可扩展

外部和内部所有接口要求:http api、rpc、data、xmpp连接协议

工程考量:灵活扩展又保持前后兼容

米聊实现:

Http api:url版本化

Rpc/data:thrift

Xmpp:增加了版本号

4.让数据说话

Measure测量统计:业务KPI和服务质量(吞吐量Throughput和时延latency)

米聊实现:

数据采集与统计(SCRIBE LOG+HADOOP+HIVE)

Counter各个服务之间统计

Metrics(codahale)

5.用哈希partition所有东西

为海量用户提供服务的唯一途径

工程考量:机制越早建立越好,业务爆发很快,另外开发一开始就要有scale的概念

米聊实现:

数据库:一开始就按UID分表分库,做垂直和水平分割,用DAL屏蔽

服务用uid range分割

Memcached用一致性的hash

6.服务无状态

服务要设成无状态,可以被“kill-9”

工程考量:可以在线升级, 可以提供多个实例作为冗余,提高可用性和负载均衡

米聊实现:

服务内部无状态,通过cache或者数据库共享状态

客户端通过Zookeeper 发现服务的多个实例,负载均衡,并实现出错fallback机制

7.架构上要支持灰度升级

米聊实现:

前端快速介入,不含少含业务逻辑

业务通过前端后,根据ip、白名单、参数里uid/cookie得到相应的服务partition

Uid白名单定义preview partition给内部员工服务

基于uid range定义一些里的partition做灰度,诸层次的升级

8.一开始要考虑安全机制

用户身份认证、授权、数据邪路、防篡改

工程考量:避免见光死

更多内容:阿里技术嘉年华直播页面

小米资深工程师瞿晋萍(男):米聊服务器的技术选型和架构设计相关推荐

  1. 米聊服务器的技术选型和架构设计

    http://wenku.it168.com/d_000434507.shtml米聊服务器的技术选型和架构设计

  2. 小米科技-瞿晋萍-米聊技术选型与架构

    小米科技-瞿晋萍-米聊技术选型与架构 可拜上见,ppt需仔细研究 posted on 2012-07-11 11:09  lexus 阅读( ...) 评论( ...) 编辑 收藏 转载于:https ...

  3. 字节跳动入局VR:拟收购Pico,挖来苹果资深工程师

    2021.28.28 字节跳动正在密集推进硬件方面的布局,落实到具体动作上,目前已展现为资本运作与人才招聘两个层面. 资本方面,字节跳动计划收购国内 VR 行业出货量最大的厂商 Pico.昨日有行业媒 ...

  4. mssql 计划怎每隔n秒_前端:调你一个接口6秒还配资深工程师?后端:有24部分需要处理!...

    有关于做web开发的程序员,不知道你们有没有这样一种感受,那就是前端工程师与后端工程师之间有时也会存在鄙视链的关系,比如前端程序员会认为后端程序员没什么技术含量,不就是写个接口,获取一些数据而已,而前 ...

  5. 来自Google资深工程师的API设计最佳实践

    来自Google资深工程师Joshua Bloch的分享:API设计最佳实践 为什么API设计如此重要?API是一个公司最重要的资产. 为什么API的设计对程序员如此重要? API一旦发布,出于兼容性 ...

  6. 资深工程师为何否定这种单例模式

    本人在 横刀天笑 的一篇谈论单例模式的文章http://www.cnblogs.com/yuyijq/archive/2007/10/07/915941.html 里面有两种写单例的例子.有一种方法得 ...

  7. 单片机 架构 程序 经验总结_单片机“死机”了怎么办?看看一个资深工程师的经验总结...

    原标题:单片机"死机"了怎么办?看看一个资深工程师的经验总结 单片机(Microcontroller,MCU) 又称为微控制器或嵌入式控制器,体积虽小,但使用方便,应用范围广泛,在 ...

  8. java+set+split_阿里资深工程师教你如何优化 Java 代码!

    原标题:阿里资深工程师教你如何优化 Java 代码! 作者 | 王超 责编 | 伍杏玲 明代王阳明先生在<传习录>谈为学之道时说: 私欲日生,如地上尘,一日不扫,便又有一层.着实用功,便见 ...

  9. 大公司的资深工程师和小公司的Leader如何决择?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 作者简介:何俊林,某知名互联网公司开发人员,一直致力于多媒体开发.本文经授权转自作者同名公众 ...

最新文章

  1. 简单的聊聊自动化测试:Selenium的高级操作
  2. 初级PHP开发作品容易出现的几个不足
  3. python数据科学指南是什么_《Python数据科学指南》——导读
  4. 12月13日 什么是help_method,session的简单理解, find_by等finder method
  5. GitLab 分享项目到指定小组或者指定用户
  6. 基于JAVA+SpringMVC+MYSQL的社区交友平台
  7. npm、webpack、vue-cli
  8. java程序设计基础篇_java程序设计基础篇 复习笔记 第一单元
  9. 设计模式学习笔记(六:责任链模式)
  10. Vue项目在nginx下的部署实践(个人学习总结)
  11. 埃森哲发布 2015 年五大 IT 趋势预测
  12. 局域网管理工具_局域网vnc远程控制软件,七款免费又好用的局域网vnc远程控制...
  13. PHP的.htaccess作用
  14. ps照片人脸合成教程-----------------------------------
  15. ARTS打卡10-抓住海森堡Bug
  16. 关于计算机知识脑筋急转弯,脑筋急转弯及知识竞答
  17. 本体开发日记07-我与java分词组件的爱恨情仇
  18. 几大原型开发软件对比[转]
  19. 计算机安装操作系统的目的是什么,装系统
  20. jsoup爬取驾考题库

热门文章

  1. 线程撕裂者安装linux,CPU-Z 1.90发布:初步支持三代线程撕裂者
  2. dispatcherservlet发送2次请求_Spring源码分析(三):MVC请求分发器DispatcherServlet设计实现...
  3. Spark中的内存计算是什么?
  4. PTA基础编程题目集-7-3 逆序的三位数
  5. P3806 【模板】点分治1
  6. 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]
  7. BZOJ 2159 「国家集训队」Crash 的文明世界(第二类斯特林数,换根DP)【BZOJ计划】
  8. 【分块】#6281. 数列分块入门 5(区间开方,区间求和)
  9. P2240 【深基12.例1】部分背包问题(贪心)难度⭐
  10. K - Candies POJ - 3159(利用了自定义比较操作符)