写点什么

干货 | 日访问过亿,办公 IM 及开放式平台在携程的实践

  • 2021-05-14
  • 本文字数:3970 字

    阅读完需:约 13 分钟

干货 | 日访问过亿,办公IM及开放式平台在携程的实践

简介

携程内部的办公 IM 项目最早在 2016 年立项,经历了初期简单办公场景下的纯 IM 服务,到支持简单办公组件的 IM 应用,又演变为一体化办公集成平台,进而演变为目前集成 IM 功能的开放式企业效率平台。本文总结了这些年的发展历程及未来的演进方向,并着重从高可用、高性能和可扩展的角度,探讨开放式平台的技术实现及发展方向。

一、什么是 IM


IM(Instant Message)即时消息,是一种通过网络提供实时消息传输的在线沟通技术。在移动互联网时代,IM 的使用变得越来越广泛,通过各种技术手段使得用户之间的交流成本变的极低,沟通效率和用户体验有极大的提升。而且 IM 的出现极大地改变了目前互联网应用的形态,多数互联网应用只要做到了一定规模,一定会有自身 IM 的需求,而不是单纯地仅仅依托第三方(例如微信、云信等)。

二、携程办公 IM 的发展历程

早期携程使用微软的 IM 软件 lync 和自研的纯 IM 软件 CtripTeam 来支持企业内的沟通需求,这些软件在维护性、拓展性和可用性上都或多或少存在一些缺陷。同时随着互联网的发展,也逐渐不适合日益增长的办公需求和用户体验。


2017 年左右,使用基于 ejabberd+erlang 的自研 IM 服务的 Cchat 项目应运而生,该项目的主要目标是在采用自研 IM 的基础上,实现 IM 与办公的结合。在完善 IM 服务的基础上,支持了一些常规的办公场景,如电话、假单、考勤、OA 等,通常采用嵌入外部页面、跳转外部地址等方式提供服务。这个改造项目奠定了携程办公 IM 继续发展的基础。


随着项目的深入,最初的系统交互模式及服务管理模式逐渐不适用越来越复杂的办公场景及服务治理需求。于是在 2019 年上马了 TripPal 的改造项目,在结合公司国际化战略的基础上,倾力打造小程序平台,服务号等基础服务。在梳理、优化原有服务的同时,打造了诸多衍生服务。


2020 年中开始,在继续推进企业内办公一站式平台的基础上,我们需要支持更多的外部场景,实际需求促使我们向开放式平台转型,这在服务整体架构、安全性、扩展性等方面都提出了新的要求及挑战。

三、携程 TripPal 开放平台实践

3.1 总体架构



3.1.1 Gateway 网关层

这一层是所有请求调用流量的入口,主要功能如下:


  • 服务路由;

  • 集中式限流、风控、日志监控等功能;

  • 调用 IDS (Identity Service) 验证请求的合法性,验证通过后,可以将用户 ID、Token 等基本信息,通过 HttpHeader 的方式向后端服务透传,后端服务可以直接使用 UserID,也可以再次对 Token 进行认证;

3.1.2 IDS (Identity Service) 服务

IDS 同时支持多种不同类型的访问令牌的鉴权,同时还负责令牌的颁发,以及 RBAC+模块级别的接口控权。


另外,针对开放小程序,TripPal 提供两种认证方式:

1)常规的 Oauth 第三方模式接入。

2)另一种是基于 Oauth+开放平台签名的第三方认证,对于接入方相对简单。

 

3.1.3 微服务层

这一层是整个系统的业务层,具体包含三种类型的微服务:


  • TripPal 开放平台内部系统微服务,只有在特定用户认证和权限验证通过之后,外部才能访问;

  • 开放平台对外提供的 OpenAPI;采用 Oauth+RBAC 的方式控制权限;

  • 自研小程序后端服务,根据安全需要,所有使用 Oauth+模块权限的第一方小程序服务端;


