大家好👋
好久没有写博客了,这几个月一直在忙着探索AI的一些应用场景。不过,在这段时间的折腾中,我也遇到了一些问题。这不,前几天在搭建一个服务时,发现竟然无法连接到liblib提供的API上。liblib作为非常大的一个AI绘图平台,但是就作为氪金开发者的体验来说,其实本不是很好,这也从侧面反映出,一个公司想要成熟到很好的口碑,其实是很难的,我看liblib官网的招人信息,目前有20来个岗位空着,可见创业这件事,有时候还是很令人痛苦的。
回到主题。
联不通怎么办?当然是想办法了。我们首先要搞清楚,为什么连不通。
万恶的割据
互联网作为当今基础设施,上网已经成为每个小伙伴的日常。但是我们应该是可以理解的一点是,如果我们要访问海外国家的网站,例如美国的网站,我们的手机信号,一定会经过那条延绵上万里的海底光缆,并且是一个来回。虽然理论上信息传输的速度是光速,但是在信息传播过程中,却有一些神秘的力量,让它慢下来。
从一个请求信号的发出,会有一连串的动作在不同的服务器上跳来跳去,等到最后目标服务器的时候,中间可能已经经过了18手,而同样的道理,服务器响应请求回来的信号,可能还会在茫茫网路中迷会儿路。可见,我们的信号并不是指哪儿打哪儿的点对点传输,而是层层上报来回奔波。每一台这个信号经过的服务器,都会让整个时间拖延一会儿,遇到那种躺平摆烂的服务器,还会让我们的信号直接玩消失。
别说让信号去美国旅游一圈了,就是在国内,南北之间也存在天涯海角的距离。这里面包括运营商、DNS、机房网关等等,都会让信号不那么顺心。
正是因为这种信号关卡的割据存在,才会让我们的互联网有时候并不那么开放。当然,某种意义上来讲,这可能还是互联网技术本身的缺陷问题,所带来的成本高企问题,最后落到了普通网友的头上。正是一环扣一环,最后羊毛还是小羊付。
世界上最远的距离是你在我身边
作为亚洲第一的金融中心,香港承载了中国非常多的使命。我在深圳呆了近10年,去过香港几次,能够感受到这种类似“城邦小国”的富裕社会环境给人带来的松弛感。从大陆到香港的距离,就是过一条河而已。然而,当我们进入虚拟的世界,两者却在网路的两端。
由于制度原因,香港长期被划分为“境外”。由于缺乏和大陆一致的审查机制,香港的网络确实就是“境外势力”,普通模式下,双方要互通信息,要放到国际网路的大盘里。而作为国际互联网线路的主要投资人,美国也承担着管理国际互联网线路的重要职责。很多网络路由、节点分配等脏活都在美国的机房完成,而香港的用户要访问大陆的资源,信号要先出香港,去美国旅游一圈,再到大陆统一国际互联网入口,再到内陆分配。
总而言之,言而总之,因为要到国外旅游一圈,线路上就多了无数层服务器的处理,每一层处理,都可能拖慢信号,甚至带来严重的“丢包”(,当然也有可能是屏蔽导致),最终导致无法访问。甚至还有一种令人蛋疼的情况,信号来到大陆之后,大陆服务器发现是国际网络请求,可能为了某些特殊的目的,又把信号发送到自己美国的服务器处理一遍,然后又绕回来,最后才接收。一来二去,包都不知道丢到哪里去了。别笑,所的就是你,我的阿里云哥哥。这可真印证了那一句“三过家门而不入”,即使你就在河对岸,我们也得相忘江湖。
可不是相忘于江湖嘛!
我的内地服务器在河源,到香港开车也就2个多小时,可是信号就是那么开心的离家出走了。怪不得当年马斯克建数据中心不是通过网路远程传输,而是直接用卡车来送,看来即使在美国,同样的问题也会令人纠结。

