精华内容
下载资源
问答
  • 也可以将domain视为订阅主题,将每个订阅者注册到domain的node上,发布者将消息逐一更新每个node,订阅者监控每个属于自己的node的变化事件获取订阅消息,收到后删除内容等待下一个消息。但是Fourinone不实现JMS的...
  • 网络基础知识总结

    2020-12-19 11:32:25
    网络基础知识小结 (持续滚动补充) IP地址包含网络ID和主机ID。表示方法如:192.168.1.1/32 等价于192...路由:查找目标地址的下一跳。 D N S:域名解析服务器,用来解析请求数据包里的域名查址到对应的IP。 网桥:将

    网络基础知识小结

    (持续滚动补充)

    1. IP地址包含网络ID和主机ID。表示方法如:192.168.1.1/32 等价于192.168.1.1 / 255.255.255.0
    2. 子网掩码,用来与IP地址取位与运算,计算其是否在同一个网段,表示方法如:255.255.255.0等价于24/0。
      比如255.255.248.0的掩码,代表网段1-7是同一网段。
    3. 网关:用于将不同网段的数据包,做转发功能。
    4. 路由:查找目标地址的下一跳。
    5. D N S:域名解析服务器,用来解析请求数据包里的域名查址到对应的IP。
    6. 网桥:将两个网口关联,行成桥接模式,效果如同一根网线,不区分一进一出。
    7. WAN: 万维网,就是互联网。
    8. LAN: 局域网,可以通过一个交换机或者路由器组建。
    9. V LAN:虚拟局域网,在一个局域网中划分V LAN, 通过V LAN id查找是否为一个局域网,实现物理隔离的效果。比如:V
      LAN 1的广播步会发送到V LAN 2网口中
    10. V LAN划分,针对网口区分access模式,和trunk模式,access模式下,只允许自己的V LAN
      ID数据包流过,trunk模式下,可以接受不同V LAN id的数据包。
    11. 交换机:只是对网口的扩展功能,如果是三层交换机,则自身带有路由功能。
    12. 路由器:包含交换机的功能,有完整的路由功能。

    在这里插入图片描述

    展开全文
  • 问题4-18:路由表中只给出到目的网络下一跳路由器的IP地址,然后在下一个路由器的路由表中再给出再下一跳的路由器的IP地址,最后才能到达目的网络进行直接交付。采用这样的方法有什么好处? 问题4-19:链路层广播...
  • 7.2.5 接受网络请求函数accept() 194 7.2.6 连接目标网络服务器函数connect() 199 7.2.7 写入数据函数write() 200 7.2.8 读取数据函数read() 201 7.2.9 关闭套接字函数 202 7.3 服务器/客户端的简单例子 ...
  • 可见,如果选择前种方法,即不作任何其他的处理,那么数据链路层的传输就不能“让网络层向看起来好像是条不出差错的链路。” 现在的问题是:到底哪种说法是正确的? 问题3-2:当数据链路层使用PPP协议或...
  • 11.3 计算IP网络中的路由 106 11.3.1 存储多条路由 107 11.3.2 初始化更新 107 11.3.3 路由度量标准 107 11.4 小结 108 第12章 路由信息协议(RIP) 109 12.1 理解RFC1058 109 12.1.1 RIP报文格式 109 12.1.2 RIP...
  • 他也曾任美国计算机网CSTNET技术委员会的主席,该网络是美国早期互联网建设中最重要的网络。他现在是美国普渡大学计算机科学系的教授,从事计算机网络和操作系统方面的教学和科研工作。 目录 封面 -26 扉页 -25...
  • 计算系统中经常需要与外部系统(Redis、MySQL等)进行交互,我们通常的做法如向数据库发送用户a的查询请求,然后等待结果返回,在这之前,我们的程序无法发送用户b的查询请求。这是种同步访问方式,如图所示。...

    基于上述的问题,我们先来对异步IO有个大致的认识,了解的同学可以选择跳过。

    流计算系统中经常需要与外部系统(Redis、MySQL等)进行交互,我们通常的做法如向数据库发送用户a的查询请求,然后等待结果返回,在这之前,我们的程序无法发送用户b的查询请求。这是一种同步访问方式,如下图所示。

    图中棕色的长条表示等待时间,可以发现网络等待时间极大地阻碍了吞吐和延迟。为了解决同步访问的问题,异步模式可以并发地处理多个请求和回复。也就是说,你可以连续地向数据库发送用户a、b、c等的请求,与此同时,哪个请求的回复先返回了就处理哪个回复,从而连续的请求之间不需要阻塞等待,如上图右边所示。这也正是 Async I/O 的实现原理。

    说到这里,其实大部分开发者可以想到,使用多线程缓解这个问题,但这存在一个很大的缺陷:编程模型会变得更加复杂,因为必须在算子中实现线程,必须与检查点进行协调,如果这样做的话,Flink的checkpoint机制其实是没有很好的运用的。


    进入正题,当时接到的需求如下:

    1.数据源:从 kafka 接入实时数据。

    2.解析json,取到所需要的字段数据,其中有一个userName的字段,截取前七位,作为redis的key。

    3.通过key去redis查询该条数据对应的省份和城市。

    4.每五分钟作为一个时间窗口,keyby后reduce进行计算。

    5.将结果保存至oracle数据库。

     

    当然,我们这次讨论的重点是步骤 2和3,也就是Flink与Redis集成的部分,以下是我开发测试的一个心路历程,欢迎大家提取一些自己的见解

    • 第一步是 kafka 接入,process中未做任何处理,每秒数据量大概在 12000/s。

    • 第二步测试读取 Redis ,获得省份城市,一个并发度每秒处理数据量大概在 140/s,产生严重的背压。所以,如果我们想处理 12000/s的数据量,大概需要设置process算子的并行度为 85,也就是使用了 85 个slot,这对于集群来说是很不合理的。

     

    • 第三步测试异步IO读取redis,一个并发度处理能力大概在 6000/s,确实相对于同步有了很大的提升。

    public class TestSlot {
        private static Logger LOGGER = LoggerFactory.getLogger(TestSlot.class);
    
        public static void main(String[] args) throws Exception {
            StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
            DataStreamSource<String> inputStream = KafkaReader.getKafkaSource(env, "dfsawf",
                    "CSLog");
    
            AsyncDataStream.unorderedWait(inputStream,
                    new MyRichAsyFunction(), 2, TimeUnit.SECONDS, 40).setParallelism(1);
            env.execute("JFYINTERNAL1");
        }
    }
    public class MyRichAsyFunction extends RichAsyncFunction<String, Tuple2<JSONObject, String>> {
        private static final Logger LOGGER = LoggerFactory.getLogger(MyRichAsyFunction.class);
        private transient JedisCluster jedisCluster;
    
        @Override
        public void open(Configuration parameters) throws Exception {
            super.open(parameters);
            jedisCluster = JedisClusterUtils.getJedisClusterConn();
        }
    
        @Override
        public void asyncInvoke(String input, ResultFuture<Tuple2<JSONObject, String>> resultFuture) throws Exception {
            JSONObject rootObject = JSONObject.parseObject(input);
            CompletableFuture.supplyAsync(new Supplier<String>() {
                @Override
                public String get() {
                    Object userName = rootObject.getOrDefault("userName", "");
                    Object provinceName = rootObject.getOrDefault("province", "");
    
                    if (("".equals(provinceName) || provinceName == null) && !"".equals(userName)) {
                        String phoneNum = userName.toString().substring(0, 7);
                        String provinceCode = jedisCluster.hget("up_sf##" + phoneNum, "provinceCode");
                    }
                    return "";
                }
            }).thenAccept((String result) -> {
                resultFuture.complete(Collections.singleton(new Tuple2<>(rootObject, result)));
            });
        }
    
        @Override
        public void timeout(String input, ResultFuture<Tuple2<JSONObject, String>> resultFuture) throws Exception {
            LOGGER.error("timeout !");
        }
    
        @Override
        public void close() throws Exception {
            super.close();
            if (jedisCluster != null) {
                jedisCluster.close();
            }
        }
    
    }
    • 第四步,因为一个并发度,异步IO可以处理6000/s,所以,如果我们想处理 12000/s的数据量,大概需要设置process算子的并行度为 3,就能消费得过来了,是这样吗?接下来,我们设置并发度为3,效果如下,并没有像我们预期那样,每个slot的消费能力都是 6000/s。

     

    基于上述的一些测试,可以大至定位到问题所在,在使用异步IO的时候,一个slot的处理能力是 6000/s,但增大slot对处理能力没有影响。只有当slot在不同机器上时,消费能力才有提升。起初一直是纠结在 redis的连接数,和异步IO的capacity上,但经过测试不是这些原因。

    同步请求 redis 时,处理能力大概 140/s, 6000/140 = 40,也就是我们异步的能力是 40,这是因为我们 TaskManager 节点的 CPU 核数是 40,导致我们并发线程的能力瓶颈就是 40 个。

     

    综上,我们异步请求 redis 的瓶颈其实是在我们开辟线程的能力上,是硬件导致的问题。这也就能解释,为什么 slot 在不同机器上时,处理能力能提升一些,而在一个机器上,无论怎样加大异步的capacity,都没有作用。

     

    展开全文
  • nlb负载均衡架设教程

    2018-05-30 15:37:39
    网络负载平衡,英文简称为NLB,windows Server 2012 中该功能允许你将传入的请求传播到最多达32台的服务器上,即可以使用最多32台服务器共同分担对外的网络请求服务。网络负载平衡,保证即使是在负载很重的情况...
  •  当路由选择表进程检查一条使用中间地址(路由选择表中作为下一跳引用的IP地址)的可解析的静态路由时,这个检查总是在有类别方式下完成的,无论是否使用ip classless命令如果在路由选择表中有类别方式下的中间地址...
  • 有些业务逻辑(例如一些耗时的计算网络I/O处理),往往只需要让整个集群中的某台机器进行执行,其余机器可以共享这个结果,这样可以大大减少重复劳动,提高性能,于是这个master选举便是这种场景的碰到的主要...
  • IPv6.rar

    2012-07-25 17:07:33
    为何需要link-local:在一个接口可以配置很多IPv6地址,所以学习路由就有可能出现很多下一跳。 所以出现Link Local地址唯一标识一个节点。在本地链路看到下一跳都是对端的Link Local地址。 在网络重新编址过程中,...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    CCAMS系统是种用于局域网的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    CCAMS系统是种用于局域网的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    CCAMS系统是种用于局域网的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    CCAMS系统是种用于局域网的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    CCAMS系统是种用于局域网的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    CCAMS系统是种用于局域网的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...
  • 双击摄像机节点自动播放视频,双击节点自动依次添加视频,会自动下一个,双击父节点自动添加该节点下的所有视频。 摄像机节点拖曳到对应窗体播放视频,同时支持拖曳本地文件直接播放。 视频画面窗体支持拖曳交换...
  • 2.5.6 在NetWare 网络中,客户需要访问某个类型的服务器时,首先要发送个 ()广播报文来寻找服务器? 2.5.7 IPX地址网络地址有( )个字节? 2.5.8 对于帧中继描述正确的是? 2.5.9 对于INVERSE ARP的描述正确...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    1.6.2 请求证书 10 1.6.3 注册设备 11 1.6.4 注册应用程序标识符 11 1.6.5 设置 12 1.7 组建iPhone项目 12 1.7.1 iPhone应用程序的主干 13 1.7.2 main.m 14 1.7.3 应用程序委托 15 1.7.4 视图控制器 16 ...
  • 监听程序进程需要个监听地址, 以便处理系统所用的各个网络协议的连接请求。 除非 MTS_MULTIPLE_LISTENERS=TRUE, 否则每个条目都必须有个独立的相邻值。此参数自 8.1.3 版起已废弃 语法 : (ADDRESS=(PROTOCOL=...
  • 他也曾任美国计算机网CSTNET技术委员会的主席,该网络是美国早期互联网建设中最重要的网络。他现在是美国普渡大学计算机科学系的教授,从事计算机网络和操作系统方面的教学和科研工作。  Douglas Comer博士是...
  • 11.3 计算IP网络中的路由 106 11.3.1 存储多条路由 107 11.3.2 初始化更新 107 11.3.3 路由度量标准 107 11.4 小结 108 第12章 路由信息协议(RIP) 109 12.1 理解RFC1058 109 12.1.1 RIP报文格式 109 12.1.2 RIP...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    虚拟控制台的切换可以通过按Alt键和个功能键来实现,通常使用F1-F6 。 例如,用户登录后,按一下“Alt+ F2”键,用户就可以看到上面出现的“login:”提示符,说明用户看到了第二个虚拟控制台。然后只需按“Alt+...
  • Cisco路由器手册

    2012-09-27 09:12:22
    10.3 相关逻辑单元请求者/服务器 171 10.4 网络结点的放置 171 10.5 性能考虑 172 10.5.1 拓扑数据库更新 173 10.5.2 连接网络 173 10.5.3 CP-CP会晤数目 174 10.5.4 网络结点数目 175 10.5.5 LOCATE搜索 176 10.6 ...
  • php高级开发教程说明

    2008-11-27 11:39:22
    些实用规则来帮助你实施下一个A P I,例如风格问题、以及商业技巧等。 1.3 编码规范 好的编码和差的编码之间究竟有何区别呢?实际上,这个问题很简单。好的代码(确实好 的代码)能够像一本书一样被阅读。你能从任何...
  • TCP-IP协议详解

    热门讨论 2008-11-24 20:46:50
    11.3 计算IP网络中的路由 106 11.3.1 存储多条路由 107 11.3.2 初始化更新 107 11.3.3 路由度量标准 107 11.4 小结 108 第12章 路由信息协议(RIP) 109 12.1 理解RFC1058 109 12.1.1 RIP报文格式 109 12.1.2 RIP...
  • TCP/IP教程TCP/IP基础

    热门讨论 2009-11-23 20:58:46
    11.3 计算IP网络中的路由 106 11.3.1 存储多条路由 107 11.3.2 初始化更新 107 11.3.3 路由度量标准 107 11.4 小结 108 第12章 路由信息协议(RIP) 109 12.1 理解RFC1058 109 12.1.1 RIP报文格式 109 12.1.2 RIP...
  • 149.过磁盘检测的等待时间 150.整理磁盘碎片时经常重复 151.SATA硬盘不能安装Windows XP 1.5 显卡故障 152.开机后显示器无显示 153.显卡接触不良造成的启动失败 154.启动时长鸣判断显卡故障 155.显卡“金手指”被...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

网络请求计算下一跳