互联网开放平台的高可用架构

合集下载

互联网项目的技术选型与架构设计

互联网项目的技术选型与架构设计

互联网项目的技术选型与架构设计随着互联网的快速发展,越来越多的企业和个人开始涉足互联网项目的开发。

在进行互联网项目开发之前,技术选型和架构设计是非常重要的环节。

本文将探讨互联网项目的技术选型和架构设计的相关内容。

一、技术选型技术选型是指在开发互联网项目时,选择合适的技术栈和工具。

技术选型的目的是根据项目需求和特点,选择最适合的技术方案,以提高开发效率和项目质量。

1.1 语言选型在互联网项目开发中,常用的编程语言有Java、Python、JavaScript等。

选择合适的编程语言需要考虑项目的规模、复杂度和开发人员的熟悉程度。

例如,对于大型复杂的项目,Java是一个较好的选择,因为它具有强大的生态系统和稳定性;对于快速迭代的小型项目,Python和JavaScript可能更适合,因为它们具有较高的开发效率。

1.2 框架选型框架是指一套已经封装好的代码库,可以帮助开发人员快速搭建项目的基础架构。

常用的互联网项目框架有Spring、Django、React 等。

选择合适的框架需要考虑项目的需求和开发人员的熟悉程度。

例如,对于Java开发人员,Spring框架是一个常用的选择;对于Python开发人员,Django框架是一个常用的选择;对于前端开发人员,React框架是一个常用的选择。

1.3 数据库选型数据库是互联网项目中存储数据的重要组成部分。

常用的数据库有关系型数据库(如MySQL、Oracle)和非关系型数据库(如MongoDB、Redis)。

选择合适的数据库需要考虑项目的数据结构和访问模式。

例如,对于需要进行复杂查询和事务处理的项目,关系型数据库是一个较好的选择;对于需要高并发和快速读写的项目,非关系型数据库是一个较好的选择。

二、架构设计架构设计是指在互联网项目开发中,设计项目的整体架构和模块之间的关系。

良好的架构设计可以提高项目的可维护性、可扩展性和性能。

2.1 分层架构分层架构是一种常用的架构设计模式,将项目划分为不同的层次,每个层次负责不同的功能。

高可用架构设计:保证系统的稳定性与可靠性

高可用架构设计:保证系统的稳定性与可靠性

高可用架构设计:保证系统的稳定性与可靠性高可用架构设计指的是设计一种系统架构,以保证系统具有高稳定性和可靠性的特点。

在当今数字化时代,系统的高可用性对于许多企业和组织来说至关重要,因为系统的不可用性可能导致业务中断、数据丢失以及用户流失等严重后果。

下面将讨论高可用架构设计的重要性和一些常见的架构策略。

首先,高可用架构设计的重要性在于确保系统能够持续地提供服务,即使在面临硬件故障、软件错误或自然灾害等问题时也能保持运行。

对于一些关键业务系统,例如金融交易系统、电子商务平台和医疗健康系统,系统中断可能会导致巨大的经济损失和用户的不满。

因此,通过设计高可用架构,可以降低系统中断的风险,并提高用户满意度。

其次,高可用架构设计的目标是消除系统单点故障。

单点故障是指系统中一个关键组件的失效引起整个系统的停机。

为了提高系统的可靠性,可以采用以下几种常见的架构策略:1.多点冗余:在架构中引入冗余节点或组件,使系统具有备用的能力。

例如,可以设计主备系统或使用集群和负载均衡技术来实现多个节点之间的数据同步和负载分担,从而避免单点故障的影响。

2.容错处理:通过使用容错技术来处理系统错误,以保证系统正常运行。

例如,可以使用容错机制如错误检查和纠正码、校验和、故障恢复和自动重启等方法,为系统提供容错能力。

3.水平扩展:通过增加系统的计算和存储能力来应对系统负载的增加。

水平扩展可以通过增加服务器、分布式存储、使用云服务等方式来实现,从而提高系统的吞吐量和并发处理能力。

4.数据备份和恢复:定期进行系统数据的备份,并设计合理的数据恢复策略。