目前 TripPal 自身的核心微服务应用达到 28 个,提供全集团的多端(C 端、B 端)基础服务能力,服务全公司超过 500 个业务应用,在线 C 端用户均值超过 2 万,日访问量超过亿。

3.2 IM 服务

目前 TripPal 使用完全自研的基于 Java 实现的类 ejabberd 架构,底层采用的 XMPP 协议进行通讯。


Tips:

XMPP 全称是 ExtensibleMessageing and Presence Protocol,可扩展消息与存在协议。是目前网络上开源,最灵活,应用最广泛的一种即时消息通信协议。


1999 年 Jeremie Miller,首先提出了 Jabber,一种为实现即时消息和存在的开放技术,后续基于这个协议,开发了一个开源的服务实现 jabberd。后续,IETF 国际标准组织介入,成立 Extensible Messageing and Presence Protocol(XMPP)工作组,并开始标准化工作。


2000 年,jabberd 服务器 1.0 版本发布,那时 Jabber 协议的基本特点(基于 XML 的流,消息,存在,联系人列表等)都被固定下来。


2004 年,IETF 出版了 RFC 3902 和 RFC3921,定义了 XMPP 的核心功能,成为推荐标准。


后续在 2011 年,IETF 出版了 RFC6120 和 RFC 6121,更新了 XMPP 的核心定义,替代了之前的 RFC 3920 和 3921。


目前 XMPP 协议被 XMPP Standards Foundation 负责管理运作,集中于在 IETF 定义的基础 XMPP 规范之上,如何开发开放的协议扩展。


IM 服务端做了大量的系统性的优化,从底层的数据库调优、底层通讯服务升级,到上层消息、群、群成员等核心功能的大幅改造。底层通讯服务由之前的 erlang 完整迁移至 java 技术栈,服务可靠性、弹性伸缩、安全性和性能获得了提升;同时对上层偏业务的服务进行了改造,极大地提升了接口响应,服务稳定性也得到了提升,为整个产品的研发提供了重要支撑。目前这套自研的 IM3.0 服务在生产环境稳定运行,整体资源消耗比 2.0 时期有较大下降。

3.3 TripPal 办公衍生服务

在实际的企业办公场景下,尤其是大型企业复杂组织架构和管理模式的场景下,TripPal 逐渐摸索出了自己的一套行之有效且契合携程场景的办公智能应用,如搜索中台,消息卡片,智能审批中台,角色服务,工作流引擎等。


本文简单介绍其中 3 个服务:

1)智能审批中台


智能审批中台在集成携程自有的审批系统的同时也集成了自研的智能审批配置服务,该服务支持用户自定义整个审批单及审批流的全部细节。




2)角色服务



角色服务在灵活定义角色范围及基础角色的基础上,支持用户灵活调整,动态管理,且自动接入审批中台,同时打通应用对接渠道。


整个角色服务在产品定义上分为如下表 4 个主要概念:


系统概念
介绍
管理模式
角色范围(Scope)
圈定基础角色的作用范围,如:平台研发中心
基于父子关系的层级管理
基础角色(Base Role)
由管理员管理并定义的基础角色,如:管理员、负责人、PMO等
平台或企业管理员手动管理
固定角色(Role)
由[角色范围+基础角色]构成的对象,如:平台研发中心管理员
由角色创建者进行管理
抽象Role
无角色范围,仅基于基础角色创建的角色,指定某些Scope上应该自动创建该角色的基础角色
由角色创建者进行管理

3)在线文档



在线文档服务主要提供文档的在线协作能力,支持用户同时/实时的查看、编辑、保存和分享的能力。同时结合 IM 实现通知和反馈等功能。


技术实现上,在线文档是采用 CRDT 算法实现的无冲突 merge(LastWrite Wins)、多端最终一致的分布式方案,同时兼具高可用、可容错的特性,在服务器发生故障时,允许 Shift 至另一台机器上继续执行,即使服务端完全宕机,客户端依然能够离线工作。

