路由聚合

“微信支付”的架构到底有多牛逼?看完这篇你就明白了!

徘徊边缘 提交于 2020-04-06 03:05:23
点点这个链接免费获取: 【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> 背景 作为一个重要业务,微信支付在客户端上面临着各种问题。其中最核心问题就是分平台实现导致的问题: iOS 和安卓实现不一致 容易出 Bug 通过沟通保证不了质量 扩展性差,无法快速响应业务需求 需求变更迭代周期长 数据上报不全面 质量保障体系不完善 缺少业务及设计知识沉淀 协议管理松散 缺少统一的自动化测试 用户体验不一致比如下图就是之前安卓和 iOS 没有统一前的收银台。 为了解决分平台实现这个核心问题,并解决以往的技术债务。我们建立起了一整套基于 C++ 的跨平台框架,并对核心支付流程进行了重构。 微信支付跨平台从 iOS 7.0.4 版本起, 安卓从 7.0.7 版本起全面覆盖。 线上效果指标 以 iOS 上线情况为例: Crash 率上线前后 Crash 率保持平稳,没有影响微信稳定性,跨平台支付无必现 Crash,做到了用户无感知切换。举个例子,大家可以用微信发一笔红包,拉起的收银台和支付流程就是由基于C++编写的跨平台代码所驱动的。 效能提升以核心支付流程代码为例,跨平台需要 3512 行,iOS 原生需要 6328 行。减少了近 45% 的代码。以新需求开发为例:7.0.4 版本需求一:收银台改版7.0.4 版本需求二:简化版本收银台 跨平台实现:iOS + 安卓 共计 3

路由交换(九):BGP

我与影子孤独终老i 提交于 2020-04-05 10:23:06
一、BGP简介 BGP(Border Gateway Protocol,边界网关协议)是一种实现AS(Autonomous System,自治系统)之间的路由可达,并选择最佳路由的距离矢量路由协议。当前BGP使用的版本是BGP-4和MP-BGP。 BGP采用认证和GTSM的方式,保证了网络的安全性。 BGP提供了丰富的路由策略,能够灵活的进行路由选路。 BGP提供了路由聚合和路由衰减功能用于防止路由振荡,有效提高了网络的稳定性。 BGP使用TCP作为其传输层协议(端口号为179),并支持BGP与BFD联动、BGP Tracking和BGP GR,提高了网络的可靠性。 二、BGP工作原理 1、报文类型 Open报文 用于建立BGP对等体连接。 Update报文 用于在对等体之间交换路由信息。 Notification报文 用于中断BGP连接。 Keepalive报文 用于保持BGP连接。 Route-refresh报文 用于在改变路由策略后请求对等体重新发送路由信息。 2、BGP邻居建立 1)BGP初始状态是Idle状态,在Start事件触发下后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。 2)在Connect状态下,等待TCP完成连接。如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。如果TCP连接失败

路由交换(七):RIP

隐身守侯 提交于 2020-04-04 23:32:08
RIP 一、基本概念 RIP(Route Information Protocol)路由信息协议,属于IGP协议,基于距离矢量算法,使用UDP报文进行路由信息的交换,使用端口号520(源端口和目的端口号都是520),支持触发更新路由信息,使用跳数作为路由度量值,跳数16以上认为网络不可达,适用于网络规模较小的场景下。目前有RIPv1和RIPv2两个版本。 RIPv1和RIP v2区别: RIPv1是有类路由协议,广播发送报文,不支持VLSM和CIDR,不支持认证 RIPv2是无类路由协议,组播发送报文,组播地址为224.0.0.9,支持VLSM、路由聚合和CIDR,支持认证 二、RIP工作流程 RIP的运行过程如下: (1) 路由器启动RIP后,便会向相邻的路由器发送请求报文(Request message),相邻的RIP路由器收到请求报文后,响应该请求,回送包含本地路由表信息的响应报文(Response message)。 (2) 路由器收到响应报文后,更新本地路由表,同时向相邻路由器发送触发更新报文,通告路由更新信息。相邻路由器收到触发更新报文后,又向其各自的相邻路由器发送触发更新报文。在一连串的触发更新广播后,各路由器都能得到并保持最新的路由信息。 (3) 路由器周期性向相邻路由器发送本地路由表,运行RIP协议的相邻路由器在收到报文后,对本地路由进行维护,选择一条最佳路由

路由交换(八):OSPF