备份数据可以存储在分布式文件系统、云存储或磁带库等多种介质上,以便在数据丢失或损坏时能够及时恢复。

此外,在高可用架构设计中还需要考虑到以下几个方面:1.故障检测和自动恢复:设计监控系统来检测故障,并采取自动恢复措施。

例如,通过心跳检测、自动重启或替换故障节点来提高系统的可靠性和稳定性。

2.性能监控和调优:实时监测系统的性能,并根据监测结果进行相应的调优。

网络架构设计的高可用性要求

网络架构设计的高可用性要求

网络架构设计的高可用性要求在网络架构设计中,高可用性是一个至关重要的要求。

随着互联网的发展和大规模的用户需求,保障网络系统的高可用性已成为网络架构设计的一项重要任务。

本文将探讨网络架构设计中高可用性的要求,并介绍如何满足这些要求。

一、高可用性的定义与意义高可用性是指网络系统在任何情况下都能够持续提供正常的服务,并能快速恢复正常运行。

在高可用性的架构设计中,系统的可用性是最重要的指标之一。

高可用性的意义在于保证系统在各种异常情况下的稳定性和可靠性,提高用户体验和满意度,降低业务中断的风险,保护数据安全。

二、高可用性的设计原则1. 异地多活通过在不同地理位置部署服务器集群,实现异地多活,提升系统的可用性。

当某一地区出现故障或网络中断时,其他地区的服务器仍能够提供服务,确保用户的连续访问。

2. 自动容灾切换设计网络系统时,应考虑到容灾切换机制。

当主服务器发生故障时,能自动切换到备份服务器,从而保障系统的连续性运行。

这种自动化的容灾切换能够大大提高系统的可靠性和稳定性。

3. 负载均衡通过负载均衡的设计原则,将用户的请求均匀地分配到多台服务器上,避免单点故障,提高系统的容错能力。

负载均衡可通过硬件设备或软件实现,确保系统在高负载时仍保持正常运行。

4. 数据冗余备份在网络架构设计中,数据冗余备份是保证系统高可用的重要措施。

通过将数据备份到多个地点或服务器上,当某一备份节点发生故障时,能够快速切换到其他备份节点,确保数据的可用性。

5. 实时监控和故障预警设计网络架构时,应考虑到实时的监控系统和故障预警机制。

通过对网络系统的各项指标进行实时监控,能够及时发现故障和异常情况,并采取相应的措施进行处理,以确保系统的高可用性。

三、满足高可用性要求的实施方案1. 服务器集群方案通过将服务器部署到不同地理位置,实现异地多活架构。

这样当某一地区的服务器发生故障时,用户的请求可以自动切换到其他地区的服务器上,保证用户的连续访问。

工业互联网平台的架构设计和应用

工业互联网平台的架构设计和应用

工业互联网平台的架构设计和应用近年来,工业互联网得到了全球范围内的广泛关注,已经成为处于数字化转型时代的企业必须应对的重要问题之一。

工业互联网通过物联网、云计算、人工智能等信息技术手段,将工业领域的各个环节进行深度连接和融合,实现生产和管理的自动化、高效化和智能化。

其中,工业互联网平台作为连接各个环节的“核心”,其架构设计和应用至关重要。

一、工业互联网平台的架构设计工业互联网平台架构设计的关键在于实现工业生产全链路的数据流、信息流、价值流以及对生命周期进行综合化管理。

其中常用的实现方式有以下几种:1.单层架构单层架构是较为简单的工业互联网平台架构,主要由数据采集、数据存储、数据计算、数据展示四个模块组成。

数据采集包括全场景数据采集设备的管理和数据的采集。

数据存储包括实时生产监控数据库、决策分析数据库、项目档案数据库等数据的存储。

数据计算包括数据分析、算法建模和数据决策等模块。

数据展示包括报表、图表和大数据可视化三个模块。

单层架构模型简单、易于实现、成本较低,但是其无法进行数据挖掘和趋势分析,只能进行基本的数据展示和查询。

而且,单层架构无法达到分布式计算的优化效果。

2.双层架构双层架构主要由云端和边缘端两个部分组成。

