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

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

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


目录
相关文章
|
30天前
|
Cloud Native Devops 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【2月更文挑战第31天】 随着数字化转型的加速,云原生技术已经成为推动企业IT架构现代化的关键力量。本文深入探讨了云原生架构的核心组件、实施策略以及面临的主要挑战。通过分析容器化、微服务、DevOps和持续集成/持续部署(CI/CD)等关键技术,揭示了如何利用这些技术实现敏捷性、可扩展性和弹性。同时,文章还讨论了企业在采纳云原生实践中可能遇到的安全性、复杂性和文化适应性问题,并提供了解决这些问题的策略和建议。
|
1月前
|
存储
嵌入式微处理器的系统架构中指令系统
嵌入式微处理器的系统架构中指令系统
12 0
|
1月前
|
存储 前端开发 BI
基于云计算技术的B/S架构智能云HIS系统源码 集挂号、处方、收费、取药、病历于一体
云HIS是针对中小医院机构、乡镇卫生室推出的一套基于云端的云HIS服务平台,借助云HIS,将医院业务流程化,大大提高医院的服务效率和服务质量,为客户提供医院一体化的信息解决方案。云HIS主要功能:包含门诊收费管理,住院收费管理,门诊医生工作站,住院医生工作站,住院护士工作站,辅助检查科室管理,药房药品管理,药库药品管理,报表查询。满足诊所、中小医院业务中看诊、收费、发药、药库管理、经营分析等多环节的工作需要。
41 4
|
26天前
|
运维 Cloud Native 持续交付
云原生架构的未来演进:打造灵活、高效的企业IT基础
随着数字化转型的不断深入,企业的IT基础设施正经历着从传统架构向云原生架构的根本转变。本文将探讨云原生技术的最新发展趋势,分析其在提高业务敏捷性、降低运维成本以及促进技术创新方面的关键作用。我们将重点讨论如何借助容器化、微服务、DevOps和持续交付等核心技术,构建一个能够适应快速变化市场需求的云原生生态系统。通过实际案例分析,揭示企业在迁移到云原生架构过程中面临的挑战与解决策略,为读者呈现一幅云原生技术赋能企业未来的蓝图。
|
1月前
|
人工智能 运维 监控
构建高性能微服务架构:现代后端开发的挑战与策略构建高效自动化运维系统的关键策略
【2月更文挑战第30天】 随着企业应用的复杂性增加,传统的单体应用架构已经难以满足快速迭代和高可用性的需求。微服务架构作为解决方案,以其服务的细粒度、独立性和弹性而受到青睐。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计原则、常用的技术栈选择以及性能优化的最佳实践。我们将分析微服务在处理分布式事务、数据一致性以及服务发现等方面的挑战,并提出相应的解决策略。通过实例分析和案例研究,我们的目标是为后端开发人员提供一套实用的指南,帮助他们构建出既能快速响应市场变化,又能保持高效率和稳定性的微服务系统。 【2月更文挑战第30天】随着信息技术的飞速发展,企业对于信息系统的稳定性和效率要求
|
11天前
|
运维 Cloud Native 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【4月更文挑战第10天】 随着数字化转型的不断深入,企业对信息技术基础设施的要求日益提高。云原生架构作为一种新兴的设计理念和技术集合,以其灵活性、可扩展性和容错性,正在成为推动企业技术革新的关键力量。本文将探讨云原生技术的核心组件、实施策略以及面临的主要挑战,并分析如何通过采纳云原生架构来优化业务流程和提升服务效率。
|
1月前
|
Cloud Native 安全 Devops
构建未来:云原生架构在现代企业中的应用与挑战
【2月更文挑战第30天】 随着数字化转型的深入,企业正迅速采纳云原生技术以适应不断变化的市场环境。本文探讨了云原生架构的关键组成部分,包括容器化、微服务、持续集成/持续部署(CI/CD)和DevOps实践,并分析了它们如何促进企业的敏捷性和可扩展性。同时,文章也识别了企业在采用云原生技术时面临的安全、文化和技术挑战,并提出了相应的解决策略,以帮助企业在云时代保持竞争力。
|
1月前
|
架构师 算法 关系型数据库
数据库架构师之道:MySQL安装与系统整合指南
数据库架构师之道:MySQL安装与系统整合指南
45 0
|
1月前
|
存储 缓存 安全
【ARM架构】ARMv8-A 系统中的安全架构概述
【ARM架构】ARMv8-A 系统中的安全架构概述
31 0