企业自建的苹果通知推送系统的架构演进与探索

简介: 企业的APP开发中,对于苹果设备有个独特的通知推送功能要解决,尤其是在做移动IM时,对APNS(Apple Push Notification Service)的要求比较高,虽然有专门的第三方提供此类服务,但出于安全的考滤,有能力的公司宁愿自建推送服务系统。

企业的APP开发中,对于苹果设备有个独特的通知推送功能要解决,尤其是在做移动IM时,对APNS(Apple Push Notification Service)的要求比较高,虽然有专门的第三方提供此类服务,但出于安全的考滤,有能力的公司宁愿自建推送服务系统。本人结合工作中的开发经验,在这探讨一下其架构的演进与探索,希望能使此类系统更加完美。

IM系统自建苹果通知推送服务系统的层级关系如下:

                                                                图1 层级关系

首先说明一下在我工作中APNS的使用场景:


对于最初的解决方案是我入项目组时就已经定好的,具体的应对方案如下:

                                                                        图3  原始设计方案

虽然这个方法实现了功能,但对于APP的推广后的大量的用户使用,系统的承受能力和扩展能力很明显就不足,虽然推送系统已经根据用户的设置信息,从最大程度上减少了压力,但对于IM软件来说仍然不够,而且对于IM类的APP来说还有两个特殊的要求:角标和消息顺序。

出于众多的考滤,历时两个多月,我对推送系统做了如下的改进,首先从架构上:

                                                                      4    单个证书解决方案

我利用了RabbitMQ的路由功能做系统的负载均衡支持,因为苹果设备的设备号是固定64位长度,而且具有唯一性,所以的就用了用户的设备号来做Hash(散列),具体的算法如下:

public abstract class RouteKeyUtil {
    
    private static Properties prop = ConfigUtil.getApnsConfig();
    
    private static Map<Integer, String> map;
    
    static {
        String list = prop.getProperty("queues");
        String[] queues = list.split(",");
        map = new HashMap<Integer, String>();
        int ii = 1;
        for (String q : queues) {
            if(StringUtils.isNotEmpty(q)){
                map.put(Integer.valueOf(ii++), q);
            }
        }
    }

    public static String genarateRouteKey(String token) {
        if (token == null || token.isEmpty()) {
            throw new IllegalArgumentException("token is empty");
        }
        int random = token.charAt(0) * token.charAt(1);
        int index = random % map.size() + 1;
        return map.get(Integer.valueOf(index));
    }
    
    public static Map<Integer, String> getAllQueues(){
        return map;
    }
}

由于苹果的证书分为企业证书和开发者证书,而且两个证书的调用接口地址不一样,如果调错的话Apple Server会返回发送失败错误。所以对于两个证书我们在一个系统里做了区别,但两者架构相同,如下:

                                                                                        5  双证书解决方案

但是利用MQ做负载均衡有一个致使命的缺点,就是不能相互感知,一但监听服务器宕机,消息就会在MQ中积压,为了解决此问题,我利用Zookeeper提供的订阅功能做了一个监控方案,Zookeeper用于存放配置,健康检测系统用于监听服务状态和动态修改配置,这样可以简单实现失效转移(failover)功能,具体设计如下:

                                                                               6 系统监控

此系统设计方案还有很多缺点,在此提出希望大家能给点宝贵的建议。