三世轮回 提交于 2020-04-04 22:37:33
OSPF 一、OSPF简介 OSPF(Open Shortest Path First,开放最短路径优先),是内部网关协议,应用在自治系统内部,一种链路状态路由协议,使用最短路径优先算法计算路由。OSPF数据报文封装在IP报文内部,协议号为89,使用单播或组播发送。 OSPF特点如下: 适合范围广,快速收敛,无自环、区域划分、支持验证、组播发送 二、OSPF工作原理 1、OSPF邻居建立过程 DR与BDR选举 在广播网络和NBMA网络中,为减小OSPF流量,需要选举DR和BDR。DR与BDR非抢占;DR与BDR、DR与Drother、BDR与Drother之间是Full状态,Drother之间是two-way状态。所有的Drother都只和DR和BDR建立全毗邻关系。根据运行OSPF协议的路由器接口优先级和端口PID来选举DR和BDR,接口优先级范围是0-255,优先级为0表示不参与DR、BDR选举。接口优先级越大越优先,当接口优先级相同时,比较端口PID,PID较大的成为DR。 2、报文类型 Hello报文 功能:周期性发送,用来发现和维持OSPF邻居关系 DD报文 功能:描述本地LSDB的摘要信息,用于同步LSDB LSR报文 功能:请求特定的链路状态信息 LSU报文 功能:发送详细的链路状态信息 LSAck报文 功能:确认收到的LSA 3、网络类型 点到点类型 不需要选举

“微信支付”的架构到底有多牛逼?看完这篇你就明白了!

戏子无情 提交于 2020-03-31 21:06:30
点点这个链接免费获取:本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门: https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ 背景 作为一个重要业务,微信支付在客户端上面临着各种问题。其中最核心问题就是分平台实现导致的问题: iOS 和安卓实现不一致 容易出 Bug 通过沟通保证不了质量 扩展性差,无法快速响应业务需求 需求变更迭代周期长 数据上报不全面 质量保障体系不完善 缺少业务及设计知识沉淀 协议管理松散 缺少统一的自动化测试 用户体验不一致比如下图就是之前安卓和 iOS 没有统一前的收银台。 为了解决分平台实现这个核心问题,并解决以往的技术债务。我们建立起了一整套基于 C++ 的跨平台框架,并对核心支付流程进行了重构。 微信支付跨平台从 iOS 7.0.4 版本起, 安卓从 7.0.7 版本起全面覆盖。 线上效果指标 以 iOS 上线情况为例: Crash 率上线前后 Crash 率保持平稳,没有影响微信稳定性,跨平台支付无必现 Crash,做到了用户无感知切换。举个例子,大家可以用微信发一笔红包,拉起的收银台和支付流程就是由基于C++编写的跨平台代码所驱动的。

路由选择信息协议

你说的曾经没有我的故事 提交于 2020-03-28 07:11:37
路由信息协议(RIP)是一种在网关与主机之间交换路由选择信息的标准。RIP 是一种内部网关协议。在国家性网络中如当前的因特网,拥有很多用于整个网络的路由选择协议。作为形成网络的每一个自治系统(AS),都有属于自己的路由选择技术,不同的 AS 系统,路由选择技术也不同。 RIP的特点 (1)仅和相邻的路由器交换信息。如果两个路由器之间的通信不经过另外一个路由器,那么这两个路由器是相邻的。RIP协议规定,不相邻的路由器之间不交换信息。 (2)路由器交换的信息是当前本路由器所知道的全部信息。即自己的路由表。 (3)按固定时间交换路由信息,如,每隔30秒,然后路由器根据收到的路由信息更新路由表。(也可进行相应配置使其触发更新) 适用 RIP 和 RIP 2 主要适用于 IPv4网络,而 RIPng 主要适用于 IPv6 网络。本文主要阐述 RIP 及 RIP 2。 RIPng:路由选择信息协议下一代(应用于IPv6) (RIPng:RIP for IPv6)RIPng与RIP 1和 RIP 2 两个版本不兼容。 RIP协议的“距离”其实就是“跳数”(hop count),因为每经过一个路由器,跳数就加1。RIP认为好的路由就是它通过的路由器的数目少,即“距离短”。 应用 RIP(Routing information Protocol)是应用较早、使用较普遍的内部网关协议(Interior

微信团队分享:微信支付代码重构带来的移动端软件架构上的思考

你说的曾经没有我的故事 提交于 2020-03-25 20:37:34
3 月,跳不动了?>>> 本文原文由微信客户端高级工程师方秋枋原创发表于WeMobileDev公众号,收录时有修订和加工,感谢作者的无私分享。 1、引言 作为一个重要业务,微信支付在客户端上面临着各种问题。 其中最核心问题就是分平台实现导致的问题: 1)iOS 和安卓实现不一致:容易出 Bug、通过沟通保证不了质量; 2)扩展性差且无法快速响应业务需求:需求变更迭代周期长、数据上报不全面; 3)质量保障体系不完善:缺少业务及设计知识沉淀、协议管理松散、缺少统一的自动化测试; 4)用户体验不一致:比如下图就是之前安卓和 iOS 没有统一前的收银台。 ▲ 微信安卓片和iOS版,没有统一用户体验前的收银台功能 为了解决分平台实现这个核心问题,并解决以往的技术债务。我们建立起了一整套基于 C++ 的跨平台框架,并对核心支付流程进行了重构。微信支付跨平台从 iOS 7.0.4 版本起, 安卓从 7.0.7 版本起全面覆盖。 重构后的软件架构原理如下图所示: 本文分享了微信团队基于 C++ 的移动端跨平台技术在重构整个微信支付功能的过程中,对于移动端软件架构设计方面的思考和实践总结。 术语约定: 本文中的名词 CGI 可以理解为一个网络请求,类似HTTP请求。 2、关于作者 方秋枋: 毕业于华中科技大学,现为微信客户端高级工程师。目前主要负责微信支付的跨平台开发框架与相关业务开发。 是开源项目

