本文来源于MOT技术管理课堂杭州站演讲实录,全文 2410 字,阅读约需 5分钟。网易云信资深研发工程师张翱从私有化面临的问题及需求说起,分享了网易云信IM私有化的解决方案和具体实践。
想要阅读更多技术干货、行业洞察,欢迎关注网易云信博客
了解网易云信,来自网易核心架构的通信与视频云服务。

私有化的源起

在做公有云平台的过程中,我们接触到很多客户,有许多客户和我们反馈:“你们的云平台服务很好、线上也很稳定,但我们希望能把云平台搬到自己的环境里部署起来”。在进一步了解情况后,我们也得到了客户要求私有化的几个诉求点:
1. 私密性要求
一些企业出于数据保密及安全方面的顾虑,希望能把关键数据安放在自建机房或者数据中心,对网络访问进行严格控制;另外像银行金融机构以及政府部门会受到监管合规等方面的限制,私密性甚至是一个硬指标。
2. 自主性要求
希望能够自主掌控IM系统,这类客户一般自身便具有较强的开发和运维团队。
3. 数据资产化要求
公有云上的客户需要依赖我们的数据开放能力,而在私有化部署后客户能够一手掌握存储的原始数据以及使用过程产生的所有日志信息,使数据真正转变为企业资产,满足灵活多样的数据分析需求进而增值。
4. 本地化应用要求
一些企业对应用时延有较高要求,公有云平台无法满足,从而需要进行本地私有化部署。另外和现有企业内部信息系统整合,构建沟通交流协作大平台的需求成为企业选择私有化部署的一种考量。
由于私有化的呼声持续增长,我们决定启动私有化项目,那么从服务提供者的角度我们需要什么样的私有化呢?
1. 复用业务代码
复用公有云代码,不重复造轮子,减少与公有云代码版本的差异性,使私有化系统最大限度继承公有云上的能力,降低测试开发维护成本。
2. 适配不同环境
具有私有化需求的客户来自各行各业,私有化部署环境也会各不相同,系统除了能在网易蜂巢、阿里云、华为云等主流云平台上跑起来,也需要能够适配企业自建数据中心的虚拟机以及物理机环境。
3. 部署高效可复制
部署流程标准化自动化。我们所追求的私有化,不是耗费1-2个月的工作量为企业部署一套定制化系统,而是高效可复制的。另外针对目前企业中IM相关的企业办公等场景的部署规模等实际情况,标准化部署我们走的是相对轻量化的路线,有效降低企业的部署成本。
4. 服务稳定可靠
这其实是一个分布式系统的基本要求,内部各个组件高可用可扩展,消除单点。

私有化面临的问题

明确了需求后我们再来看看所面临的一些问题。
公有云的主体架构如下,主要由客户端层、网关接入和路由层、业务层、中间件、数据存储层以及监控系统组成,其中接入层根据不同的连接方式以及应用场景拆分为多个服务,业务层根据不同业务逻辑划分出漫游、推送、历史消息以及抄送等服务。
在这些服务里面会涉及到JAVA、C、Golang等多种技术栈,当这些服务混合部署到各种环境中,如何解决依赖管理以及可能发生的底层库冲突,怎么通过技术让这个过程变得简单高效,是我们面临的主要问题。
下面我们来看如何解决落地。

私有化解决方案

概括起来主要是围绕Docker技术从主机、容器、镜像和编排四个层面来解决
  • 主机
主机上除了标准的操作系统,初始化只需要安装Docker引擎、Supervisor和MetricBeat。其中,Supervisor起到管理容器实例的作用,当容器出现状况时起到一定的故障恢复的作用;MetricBeat是ELK技术栈中的监控agent,能够向监控系统上报主机的资源使用情况以及各个容器的健康状况。最小化依赖组件,就降低了出现依赖冲突的可能性,达到兼容更多云主机、虚拟机以及物理机环境的目的。
  • 镜像
