关于p2p:系统困境与软件复杂度为什么我们的系统会如此复杂

简介:很多人认为做业务开发没有挑战性,但其实正好相同,面向不确定性设计才是最简单的设计。 作者 | 聂晓龙(率鸽) | 读 A Philosophy of Software Design 有感,软件设计与架构复杂度,你是战术龙卷风吗? 前言有一天,一个医生和一个土木工程师在一起争执“谁是世界上最古老的职业”。医生说:“上帝用亚当的肋骨造出了夏娃,这是历史上第一次外科手术,所以最古老的职业应该是医生”,土木工程师说:“在创世纪之前,上帝从混沌中发明了地狱与世间,这是更早之前的一次土木作业,所以最古老的职业应该是土木工程”。这时软件工程师拖着键盘走出来说,“那你认为,是谁发明了那片混沌?” 建筑师不会轻易给 100 层的高楼减少一个地下室,但咱们却常常在干这样的事,并且总有人会对你说,“这个需要很简略”。到土里埋个地雷,这的确不简单,但咱们往往面临的实在场景其实是:“在这片雷区里加一个雷”,而雷区里哪里有雷,任何人都不晓得。 什么是复杂性咱们始终在说零碎很简单,那到底什么是复杂性?对于简单的定义有很多种,其中比拟有代表的是 Thomas J. McCabe 在 1976 提出的感性派的复杂性度量,与 John Ousterhout 传授提出的理性派的复杂性认知。 感性度量 复杂性并不是什么新概念,早在上世纪 70 年代,软件就曾经极其简单,开发与保护的老本都十分高。1976 年 McCabe&Associates 公司开始对软件进行构造测试,并提出了 McCabe Cyclomatic Complexity Metric,咱们也称之为 McCabe 圈复杂度。它通过多个维度来度量软件的复杂度,从而判断软件以后的开发/保护老本。 理性认知复杂度高的代码肯定不是好代码,但复杂度低的也不肯定就是好代码。John Ousterhout 传授认为软件的复杂性绝对感性的剖析,可能更偏理性的认知。 Complexity is anything that makes software hard to understand or to modify译:所谓复杂性,就是任何使得软件难于了解和批改的因素。John Ousterhout 《A Philosophy of Software Design》 50 年后的明天,John Ousterhout 传授在《A Philosophy of Software Design》书中提到了一个十分主观的见解:复杂性就是任何使得软件难于了解和批改的因素。 ...

February 23, 2022 · 4 min · jiezi

关于p2p:p2p之网络穿透NATNAT穿透的原理

1.p2p是什么?p2p是对等网络(peer-to-peer networking)其能够定义为:端对端的资源共享,每一端即可是服务端,也能够是客户端。既能够是资源的提供者,也能够是资源的共享者。 传统C/S模型须要实现端和端的资源共享, 须要将资源上传到直达服务器。另外一端再去直达服务器下载,如下图: 传统CS架构,客户端1和客户端2之间是无间接交互.png 而P2P则不须要将资源上传到服务器,它是端对端传输,每一个端既能够是服务器,也能够是客户端 p2p架构,无需直达服务器.png 劣势:实时性最高,流量少,更加平安。在视频直播,在线教育,视频安防行业用的比拟多 劣势:一旦进行p2p传输之后,用户之间的内容将无奈监管,节约用户带宽,频繁进行读写磁盘 客户端1和客户端2这样交互是p2p最现实的状况 图中客户端1和客户端2间接连贯, 如果他们处于两个不同的内网呢? 2.NAT是什么?NAT俗称网络地址转换,它是一种把外部公有网络地址(IP地址)转换成公网网络IP地址的技术。比方咱们电脑外面网卡地址是192.168.1.100,然而咱们再百度搜寻“IP”却显示220.112.224.53,这就是NAT的性能。 **NAT次要是部署在路由器或者交换机上。** 为什么须要NAT? 次要还是IP地址的有余,应用大量的私有IP 地址代表较多的公有IP 地址的形式,将有助于减缓可用的IP地址空间的枯竭。用大白话:比方你有一个路由器(家用的那种就能够)这个路由器自身连贯了公网(被调配到了一个公网的IP地址)。路由器前面有接了N多个设施,每个设施都调配到了一个公有的地址(内网地址),这些地址能够通过这个路由器和外网交互。 其次可能无效地防止来自网络内部的攻打,暗藏并爱护网络外部的计算机。 RFC3489 中将 NAT 的实现分为四大类: Full Cone NAT(齐全圆锥型)Address Restricted Cone NAT(地址限度圆锥型 )Port Restricted Cone NAT(端口限度圆锥型)Symmetric NAT(对称型)1.齐全圆锥型NAT 在齐全圆锥型NAT(Full Cone NAT)中,NAT会将客户机地址{X:y}转换成公网地址{A:b}并绑定。任何包都能够通过地址{A:b}送到客户主机的{X:y}地址上。如图所示: RFC3581——齐全锥型NAT 2. 地址限度圆锥型NAT 地址限度圆锥型NAT(Address Restricted Cone NAT)会将客户机地址{X:y}转换成公网地址{A:b}并绑定,只有来自主机{P}的包能力和主机{X:y}通信。如下图所示: RFC3581——地址限制型NAT 3.端口限度圆锥型NAT 端口限度圆锥型NAT(Port Restricted Cone NAT)会将客户机地址{X:y}转换成公网地址{A:b}并绑定,只有来自主机{P,q}的包能力和主机{X:y}通信。如下图所示: 转存失败从新上传勾销 RFC3581——端口限制型NAT 4.对称型NAT 对称型NAT(Symmetric NAT)会将客户机地址{X:y}转换成公网地址{A:b}并绑定为{X:y}|{A:b}<->{P:q}。对称型NAT只承受来自{P:q}的连贯,将它转给{X:y} ,每次客户机申请一个不同的公网地址和端口,NAT会新调配一个端口号{C,d} 。如下图所示: RFC3581——对称型NAT Linuxc/c++服务器开发高阶学习材料视频:C/C++Linux服务器开发/后端开发-学习视频内容包含C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,P2P,K8S,Docker,TCP/IP,协程,DPDK多个高级知识点。 视频解说:【技术篇】详解,网络穿透,P2P,打洞的外围原理丨NAT,穿透的原理丨实现网络穿透_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili ...