云端主要实现大量数据存储、分析与处理,以及对其他系统的接入、管理和控制。

边缘端则是指诸如传感器节点和边界网关等设备,主要用于数据获取与预处理,确保数据的高可用性和实时性。

通过这样的分层划分,双层架构能更好地实现远程数据采集、数据分析与传输等功能,同时也能在一定程度上降低网络传输延时和拥塞情况。

3.三层架构三层架构是工业互联网平台架构设计中较为常用的一种设计方式,可以有效实现数据的多级存储和分布式计算。

其包括边缘计算层、云端平台层和应用层三个部分。

边缘计算层主要负责数据的采集、处理和预处理,云端平台层负责数据存储、处理和计算,应用层则为用户提供相应的应用体验。

三层架构模型主要优势在于其能够将数据流和应用流完美整合,实现了数据在不同层次间的高效传递和管理,并为用户提供了更加智能化和自主化的服务。

互联网项目中的技术选型与架构设计原则

互联网项目中的技术选型与架构设计原则

互联网项目中的技术选型与架构设计原则随着互联网的快速发展,越来越多的企业和个人开始涉足互联网项目的开发。

在互联网项目的开发过程中,技术选型和架构设计是至关重要的环节。

本文将介绍互联网项目中的技术选型与架构设计原则,帮助读者更好地理解和应用于实际项目中。

一、技术选型原则1.需求驱动:技术选型应该始终以项目需求为导向,根据项目的具体需求来选择合适的技术方案。

不同的项目有不同的需求,因此技术选型应该根据项目的特点和目标来进行。

2.成熟稳定:选择成熟稳定的技术方案可以降低项目的风险。

成熟稳定的技术方案通常经过了长时间的实践和验证,具有较高的可靠性和稳定性。

3.开源社区支持:选择有活跃的开源社区支持的技术方案可以获得更好的技术支持和更新。

开源社区通常有大量的开发者参与,可以提供及时的修复和更新,帮助解决问题和提升项目的质量。

4.生态系统完善:选择具有完善生态系统的技术方案可以提高开发效率。

生态系统包括相关的工具、框架、库等,可以帮助开发者更快地开发和部署项目。

5.可扩展性:选择具有良好可扩展性的技术方案可以满足项目未来的发展需求。

互联网项目通常需要面对用户量的增长和功能的扩展,因此技术方案应该具备良好的扩展性,能够支持项目的快速迭代和扩展。

二、架构设计原则1.分层架构:采用分层架构可以将系统的不同功能和模块进行分离,提高系统的可维护性和可扩展性。

常见的分层架构包括三层架构和微服务架构。

2.松耦合:采用松耦合的架构设计可以降低系统的依赖性,提高系统的灵活性和可维护性。

通过使用消息队列、服务间的接口等方式,实现不同模块之间的解耦。

3.高可用性:采用高可用性的架构设计可以保证系统的稳定性和可靠性。

通过使用负载均衡、容灾备份等方式,实现系统的高可用性,避免单点故障。

4.性能优化:采用性能优化的架构设计可以提高系统的响应速度和吞吐量。

通过使用缓存、异步处理等方式,优化系统的性能,提升用户体验。

5.安全性:采用安全性的架构设计可以保护系统的数据和用户的隐私。

如何搭建一个高可用的分布式系统

如何搭建一个高可用的分布式系统

如何搭建一个高可用的分布式系统一、概述随着互联网技术的不断发展,分布式计算成为了解决数据处理和资源利用效率的一种有效方式。

分布式系统在交换数据、计算任务和存储资源时能够提高性能和可靠性,并可应对负载均衡和容错需求。

搭建一个高可用的分布式系统需要考虑多个因素,包括分布式架构、操作系统、软件配置等。

本文将介绍如何设计和实现一个高可用的分布式系统。

二、分布式架构1. 硬件环境要搭建一个高效的分布式系统,首先要考虑硬件环境,包括服务器的数量和类型。

为了实现负载均衡和容错,需要至少两个服务器,这些服务器分布在不同的地理位置,以降低自然灾害等风险。

此外,硬件设置也需要考虑网络的稳定性、容错性等因素。

