从0到1构建网易云信IM私有化

本文来源于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、音视频通话、直播、点播、互动白板、短信等功能。
相关文章
相关标签/搜索