极光笔记|极光消息推送服务的云原生实践

news2024/11/15 11:24:23

摘要

极光始终秉承“以开发者为中心”的战略导向,极光推送(JPush)是国内领先的消息推送服务。极光推送(JPush)本质上是一种软件付费应用程序,结合当前主流云厂商基础施设,逐渐演进成了云上SaaS服务。作为SaaS服务,必然要考虑云原生架构。因此,在极光推送(JPush)日益成熟的今天,也开启了云原生架构的演进之路。

云原生简介

云原生,即Cloud + Native,Cloud表示使用云服务,通常结合传统云厂商提供的基础设施;Native表示应用服务从服务设计开始就考虑接入云厂商的基础设施,充分利用云平台的弹性和分布式优势。

云原生技术理论,经多年发展,其主要可概括归纳为以下四点:微服务、DevOps、持续交付和容器化。

4ba1d4bfc2689f47eb84e881707d797c.jpeg

其中,

  • 微服务和容器化,主要是指以k8s为底座的微服务和容器化,利用k8s平台的能力,快速搭建稳定性和可靠性更好的应用。

  • 持续交付和DevOps,则是指以CI/CD为核心,结合各种发布和运维工具,提供小步快跑,持续迭代,持续交付的全套开发、发布及运维的自动化流程,提高运维效率,降低运维出错风险。

总之,云原生技术,借助云计算平台(通常基础设施包括IaaS和PaaS)快速发展的东风,再结合虚拟化和分布式框架技术的成熟和普及,传统SaaS应用走向云原生化已是大势所趋。

云原生服务的优势

云原生架构服务之所以备受青睐,主要因为其有如下优势:

  • 高效:开发人员无需依赖特定硬件,而是使用DevOps流程构建随时可部署的容器化应用,可在不关闭应用的情况下轻松快速完成服务更新。

  • 高可用:云原生服务通过分布式能力,使应用具备超强的弹性和高可用能力。

  • 降成本:一方面,利用云厂商的基础设施,不用再购买价格高昂的服务器;另一方面,利用云原生服务的弹性能力,可以快速便捷的动态调整使用的资源,即根据服务的高峰期和低谷期,更合理的使用资源。

云原生消息推送服务改造

为了适配好云原生相关技术,极光推送(JPush)相应也进行了大规模的服务改造。其中,包括微服务架构优化,服务容器化改造,Kubernetes平台适配,可观测性改造,以及服务安全改造等等。

微服务架构改造

微服务架构的改造,主要包含以下几点:

  • 业务架构优化

  1. 合理的云服务组件切换,如云厂商的存储和缓存服务,提升系统的稳定性

  2. 业务流程梳理优化,精简调用流程

  3. 服务调用方式优化,合理使用RPC和消息队列传递消息,兼顾性能与消息传递解耦能力


  • 服务微服务化改造

  1. 选择合适的微服务化框架对服务进行改造,更好的契合云原生架构

  2. 优化微服务的请求失败重试,熔断,过载保护,以及负载均衡的策略,提升系统可靠性

  3. 选择合适服务注册中心,极光服务选择了nacos,并线上实践了大规模集群的管理能力


  • 服务容器化改造

  1. 微服务的容器化改造,去掉如本地缓存,服务进程间共享内存等依赖

  2. 适配k8s,并搭建可视化平台管理工具,方便快速支持k8s的线上容器管理和运维

可观测性改造

服务的可观测性也是云原生服务重要的一环,可观测性包括,监控告警、日志和链路追踪三大块。

  • 监控告警

  1. 通过Prometheus,自定义业务与资源的上报指标,并制定监控和告警规则

  2. 通过Grafana,将上报的监控指标整理成可视化监控大盘

  3. 通过消息,邮件,电话的方式上报不同级别的错误告警,及时做好线上问题的跟进

  • 日志

  1. 搭建ELK的系统化日志管理平台,方便追踪和定位线上问题

  • 链路追踪

  1. 通过opentrace搭建部分关键服务间调用的链路追踪,及时关注重要消息的轨迹

  2. 优化业务层消息生命周期数据,完善服务推送消息的链路追踪统计

服务安全改造