2. 分布式软件搭建一个分布式系统,需要选择合适的软件。

目前比较经典的分布式架构结构包括Master-Slave模型、Peer-to-Peer模型等。

其中Master-Slave模型,在Master上控制所有的从属节点,处理中央化、任务分配和完成任务之后的后续工作。

而Peer-to-Peer模型,所有节点都能够对彼此进行通信,节点之间具备对等关系,因此各个节点强化彼此之间的平衡并且提升系统的可用性。

三、操作系统选择适合的操作系统也是搭建高效分布式系统的必要因素。

通常,Linux是部署分布式应用最受欢迎的选择,因为它是一种开源操作系统,可定制性很高,并且具有强大的性能和支持。

但是,如果你不熟悉Linux,或者没有Linux的专业知识,那么你可以使用Windows Server 2019等Microsoft的操作系统版本,因为它们易于使用和管理,并为各种应用程序提供支持。

四、软件配置1. 配置java环境Java是一种非常流行的语言,是搭建分布式系统的首选之一。

因此你需要在每个服务器上安装Java JRE或JDK,以便能够运行Java应用程序。

此外,版本问题也要考虑,建议使用稳定版或者社区版本(Oracle或者OpenJDK)。

云计算平台的高可用性和扩展性

云计算平台的高可用性和扩展性

云计算平台的高可用性和扩展性随着时代的发展,云计算成为了更多企业在进行IT现代化转型过程中的必备工具。

与传统的本地计算架构不同,云计算所具备的高可用性和扩展性能够大幅度提升业务的稳定性和容量,为企业带来更好的效益和竞争力。

首先,我们需要理解什么是高可用性和扩展性。

高可用性指的是系统在遇到故障或者一些不可预期的情况下,依然能够保持稳定运行的能力。

相对于时下流行的“五个九”技术目标,即达到99.999%的可靠性,高可用性的含义更广,包括但不限于硬件故障、网络中断、威胁攻击等情况下,依旧能够保证系统的稳定工作。

在云计算平台中,因为整个系统架构会涉及到多种服务,所以确保高可用性就意味着这个系统会有多套备份,以达到更可靠的恢复机制。

与此同时,扩展性则是指在遇到业务量的上升或者需要增加更多功能的情况下,系统可以自适应地扩展出更多的处理能力和资源,保证足够的容量来支撑业务增长。

在云计算的架构下,各种不同的应用、服务、接口都是可以横向扩展的,碰到需要处理的工作量变大的情况,可以通过自动增加计算资源、分散流量,或者增加服务器数量来实现。

在实现高可用性和扩展性的过程中,云计算平台采用的技术主要包括虚拟化、容器化、负载均衡等,下面我们逐一探究。

虚拟化是实现云计算平台高可用性和扩展性的关键技术之一。

通过该技术,将多个物理计算机合成一个巨型物理计算机,从而实现虚拟机的热迁移,而大大增加了系统的运行时可靠性、弹性和灵活性。

虚拟化技术不仅可以实现物理主机的高可用性,还可以实现虚拟机的高可用性,从而提供了更完善的解决方案,保证了整个云计算平台的稳定性。

容器化也是实现高可用性和扩展性的一项重要技术,它可以将应用及其依赖项打包成一个可移植的容器,从而可以部署到多台服务器上,同时,由于容器之间相互隔离,因此可以大幅度减少应用之间的干扰,从而加速系统的响应速度。

在容器化的系统下,从单个机器到大型集群,都可以方便快捷地管理内存、CPU、网络、存储等计算资源。

高可用网络架构的设计与实施方法(四)

高可用网络架构的设计与实施方法(四)

高可用网络架构的设计与实施方法1. 引言在当今数字化时代,网络已经成为了人们生活的重要组成部分。

为了确保网络的稳定性和可用性,高可用网络架构的设计和实施变得至关重要。

本文将讨论高可用网络架构的设计原则、方法和工具,并介绍一些实际案例。

2. 设计原则高可用网络架构的设计需要遵循一些基本原则,如冗余、负载均衡和容错性。

冗余:通过使用多个网络设备、连接和路径,确保网络服务的可靠性。