主机上最小化依赖项,那么每个服务依赖管理的任务就落到了镜像这个层面上。每个镜像对应一种服务并且自我管理依赖,多个镜像对应的容器之间相互隔离。比如服务A依赖jdk7,而服务B必须跑在jdk8版本上,如果这两个服务没有容器化而是跑在同一主机环境下,我们就需要显式指定所使用的JAVA路径,增加额外的复杂度。更坏的情况,如果出现底层库的版本冲突,可能会导致不同服务无法部署在一个主机上,这显然是我们不想看到的。但通过Docker与生俱来的隔离特性,我们能很好地规避这个问题。
  • 容器
镜像实例化后我们便得到了运行中的容器,不同于单进程容器的是,我们使用Supervisor作为容器入口,再由Supervisor来管理容器中的多个进程,这些进程有主次之分,主进程对外提供服务,次进程一般包括MetricBeat和FileBeat,前者起到主进程监控和业务监控的功能,后者是ELK生态中的日志采集组件。
  • 编排
将多个同类容器组成集群,将非同类容器进行配置并连接可达,是编排的基本功能。往往说起Docker容器编排,大家首先想到的是kubernetes(以下简称k8s),不同于容器云等场景,在企业IM场景中用户数普遍为几十万左右,对应的集群主机数量一般不超过10台,在这种规模下将k8s整合进去代价较大。于是我们考虑轻量的方式,就是使用Ansible。
对于Ansible,做过运维的同学应该比较熟悉,它基于SSH采用无agent架构,是集群管理的有力工具。虽然丢失了k8s中容器动态管理以及故障自我恢复等高级功能,但通过前面提到的在主机和容器层面引入Supervisor管理的方式,在一定程度上保留了容器管理和故障恢复的能力。
Ansible虽然轻量,但通过丰富的功能模块、角色定义,能够具备强大的脚本表达能力,我们在此基础上编写主机初始化流程,各个服务的高可用集群如基于keepalived虚拟ip的MySQL主从或者双主集群以及基于OpenResty负载均衡双主集群。
除了技术架构上的四个层面,在ansible部署脚本之上我们封装了http接口并开发了可视化的安装向导。此外我们还提供管理平台和运维平台kibana,这些可视化平台能够方便交付工程师和运维工程师在安装部署、集群管理、应用管理以及运维监控等方面提高效率,真正做到从部署到交付后运维的全流程高效可复制。
最后,我们把验收工作比作交付的最后一公里,由于PaaS产品并不像SaaS那样能够做到开箱即用的效果,我们提供了demo程序进行测试,覆盖iOS/AOS/Web/PC等主流客户端,具备单聊、群聊、聊天室、双人及多人音视频通话等场景便于客户在场景中验证核心能力。Demo程序开放源代码,便于后续接入集成。

云信实战经验总结

那么,从IM私有化实践中我们可以得到什么经验?总结为以下五点:
1) 标准OS提供计算资源,兼容异构环境
2) Docker实现程序包封装和运行时资源隔离
3) Ansible实现分布式集群高可用部署
4) 可视化平台使部署及管理高效可复制
5) 多端demo验证突破交付最后一公里
以上就是网易云信IM私有化实践的分享,期待和大家共同探讨、交流。
网易云信(NeteaseYunXin)是集网易18年IM以及音视频技术打造的PaaS服务产品,来自网易核心技术架构的通信与视频云服务,稳定易用且功能全面,致力于提供全球领先的技术能力和场景化解决方案。开发者通过集成客户端SDK和云端OPEN API,即可快速实现包含IM、音视频通话、直播、点播、互动白板、短信等功能。

