博客
关于我
HelloTalk 基于 OpenResty 的全球化探索之路
阅读量:461 次
发布时间:2019-03-06

本文共 1578 字,大约阅读时间需要 5 分钟。

HelloTalk 基于 OpenResty 的全球化探索之路

我是 HelloTalk 的后端技术负责人李凌,今天将分享我们在 OpenResty 和 Apache APISIX 上的实践经验。

HelloTalk 是一个全球最大的外语学习社交社区,拥有 1600 万用户。我们致力于为用户提供跨文化交流和学习的平台,支持 150 多种外语的语音改写、翻译和学习功能。用户主要分布在中国、日本、韩国、美、欧、巴西等地,海外用户占比 80%。在技术实现上,我们将系统架构与 OpenResty 结合,解决了全球化部署中的诸多挑战。

技术选择与协议设计

早期,我们使用 C++ 开发 IM 服务,协议设计为 TLV+PB模式,目标是实现轻量级的高效通信。然而,这种方式在外部接口暴露时需要自行开发 Proxy Server,导致协议适配成本较高。为了降低成本和提升效率,我们于 2015 年开始引入 OpenResty。

OpenResty 提供了两大核心优势:一是通过前置代理,将内部协议转换为 HTTP 协议,简化了外部接口的开发和维护;二是集成 WAF 功能,防止 PHP 业务中的注入攻击。我们通过 OpenResty 实现了协议转换和安全防护,显著降低了运维成本。

在协议解析方面,OpenResty 配合 Lua-protobuf 库,能够将 Protobuf 格式的数据直接转换为 JSON 格式,大大简化了数据处理逻辑。我们还开发了基于 cosocket 的 TCP 协议安全解析模块,确保数据包的完整性和正确性。

国际化部署中的挑战与解决方案

HelloTalk 的用户分布极为分散,海外用户占比 80%,因此我们需要解决以下挑战:

  • 用户区域分散:海外用户遍布全球,网络环境和语言差异较大。
  • 防火墙限制:国内用户的防火墙政策限制了外部接入。
  • 语言适配问题:不同地区的语言环境和网络条件差异显著。
  • 针对这些挑战,我们采取以下措施:

  • 多云环境部署:结合阿里云的全球加速服务和多线路负载均衡,确保用户接入的稳定性和可靠性。
  • 网络优化方案:通过 OpenResty 实现动态上游检测和切换,确保网络延迟最低。
  • 协议适配优化:基于 HTTP/2 和 WebSocket协议,支持长连接和短连接混合模式,提升消息传递效率。
  • 接入节点与质量管理

    我们在美国东部、法兰克福、新加坡、东京、香港等地部署接入节点,通过 failover 机制和智能检测,确保多线路切换的平滑性。对于特殊地区(如巴西),我们选择 AWS 和本地云服务的混合部署,确保服务的稳定性和可靠性。

    在网络质量管理方面,我们引入了以下策略:

  • 线路控制:动态调整上游服务商,确保接入路径最优。
  • 流量管理:基于 OpenResty 的限流功能,防止消息频率过高等问题。
  • 节点质量监控:通过实时监控和智能算法,评估各节点的服务质量,实现流量智能分配。
  • Apache APISIX 的引入与应用

    在使用 OpenResty 的基础上,我们逐步引入 Apache APISIX 作为 API Gateway,主要原因如下:

  • 动态化配置:通过 ETCD 存储配置数据,实现动态更新和版本管理。
  • 代码简洁性:APISIX 的代码逻辑极为简洁,便于快速定制和维护。
  • 高性能和可扩展性:基于 Lua 引擎,支持复杂逻辑的快速执行,性能表现优于自建 Gateway。
  • 通过 Apache APISIX,我们能够更高效地管理 API 接口,实现伪装动态化和服务治理,显著提升了系统的灵活性和可维护性。

    结语

    HelloTalk 的全球化之路并非一帆风顺,但通过 OpenResty 和 Apache APISIX 的技术支持,我们成功解决了诸多技术难题。如果你对我们的实践感兴趣,欢迎在技术交流社区中深入探讨!

    转载地址:http://rerfz.baihongyu.com/

    你可能感兴趣的文章
    npm如何清空缓存并重新打包?
    查看>>
    npm学习(十一)之package-lock.json
    查看>>
    npm安装 出现 npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! 解决方法
    查看>>
    npm安装crypto-js 如何安装crypto-js, python爬虫安装加解密插件 找不到模块crypto-js python报错解决丢失crypto-js模块
    查看>>
    npm安装教程
    查看>>
    npm报错Cannot find module ‘webpack‘ Require stack
    查看>>
    npm报错Failed at the node-sass@4.14.1 postinstall script
    查看>>
    npm报错fatal: Could not read from remote repository
    查看>>
    npm报错File to import not found or unreadable: @/assets/styles/global.scss.
    查看>>
    npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
    查看>>
    npm淘宝镜像过期npm ERR! request to https://registry.npm.taobao.org/vuex failed, reason: certificate has ex
    查看>>
    npm版本过高问题
    查看>>
    npm的“--force“和“--legacy-peer-deps“参数
    查看>>
    npm的安装和更新---npm工作笔记002
    查看>>
    npm的常用操作---npm工作笔记003
    查看>>
    npm的常用配置项---npm工作笔记004
    查看>>
    npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
    查看>>
    npm编译报错You may need an additional loader to handle the result of these loaders
    查看>>
    npm设置淘宝镜像、升级等
    查看>>
    npm设置源地址,npm官方地址
    查看>>