例如,使用多个交换机和路由器来提供冗余的网络连接。

负载均衡:通过分配网络流量到多个服务器或网络设备上,提高网络的性能和可扩展性。

负载均衡可以通过硬件设备或软件实现。

容错性:在网络设备或连接发生故障时,系统能够自动切换到备份设备或连接,以保持网络的连通性。

常见的容错性技术包括冗余网络路径和热备插槽。

3. 设计方法在进行高可用网络架构设计时,可以采用以下方法来实现稳定性和可用性。

可靠性评估:首先需要评估现有网络架构的可靠性,识别潜在的单点故障和性能瓶颈,并制定改进计划。

可利用网络监控工具来收集和分析网络流量和性能数据。

冗余部署:选择合适的网络设备和技术,确保至少有一个备份设备或连接能够接管正常运行的网络设备或连接的工作。

负载均衡策略:根据网络流量和性能要求,选择合适的负载均衡策略。

常见的负载均衡技术包括基于硬件的负载均衡器、DNS负载均衡和基于软件的负载均衡。

容错性实现:使用容错技术来确保网络在设备或连接故障时能够自动切换到备份设备或连接。

例如,使用热备插槽和链路聚合来提供冗余网络路径。

4. 实施工具在实施高可用网络架构时,可以利用一些工具来简化配置和管理过程。

网络监控工具:使用网络监控工具来实时监测网络设备和连接的运行状况。

通过监控工具,可以及时发现并解决潜在的故障和性能问题。

故障转移工具:通过使用故障转移工具,可以实现网络在主设备或连接发生故障时的自动切换。

例如,使用VRRP(虚拟路由冗余协议)来实现路由器的容错性。

配置管理工具:利用配置管理工具来统一管理和自动化网络设备的配置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

互联网开放平台的高可用架构京麦是京东商家的多端开放式工作平台,是京东十万商家唯一的店铺运营管理平台,为京东商家提供在移动和桌面端的操作业务,京麦本身是一个开放的端体系架构,由京东官方和ISV 为商家提供多样的应用服务。

京麦开发平台是京东系统与外部系统通讯的重要平台,技术架构从早期的单一Nginx+Tomcat 部署,到现在的单一职责,独立部署,去中心化,以及自主研发了JSF/HTTP 等多种协议下的API 网关、TCP 消息推送、APNs 推送、降级、限流等技术。

京麦开放平台每天承载海量的API 调用、消息推送,经历了4 年京东618 的流量洗礼。

本文将为您揭开京麦开放平台高性能API 网关、高可靠的消息服务的技术内幕。

高性能API 网关京东内部的数据分布在各个独立的业务系统中,包括订单中心、商品中心、商家中心等,各个独立系统间通过JSF(Jingdong Service Framework)进行数据交换。

而API 网关基于OAuth2 协议提供,ISV 调用是通过HTTP 的JSON 协议。

如何将这些内部数据安全可控地开放给外部ISV 进行服务调用,以及如何快速地进行API 接入实现数据报文转化,在这个背景下API 网关诞生。

API 网关在架构设计上采用了多层接口,到达网关的请求首先由网关接入层拦截处理,在接入层进行两个主要环节的处理:1. 网关防御校验:这里包含降级和限流,以及多级缓存等,进行数据正确性校验;2. 网关接入分发:网关分发会根据网关注册中心的数据进行协议解析,之后动态构建调用实例,完成服务泛化调用。

API 网关是为了满足618 高并发请求下的应用场景,网关在服务调度、身份授权、报文转换、负载与缓存、监控与日志等关键点上进行了针对性的架构优化。

API 元数据统一配置API 的调用依赖对元数据获取,比如API 的字段信息、流控信息、APP 密钥、IP 白名单等、权限配置等。

在618 场景下,元数据获取性能是API 网关的关键点。

基于DB 元数据读取是不可取的,即使对DB 做分库分表处理也不行,因为DB 就不是用来抗量的。