目录
相关文章
|
4天前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
|
3天前
|
网络协议 安全 中间件
系统架构设计师【第2章】: 计算机系统基础知识 (核心总结)
本文全面介绍了计算机系统及其相关技术,涵盖计算机系统概述、硬件、软件等内容。计算机系统由硬件(如处理器、存储器、输入输出设备)和软件(系统软件、应用软件)组成,旨在高效处理和管理数据。硬件核心为处理器,历经从4位到64位的发展,软件则分为系统软件和应用软件,满足不同需求。此外,深入探讨了计算机网络、嵌入式系统、多媒体技术、系统工程及性能评估等多个领域,强调了各组件和技术在现代信息技术中的重要作用与应用。
16 3
|
3天前
|
运维 Cloud Native Devops
探究云原生架构:企业数字化转型的新引擎
在当今数字化浪潮中,云原生技术以其独特的优势,正成为推动企业IT变革的重要力量。它不仅能够提升企业的开发效率和业务灵活性,还能帮助企业更好地应对复杂多变的市场环境。本文将深入探讨云原生的核心概念、关键技术以及实际应用价值,旨在为读者提供一个全面而清晰的云原生技术视角。
|
3天前
|
运维 安全 网络安全
Web安全-企业网络架构
Web安全-企业网络架构
12 1
|
12天前
|
运维 Cloud Native 持续交付
探索云原生架构:企业转型的未来之路
在当今这个数据驱动的时代,企业面临着前所未有的挑战与机遇。随着云计算技术的日益成熟,云原生作为一种新兴的架构理念,正逐步成为推动企业数字化转型的关键力量。本文旨在深入探讨云原生的概念、特点及其对企业转型的重要意义,并通过实例分析展示其在实际应用中的巨大潜力和价值。
|
15天前
|
运维 Cloud Native Devops
探索云原生架构:企业数字化转型的新引擎
在当今数字化浪潮中,云原生架构以其敏捷性、弹性和高可用性成为企业实现高效上云和加速创新的关键。本文将深入探讨云原生的核心理念、关键技术如容器化、微服务和DevOps实践,以及这些技术如何共同推动企业在云平台上的灵活部署和快速迭代。同时,文章还将分析成功案例,展示云原生如何帮助企业构建现代化应用,提高资源利用率,并确保系统稳定运行。通过综合运用这些先进技术策略,企业能够有效应对市场变化,缩短产品上市时间,从而在激烈的市场竞争中脱颖而出。
|
14天前
|
Kubernetes Cloud Native 持续交付
探秘云原生架构:企业数字化转型的新引擎
在当今数字化浪潮中,云原生架构正成为推动企业创新与灵活性的关键因素。本文将深入探讨云原生的核心理念、关键技术以及它如何助力企业实现高效运营和快速响应市场变化,为读者揭示这一现代技术趋势背后的深刻内涵与实践价值。
18 2
|
1天前
|
运维 Kubernetes Cloud Native
探索云原生架构:企业数字化转型的新引擎
本文深入探讨了云原生架构作为企业数字化转型的新引擎,如何通过其轻量级、松耦合、高度可扩展和自动化的特性,助力企业在激烈的市场竞争中脱颖而出。不同于传统的云计算模式,云原生强调应用的微服务化、容器化以及动态管理,从而极大地提高了资源利用效率、加快了产品迭代速度,并增强了系统的弹性和容错能力。通过对Kubernetes、Docker等关键技术的运用实例分析,本文展示了云原生架构在实现应用快速部署、无缝迁移和跨平台一致性方面的独特优势。此外,文章还讨论了企业在采用云原生过程中面临的挑战及应对策略,为正在或计划进行数字化转型的企业提供了宝贵的参考和指导。
|
11天前
|
缓存 负载均衡 数据管理
深入探索微服务架构的核心要素与实践策略在当今软件开发领域,微服务架构以其独特的优势和灵活性,已成为众多企业和开发者的首选。本文将深入探讨微服务架构的核心要素,包括服务拆分、通信机制、数据管理等,并结合实际案例分析其在不同场景下的应用策略,旨在为读者提供一套全面、深入的微服务架构实践指南。**
**微服务架构作为软件开发领域的热门话题,正引领着一场技术革新。本文从微服务架构的核心要素出发,详细阐述了服务拆分的原则与方法、通信机制的选择与优化、数据管理的策略与挑战等内容。同时,结合具体案例,分析了微服务架构在不同场景下的应用策略,为读者提供了实用的指导和建议。
|
3天前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2

热门文章

最新文章