从香港出发的信号,要到美国绕一圈,才能到河源
最肉痛的利益:国际专线
既然作为公共设施的国际互联网线路很慢,那么很多资本雄厚的企业,就盯上了这块蛋糕,所谓有忧伤的地方就有生意,从铺设光缆到提供专线宽带服务,一条用金钱铺好的产业链等着小羊们入圈。
所谓专线,激进一点,就是中国某厂商从大陆机房,直接拉一根24米粗的光纤到美国自家机房,然后绕开国际通用线路的层次盘剥,两个机房的信号就是直接来往,这样就最大限度的减少了丢包和绕行。但是,能够拉这种线路的企业少之又少,还要向国家备案,没点实力和背景,干不了这档子事。
这就是CN2专线的由来,由中国电信牵头搞的高质量国际网路项目。CN2分为GT和GIA两个版本,GIA优于GT,所以在买服务器的小伙伴要问清楚。CN2相较于之前传统的国际网路(也被称为163骨干网)有明显的优势,但是由于要中国企业自己铺光缆,自己搞软硬件,成本也高的离谱。而且更难受的是,一条CN2只能解决单一地区的网路问题,比如去美国的CN2和去香港的和去菲律宾的,全都是独立项目,即便顺路,也没法统一一条线搞,可见成本真的不是盖的。

CN2专线让香港机房可以直连大陆机房,减少绕国际网路的过程,无论是速度,还是丢包,都提升N个档次
同时,在配合上BGP网络,就可以做到港陆通信的提速。
等等,BGP又是什么鬼?
通俗的讲,BGP是一种网络协议,本质上是优化软件层面的网路处理,比如路由器、DNS服务器、机房服务器上的软件,让网络寻址可以选择最优的线路。从这里可以知道,从服务器A到服务器B通信,可以有无数条通信线路,但是BGP通过网路情况的监控和缓存,让这个通信尽可能的走质量最好的路线。
所以说,BGP是软件层面的优化。它本身没有做类似CN2那样的实体网路的优化,而是尽可能了减少前面说的网路上各个节点服务器割据的问题。但是,说实话,对于绕远路的网路来说,BGP没有太大作用,特别是小厂商,你不可能跑去人家美国佬家里优化它的网络协议吧,除非是不差钱的大厂商,在美国有机房的那种,可以在线路上用BGP进行优化。
说回到CN2专线。
当那些最豪横的企业搭好专线之后,一回头发现,满地的小弟如嗷嗷待哺的小鸟,于是就以惊人的天价“分享”他们的部分宽带给其他有实力但是没背景的厂商。而这些厂商拿到资源之后,又在以令人难以置信的价格,销售给更小的厂商。这些小厂商拿到资源之后,眼看成本那么高,资源又紧张,就搭配着原来的VPS,开始销售所谓精品专线服务器。原本只要几十块的云服务器,一下子土鸡变凤凰,涨价为上千的特供产品。
因此,对于很多做大陆生意的香港主机商,CN2是标配,没有CN2生意都做不下去。
当然,对于我们搭服务的而言,也只有CN2能挽救我们在香港搭服务,还想随意调大陆服务的问题。
相应的,位于大陆的服务器,如果想调你这条香港服务器上的资源,也会遇到相同的问题。
然而,扯淡的情况是,很有可能,你的这台大陆服务器,却可以正常访问位于美国、东南亚(如新加坡、菲律宾)的服务器。背后的原因可能令人苦笑不得,云厂商为了让大陆的服务器能够正常访问到国外的资源,如一些系统级软件的安装源,会在BGP上尽可能保证对外国服务器的访问通畅,特别是访问美国地区的服务器,基本上不会遇到什么大的问题。而东南亚机房的情况又更特殊,如果不做一定的优化,云厂商自己人也很可能访问不到,到时候云服务出了问题,他们想远程解决就很慢,因此,为了保证这种情况下的正常访问,他们反而对东南亚机房(原本应该是绕美国远路,速度最慢的)引入CN2做了BGP线路的优化。
也就是说,对于我们用户而言,在大陆服务器上访问美国和东南亚的服务器,往往能够正常,只不过速度可能稍慢,然而访问香港服务器,则可能由于丢包严重访问不了。