四、TripPal 高可用的实践

目前 TripPal 部署在 3 个机房,分为公有云 1 个机房及私有云 2 个机房。总体架构在应用多机房部署、数据层跨机房 DRC 的基础上,采用就近访问的原则进行服务访问,其中一旦发生任意 2 个机房全挂的情况,都能保证系统内的核心应用仍能提供服务。其中公有云机房的一期部署方案已经完成,二期部署方案和测试计划预计于 7 月完成,届时可以和大家分享一下混合云方案的一些细节和历程。

五、开放平台的未来架构及演进方向

开放平台主要面向两类群体,开发者和用户。所以主要有两个方向,一是便捷开发,主要围绕降低开发者门槛、较低研发成本,打通不同开发者、应用之间的壁垒,实现生态共享。另一方面,针对实际用户,在提高用户体验、数据安全的同时,实现用户服务能力整合和主动发现。

5.1 开发者

在这方面,目前主流开放平台已经对开发者提供了强大的支持,主要形式分为:


1)前端信任

前端信任的目的是通过减少或杜绝开发者后端跟开放平台 OpenAPI 交互的方式,来降低开发者接入门槛,减少工作量。主要的做法是通过权限控制、签名、加密等手段使得小程序能够在前端拿到可信数据。



2)低代码(Low-Code)

由于大量的互联网业务属于简单交互或模型化交互,以此为出发点,基于构建合理模型、简单业务函数等形式,可以允许开发者通过拖拽组件、简单伪业务代码等形式提供编程入口,可以大幅度降低开发者的研发门槛和成本,打破用户和开发者界线,提高开放平台整体生态的活力。



3)ServerLess

基于云原生的 ServerLess 结合低代码,开放开发者的云端编程入口,同时提供云端基础组件,允许开发者无需部署实际的后端应用服务,极大降低的开发者的运营维护门槛。

5.2 用户层面

目前业界主流开放平台在对用户本身的服务能力整合和挖掘上,投入的都比较少,也没有比较成熟的实践,我们认为在这方面可以围绕两个点展开。


一方面,第三方应用治理模式向商城化的转型。常规开放平台的应用治理和推广,基本是应用方独立管理和推广,但是随着应用数量的大幅度增加,以及应用方单方面推广难度较大等原因,亟需开放平台从生态整体角度进行支持和治理。这样可以在安全性、可维护性、便捷性等维度上对应用进行正向反馈,实现开放平台应用生态的可持续性和能力共享。同时,在特定场景下,结合用户分析、大数据及 AI,提高用户主动或被动的应用发现能力。



另一方面,构建符合应用间开放协议的软件联盟,打破应用壁垒,围绕服务集成、开放应用的核心原则,使得不同的互联网业务或行为在一定程度上实现数据/能力共享。一般情况下,一个复杂互联网业务通常由多个异构子业务/子应用构成,这样,通过应用拆分、开放共享等形式,在一定程度上使复杂的互联网业务更加精细化、轻量化、可扩展。

5.3 开放平台标准化、互通

目前国内外各大互联网公司、机构和组织都搭建了多种开放平台,用于提供各种各样的信息服务,在可以预见的未来,各个平台之间会有一个整合、标准化、互通的可能性。那么构建标准开放协议,使得开放平台向底层沉淀的过程则至关重要。

六、总结

通过实现基本 IM 开放平台架构,以及各种衍生服务,我们总结出了 IM 开放平台的一些核心能力:

  • 服务集成,根据不同的业务场景集成并提供相应场景下的基础服务能力

  • 开放应用,提供第三方接入能力

  • 高性能,高可用


【参考文献】

[1] Facebook messager技术文档:Scalingthe Messages Application Back End

‘’

[2] Facebook messager技术文档:BuildingMobile-First Infrastructure for Messenger

[3] 浅谈IM系统的架构设计

[4] 一套原创分布式即时通讯(IM)系统理论架构方案

