今天首先回答上一篇的问题:

为什么APP通过运营商接入网络,连通率会那么差?

1. 域名缓存问题

运营商的localdns会缓存域名的解析结果,不向权威DNS递归查询解析

为什么要这么干呢?

1)运营商之间的跨网流量结算费用比较贵(他们内部技术团队的KPI),为了最大化的在本网消耗(内部结算好算),减少跨网结算,所以会把IP地址解析到自己的内容缓存IP地址

2) 推送广告,有利可图。把内容缓存替换为第三方联盟广告.

2. 解析转发问题

部分小运营商图省事,不进行域名的递归解析,而是把解析请求转发到其他运营商的LocalDNS上,导致调度出现问题,跨网调度,最后影响的就是耗时,当耗时足够大时,连通性就没法保障了

3. LocalDNS递归出口NAT导致调度不准

LocalDNS递归出口NAT指的是运营商的LocalDNS按照标准的DNS协议进行递归,但是因为在网络上存在多出口且配置了目标路由NAT,结果导致LocalDNS最终进行递归解析的时候的出口IP就有概率不为本网的IP地址,跨网的影响如上

所以基于以上的原因,APP端对服务器端API的连通性就会损失个5%左右.

解决方案请见上文<移动端API接口优化的术和结果>

今天来讲另一个话题:

移动端API架构 是该统一Proxy还是各自为政?

我经历过几家公司,有把所有的service放到一个域名下的,也有按业务的不同来拆分为不同域名服务的

如:
api.baidu.com/msg
api.baidu.com/user
api.baidu.com/search
也有如:
msg.baidu.com
user.baidu.com
search.baidu.com

对应内部的架构也会是两个样子

今天我们就来聊一下,仅仅从架构层面来说到底是有红色Proxy部分好呢还是没有好?

一般的初创公司,甚至到中型互联网技术公司,很多人都在用分拆域名的方式来分拆业务,这样做好处是什么?

一般在一家创业公司驱使按域名分业务分拆后端API始于团队和人员的发展,他们期望各业务负责人只需要关注自己的业务,业务间没有关联关系,即便在最终产品上各业务会有先后依赖关系,如消息服务(msg service)依赖user service,也都是整体由客户端来串逻辑,研发msg service的同学与user service的同学可以不用交流或者少交流,已到达各业务开发团队齐头并进的效果。出了问题呢,也能很快的定位是哪个api的service挂了,每个团队维护好自己的服务, 干好自己的事情.

在这个阶段的公司,这也是个不错的方案能够让多个团队齐头并进.

但是对于大的互联网公司,或者有技术追求的技术公司,这并不是最理想的方案,为什么呢?

我们来看看按域名分拆业务带来的问题:

1. 流量监控等方案需要在各个业务做

2. 安全性, 防攻击等相关问题需要各个业务团队完成

3. 不利于统一管理,需要给每个业务配备对应的运维人员(绝大部分这种架构的公司op也是这么配备的)

4. 扩容 缩容 熔断 等高可用相关的基础方案难复用

这里面最重要的是流量监控和容量规划,在同一的proxy层做监控能够让人非常快速的知道系统故障时问题在哪,哪个服务的耗时增加了,哪个服务开始出现500了. 如终端报bug消息出不来了,到底是msg service还是user service的问题,一目了然;同时统一的扩容 缩容以及服务降级的联动,都好做了,运维工程师的幸福生活由此展开.

当然,这并不是唯一的方式,使用分拆域名然后把各个监控数据汇集到一块也能做,但是成本变高了.