香港一定绕远路,而菲律宾则可能走在优化线路上
出于这一点,各个服务器厂商推出了各种CN2专线产品,即通过CN2线路来让你可以快速的访问香港服务器,让港陆通信不再是问题。一般,
当然,鸡贼的厂商为了“一鸡多做”,还会推出CN2 GIA + BGP的混合,听上去高大上,实际上就是CN2 GIA的减配,就是两种线路模式随机抽卡,保证你50%的CN2率即可。过几天,他们又继续推出混合模式的升级版,比如保证你香港线路的CN2,其他地区的BGP,这样一来,套餐价格又可以加很多。而纯CN2 GIA的宽带则贵的上天。
服务器厂商为了免责,从不承认自己用的是CN2,而是对宽带做区分,实际上所谓的BGP精品线路,就是走CN2线路。而正规大厂的线路,贵的离谱,我们来看下我的一份账单:
这是我在阿里云选配时,选用所谓的BGP精品,也就是高端优化版的混合线路模式,我选5M宽带,价格如上。我的实例价格只有76块,而宽带则1160块,这跟我花2万块买了辆车,却要加95汽油一样的感受。
一些小厂商,例如gigsgigs之类的,不单独卖精品线路的宽带,而是打包云服务器一起卖,一下子又把价格抬上了天。而另一些鸡贼的小厂商,为了低价来提高竞争力,搞什么混合线路,价格拉的奇低,又打CN2的名号,实则是挂羊头卖狗肉。所以,大家在购买时一定要想清楚。
花小钱办大事
如果花不起钱买大厂商的精品专线,如何才能享受CN2专线呢?虽然天底下没有便宜的CN2,但是,我们可以自己通过代码来调度不同的资源,实现我们优化的目的。
从用户的角度来看,网站只要能打开,且打开速度不慢,就几乎无感知。而对于开发者而言,不可访问则是罪过。如果折腾了半天,一上服务器就开始趴窝,那还怎么搞。遇到这种情况的时候,我们要么放弃,要么咬咬牙花重金升级服务器。而我选择了另辟蹊径,花最少的钱办大事。
首先,我有如下需求,在这些需求下导致一些其他的路径行不通,这是前提,避免有人读了之后反驳我。
- 我要调内地的第三方服务,也就是文头提到的liblib的接口,在测试中发现,香港的服务器无法直接访问它的接口,很有可能是对方屏蔽了国际网路来的流量,这一点就让我直接放弃了重新购买一台CN2服务器作为主力机,同时,既然只有内地能访问liblib接口,那么必须购置一台内地的服务器
- 我要进行神经网络运算,经过测试,一台8G内存的服务器满足我的需求,因此,我打算挑一台8G内存的服务器,然而在内地大厂转了一圈,购买海外大内存的服务器价格的颇高,而只有国内一些相对偏僻的机房价格便宜,叠加优惠,还是选了一台内地的
- 我香港的这台服务器用了很久,算是主力机,上面部署着我的核心业务之一,而且是之前在腾讯的时候领优惠券买的,撑到了现在,还有一段时间才过期,但是无法直接访问内地的这台服务器上部署的计算资源,有点小可惜
基于上述的需求,我到目前为止,花了700多买了一台阿里云的内地服务器,另用着相当于免费的腾讯云香港服务器。
目前的问题在于,香港的服务器无法访问内地的这台服务器,以及无法访问liblib的接口。不过好在阿里和硅基都支持国际网路,不需要考虑这个问题。那么如何解决核心问题呢?
我自己再买了一台小厂商的CN2的香港服务器,花了50多先试试水,后面再找其他替代品。
- 首先,我在这台机器上做了方向代理,在nginx上配了upstream,当我在访问这台服务器时,相当于在访问我的内地服务器,由于它走的是CN2,因此,可以正常访问。
- 接着,我花了几块钱开通了DNS的境外解析功能,当用户来自境外时,域名会自动解析到香港的这台CN2服务器上,再由这台服务器upstream到内地的服务器上。
- 之后,我在内地服务器上部署了一套特定程序,用于给香港服务器访问liblib接口。我称这套程序为BGP Lane,大概意思是解决香港访问大陆的网路问题的程序。
- 最后,我把我的计算程序部署到内地服务器上,为位于香港服务器上的站点提供后端计算支持。
完成上面这些之后,整个网路架构大概是这样:
其中A和C是主力服务器,A有8G内存,主要提供计算支持和访问内地其他受阻服务,C是我在香港的主力服务器,用于提供我的其他对外业务。B是小厂商CN2服务器,部署了nginx做反向代理到内地服务器。通过DNS中配置不同地域解析到A或B,让不同的用户(包括下游服务器C)访问相同域名时实际请求被发给不同服务器。
通过这样架构之后,所有香港来访的流量会先到B,然后反向代理(基于CN2线路)到A,而内地的所有流量直接扑到A上面。表面上用户们访问的是相同服务,但背地里干的都是穿越的勾当。
这一架构方案的主要目标是让香港的服务器C可以在不改变调用域名的情况下访问A上的计算资源,以及借助BGP Lane程序调用原本无法直接接通的liblib开放接口。解决了香港服务器调大陆服务的问题。然而,想要从大陆去访问外面的世界则不可能,毕竟外面的花花世界我怕你把持不住。
关于BGP Lane程序
你可能对上面提到的BGP Lane程序感兴趣,实不相瞒,为了让和我有相同情况的小伙伴以极低的价格获得相同的能力,我着实想了很久。一开始,我一直在探索怎么可以在不购买CN2服务器的情况下,可以以极低的价格拥有CN2,我想到的办法包括但不限于:
- 购买CN2宽带或IP服务,但是价格太贵,搞不了
- 有没有自带CN2的DNS解析服务?
- 有没有类似CDN或负载均衡的正好可以解决这个问题的服务?
- 有没有其他软件层面解决问题的服务,我愿意付费
然而,找了很久都没有找到,最后才迫不得已买了一台CN2服务器。既然市面上没有这样的服务,那么我就自己开发一套,最后就有了BGP Lane。
美食不可独享,兄弟们可以通过这里付费使用BGP Lane功能,以解决你在香港的服务器无法连通大陆任何服务的问题,价格不贵,按流量收费。一般来说你一个接口,如果是文本的话,能有多大的流量。关键是,这样你就不需要自己去搭这一套架构,不需要自己去买CN2服务器了,中间的维护都交给我来处理,你可以插拔式的调用,以后不想用了,改改代码即可。
结束
随着我从腾讯离职后,在技术上的投入越来越少,我也很少在写这么长的有关技术的文章。怎么说呢?可能是现在自己单干,角色转换,不单单是去想技术的问题。其实有的时候还挺怀念那种脑海里只想着技术的日子的,那种时候其实不需要担心太多问题,不像现在,成本如流水般逝去,看着白花花的银子撒出去,还是蛮心疼。但是呢,自己有足够的时间去和家庭互动,在更多方面去成长,也是一种好处。
我现在很多想法或者说出发点,都是从节省成本的角度,榨干技术的利用价值。比如今天解决的这个问题,对于别人来说,可能花个大几百去买BGP精品线路,既省心又稳定,但是对于我来说,这种持续性的大几百还是有点肉痛的,所以还是榨干自己的技术剩余价值来解决比较有性价比。
从另一个角度讲,现在的网络服务市场,还是不够友好,服务商们忙着抬升价格,虽然确实能提升服务稳定性和服务质量,比如在阿里云得到的服务就是比那些小厂商好的多得多,然而,这对我们初创者们来说却不是好事。创业者们的成本提升,实际上就是对创新热情的打击。我自己算了一笔账,如果我有一个服务,显性成本是1块钱,我原本只需要1.1卖出去,就可以帮助需要的人使用这套服务。然而,摊开账本一算,收到的1.1并不是最终落入银行卡的可用的钱,里面还要扣除服务器宽带、收款平台手续费、个人所得税(如果办公司,还要25%的企业所得税)以及其他七七八八的成本,也就是说1.1卖出去一定会亏钱,而想要挣到这0.1块,我的定价可能得到1.5以上,这也就意味着对于最终的用户而言,他们的成本大幅攀升的时候,我却没有实质的增加收入,结果终端用户都来骂我卖贵了。所以,有的时候想起马爸爸在外滩的话,其实也可能能理解了。
当然,我还是坚持自己的想法,我始终认为做好自己的产品,努力拓宽视野和思路,慢慢的优化每个环节,让终端用户以更低的价格获取同等的服务,是可以有回报的。
如果你有什么想法,欢迎在下方留言(,回复后你会收到回复邮件),我们一起探讨。