其次,要考虑到元数据的更新问题,定时的轮训更新会产生极大延迟性,而且空轮训也是对系统资源的极大浪费,采用MQ 广播通知不失为一种解决办法,但MQ 仅仅解决数据同步的问题,数据缓存在集群里服务如何保证数据一致性和数据容灾,又极大的增加了系统复杂度。

所以综合考虑服务器性能和网络IO 等因素,在API 元数据读取采用基于ZooKeeper 的统一配置,并自研实现多级缓存容灾架构方案,从ZooKeeper、内存和本地文件等进行多级缓存,同时支持数据变更时即时同步,以及系统宕机网络异常等情况下的数据自动容灾等策略。

以读为例,网关首先从内存中读取配置,如无数据,从ZooKeeper 读取,读取后同步到内存,并异步保存本次快照。

如果ZooKeeper 数据变更,通过监听ZooKeeper 的DataChangeWatcher 变更同步数据。

如果ZooKeeper 宕机,重启服务器,系统还可以通过本地快照恢复最近一次的元数据配置。

TCP 全双工的长链接会话通道API HTTP 网关通过接口提供服务调用获取请求数据的,而搭建客户端与服务平台的TCP 网关的双向通道,以保持客户端与服务平台的会话状态,则可以在HTTP 网关基础上提供更多、更灵活的技术实现和业务实现。

在业务服务调用上通过HTTP 网关,在平台服务调用上则通过TCP 网关,实现平台与业务解耦,并且平台采用TCP 通道还可以增加对平台的控制力,在此背景下诞生了TCP 网关。

TCP 网关采用长连接通道,实现全双工会话。

TCP 网关采用Netty 作为TCP 容器,在ChannelPipe 中加载自定义ChannelHandler,构建Container 容器,将每个TCP Connection 封装到一个Session 会话中,保存在Container 容器中,由Container 容器构建Session 会话层提供逻辑层请求调用。

自研构建Session 会话层是因为HTTP 属于OSI 的应用层,而TCP 属于OSI 的传输层,面向连接的编程极大的增加程序复杂度,所以将Connection 封装在每一个Session 会话里,再以微服务的方式提供服务调用,极大的精简了TCP 编程。

断线重连客户端与服务端通过TCP 长连接进行通信,但在中国复杂的网络环境下,移动客户端可能由于网络抖动、弱网络情况下,遭遇非正常网络闪断,如何处理断开后的断线重连,保证客户端与服务端的通讯稳定呢?客户端每通过TCP 与服务端进行一次建连,都会在服务容器里创建一个Session 会话,该会话保存Connection 的句柄,对应Netty 的一个Channel 通道。

建连成功后,通过定时的心跳保持Channel 属于Active 活跃。

但客户端进入弱网络环境下,客户端可能已经掉线,但并未向服务端主动发送关闭Channel 请求,而服务端仍认为该Channel 仍存活。

直到在由服务端的会话存活检测机制检测到Channel 已经InActive,才会由服务端销毁该Channel。

服务端的会话存活检测是5 分钟一次,所以存在客户端掉线后,在5 分钟内又重新建连,而这时服务端的建连逻辑,不是重新创建一个Session,而是去寻找上一次的Session,并更新标识存活。

具体的实现是在每次建连的Channel 里存入SessionId,当网络闪断后,判断Channel 是否存在Session,之所以实现是得益于Netty 的ChannelHandlerContext,可以存储一个自定义属性到Channel 的上下文中。

当然,TCP 网关一定是集群,所以,断线重连也是极有可能请求到不同的服务器上,而这种情况按照新Connection 创建的Session 处理,只有出现重连到同一服务器时,才需要考虑上述的处理逻辑。

Protobuf 数据交换格式HTTP 网关基于JSON 进行数据传输,JSON 是key-value 的键值对通信协议,所以生成报文会很大,所以影响传输性能。

考虑到报文传输大小,在TCP 网关中则通过Protobuf 定义通信协议,提升数据传输效率。

Protobuf 支持Java、Objective-C 和C++ 等语言,现支持了京麦平台PC 桌面客户端、移动iOS 和Android 客户端基于Protobuf 通过TCP 与服务端进行通信。

