PaaS 平台学习(开源力量OSF)构建千万级大规模、高可靠PaaS平台的技术挑战 学习笔记

标签: PaaS 云服务 即时通讯 负载均衡 云通讯平台
2909人阅读 评论(0) 收藏 举报
分类:

感谢许志强老师的辛苦付出。2015年1月13日 参加云通讯PaaS平台学习,特作此记录。

大纲:

  1. 选择Paas平台的考量(我的企业是否适合选PaaS平台,我应该选怎么样的PaaS平台)
  2. 基于PaaS平台的开发、测试、部署和迁移的流程、关键技术和注意事项
  3. 如何构建能支持千万级用户的大规模PaaS平台?技术挑战有哪些?有哪些经验和教训?
  4. 如何实现PaaS平台的高可靠性?
  5. 如何保证PaaS平台的安全性?


一、云通讯PaaS平台的挑战

  • 客户业务突然爆发性增长
  • 系统受到DDOS攻击
  • 运营商政策调整,某些呼叫不能落地
  • IDC机房光纤被挖断
  • 系统升级出现BUG,业务全停
  • 业务主机H突然宕机:

二、可靠性追求

技术挑战

  • 可靠性
  • 扩展性
  • 安全性
  • 可管理性
  • 经济性

可用性标准

5个9的追求:
Availability Downtime/Year Example
90% 36days 2hours Personal clients
99% 87 hours 36 minutes Entry-Level Business
99.9% 8 hours 46 minutes ISP,mainstream Business
99.99% 52 minutes 33 seconds Data Centers
99.999% 5 mintue 15 seconds carrier-grade Telco,Banking
99.9999% 31.5 seconds Militray defense system

高可用性——High Availability

  • 清除单点故障
  • 故障自动检测
  • 故障隔离
  • 运维操作Web化自动化

消除单点故障原则

  • 常规方案,主备、集群Cluster负载均衡:
  • 数据库分库、分表方案:
    初始规划就要考虑。以前做运营商系统通常选择oracle Sybase,而互联网企业多用MySql。经典案例,余额宝,天宏基金早期是Oracle,后来与阿里合作,移植到MySql上。其单机无法与SyBase比,而是用许多数据库服务器进行分库分表。初期就要考虑分库分表,后期改成本会相当高。
  • 大系统小做 :
    许多人刚开始策划功能都会想的非常复杂,但其可靠性难以得到保证。设计大的系统一定要往小的做,尽可能降低交互的复杂性,不要设计的非常复杂,交互其中一个环节有问题都会导致故障。
    系统里一个小的部分,尽量完成单一职责,不要很多事情一起做。单个服务 高内聚、低耦合。参考文章:http://martinfowler.com/articles/microservices.html。
    一个系统过大,不利于扩展,出问题机率大。
  • 尽可能做到无状态:nginx每次响应是独立的,这次请求与上次请求尽可能独立。(原子性)。
    不是所有东西都可以无状态,如通信过程,发起、接听、摘机等,必须保存呼叫状态,这就必须有状态。这种情况下要做成分组,或子系统。假如所有有状态的请求能分配到不同组,系统出现故障影响小的分组,分组出问题就切换到另外分组。从分组角度看就是无状态。如A、B、C三组。在连接的时候选择一个服务节点。
  • 异地部署、容灾
    对于云服务提供商很重要,IT机房的可靠性也不是非常高,当部署到一个机房的服务不能使用时,对用户影响很大。所以必须要考虑异地部署、容灾。
  • 不能做到无状态就需要分组

一个多机房系统的方案


通过智能DNS。
产生的问题:用户可能用公用的DNS,如谷歌的DNS 或其它开放的DNS,可能会造成判断的区域有问题。一般会做两层,智能DNS只是前置的识别,具体业务节点对真正IP进行二次路由。设置一个折中的时间进行DNS解析。
每个节点要能独自提供服务。

单IDC内部署结构



跨区域数据同步解决原则:


一致性:数据同步
可用性:一台宕机能不能再提供服务
分区容忍性:如北京与广州之间断了,还能不能分别提供服务;事实是要求能分别提供服务,这时对数据一致性要求就没那么高了。一般互联网对数据一致性要求可能不是那么高。
IVR服务:不是所有都全部一致,如果要强一致性,数据同步;
再如账单:也不是强一致性的。在某些系统里 客户查询的余额不必是最终的结果。信用卡线下刷卡的方式,也是一段时间后同步过去。


使用Cassindra分布式NoSql数据库。
kafka消息队列缓冲是什么。
而传统的关系型数据库在处理一些数据时比NoSql更具优势,所以后端需要MySql支持。
关系型数据库与NoSql间要有数据同步,需要程序进行处理。

怎么做故障检测

设计系统时,就要考虑到系统会出现哪些故障。
原则:

在用户反馈前发现系统故障

如用户打电话,第一次打电话打不通,在第二次尝试时要能检测并解决问题。

分层次的故障检测:

  • 最底层是机器的检测:如检测机房故障,转移DNS。检测机器故障,要把机器移除出来。
  • 模块的检测:
  • 业务功用的检测:模拟用户操作进行检测。

防止误检测保护:

检测本身有失误的情况,如IDC整个网络不通,判断故障之前不能整个机器Ping不通,就改了DNS。而要多种渠道确认故障。

运维自动化、WEB、数据化:

  • 手工操作有极大的安全隐患,避免手工操作引起的系统问题,设计之初就要考虑可运维的、可自动运维的。
  • 模块的升级、维护全部通过WEB进行。
  • 通过收集的数据进行运维,设计时要考虑把数据采集进来,进行分析,提前预判一些故障。当发现某台机器ping 响应很久,就预示机器可能会出现故障;或机器的I/O非常高,预测磁盘可能出现问题;或带宽高等。通过运维的手段,使系统的可靠性提高。

灰度发布:


整体更新可能的问题:新功能虽然经过测试,但总可能出现问题,上线后隐藏的BUG可能会引起所有客户的全局故障。采用灰度发布,系统发布的时候是渐进的,整个系统里可能有相同模块、不同版本存在,系统首先在沙盒系统更新,调试、测试。稳定后进入客户组1,等等。。。

三、支持百万、千万、上亿的在线用户

  1. 操作系统调优:
  2. 采用异步接口:IOCP、epoll
  3. 内存数据库缓存、减少数据库操作:
  4. 内部采用长连接,如Protocol Buffer、thrift avro protobuf等:系统内部长连接减少连接开销。
  5. 节点可并行扩展、Cluster集群:openstack
  6. 自动部署新业务节点支持服务:

常规想法:QQ号码,如果有3台,那QQ号除以3,分配到不同服务器。但添加服务器时,负载分配会有很大波动。如果是对于数据库,波大会有很大影响。
分布式系统,很多采用一致性Hash的负载分配,

四、互联网的语音质量保证

  • 语音编码的选择:如silk、sap g.729
  • 网络状况的检测:
  • 自适应码流调整:
  • 网络封包大小的选择:
  • 质量反馈机制:两端通信,知道对端的情况。如果RDPC标准协议能够知道对方情况。
  • 智能IP路由:根据客户端的IP,决定到哪个路径到服务器最短。丢包以后怎么处理,丢弃还是补偿,或用延迟换语音质量。
  • NACK捎带机制:

五、安全性:

网络DDOS攻击:

一般自己要靠二次平台提供商或IDC帮做这部分功能。像阿里云前端有流量清洗设备,帮助清理一些攻击。如果量很大了,也很难处理。要尽可能找大的服务商,如阿里云。
小流量攻击,可以用iptables等工具处理。

业务的安全沙箱隔离:

像服务器落地资源是有限的,不可能为用户恶意占用,造成其他客户无法使用。每个用户能够使用多少资源是有限制的,包括对接口的调用频度。在系统设计之初就要考虑,防止恶意占用资源。如果是正常的,就要调高其资源阈值。

通话的安全性:

如通话加密的接口,通过这些接口的通话内容,平台提供商也无法解密。一般的用户可能不需要这么高加密级别。

六、构建自己的云通讯平台

开源的成熟方案:
WebRTC:Google开源的,用来作浏览器端即时通讯解决方案;neteq,google收购,在终端一侧大幅提高语音质量。
openfire:IM
opensips:IM
KAMAILIO:
Asterisk:
FreeSWITCH:
mobicents:开源的通讯的方案提供商
telestax:

(容联云通讯提供的免费服务)移动端融合通讯能力API

  • IM
  • 视频通话
  • VoIP
  • 视频会议
  • 语音会议
云存储用的阿里云存储。


查看评论

Docker构建企业PAAS平台之-Docker入门与企业实践【入门实战篇】

带领学员学习Docker,进行实战入门,已经讲解Docker在企业中的一些实践。
  • 2017年01月20日 18:35

PaaS基础学习(1)

PaaS基础学习(1)PaaS学习笔记目录PaaS基础学习(1)在PaaS上开发Web、移动应用(2)PaaS优点与限制(3) 基础单元,一个基础单元就是所研究实体的最小的不可分割的单元。 PaaS与...
  • dream_an
  • dream_an
  • 2016-03-19 08:50:57
  • 1533

毕业工作五年的总结和感悟(中)-公有PAAS平台

上一篇文章介绍到云存储项目,下一个做的项目就是统一日志。这一个项目前前后后做了一年多,版本迭代更新了很多版本,架构升级都做了3次以上。做这一个项目是收获最大的,我在这一个项目中锻炼了大型分布式系统的架...
  • wanweiaiaqiang
  • wanweiaiaqiang
  • 2016-11-05 23:36:48
  • 1973

PaaS优点与限制(3)

PaaS优点与限制(3)PaaS学习笔记目录PaaS基础学习(1)在PaaS上开发Web、移动应用(2)PaaS优点与限制(3)13. PaaS的核心服务核心服务是指提供数据存储、SQl、NoSQL、...
  • dream_an
  • dream_an
  • 2016-03-19 09:04:08
  • 1963

PAAS平台学习笔记

一、PAAS平台概念     PAAS平台即(Platform-as-a-Service:平台即服务),把服务器平台作为一种服务提供的商业模式。通过网络进行程序提供的服务称之为SaaS(Softwar...
  • xiaoyw
  • xiaoyw
  • 2013-11-11 14:52:02
  • 1227

PaaS简介及国内PaaS平台

PaaS(平台即服务),是指将一个完整的软件研发和部署平台,包括应用设计、应用开发、应用测试和应用托管,都作为一种服务提供给客户。在这种服务模式中,客户不需要购买硬件和软件,只需要利用PaaS平台,就...
  • preterhuman_peak
  • preterhuman_peak
  • 2012-06-12 22:12:29
  • 19963

PAAS平台的web应用性能测试与分析

引言 为什么我会写这一篇博客,因为最近很多京东云擎jae的用户反应一个问题就是他们部署在jae上面的应用访问很慢,有极少数应用甚至经常出现504超时现象,当然大家首先想到的是jae性能太差,这也是人之...
  • wanweiaiaqiang
  • wanweiaiaqiang
  • 2014-04-22 14:13:41
  • 2713

火爆背后的挑战:直播平台的高并发架构设计

兴起及现状 日常生活用手机来看视频的次数越来越多,时间越来越长,看的内容也是种类越来越多。包括最近从3月份美国开始火起来之后,国内也在火的移动视频社交类。这个也是我们现在在重点切的一个垂类,这个垂类...
  • zz_coder
  • zz_coder
  • 2016-07-01 17:35:30
  • 7039

PaaS 平台学习(开源力量OSF)构建千万级大规模、高可靠PaaS平台的技术挑战 学习笔记

感谢许志强老师的辛苦付出。2015年1月13日 参加云通讯PaaS平台学习,特作此记录。 大纲: 选择Paas平台的考量(我的企业是否适合选PaaS平台,我应该选怎么样的PaaS平台)基于PaaS...
  • xundh
  • xundh
  • 2015-01-13 22:07:49
  • 2909

PaaS 系统开源软件

偶然发现开源中国上有这个东西,关于Pass的介绍,好东西。可以了解到很多。 http://www.oschina.net/project/tag/406/paas...
  • song_shi_chao
  • song_shi_chao
  • 2013-03-13 15:17:18
  • 1073
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 145万+
    积分: 1万+
    排名: 535
    博客专栏
    最新评论