EIGRP学习笔记+重分发

徘徊边缘 提交于 2020-03-09 14:43:13
Enhanced Interior Gateway Routing Protoco,即 增强内部网关路由线路协议。EIGRP结合了链路状态和距离矢量型路由选择协议的Cisco专用协议,采用弥散修正算法(DUAL)来实现快速收敛,可以不发送定期的路由更新信息以减少带宽的占用。EIGRP协议在路由计算中要对网络带宽、网络时延、信道占用率和信道可信度等因素作全面的综合考虑,所以EIGRP的路由计算更为准确,更能反映网络的实际情况。 EIGRP特点: 1.EIGRP更新方式为 触发更新 ,仅在路由路径或者度量值发生变化时才发送。 更新中只包含已变化的链路的信息 ,而不是整个路由表,减少带宽占用; 2.支持可变长子网掩码(VLSM)和CIDR,支持手动汇总,默认开启自动汇总功能。 3. 对每一种网络协议,EIGRP都维持独立的邻居表、拓扑表(保存最优路径与次优路径)和路由表(保存最优路由条目信息)。 4.EIGRP使用Diffusing Update算法(DUAL)来实现快速收敛并确保没有路由环路。(无环路的无类路由) 5.支持等价和非等价的负载均衡(非等价的负载均衡需要手动开启)。 EIGRP中几个专业术语; AD(通告距离):最优路径中,起始设备的下一跳设备到达目标地址的度量值。 FD(可行距离):最优路径中,起始设备到达目标地址的度量值。 FS(可行后继路由器)

django基础篇

一笑奈何 提交于 2020-03-06 06:45:19
Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。 一、基本的配置 1、创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令:   python manage.py runserver 0.0.0.0   python manage.py startapp appname   python manage.py syncdb   python manage.py makemigrations   python manage.py migrate   python manage.py createsuperuser 2、程序目录 3、配置文件 数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': 'root', 'PASSWORD': 'xxx', 'HOST': '', 'PORT': '', } } # 由于Django内部连接MySQL时使用的是MySQLdb模块

springcloud微服务实战_06_API网关服务

倖福魔咒の 提交于 2020-02-29 15:09:04
6.1 zuul 简介 spring cloud zuul API 网关是一个智能的应用程序,它的定义类似于面向对象设计模式中的 faced 门面模式,它的存在就像是整个微服务架构应用的门面一样,所有的外部客户端访问都需要经过它来进行调度与过滤.它除了要实现请求路由,负载均衡,校验过滤等功能之外,还需要更多的能力,比如与服务治理框架的结合,请求转发时的熔断机制,服务的聚合等一些列高级功能. 首先对于路由规则与服务实例的维护问题. spring cloud zuul 通过与 spring cloud eureka 进行整合,将自身注册为 eureka 服务治理下的应用,同时从 eureka 中获取所有的服务实例. 这样的设计非常巧妙的将服务治理体系中维护的实例信息利用起来,使得维护服务实例的工作交给了服务治理框架自动完成,不需要人工介入. 而对于路由规则的维护,zuul默认会将通过以服务名作为 ContextPath 的方式来路由映射,大部分情况下,这样的默认设置已经可以实现我们大部分的路由需求,除了一些特殊情况还需要做一些特别的配置. 其次对于类似签名校验,登录校验,在微服务架构中的冗余问题.理论上说,这些校验逻辑在本质上与微服务应用自身的业务并没有太大的关系,所以它们完全可以独立成一个单独的服务存在,只是它们被剥离与独立出来之后,并不是给各个微服务使用,而是在 API