国家信通院发布的《云原生安全白皮书》中曾提到:"云原生安全强调安全产品原生化"。即在最大程度利用云厂商的安全能力,提升云原生化服务的安全防护能力。

极光在云原生化服务的过程中,也非常重视安全问题,主要做了以下几点改造:

  • 对API进入极光服务集群的流量,严格执行零信任安全策略,对入网中的一切行为不信任,做到始终验证,持续监测

  • 使用云厂商的DDos防护能力,为线上服务防攻击做好保障

云原生改造实践收获

通过极光服务的云原生化改造的不断推进落地,JPush服务也收获颇丰:

  • 稳定性的持续提升,SLA 持续保持99.9%以上

  • 开发和运维效率的持续提升,可以使用更少的人力维护好更大规模的服务,通过监控告警等可观测能力快速便捷的了解系统实时的运行状态,以及线上问题的及时跟进和修复

  • 更好的关注资源实时使用的情况,及时控制服务成本

未来演进之路

极光推送(JPush),作为国内行业的领导者,也将持续致力于服务好我们的客户。除了继续迭代我们的硬产品能力,我们也还会继续深入的完善服务的云原生化,在服务的易用性、稳定性和效率上做持续的迭代和建设。未来,我们也将在以下几个方面继续努力:

  • 基于云原生技术,搭建更完善的服务管理发布平台,完善好开发和运维工具,更好的提高服务管理运维效率

  • 由于极光消息服务体量较大,我们还会持续优化提升更大量级,更高峰值消息实时推送性能





关于极光

极光(Aurora Mobile,纳斯达克股票代码:JG)成立于2011年,是中国领先的客户互动和营销科技服务商。成立之初,极光专注于为企业提供稳定高效的消息推送服务,凭借先发优势,已经成长为市场份额遥遥领先的移动消息推送服务商。随着企业对客户触达和营销增长需求的不断加强,极光前瞻性地推出了消息云和营销云等解决方案,帮助企业实现多渠道的客户触达和互动需求,以及人工智能和大数据驱动的营销科技应用,助力企业数字化转型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1544484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【iOS ARKit】3D文字

首先,3D场景中渲染的任何虚拟元素都必须具有网格(顶点及顶点间的拓扑关系),没有网格的元素无法利用GPU 进行渲染,因此,在3D 场景申渲染 3D文字时,文字也必须具有网格。在计算机系统中&#xff0…

集合(JAVA)

一、数组和集合的区别 相同点 都是容器,可以存储多个数据 不同点 数组的长度是不可变的,集合的长度是可变的数组可以存基本数据类型和引用数据类型集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类 二、集合类体系结构 三、Collection 集合 1.Collection集合…

【经验分享||快速解决】VScode+Python配置Selenium环境配置问题。ERROR: Cannot uninstall ‘certifi‘.

目录 正常安装遇到的问题 当在控制台输入pip install selenium时候,遇到的问题如下: 主要爆红的问题为 解决办法和正确安装方法 降低selenium的版本即可 在vscode控制台输入上面的代码即可。 总结 正常安装遇到的问题 当在控制台输入pip instal…

mac电脑下安装和启动nginx

一,安装homebrew 必须安装了homebrew,可在终端输入命令brew -v查看是否已经安装,没安装的话安装一下: 如果未安装先安装(网上很多文章) 二,查看nginx是否存在 使用命令:brew search nginx查看nginx是否存在: 不存在的话,就使用brew inst…

【STL】list类的讲解及模拟实现

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 今日主菜:vector类 主厨:邪王真眼 所属专栏:c专栏 主厨的主页:Chef‘s blog 总用光环在陨落,总有新星…

Conda 常用命令合集

Anaconda是一个开源的Python和R语言的分布式发行版,用于科学计算(数据科学、机器学习应用、大规模数据处理和预测分析)。Anaconda旨在提供一个简单的一站式解决方案来进行科学计算的需求。它包括了许多用于科学计算、数据分析的最流行的库和工…

各种需要使用的方法-->vue/微信小程序/layui

各种需要使用的方法-->vue/微信小程序/layui 1、vue里样式不起作用的方法,可以通过deep穿透的方式2、 js获取本周、上周、本月、上月日期3、ArrayBuffer Blob 格式转换ArrayBuffer与Blob的区别ArrayBuffer转BlobBlob转ArrayBuffer需要借助fileReader对象 4、使用…