从0到1构建网易云信IM私有化的更多相关文章

  1. 对接网易云信音视频2.0呼叫组件集成到vue中,实现web端呼叫app,视频语音通话。

    项目中需要实现视频通话功能,经过公司的赛选,采用网易云信的视频通话服务,app小伙伴集成很顺利.web端需要实现呼叫app端用户.网易云信文档介绍不全,vue的demo满足不了需求,和客服人员沟通,只 ...

  2. 子弹短信光鲜的背后:网易云信首席架构师分享亿级IM平台的技术实践

    本文原文内容来自InfoQ的技术分享,本次有修订.勘误和加工,感谢原作者的分享. 1.前言 自从2018年8月20日子弹短信在锤子发布会露面之后(详见<老罗最新发布了“子弹短信”这款IM,主打熟 ...

  3. 微信小程序开发中的二三事之网易云信IMSDK DEMO

    本文由作者邹永胜授权网易云社区发布. 简介 为了更好的展示我们即时通讯SDK强悍的能力,网易云信IM SDK微信小程序DEMO的开发就提上了日程.用产品的话说就是: 云信 IM 小程序 SDK 的能力 ...

  4. 模板短信接口调用java,pythoy版(一) 网易云信

    说明 短信服务平台有很多,我只是个人需求,首次使用,算是测试用的,故选个网易(大公司). 稳定性:我只测试了15条短信... 不过前3条短信5分钟左右的延时,后面就比较快.... 我只是需要发短信,等 ...

  5. 网易云信&七鱼市场总监姜菡钰:实战解读增长黑客在B端业务的运用

    近些年 ,随着互联网的迅速崛起,“增长黑客”一词逐渐映入大众的眼帘,并成为了最热门的话题之一.从2018年开始,线上流量触达天花板,引流之争的激烈程度空前高涨,企业为了获得更多的关注,产品的比拼.流量 ...

  6. php对接网易云信视频直播

    <?php/** * Created by PhpStorm. * User: lhl * Date: 2019/4/10 * Time: 17:31 */ namespace app\api\ ...

  7. 音视频技术“塔尖”之争,网易云信如何C位出道?

    音视频技术“塔尖”之争,网易云信如何C位出道? 社交+美颜.抖音短视频.在线狼人杀.直播竞答.子弹短信……,过往两三年间,互联网新产品和新玩法层出不穷,风口不断切换.这些爆红的网络应用背后,都有一些共 ...

  8. 网易云信技术分享:IM中的万人群聊技术方案实践总结

    本文来自网易云信团队的技术分享,原创发表于网易云信公众号,原文链接:mp.weixin.qq.com/s/LT2dASI7QVpcOVxDAsMeVg,收录时有改动. 1.引言 在不了解IM技术的人眼 ...

  9. 网易云信-新增自定义消息(iOS版)

    https://www.jianshu.com/p/2bfb1c4e9f21 前言 公司业务需要,PC端,移动端都用到了第三方 网易云信 IM来实现在线客服咨询.在这当中难免遇到一些需求是网易云信没有 ...

随机推荐

  1. node lesson3

    var express = require('express'); var superagent = require('superagent'); var cheerio = require('che ...

  2. 简明Python3教程 7.运算符和表达式

    简介 你写的大多数逻辑行都包含表达式.表达式的一个简单例子是2 + 3.一个表达式可分为操作符和操作数两部分. 操作符的功能是执行一项任务:操作符可由一个符号或关键字代表,如+ .操作符需要数据以供执 ...

  3. Python多线程 简明例子

    综述   多线程是程序设计中的一个重要方面,尤其是在服务器Deamon程序方面.无论何种系统,线程调度的开销都比传统的进程要快得多. Python可以方便地支持多线程.可以快速创建线程.互斥锁.信号量 ...

  4. Excel 2013永久取消超链接

    原文:Excel 2013永久取消超链接 在使用Excel的过程中,Excel会自动将网址转换为超链接,操作不当,容易误点,引起不必要的错误, 那么本篇博客就总结下如何在Excel 2013里永久取消 ...

  5. ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我们将介绍 A ...

  6. windows 7 SDK和DDK下载

    检查小数据,获取地址.顺便记录下来. Windows Driver Kit Version 7.1.0 http://www.microsoft.com/downloads/details.aspx? ...

  7. hibernate关于多对多注解配置

    Game实体类配置关系 @Entity @Table(name = "game") public class Game { @Id @GeneratedValue private ...

  8. 读BeautifulSoup官方文档之html树的修改

    修改html树无非是对其中标签的改动, 改动标签的名字(也就是类型), 属性和标签里的内容... 先讲这边提供了很方便的方法来对其进行改动... soup = BeautifulSoup('<b ...

  9. XML序例化工具类

    Model: [XmlRoot(ElementName = "root")] public class BookModel { [XmlElement] public string ...

  10. x名称空间中的内容

    原文:x名称空间中的内容 x名称空间映射的是http://schemas.microsoft.com/winfx/2006/xaml,它包含的类均与XAML的解析有关,下面分三部分介绍 一:x名称空间 ...