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

简介: 企业的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 系统监控

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


目录
相关文章
|
15天前
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
【10月更文挑战第14天】深入理解微服务架构:构建高效、可扩展的系统
63 0
|
10天前
|
运维 供应链 安全
SD-WAN分布式组网:构建高效、灵活的企业网络架构
本文介绍了SD-WAN(软件定义广域网)在企业分布式组网中的应用,强调其智能化流量管理、简化的网络部署、弹性扩展能力和增强的安全性等核心优势,以及在跨国企业、多云环境、零售连锁和制造业中的典型应用场景。通过合理设计网络架构、选择合适的网络连接类型、优化应用流量优先级和定期评估网络性能等最佳实践,SD-WAN助力企业实现高效、稳定的业务连接,加速数字化转型。
SD-WAN分布式组网:构建高效、灵活的企业网络架构
|
17天前
|
存储 人工智能 算法
精通RAG架构:从0到1,基于LLM+RAG构建生产级企业知识库
为了帮助更多人掌握大模型技术,尼恩和他的团队编写了《LLM大模型学习圣经》系列文档,包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构,基于LLM+RAG构建生产级企业知识库》和《从0到1吃透大模型的顶级架构》。这些文档不仅系统地讲解了大模型的核心技术,还提供了实战案例和配套视频,帮助读者快速上手。
精通RAG架构:从0到1,基于LLM+RAG构建生产级企业知识库
|
8天前
|
存储 数据管理 调度
HarmonyOS架构理解:揭开鸿蒙系统的神秘面纱
【10月更文挑战第21天】华为的鸿蒙系统(HarmonyOS)以其独特的分布式架构备受关注。该架构包括分布式软总线、分布式数据管理和分布式任务调度。分布式软总线实现设备间的无缝连接;分布式数据管理支持跨设备数据共享;分布式任务调度则实现跨设备任务协同。这些特性为开发者提供了强大的工具,助力智能设备的未来发展。
39 1
|
10天前
|
Cloud Native Devops 持续交付
云原生架构:重塑企业IT的无形之手####
本文旨在探讨云原生架构如何成为推动企业数字化转型的核心动力,它不仅是一种技术升级,更是业务与开发模式的深刻变革。通过剖析云原生的核心要素——微服务、容器化、持续集成/持续部署(CI/CD)、以及DevOps文化,本文揭示了这一架构如何提升系统的弹性、可扩展性和敏捷性,为企业在竞争激烈的市场环境中赋予快速响应和创新的能力。不同于传统综述,本文将以一个虚构案例贯穿始终,直观展示云原生架构从理论到实践的转化过程,为读者提供一幅生动的技术蓝图。 --- ###
|
20天前
|
运维 Cloud Native 持续交付
探索云原生架构:企业数字化转型的新引擎
在当今数字化浪潮中,云原生架构以其独特的优势成为企业转型的关键。它通过容器化、微服务、DevOps和持续交付等技术,使企业能够快速响应市场变化,实现应用的高效开发、部署和运维。本文将深入探讨云原生的概念、核心技术及其在现代IT环境中的重要性。
|
18天前
|
存储 监控 负载均衡
|
24天前
|
Kubernetes 监控 Cloud Native
探索云原生架构:企业数字化转型的新引擎
【10月更文挑战第5天】 在当今数字化浪潮中,云原生架构以其独特的优势成为企业实现高效、灵活和可扩展的关键。本文将深入探讨云原生的核心概念、关键技术以及实际应用案例,揭示其在推动企业数字化转型中的重要作用。
30 6
|
21天前
|
运维 Kubernetes Cloud Native
探索云原生架构:企业数字化转型的新引擎
【10月更文挑战第9天】 在当今数字化浪潮中,云原生架构以其独特的优势成为企业实现高效运营和快速创新的关键。本文将深入探讨云原生的核心概念、关键技术以及实际应用案例,揭示其如何助力企业加速数字化转型步伐。通过对云原生技术的剖析,我们将看到这一新兴架构是如何重新定义软件开发、部署和运维模式的,进而推动企业在激烈的市场竞争中脱颖而出。
|
1天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
15 4

热门文章

最新文章