Java面试篇:Redis使用场景问题(缓存穿透,缓存击穿,缓存雪崩,双写一致性,Redis持久化,数据过期策略,数据淘汰策略)

目录 1.缓存穿透解决方案一:缓存空数据解决方案二:布隆过滤器 2.缓存击穿解决方案一:互斥锁解决方案二:设置当前key逻辑过期 3.缓存雪崩1.给不同的Key的TTL添加随机值2.利用Redis集群提高服务的可用性3.给缓存业务添加降级限流策略4.给业务添加多级缓存 4.双写一致性…

每日一练:LeeCode-21、合并两个有序链表【链表+递归+非递归】

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 [], l2 [] 输出:[…

家政服务管理平台设计与实现|SpringBoot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,…

阐述区块链“链游”项目3D/2D模式系统开发

随着区块链技术的不断发展,区块链游戏作为其应用领域之一也逐渐受到关注。在区块链游戏中,构建3D/2D模式系统是至关重要的,它决定了游戏的视觉效果、用户体验和技术实现。本文将探讨区块链游戏开发中构建3D/2D模式系统的关键要素和实现方法。…

字符驱动程序-LCD驱动开发

一、驱动程序的框架 总共分为五步: 1、自己设定或者系统分配一个主设备号 2、创建一个file_operations结构体 这个结构体中有操作硬件的函数,比如drv_open、drv_read 3、写一个注册设备驱动函数 需要register_chrdev(major,name,结构体)&#xff0…

动态多态的注意事项

大家好: 衷心希望各位点赞。 您的问题请留在评论区,我会及时回答。 多态的基本概念 多态是C面向对象三大特性之一(多态、继承、封装) 多态分为两类: 静态多态:函数重载和运算符重载属于静态多态&#x…

【嵌入式——QT】多语言界面

【嵌入式——QT】多语言界面 多语言页面开发步骤tr()函数 多语言页面开发步骤 第一步 在你编写的代码中添加tr()函数,方便之后可以精准的定位到你所需要翻译的部分。 第二步 在.pro文件中添加以下代码,这样会让你生成相应的.ts文件,ts文件是…

关于RPC

初识RPC RPC VS REST HTTP Dubbo Dubbo 特性: 基于接口动态代理的远程方法调用 Dubbo对开发者屏蔽了底层的调用细节,在实际代码中调用远程服务就像调用一个本地接口类一样方便。这个功能和Fegin很类似,但是Dubbo用起来比Fegin还要简单很多&a…

xcode生成静态库.a

一、生成静态库 1.打开 Xcode 创建一个新的 Static Library 工程,取名applestudio 2.创建工程完毕后,简化目录结构 删除系统自动创建的同名类:applestudio.h和applestudio.m 把自己的代码复制进去,如例子:guiconnect.h…

RSTP环路避免实验(华为)

思科设备参考:RSTP环路避免实验(思科) 一,技术简介 RSTP (Rapid Spanning Tree Protocol) 是从STP发展而来 • RSTP标准版本为IEEE802.1w • RSTP具备STP的所有功能,可以兼容STP运行 • RSTP和STP有所不同 减少了…

警务数据仓库的实现

目录 一、SQL Server 2008 R2(一)SQL Server 的服务功能(二)SQL Server Management Studio(三)Microsoft Visual Studio 二、创建集成服务项目三、配置“旅馆_ETL”数据流任务四、配置“人员_ETL”数据流任…

数据结构·二叉树(1)

目录 1 树的概念及结构 1.1 树的结构 1.2 树的概念 1.3树的表示 2 二叉树的概念及结构 2.1二叉树的概念 2.2 特殊的二叉树 2.3 二叉树的存储结构 1 树的概念及结构 1.1 树的结构 前面所学到的顺序表链表等,都是线性的数据结构,今天介绍的树&am…

Android Native Crash奔溃

一.Native Crash 简介 从 Android 系统全局来说,Crash 通常分为 App/Framework Crash,Native Crash,以及 Kernel Crash。 对于 App 层或者 Framework 层的 Crash(即 Java 层面 Crash),那么往往是通过抛出未捕获异常而导致的 Cras…