多维度流量控制由于各个API 的服务能力不一致,为了保证各个API 能够稳定提供服务,不会被暴涨的请求流量击垮,那么多维度流量控制是API 网关的一个重要环节。

目前API 网关是采用令牌桶的方法,实现方式是Guava RateLimter,简单有效,再结合统一配置中心,可以动态调整限流阈值。

不用重启服务器即可实现快速限流策略调整。

在API 网关里面还有一个设置,就是并发度,这个是方法粒度的,对每一个调用接口都有一个并发度数值设置,而且是动态设置,也是通过ZooKeeper 下发到每一个服务节点上。

并发度的具体实现是通过JDK 的Semaphore。

高可靠的消息服务API 网关提供ISV 获取数据,但实时数据的获取,如果通过轮询网关,大量空转不仅非常的低效且浪费服务器资源。

基于此,开放平台推出了消息推送技术,提供一个实时的、可靠的、异步的双向数据交换通道,提升API 网关性能。

AnyCall 和推送系统•AnyCall负责接收各业务中心的订单、商品、商家等消息,进行统一的消息过滤、转换、存储,及监控和统计等。

各个过程中的消息状态,通过消息采集器存储到ElasticSearch 和HBase 进行存储。

•推送系统基于Netty 作为网络层框架,构建海量推送模型,使用静默长连接通道,实现从消息接收、推送、确认,整个过程的完全异步化处理。

解耦消息接入层和消息推送层,消息接入层只负责Request-Response和Notice-Repley,而消息解析、适配、推送等逻辑处理都全部由消息推送层处理,而消息接入层和消息推送层之间则有消息队列异步进行通信。

半推半拉还是半推半查?•半推半拉半推半拉模式中的“推”指的是由服务器推送消息通知到客户端,“拉”指的是客户端收到通知后再从服务器拉取消息实体到客户端本地存储。

其中消息通知发送的仅是一个命令关键字,这样的设计是考虑消息推送可能存在丢失,通过拉取的方式,确保即使消息通知未送达,在下次消息通知触发下的拉取也能把上一次消息拉取到本地。

采用的半推半拉,每次仅推送通知,推送量小,实时性高。

•半推半查后期京麦消息推送模式由“拉”改“查”,“查”指的是消息通知依旧推送,但客户端收到消息通知后不再拉取消息实体,仅更新消息未读数和进行消息提醒等操作,而消息内容则是由服务端进行云端存储,采用轻客户端,重服务端的架构方案,只有用户点击查询消息时,才会按需进行数据查询,在客户端展示,但不存储。

这种推送模式的改动主要考虑了客户端拉取消息内容到本地存储,占用资源,重装之后客户端会丢失消息,以及多端存储的数据存在不一致等问题。

消息云端存储基于ElasticSearch 进行消息存储,并根据业务类型区分索引,通过Routing 优化查询性能,支持多维度进行查询,性能稳定。

消息确认评估消息系统的一个核心指标是消息送达率。

为保证每一条消息准确送达,为每条消息都会开启一个事务,从推送开始,到确认结束,如果超时未确认就会重发这条消息,这就是消息确认。

由于互联网环境复杂,消息超时时间不能设置太短,尤其在移动弱网络环境下。

在本系统的中超时设置为10 秒。

我们通过实现Future 自定义NotifyFuture,为每个下行通知分配一个seq,并定义NotifyFuture 的timeout。

即每个下行通知分配一个seq 存储缓存中,等待客户端回应这个应答,如果应答,则从缓存移出这个seq,否则等待超时,自动从缓存中被移出。

APNs 消息推送iOS 在系统层面与苹果APNs(Apple Push Notification Service)服务器建立连接,应用通过Socket 向APNs Server 推送消息,然后再由APNs 进行推送。

但是基于Socket 的APNs 协议是一种反人类的设计,在推送消息存在很多问题。

鉴于此,对APNs 推送服务进行重构,基于Netty 构建了HTTP2 协议的推送服务,支持同步和异步的推送方式;解决Channel 异常及InActive 时重连等问题,保证HTTP2 推送管道的问题;同时通过IdleStateHandler 保持HTTP2 长连接的心跳。

相关文档
最新文档