November 18, 2020 · 1 min · jiezi

内网穿透IPv6点对点妈妈再也不用担心网速了

IPv6时代降临,为内网利用关上一片新天地。 书接上回(无关smarGate应用,请看“系列一”文章,自行度娘smarGate), smarGate是一个收费的内网穿透利器,如果你有以下需要,不要犹豫,用smarGate,让收费来的更彻底! 诉求一:我是程序员或运维人员,我没有公网服务器,我心愿拜访本人或公司的位于局域网中的机器,我对带宽没要求,就是做些程序员做的事:ssh登录操作,我须要平安拜访。 -----好吧,你能够间接注册一个smarGate用户,配置好服务端即可,应用官网收费共享带宽 诉求二:我是普通用户,我没有公网服务器,我想拜访家里的摄像头或远程桌面,我对带宽有要求,我须要十分平安的形式进行公有拜访。。。 -----好吧,你有两种抉择: 1、租个公网云主机,要害是带宽须要满足你的要求;而后将本人的云主机配置到smarGate服务端公有路由中 2、确保你的手机有ipv6地址(额,4G时代默认都有哦),确保你家中宽带能获取ipv6地址,而后畅享ipv6带来的直连高兴吧!且路由器无需敞开防火墙本文重点探讨如何利用IPv6,进行直连拜访。 确保手机有ipv6地址,在android零碎中:设置->零碎->对于手机->状态音讯->IP地址北京联通4G号码图例: 局域网内服务端所在电脑反对ipv6,且有ipv6地址如果你用的是电信天翼宽带,则可应用超级管理员间接进入控制台界面进行ipv6设置(具体方法在此不做赘述,可自行baidu)。 判断反对ipv6的形式为:执行命令 ping6 ipv6.baidu.com 而后察看输入,如果能通,祝贺你,服务端曾经反对ipv6了。 [root@centos-rpi3 server]# ping6 ipv6.baidu.comPING ipv6.baidu.com(2400:da00:2::29 (2400:da00:2::29)) 56 data bytes64 bytes from 2400:da00:2::29 (2400:da00:2::29): icmp_seq=1 ttl=49 time=105 ms64 bytes from 2400:da00:2::29 (2400:da00:2::29): icmp_seq=2 ttl=49 time=95.4 ms64 bytes from 2400:da00:2::29 (2400:da00:2::29): icmp_seq=3 ttl=49 time=97.0 ms64 bytes from 2400:da00:2::29 (2400:da00:2::29): icmp_seq=4 ttl=49 time=105 ms此时smarGate客户端即可看到ipv6反对标识: 至此,IPv6直连胜利,畅享运营商4G不限量套餐的红利吧:) 欢送大家探讨及分享smarGate应用技巧及心得 更多详情请见官网: https://github.com/lazy-luo/smarGate

July 14, 2020 · 1 min · jiezi