[5] 微信技术总监谈架构:微信之道——大道至简(演讲全文)


作者简介

Jim,携程高级研发经理,关注 Java&Go 技术栈后端研发。目前致力于 TripPal 开放平台的高可用、开放化进程及核心衍生服务。


本文转载自:携程技术(ID:ctriptech)

原文链接:干货 | 日访问过亿,办公IM及开放式平台在携程的实践

2021-05-14 07:001538

评论

发布
暂无评论
发现更多内容

【docker 总结】第四篇 - 镜像和容器操作

Brave

Docker 12月日更

Spring Boot Serverless 实战系列“架构篇” | 光速入门函数计算

阿里巴巴云原生

阿里云 Serverless 架构 云原生 函数计算

Python爬虫120例之案例58,手机APP爬虫,“武器库”的准备and皮皮虾APP的测试

梦想橡皮擦

12月日更

东汉末年,他们把「服务雪崩」玩到了极致

悟空聊架构

熔断 28天写作 服务雪崩 悟空聊架构 12月日更

数据分析流程浅析

圣迪

数据分析 数据 CRISP-DM

山的那一边,是什么?(16/28)

赵新龙

28天写作

前端开发:Vue中获取input输入框值的方法

三掌柜

28天写作 28 12月日更 12月

明道云荣获2021亚洲最佳职场“最佳创新奖”荣誉!

明道云

联邦学习在光大科技的落地应用

博文视点Broadview

Enum Parse 中的坑

喵叔

28天写作 12月日更

DotNetCore 开发工具箱之调度小能手——Coravel

为自己带盐

dotnet 28天写作 12月日更 Coravel

如何基于 Docker 快速搭建 Springboot + Mysql + Redis 项目

秦怀杂货店

Java redis Docker springboot redis sentinel

给弟弟的信第15封|情绪控制的重要性

大菠萝

28天写作

All in one:如何搭建端到端可观测体系

阿里巴巴云原生

阿里云 云原生 可观测

React进阶(七):props 属性介绍

No Silver Bullet

React 12月日更 props

如何在 AWS 云中从 Amazon EC2 启动 RHEL 8?

Ethereal

云计算 AWS RHEL 8 Amazon EC2

TCP/IP的底层队列

程序员历小冰

网络 TCP/IP 28天写作 12月日更

Apache Log4j2,RASP 防御优势及原理

阿里巴巴云原生

阿里云 云原生 漏洞 可观测 Apache Log4j2

小程序的发布【小程序专题3】

坚果

小程序 28天写作 12月日更

数据库牛人是如何进行SQL优化的?

Ethereal

数据库 sql SQL优化

Dubbo框架学习笔记四

风翱

dubbo 12月日更

管理中的推理事件随笔

搬砖的周狮傅

随笔杂谈 推理

明道云对接小鹅通,沉淀内容付费平台数据

明道云

实用机器学习笔记十六:循环神经网络

打工人!

深度学习 学习笔记 循环神经网络 机器学习算法 12月日更

Android aapt 在 Mac 和 Windows 上使用方法小结

阿策小和尚

28天写作 Android 小菜鸟 12月日更

华为硬件配置命令,建议收藏

Ethereal

网络工程师 网络技术 华为设备 厂商设备 运维技术

一文讲述数仓组件SysCache

华为云开发者联盟

事务 存储 GaussDB(DWS) SysCache 缓存信息

[Pulsar] Pulsar Resources介绍

Zike Yang

Apache Pulsar 12月日更

当我们在聊高可用时,我们其实在聊什么?

xcbeyond

28天写作 12月日更

100行代码让您学会JavaScript原生的Proxy设计模式

Jerry Wang

JavaScript 设计模式 代理模式 28天写作 12月日更

今夜无眠

Tiger

28天写作

干货 | 日访问过亿,办公IM及开放式平台在携程的实践_移动_携程技术_InfoQ精选文章