移动端API架构 统一Proxy还是各自为政?的更多相关文章

  1. Java生鲜电商平台-统一格式返回的API架构设计与实战

    Java生鲜电商平台-统一格式返回的API架构设计与实战 说明:随着互联网各岗位精细化分工的普及,出现了很多的系统架构设计,比如常见的前后端分离架构,后端提供接口给前端,前端根据接口的数据进行渲染,大 ...

  2. RESTful API 架构解读

    RESTful API 架构解读 首先我们还是先介绍下 RESTful api 的来龙去脉. 首先, RESTful (下文都简称 RESTful api 为 RESTful ) 1.RESTful ...

  3. 一套海量在线用户的移动端IM架构设计实践分享(含详细图文)(转)

    1.写在前面 1.1.引言 如果在没有太多经验可借鉴的情况下,要设计一套完整可用的移动端IM架构,难度是相当大的.原因在于,IM系统(尤其是移动端IM系统)是多种技术和领域知识的横向应用综合体:网络编 ...

  4. openresty开发系列1--网关API架构及选型

    微服务架构在项目中的应用越来越多,我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些 ...

  5. 4 种主流的 API 架构风格对比

    1RPC:调用另一个系统的函数 RPC 的工作机制 客户端调用一个远程的过程,将参数和附加信息序列化为消息,然后将消息发送到服务端.服务端在接受到消息后,将信息的内容反序列化,执行所请求的操作,然后将 ...

  6. Identity4实现服务端+api资源控制+客户端请求

    准备写一些关于Identity4相关的东西,最近也比较对这方面感兴趣.所有做个开篇笔记记录一下,以便督促自己下一个技术方案方向 已经写好的入门级别Identity4的服务+api资源访问控制和简单的客 ...

  7. 爱奇艺直播 - 春晚直播业务API架构

    小结: 1.服务熔断策略 在网关服务中经常会对后端不同api接口做服务聚合,比如A服务 -> B服务 -> C服务 ,如果C服务出现问题,那么在调用C服务之前需要做熔断.而在设计熔断器的时 ...

  8. C#开发BIMFACE系列15 服务端API之获取模型的View token

    系列目录     [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken>中详细介绍了应用程序访问API的令牌凭证.我 ...

  9. 2019-11-29-浅谈-Windows-桌面端触摸架构演进

    原文:2019-11-29-浅谈-Windows-桌面端触摸架构演进 title author date CreateTime categories 浅谈 Windows 桌面端触摸架构演进 lind ...

随机推荐

  1. Backbone源码分析(三)

    Backbone源码分析(一) Backbone源码分析(二) Backbone中主要的业务逻辑位于Model和Collection,上一篇介绍了Backbone中的Model,这篇文章中将主要探讨C ...

  2. Alljoyn之管中窥豹

    Alljoyn之管中窥豹 一.历史: Alljoyn是高通2011年推出的近距离P2P通讯技术,它为分布式应用程序在不同设备中提供了运行环境,特别是移动性.安全性和动态配置,支持Microsoft W ...

  3. 在Windows中安装Memcached

    Memcached是一个高并发的内存键值对缓存系统,它的主要作用是将数据库查询结果,内容,以及其它一些耗时的计算结果缓存到系统内存中,从而加速Web应用程序的响应速度. Memcached最开始是作为 ...

  4. 数据库基础,表及SQL语句

    数据库基础及T-SQL语句 字符类型: int 整型 float 小数 double 小数 varchar(20) 字符串 bit 布尔型数据 datetime 日期时间类型 text 长文本 (以下 ...

  5. 修改windows自带的Ctrl+Space输入法切换快捷键

    使用场景: 多为我等码农使用一些编辑器时,编辑器的默认代码提示热键为 ctrl+space ,但这个热键被系统的输入法开关占用.如果遇到可以设置快捷键的编辑器还好,要是不能设置的话(比如火狐浏览器的代 ...

  6. ie6 z-index不起作用的解决方法

    一.概念 z-index伴随着层的概念产生的.网页中,层的概念与photoshop或是flash中层的概念是一致的.熟悉photoshop或是flash的应该知道,层级越高(图层越靠上),越在上面显示 ...

  7. 基于ReactCSSTransitionGroup实现react-router过渡动画

      此前,我使用了react-router库来完成单页应用的路由,从而实现组件之间的切换能力.然而,默认页面的切换是非常生硬的,为了让页面切换更加缓和与舒适,通常的方案就是过渡动画. 这里我调研了2种 ...

  8. JS原生基础终结篇 (帅哥)

    闭包 基础    面向对象基础 1.1 闭包 在程序语言中,所谓闭包,是指语法域位于某个特定的区域,具有持续参照(读写)位于该区域内自身范围之外的执行域上的非持久型变量值能力的段落.这些外部执行域的非 ...

  9. SQL Server 维护计划实现数据库备份(策略实战)

    一.背景 之前写过一篇关于备份的文章:SQL Server 维护计划实现数据库备份,上面文章使用完整备份和差异备份基本上能解决数据库备份的问题,但是为了保障数据更加安全,我们需要再次完善我们的备份计划 ...

  10. 解密jQuery内核 样式操作

    基础回顾 jQuery里节点样式读取以及设置都是通过.css()这个方法来实现的,本章通一下分解探究下jquery里这部分代码的实现 那么jQuery要处理样式的哪些问题? 先简单回顾下样式操作会遇到 ...